ETH Price: $2,915.05 (-3.80%)
Gas: 1 Gwei

Token

FoRg (FORG)
 

Overview

Max Total Supply

420,696,969,696 FORG

Holders

186

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
128,324,642.97049759185366901 FORG

Value
$0.00
0x9faacda000ec045097e8f819fdc8d58b43aba217
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:
FoRg

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 2023-05-09
*/

/**
 Website  : https://www.forgcoin.com
 Telegram : https://t.me/FORGtoken
 Twitter  : https://twitter.com/Forgcoin
**/

//SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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

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

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

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

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

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

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

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

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) internal _balances;

    mapping(address => mapping(address => uint256)) internal _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The defaut value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender)
        public
        view
        virtual
        override
        returns (uint256)
    {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

     /**
     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

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

        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue)
        public
        virtual
        returns (bool)
    {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue)
        public
        virtual
        returns (bool)
    {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        _approve(_msgSender(), spender, currentAllowance - subtractedValue);

        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        _balances[sender] = senderBalance - amount;
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }

    /** This function will be used to generate the total supply
    * while deploying the contract
    *
    * This function can never be called again after deploying contract
    */
    function _tokengeneration(address account, uint256 amount) internal virtual {
        _totalSupply = amount;
        _balances[account] = amount;
        emit Transfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0xdead), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
            // _balances[address(0xdead)] += amount;
        }

        emit Transfer(account, address(0xdead), amount);

        _afterTokenTransfer(account, address(0xdead), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}
}

library Address {
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
}

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _setOwner(_msgSender());
    }

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

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

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

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

interface IFactory {
    function createPair(address tokenA, address tokenB) external 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 swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

/**
 * @dev Extension of {ERC20} that allows token holders to destroy both their own
 * tokens and those that they have an allowance for, in a way that can be
 * recognized off-chain (via event analysis).
 */
abstract contract ERC20Burnable is Context, ERC20 {
    /**
     * @dev Destroys `amount` tokens from the caller.
     *
     * See {ERC20-_burn}.
     */
    function burn(uint256 amount) public virtual {
        _burn(_msgSender(), amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, deducting from the caller's
     * allowance.
     *
     * See {ERC20-_burn} and {ERC20-allowance}.
     *
     * Requirements:
     *
     * - the caller must have allowance for ``accounts``'s tokens of at least
     * `amount`.
     */
    function burnFrom(address account, uint256 amount) public virtual {
        _spendAllowance(account, _msgSender(), amount);
        _burn(account, amount);
    }
}

contract FoRg is ERC20, ERC20Burnable, Ownable {
    using Address for address payable;

    IRouter public uniswapRouter;
    address public uniswapV2Pair;

    bool private _interlock;
    bool private _tradeOpen;
    bool public providingLiquidity = true;
    uint256 public launchedAtBlock;

    uint256 public tokenLiquidityThreshold = 420_696_969 * 10**decimals();
    uint256 public maxBuyLimit = 4_206_969_696 * 10**decimals();
    uint256 public maxSellLimit = 4_206_969_696 * 10**decimals();
    uint256 public maxWalletLimit = 8_413_939_393 * 10**decimals();

    address public marketingWallet = 0x7BBC79cF3C7aFAA9c05E66D6a337eBdb4D9D89fc;
	address public constant deadWallet = 0x000000000000000000000000000000000000dEaD;

    struct Taxes {
        uint256 marketing;
        uint256 liquidity;
        uint256 burn;
    }

    Taxes public taxes = Taxes(2, 0, 0);
    Taxes public sellTaxes = Taxes(30, 0, 0);
    Taxes public transferTaxes = Taxes(0, 0, 0);

    mapping(address => bool) public exemptFee;
    mapping(address => bool) public blacklisted;

    event LimitRemoved(uint256 maxBuy, uint256 maxSell, uint256 maxWallet);
    event BuyTaxesUpdated(uint256 marketing, uint256 liquidity, uint256 burn);
    event SellTaxesUpdated(uint256 marketing, uint256 liquidity, uint256 burn);
    event TransferTaxesUpdated(uint256 marketing, uint256 liquidity, uint256 burn);

    modifier lockTheSwap() {
        if (!_interlock) {
            _interlock = true;
            _;
            _interlock = false;
        }
    }

    constructor() ERC20("FoRg", "FORG") {
        _tokengeneration(marketingWallet, 420_696_969_696 * 10**decimals());

        IRouter _router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // uniswap V2
        address _pair = IFactory(_router.factory()).createPair(address(this), _router.WETH());

        uniswapRouter = _router;
        uniswapV2Pair = _pair;
        exemptFee[address(this)] = true;
        exemptFee[deadWallet] = true;
        exemptFee[msg.sender] = true;
        exemptFee[marketingWallet] = true;
    }

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

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

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

        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue)
        public
        override
        returns (bool)
    {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        _approve(_msgSender(), spender, currentAllowance - subtractedValue);

        return true;
    }

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

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal override {
        require(amount > 0, "Transfer amount must be greater than zero");
        require(!blacklisted[sender] && !blacklisted[recipient], "Error: Blacklsited!");

        if (!exemptFee[sender] && !exemptFee[recipient]) {
            require(_tradeOpen, "Trading not enabled");
        }

        if (sender == uniswapV2Pair && block.number < launchedAtBlock + 2) {
            blacklisted[recipient] = true;
        }

        if (sender == uniswapV2Pair && !exemptFee[recipient] && !_interlock) {
            require(amount <= maxBuyLimit, "You are exceeding maxBuyLimit");
            require(
                balanceOf(recipient) + amount <= maxWalletLimit,
                "You are exceeding maxWalletLimit"
            );
        }

        if (
            sender != uniswapV2Pair && !exemptFee[recipient] && !exemptFee[sender] && !_interlock
        ) {
            require(amount <= maxSellLimit, "You are exceeding maxSellLimit");
            if (recipient != uniswapV2Pair) {
                require(
                    balanceOf(recipient) + amount <= maxWalletLimit,
                    "You are exceeding maxWalletLimit"
                );
            }
        }

        uint256 feeswap;
        uint256 feesum;
        uint256 fee;
        uint256 feeBurn;
        uint256 burnAmount;
        Taxes memory currentTaxes;

        //set fee to zero if fees in contract are handled or exempted
        if (_interlock || exemptFee[sender] || exemptFee[recipient])
            fee = 0;

            //calculate fee
        else if (recipient == uniswapV2Pair) {
            feeswap =
                sellTaxes.liquidity +
                sellTaxes.marketing;
            feesum = feeswap;
            feeBurn = sellTaxes.burn;
            currentTaxes = sellTaxes;
        } else if (sender == uniswapV2Pair) {
            feeswap =
                taxes.liquidity +
                taxes.marketing;
            feesum = feeswap;
            feeBurn = taxes.burn;
            currentTaxes = taxes;
        } else {
            feeswap =
                transferTaxes.liquidity +
                transferTaxes.marketing ;
            feesum = feeswap;
            feeBurn = transferTaxes.burn;
            currentTaxes = transferTaxes;
        }

        fee = (amount * feesum) / 100;
        burnAmount = (amount * feeBurn) / 100;

        //send fees if threshold has been reached
        //don't do this on buys, breaks swap
        if (providingLiquidity && sender != uniswapV2Pair) Liquify(feeswap, currentTaxes);

        //rest to recipient
        super._transfer(sender, recipient, amount - (fee + burnAmount));
        // burn the tokens
        if(burnAmount > 0) {
            super._burn(sender, burnAmount);
        }
        if (fee > 0) {
            //send the fee to the contract
            if (feeswap > 0) {
                uint256 feeAmount = (amount * feeswap) / 100;
                super._transfer(sender, address(this), feeAmount);
            }

        }
    }

    function Liquify(uint256 feeswap, Taxes memory swapTaxes) private lockTheSwap {

        if(feeswap == 0){
            return;
        }

        uint256 contractBalance = balanceOf(address(this));
        if (contractBalance >= tokenLiquidityThreshold) {
            if (tokenLiquidityThreshold > 1) {
                contractBalance = tokenLiquidityThreshold;
            }

            // Split the contract balance into halves
            uint256 denominator = feeswap * 2;
            uint256 tokensToAddLiquidityWith = (contractBalance * swapTaxes.liquidity) /
                denominator;
            uint256 toSwap = contractBalance - tokensToAddLiquidityWith;

            uint256 initialBalance = address(this).balance;

            swapTokensForETH(toSwap);

            uint256 deltaBalance = address(this).balance - initialBalance;
            uint256 unitBalance = deltaBalance / (denominator - swapTaxes.liquidity);
            uint256 ethToAddLiquidityWith = unitBalance * swapTaxes.liquidity;

            if (ethToAddLiquidityWith > 0) {
                // Add liquidity to pancake
                addLiquidity(tokensToAddLiquidityWith, ethToAddLiquidityWith);
            }

            uint256 marketingAmt = unitBalance * 2 * swapTaxes.marketing;
            if (marketingAmt > 0) {
                payable(marketingWallet).sendValue(marketingAmt);
            }

        }
    }

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

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

        // make the swap
        uniswapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapRouter), tokenAmount);

        // add the liquidity
        uniswapRouter.addLiquidityETH{ value: ethAmount }(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            deadWallet,
            block.timestamp
        );
    }

    function _openTrading() external onlyOwner {
        require(!_tradeOpen, "Cannot re-enable trading");
        _tradeOpen = true;
        launchedAtBlock = block.number;
    }

    function _blacklistBots(address[] memory _account, bool status) external onlyOwner {
        for (uint256 i = 0; i < _account.length; i++) {
            blacklisted[_account[i]] = status;
        }
    }

    function updateLiquidityTreshhold(uint256 new_amount) external onlyOwner {
        //update the treshhold
        require(new_amount > 0, "Error: Can't be zero!");
        tokenLiquidityThreshold = new_amount * 10**decimals();
    }

    function updateMarketingTax(uint256 _Buymarketing, uint256 _Sellmarketing) external onlyOwner {
        require (_Buymarketing <= 20);
        require (_Sellmarketing <= 99);
        taxes = Taxes(_Buymarketing, 0, 0);
        sellTaxes = Taxes(_Sellmarketing, 0, 0);
    }

    function RenounceFORG() external onlyOwner {
        maxBuyLimit = totalSupply();
        maxSellLimit = totalSupply();
        maxWalletLimit = totalSupply();

        tokenLiquidityThreshold = totalSupply()/1000;

        taxes = Taxes(2, 0, 0);
        sellTaxes = Taxes(2, 0, 0);

        renounceOwnership();

        emit LimitRemoved(maxBuyLimit, maxSellLimit, maxWalletLimit);
    }

    function rescueERC20(address tokenAdd, uint256 amount) external onlyOwner {
        IERC20(tokenAdd).transfer(marketingWallet, amount);
    }

    // fallbacks
    receive() external payable {}
}

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":false,"internalType":"uint256","name":"marketing","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"burn","type":"uint256"}],"name":"BuyTaxesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxSell","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"LimitRemoved","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":false,"internalType":"uint256","name":"marketing","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"burn","type":"uint256"}],"name":"SellTaxesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketing","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"burn","type":"uint256"}],"name":"TransferTaxesUpdated","type":"event"},{"inputs":[],"name":"RenounceFORG","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_account","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"_blacklistBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchedAtBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"providingLiquidity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAdd","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTaxes","outputs":[{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"burn","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxes","outputs":[{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"burn","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenLiquidityThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferTaxes","outputs":[{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"burn","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapRouter","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"new_amount","type":"uint256"}],"name":"updateLiquidityTreshhold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_Buymarketing","type":"uint256"},{"internalType":"uint256","name":"_Sellmarketing","type":"uint256"}],"name":"updateMarketingTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526007805460ff60b01b1916600160b01b17905562000020601290565b6200002d90600a620005c4565b6200003d906319135389620005dc565b6009556200004e6012600a620005c4565b6200005e9063fac14360620005dc565b600a5560126200007090600a620005c4565b620000809063fac14360620005dc565b600b55620000916012600a620005c4565b620000a2906401f58286c1620005dc565b600c55600d80546001600160a01b031916737bbc79cf3c7afaa9c05e66d6a337ebdb4d9d89fc1790556040805160608082018352600280835260006020808501829052938501819052600e91909155600f819055601081905583518083018552601e8082528185018390529085018290526011556012819055601381905583519182018452808252918101829052909101819052601481905560158190556016553480156200015057600080fd5b5060405180604001604052806004815260200163466f526760e01b81525060405180604001604052806004815260200163464f524760e01b81525081600390816200019c91906200069b565b506004620001ab82826200069b565b505050620001c8620001c26200040560201b60201c565b62000409565b600d54620001fe906001600160a01b0316620001e76012600a620005c4565b620001f8906461f37e51e0620005dc565b6200045b565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000258573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200027e919062000767565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002cc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f2919062000767565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000340573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000366919062000767565b600680546001600160a01b03199081166001600160a01b0395861617909155600780549091169184169190911790555030600090815260176020526040808220805460ff1990811660019081179092557f43fedf50e12e5c047fbe3576d03ab50250348e9a6030f531ab6d4ce10f5b030380548216831790553384528284208054821683179055600d5490941683529120805490921617905562000792565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60028190556001600160a01b038216600081815260208181526040808320859055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000506578160001904821115620004ea57620004ea620004af565b80851615620004f857918102915b93841c9390800290620004ca565b509250929050565b6000826200051f57506001620005be565b816200052e57506000620005be565b8160018114620005475760028114620005525762000572565b6001915050620005be565b60ff841115620005665762000566620004af565b50506001821b620005be565b5060208310610133831016604e8410600b841016171562000597575081810a620005be565b620005a38383620004c5565b8060001904821115620005ba57620005ba620004af565b0290505b92915050565b6000620005d560ff8416836200050e565b9392505050565b8082028115828204841417620005be57620005be620004af565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200062157607f821691505b6020821081036200064257634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200069657600081815260208120601f850160051c81016020861015620006715750805b601f850160051c820191505b8181101562000692578281556001016200067d565b5050505b505050565b81516001600160401b03811115620006b757620006b7620005f6565b620006cf81620006c884546200060c565b8462000648565b602080601f831160018114620007075760008415620006ee5750858301515b600019600386901b1c1916600185901b17855562000692565b600085815260208120601f198616915b82811015620007385788860151825594840194600190910190840162000717565b5085821015620007575787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200077a57600080fd5b81516001600160a01b0381168114620005d557600080fd5b6123d280620007a26000396000f3fe60806040526004361061021e5760003560e01c8063715018a61161012357806395d89b41116100ab578063dbac26e91161006f578063dbac26e914610633578063dd62ed3e14610663578063f2fde38b146106a9578063f66895a3146106c9578063fbe6324e146106e857600080fd5b806395d89b411461058e578063a457c2d7146105a3578063a9059cbb146105c3578063c5d32bb2146105e3578063d710c23f1461061357600080fd5b806379cc6790116100f257806379cc67901461050457806385141a77146105245780638cd4426d1461053a5780638da5cb5b1461055a5780638de890bd1461057857600080fd5b8063715018a614610490578063728f8eea146104a5578063735de9f7146104c457806375f0a874146104e457600080fd5b806342966c68116101a657806354a267571161017557806354a26757146103f8578063652e2f041461041857806366a88d961461042e5780636aa5b37f1461044457806370a082311461045a57600080fd5b806342966c681461034657806342b6fa111461036657806349bd5a5e146103865780635331803c146103be57600080fd5b80631c1702f3116101ed5780631c1702f3146102be57806323b872dd146102d5578063313ce567146102f55780633950935114610311578063420ee01d1461033157600080fd5b806306fdde031461022a578063095ea7b3146102555780631675d8021461028557806318160ddd146102a957600080fd5b3661022557005b600080fd5b34801561023657600080fd5b5061023f610709565b60405161024c9190611e3f565b60405180910390f35b34801561026157600080fd5b50610275610270366004611eb2565b61079b565b604051901515815260200161024c565b34801561029157600080fd5b5061029b60095481565b60405190815260200161024c565b3480156102b557600080fd5b5060025461029b565b3480156102ca57600080fd5b506102d36107b2565b005b3480156102e157600080fd5b506102756102f0366004611ede565b610858565b34801561030157600080fd5b506040516012815260200161024c565b34801561031d57600080fd5b5061027561032c366004611eb2565b610909565b34801561033d57600080fd5b506102d3610940565b34801561035257600080fd5b506102d3610361366004611f1f565b610a38565b34801561037257600080fd5b506102d3610381366004611f1f565b610a45565b34801561039257600080fd5b506007546103a6906001600160a01b031681565b6040516001600160a01b03909116815260200161024c565b3480156103ca57600080fd5b506014546015546016546103dd92919083565b6040805193845260208401929092529082015260600161024c565b34801561040457600080fd5b506102d3610413366004611f67565b610ad3565b34801561042457600080fd5b5061029b600b5481565b34801561043a57600080fd5b5061029b600c5481565b34801561045057600080fd5b5061029b600a5481565b34801561046657600080fd5b5061029b61047536600461203e565b6001600160a01b031660009081526020819052604090205490565b34801561049c57600080fd5b506102d3610b69565b3480156104b157600080fd5b50600e54600f546010546103dd92919083565b3480156104d057600080fd5b506006546103a6906001600160a01b031681565b3480156104f057600080fd5b50600d546103a6906001600160a01b031681565b34801561051057600080fd5b506102d361051f366004611eb2565b610b9f565b34801561053057600080fd5b506103a661dead81565b34801561054657600080fd5b506102d3610555366004611eb2565b610bb8565b34801561056657600080fd5b506005546001600160a01b03166103a6565b34801561058457600080fd5b5061029b60085481565b34801561059a57600080fd5b5061023f610c59565b3480156105af57600080fd5b506102756105be366004611eb2565b610c68565b3480156105cf57600080fd5b506102756105de366004611eb2565b610d03565b3480156105ef57600080fd5b506102756105fe36600461203e565b60176020526000908152604090205460ff1681565b34801561061f57600080fd5b506102d361062e366004612062565b610d10565b34801561063f57600080fd5b5061027561064e36600461203e565b60186020526000908152604090205460ff1681565b34801561066f57600080fd5b5061029b61067e366004612084565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156106b557600080fd5b506102d36106c436600461203e565b610da5565b3480156106d557600080fd5b506011546012546013546103dd92919083565b3480156106f457600080fd5b5060075461027590600160b01b900460ff1681565b606060038054610718906120bd565b80601f0160208091040260200160405190810160405280929190818152602001828054610744906120bd565b80156107915780601f1061076657610100808354040283529160200191610791565b820191906000526020600020905b81548152906001019060200180831161077457829003601f168201915b5050505050905090565b60006107a8338484610e3d565b5060015b92915050565b6005546001600160a01b031633146107e55760405162461bcd60e51b81526004016107dc906120f7565b60405180910390fd5b600754600160a81b900460ff161561083f5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f742072652d656e61626c652074726164696e67000000000000000060448201526064016107dc565b6007805460ff60a81b1916600160a81b17905543600855565b6000610865848484610f61565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156108ea5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016107dc565b6108fe85336108f98685612142565b610e3d565b506001949350505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916107a89185906108f9908690612155565b6005546001600160a01b0316331461096a5760405162461bcd60e51b81526004016107dc906120f7565b600254600a55600254600b55600254600c556103e861098860025490565b6109929190612168565b6009556040805160608082018352600280835260006020808501829052938501819052600e829055600f819055601081905584519283018552818352928201839052920181905260119190915560128190556013556109ef610b69565b600a54600b54600c5460408051938452602084019290925282820152517f71e50fc869ff266df718ea6817d210f1b19d3d84b5d3dcfb72735630d5403d359181900360600190a1565b610a4233826115eb565b50565b6005546001600160a01b03163314610a6f5760405162461bcd60e51b81526004016107dc906120f7565b60008111610ab75760405162461bcd60e51b81526020600482015260156024820152744572726f723a2043616e2774206265207a65726f2160581b60448201526064016107dc565b610ac36012600a61226e565b610acd908261227d565b60095550565b6005546001600160a01b03163314610afd5760405162461bcd60e51b81526004016107dc906120f7565b60005b8251811015610b64578160186000858481518110610b2057610b20612294565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610b5c816122aa565b915050610b00565b505050565b6005546001600160a01b03163314610b935760405162461bcd60e51b81526004016107dc906120f7565b610b9d6000611721565b565b610baa823383611773565b610bb482826115eb565b5050565b6005546001600160a01b03163314610be25760405162461bcd60e51b81526004016107dc906120f7565b600d5460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529083169063a9059cbb906044016020604051808303816000875af1158015610c35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6491906122c3565b606060048054610718906120bd565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610cea5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016107dc565b610cf933856108f98685612142565b5060019392505050565b60006107a8338484610f61565b6005546001600160a01b03163314610d3a5760405162461bcd60e51b81526004016107dc906120f7565b6014821115610d4857600080fd5b6063811115610d5657600080fd5b604080516060808201835284825260006020808401829052928401819052600e95909555600f859055601085905582519081018352838152908101849052018290526011556012819055601355565b6005546001600160a01b03163314610dcf5760405162461bcd60e51b81526004016107dc906120f7565b6001600160a01b038116610e345760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107dc565b610a4281611721565b6001600160a01b038316610e9f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016107dc565b6001600160a01b038216610f005760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016107dc565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60008111610fc35760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016107dc565b6001600160a01b03831660009081526018602052604090205460ff1615801561100557506001600160a01b03821660009081526018602052604090205460ff16155b6110475760405162461bcd60e51b81526020600482015260136024820152724572726f723a20426c61636b6c73697465642160681b60448201526064016107dc565b6001600160a01b03831660009081526017602052604090205460ff1615801561108957506001600160a01b03821660009081526017602052604090205460ff16155b156110dd57600754600160a81b900460ff166110dd5760405162461bcd60e51b8152602060048201526013602482015272151c98591a5b99c81b9bdd08195b98589b1959606a1b60448201526064016107dc565b6007546001600160a01b0384811691161480156111065750600854611103906002612155565b43105b1561112f576001600160a01b0382166000908152601860205260409020805460ff191660011790555b6007546001600160a01b03848116911614801561116557506001600160a01b03821660009081526017602052604090205460ff16155b801561117b5750600754600160a01b900460ff16155b1561124d57600a548111156111d25760405162461bcd60e51b815260206004820152601d60248201527f596f752061726520657863656564696e67206d61784275794c696d697400000060448201526064016107dc565b600c54816111f5846001600160a01b031660009081526020819052604090205490565b6111ff9190612155565b111561124d5760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d697460448201526064016107dc565b6007546001600160a01b0384811691161480159061128457506001600160a01b03821660009081526017602052604090205460ff16155b80156112a957506001600160a01b03831660009081526017602052604090205460ff16155b80156112bf5750600754600160a01b900460ff16155b156113a657600b548111156113165760405162461bcd60e51b815260206004820152601e60248201527f596f752061726520657863656564696e67206d617853656c6c4c696d6974000060448201526064016107dc565b6007546001600160a01b038381169116146113a657600c548161134e846001600160a01b031660009081526020819052604090205490565b6113589190612155565b11156113a65760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d697460448201526064016107dc565b60008060008060006113d260405180606001604052806000815260200160008152602001600081525090565b600754600160a01b900460ff168061140257506001600160a01b03891660009081526017602052604090205460ff165b8061142557506001600160a01b03881660009081526017602052604090205460ff165b156114335760009350611518565b6007546001600160a01b0390811690891603611488576011546012546114599190612155565b601354604080516060810182526011548152601254602082015290810182905291975087965093509050611518565b6007546001600160a01b03908116908a16036114dd57600e54600f546114ae9190612155565b60105460408051606081018252600e548152600f54602082015290810182905291975087965093509050611518565b6014546015546114ed9190612155565b6016546040805160608101825260145481526015546020820152908101829052919750879650935090505b6064611524868961227d565b61152e9190612168565b9350606461153c848961227d565b6115469190612168565b600754909250600160b01b900460ff16801561157057506007546001600160a01b038a8116911614155b1561157f5761157f8682611805565b61159d898961158e8588612155565b611598908b612142565b611942565b81156115ad576115ad89836115eb565b83156115e05785156115e057600060646115c7888a61227d565b6115d19190612168565b90506115de8a3083611942565b505b505050505050505050565b6001600160a01b03821661164b5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016107dc565b6001600160a01b038216600090815260208190526040902054818110156116bf5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016107dc565b6001600160a01b038316600081815260208181526040918290208585039055600280548690039055905184815261dead92917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205460001981146117ff57818110156117f25760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016107dc565b6117ff8484848403610e3d565b50505050565b600754600160a01b900460ff16610bb4576007805460ff60a01b1916600160a01b17905581156119315730600090815260208190526040902054600954811061192f576001600954111561185857506009545b600061186584600261227d565b905060008184602001518461187a919061227d565b6118849190612168565b905060006118928285612142565b90504761189e82611b1a565b60006118aa8247612142565b905060008760200151866118be9190612142565b6118c89083612168565b905060008860200151826118dc919061227d565b905080156118ee576118ee8682611c74565b88516000906118fe84600261227d565b611908919061227d565b9050801561192657600d54611926906001600160a01b031682611d26565b50505050505050505b505b6007805460ff60a01b191690555050565b6001600160a01b0383166119a65760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016107dc565b6001600160a01b038216611a085760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016107dc565b6001600160a01b03831660009081526020819052604090205481811015611a805760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016107dc565b611a8a8282612142565b6001600160a01b038086166000908152602081905260408082209390935590851681529081208054849290611ac0908490612155565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611b0c91815260200190565b60405180910390a350505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611b4f57611b4f612294565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611ba8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bcc91906122e0565b81600181518110611bdf57611bdf612294565b6001600160a01b039283166020918202929092010152600654611c059130911684610e3d565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790611c3e9085906000908690309042906004016122fd565b600060405180830381600087803b158015611c5857600080fd5b505af1158015611c6c573d6000803e3d6000fd5b505050505050565b600654611c8c9030906001600160a01b031684610e3d565b60065460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015611cfa573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611d1f919061236e565b5050505050565b80471015611d765760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016107dc565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611dc3576040519150601f19603f3d011682016040523d82523d6000602084013e611dc8565b606091505b5050905080610b645760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016107dc565b600060208083528351808285015260005b81811015611e6c57858101830151858201604001528201611e50565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610a4257600080fd5b8035611ead81611e8d565b919050565b60008060408385031215611ec557600080fd5b8235611ed081611e8d565b946020939093013593505050565b600080600060608486031215611ef357600080fd5b8335611efe81611e8d565b92506020840135611f0e81611e8d565b929592945050506040919091013590565b600060208284031215611f3157600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b8015158114610a4257600080fd5b8035611ead81611f4e565b60008060408385031215611f7a57600080fd5b823567ffffffffffffffff80821115611f9257600080fd5b818501915085601f830112611fa657600080fd5b8135602082821115611fba57611fba611f38565b8160051b604051601f19603f83011681018181108682111715611fdf57611fdf611f38565b604052928352818301935084810182019289841115611ffd57600080fd5b948201945b838610156120225761201386611ea2565b85529482019493820193612002565b96506120319050878201611f5c565b9450505050509250929050565b60006020828403121561205057600080fd5b813561205b81611e8d565b9392505050565b6000806040838503121561207557600080fd5b50508035926020909101359150565b6000806040838503121561209757600080fd5b82356120a281611e8d565b915060208301356120b281611e8d565b809150509250929050565b600181811c908216806120d157607f821691505b6020821081036120f157634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b818103818111156107ac576107ac61212c565b808201808211156107ac576107ac61212c565b60008261218557634e487b7160e01b600052601260045260246000fd5b500490565b600181815b808511156121c55781600019048211156121ab576121ab61212c565b808516156121b857918102915b93841c939080029061218f565b509250929050565b6000826121dc575060016107ac565b816121e9575060006107ac565b81600181146121ff576002811461220957612225565b60019150506107ac565b60ff84111561221a5761221a61212c565b50506001821b6107ac565b5060208310610133831016604e8410600b8410161715612248575081810a6107ac565b612252838361218a565b80600019048211156122665761226661212c565b029392505050565b600061205b60ff8416836121cd565b80820281158282048414176107ac576107ac61212c565b634e487b7160e01b600052603260045260246000fd5b6000600182016122bc576122bc61212c565b5060010190565b6000602082840312156122d557600080fd5b815161205b81611f4e565b6000602082840312156122f257600080fd5b815161205b81611e8d565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561234d5784516001600160a01b031683529383019391830191600101612328565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561238357600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122059f4d1f284bd8f1fd8e4d117d0e3b9c68a5d9caac2c9401f051ac8359baccbd164736f6c63430008130033

Deployed Bytecode

0x60806040526004361061021e5760003560e01c8063715018a61161012357806395d89b41116100ab578063dbac26e91161006f578063dbac26e914610633578063dd62ed3e14610663578063f2fde38b146106a9578063f66895a3146106c9578063fbe6324e146106e857600080fd5b806395d89b411461058e578063a457c2d7146105a3578063a9059cbb146105c3578063c5d32bb2146105e3578063d710c23f1461061357600080fd5b806379cc6790116100f257806379cc67901461050457806385141a77146105245780638cd4426d1461053a5780638da5cb5b1461055a5780638de890bd1461057857600080fd5b8063715018a614610490578063728f8eea146104a5578063735de9f7146104c457806375f0a874146104e457600080fd5b806342966c68116101a657806354a267571161017557806354a26757146103f8578063652e2f041461041857806366a88d961461042e5780636aa5b37f1461044457806370a082311461045a57600080fd5b806342966c681461034657806342b6fa111461036657806349bd5a5e146103865780635331803c146103be57600080fd5b80631c1702f3116101ed5780631c1702f3146102be57806323b872dd146102d5578063313ce567146102f55780633950935114610311578063420ee01d1461033157600080fd5b806306fdde031461022a578063095ea7b3146102555780631675d8021461028557806318160ddd146102a957600080fd5b3661022557005b600080fd5b34801561023657600080fd5b5061023f610709565b60405161024c9190611e3f565b60405180910390f35b34801561026157600080fd5b50610275610270366004611eb2565b61079b565b604051901515815260200161024c565b34801561029157600080fd5b5061029b60095481565b60405190815260200161024c565b3480156102b557600080fd5b5060025461029b565b3480156102ca57600080fd5b506102d36107b2565b005b3480156102e157600080fd5b506102756102f0366004611ede565b610858565b34801561030157600080fd5b506040516012815260200161024c565b34801561031d57600080fd5b5061027561032c366004611eb2565b610909565b34801561033d57600080fd5b506102d3610940565b34801561035257600080fd5b506102d3610361366004611f1f565b610a38565b34801561037257600080fd5b506102d3610381366004611f1f565b610a45565b34801561039257600080fd5b506007546103a6906001600160a01b031681565b6040516001600160a01b03909116815260200161024c565b3480156103ca57600080fd5b506014546015546016546103dd92919083565b6040805193845260208401929092529082015260600161024c565b34801561040457600080fd5b506102d3610413366004611f67565b610ad3565b34801561042457600080fd5b5061029b600b5481565b34801561043a57600080fd5b5061029b600c5481565b34801561045057600080fd5b5061029b600a5481565b34801561046657600080fd5b5061029b61047536600461203e565b6001600160a01b031660009081526020819052604090205490565b34801561049c57600080fd5b506102d3610b69565b3480156104b157600080fd5b50600e54600f546010546103dd92919083565b3480156104d057600080fd5b506006546103a6906001600160a01b031681565b3480156104f057600080fd5b50600d546103a6906001600160a01b031681565b34801561051057600080fd5b506102d361051f366004611eb2565b610b9f565b34801561053057600080fd5b506103a661dead81565b34801561054657600080fd5b506102d3610555366004611eb2565b610bb8565b34801561056657600080fd5b506005546001600160a01b03166103a6565b34801561058457600080fd5b5061029b60085481565b34801561059a57600080fd5b5061023f610c59565b3480156105af57600080fd5b506102756105be366004611eb2565b610c68565b3480156105cf57600080fd5b506102756105de366004611eb2565b610d03565b3480156105ef57600080fd5b506102756105fe36600461203e565b60176020526000908152604090205460ff1681565b34801561061f57600080fd5b506102d361062e366004612062565b610d10565b34801561063f57600080fd5b5061027561064e36600461203e565b60186020526000908152604090205460ff1681565b34801561066f57600080fd5b5061029b61067e366004612084565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156106b557600080fd5b506102d36106c436600461203e565b610da5565b3480156106d557600080fd5b506011546012546013546103dd92919083565b3480156106f457600080fd5b5060075461027590600160b01b900460ff1681565b606060038054610718906120bd565b80601f0160208091040260200160405190810160405280929190818152602001828054610744906120bd565b80156107915780601f1061076657610100808354040283529160200191610791565b820191906000526020600020905b81548152906001019060200180831161077457829003601f168201915b5050505050905090565b60006107a8338484610e3d565b5060015b92915050565b6005546001600160a01b031633146107e55760405162461bcd60e51b81526004016107dc906120f7565b60405180910390fd5b600754600160a81b900460ff161561083f5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f742072652d656e61626c652074726164696e67000000000000000060448201526064016107dc565b6007805460ff60a81b1916600160a81b17905543600855565b6000610865848484610f61565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156108ea5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016107dc565b6108fe85336108f98685612142565b610e3d565b506001949350505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916107a89185906108f9908690612155565b6005546001600160a01b0316331461096a5760405162461bcd60e51b81526004016107dc906120f7565b600254600a55600254600b55600254600c556103e861098860025490565b6109929190612168565b6009556040805160608082018352600280835260006020808501829052938501819052600e829055600f819055601081905584519283018552818352928201839052920181905260119190915560128190556013556109ef610b69565b600a54600b54600c5460408051938452602084019290925282820152517f71e50fc869ff266df718ea6817d210f1b19d3d84b5d3dcfb72735630d5403d359181900360600190a1565b610a4233826115eb565b50565b6005546001600160a01b03163314610a6f5760405162461bcd60e51b81526004016107dc906120f7565b60008111610ab75760405162461bcd60e51b81526020600482015260156024820152744572726f723a2043616e2774206265207a65726f2160581b60448201526064016107dc565b610ac36012600a61226e565b610acd908261227d565b60095550565b6005546001600160a01b03163314610afd5760405162461bcd60e51b81526004016107dc906120f7565b60005b8251811015610b64578160186000858481518110610b2057610b20612294565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610b5c816122aa565b915050610b00565b505050565b6005546001600160a01b03163314610b935760405162461bcd60e51b81526004016107dc906120f7565b610b9d6000611721565b565b610baa823383611773565b610bb482826115eb565b5050565b6005546001600160a01b03163314610be25760405162461bcd60e51b81526004016107dc906120f7565b600d5460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529083169063a9059cbb906044016020604051808303816000875af1158015610c35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6491906122c3565b606060048054610718906120bd565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610cea5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016107dc565b610cf933856108f98685612142565b5060019392505050565b60006107a8338484610f61565b6005546001600160a01b03163314610d3a5760405162461bcd60e51b81526004016107dc906120f7565b6014821115610d4857600080fd5b6063811115610d5657600080fd5b604080516060808201835284825260006020808401829052928401819052600e95909555600f859055601085905582519081018352838152908101849052018290526011556012819055601355565b6005546001600160a01b03163314610dcf5760405162461bcd60e51b81526004016107dc906120f7565b6001600160a01b038116610e345760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107dc565b610a4281611721565b6001600160a01b038316610e9f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016107dc565b6001600160a01b038216610f005760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016107dc565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60008111610fc35760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016107dc565b6001600160a01b03831660009081526018602052604090205460ff1615801561100557506001600160a01b03821660009081526018602052604090205460ff16155b6110475760405162461bcd60e51b81526020600482015260136024820152724572726f723a20426c61636b6c73697465642160681b60448201526064016107dc565b6001600160a01b03831660009081526017602052604090205460ff1615801561108957506001600160a01b03821660009081526017602052604090205460ff16155b156110dd57600754600160a81b900460ff166110dd5760405162461bcd60e51b8152602060048201526013602482015272151c98591a5b99c81b9bdd08195b98589b1959606a1b60448201526064016107dc565b6007546001600160a01b0384811691161480156111065750600854611103906002612155565b43105b1561112f576001600160a01b0382166000908152601860205260409020805460ff191660011790555b6007546001600160a01b03848116911614801561116557506001600160a01b03821660009081526017602052604090205460ff16155b801561117b5750600754600160a01b900460ff16155b1561124d57600a548111156111d25760405162461bcd60e51b815260206004820152601d60248201527f596f752061726520657863656564696e67206d61784275794c696d697400000060448201526064016107dc565b600c54816111f5846001600160a01b031660009081526020819052604090205490565b6111ff9190612155565b111561124d5760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d697460448201526064016107dc565b6007546001600160a01b0384811691161480159061128457506001600160a01b03821660009081526017602052604090205460ff16155b80156112a957506001600160a01b03831660009081526017602052604090205460ff16155b80156112bf5750600754600160a01b900460ff16155b156113a657600b548111156113165760405162461bcd60e51b815260206004820152601e60248201527f596f752061726520657863656564696e67206d617853656c6c4c696d6974000060448201526064016107dc565b6007546001600160a01b038381169116146113a657600c548161134e846001600160a01b031660009081526020819052604090205490565b6113589190612155565b11156113a65760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d697460448201526064016107dc565b60008060008060006113d260405180606001604052806000815260200160008152602001600081525090565b600754600160a01b900460ff168061140257506001600160a01b03891660009081526017602052604090205460ff165b8061142557506001600160a01b03881660009081526017602052604090205460ff165b156114335760009350611518565b6007546001600160a01b0390811690891603611488576011546012546114599190612155565b601354604080516060810182526011548152601254602082015290810182905291975087965093509050611518565b6007546001600160a01b03908116908a16036114dd57600e54600f546114ae9190612155565b60105460408051606081018252600e548152600f54602082015290810182905291975087965093509050611518565b6014546015546114ed9190612155565b6016546040805160608101825260145481526015546020820152908101829052919750879650935090505b6064611524868961227d565b61152e9190612168565b9350606461153c848961227d565b6115469190612168565b600754909250600160b01b900460ff16801561157057506007546001600160a01b038a8116911614155b1561157f5761157f8682611805565b61159d898961158e8588612155565b611598908b612142565b611942565b81156115ad576115ad89836115eb565b83156115e05785156115e057600060646115c7888a61227d565b6115d19190612168565b90506115de8a3083611942565b505b505050505050505050565b6001600160a01b03821661164b5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016107dc565b6001600160a01b038216600090815260208190526040902054818110156116bf5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016107dc565b6001600160a01b038316600081815260208181526040918290208585039055600280548690039055905184815261dead92917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205460001981146117ff57818110156117f25760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016107dc565b6117ff8484848403610e3d565b50505050565b600754600160a01b900460ff16610bb4576007805460ff60a01b1916600160a01b17905581156119315730600090815260208190526040902054600954811061192f576001600954111561185857506009545b600061186584600261227d565b905060008184602001518461187a919061227d565b6118849190612168565b905060006118928285612142565b90504761189e82611b1a565b60006118aa8247612142565b905060008760200151866118be9190612142565b6118c89083612168565b905060008860200151826118dc919061227d565b905080156118ee576118ee8682611c74565b88516000906118fe84600261227d565b611908919061227d565b9050801561192657600d54611926906001600160a01b031682611d26565b50505050505050505b505b6007805460ff60a01b191690555050565b6001600160a01b0383166119a65760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016107dc565b6001600160a01b038216611a085760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016107dc565b6001600160a01b03831660009081526020819052604090205481811015611a805760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016107dc565b611a8a8282612142565b6001600160a01b038086166000908152602081905260408082209390935590851681529081208054849290611ac0908490612155565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611b0c91815260200190565b60405180910390a350505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611b4f57611b4f612294565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611ba8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bcc91906122e0565b81600181518110611bdf57611bdf612294565b6001600160a01b039283166020918202929092010152600654611c059130911684610e3d565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790611c3e9085906000908690309042906004016122fd565b600060405180830381600087803b158015611c5857600080fd5b505af1158015611c6c573d6000803e3d6000fd5b505050505050565b600654611c8c9030906001600160a01b031684610e3d565b60065460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015611cfa573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611d1f919061236e565b5050505050565b80471015611d765760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016107dc565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611dc3576040519150601f19603f3d011682016040523d82523d6000602084013e611dc8565b606091505b5050905080610b645760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016107dc565b600060208083528351808285015260005b81811015611e6c57858101830151858201604001528201611e50565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610a4257600080fd5b8035611ead81611e8d565b919050565b60008060408385031215611ec557600080fd5b8235611ed081611e8d565b946020939093013593505050565b600080600060608486031215611ef357600080fd5b8335611efe81611e8d565b92506020840135611f0e81611e8d565b929592945050506040919091013590565b600060208284031215611f3157600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b8015158114610a4257600080fd5b8035611ead81611f4e565b60008060408385031215611f7a57600080fd5b823567ffffffffffffffff80821115611f9257600080fd5b818501915085601f830112611fa657600080fd5b8135602082821115611fba57611fba611f38565b8160051b604051601f19603f83011681018181108682111715611fdf57611fdf611f38565b604052928352818301935084810182019289841115611ffd57600080fd5b948201945b838610156120225761201386611ea2565b85529482019493820193612002565b96506120319050878201611f5c565b9450505050509250929050565b60006020828403121561205057600080fd5b813561205b81611e8d565b9392505050565b6000806040838503121561207557600080fd5b50508035926020909101359150565b6000806040838503121561209757600080fd5b82356120a281611e8d565b915060208301356120b281611e8d565b809150509250929050565b600181811c908216806120d157607f821691505b6020821081036120f157634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b818103818111156107ac576107ac61212c565b808201808211156107ac576107ac61212c565b60008261218557634e487b7160e01b600052601260045260246000fd5b500490565b600181815b808511156121c55781600019048211156121ab576121ab61212c565b808516156121b857918102915b93841c939080029061218f565b509250929050565b6000826121dc575060016107ac565b816121e9575060006107ac565b81600181146121ff576002811461220957612225565b60019150506107ac565b60ff84111561221a5761221a61212c565b50506001821b6107ac565b5060208310610133831016604e8410600b8410161715612248575081810a6107ac565b612252838361218a565b80600019048211156122665761226661212c565b029392505050565b600061205b60ff8416836121cd565b80820281158282048414176107ac576107ac61212c565b634e487b7160e01b600052603260045260246000fd5b6000600182016122bc576122bc61212c565b5060010190565b6000602082840312156122d557600080fd5b815161205b81611f4e565b6000602082840312156122f257600080fd5b815161205b81611e8d565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561234d5784516001600160a01b031683529383019391830191600101612328565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561238357600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122059f4d1f284bd8f1fd8e4d117d0e3b9c68a5d9caac2c9401f051ac8359baccbd164736f6c63430008130033

Deployed Bytecode Sourcemap

16001:10913:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2499:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18146:161;;;;;;;;;;-1:-1:-1;18146:161:0;;;;;:::i;:::-;;:::i;:::-;;;1327:14:1;;1320:22;1302:41;;1290:2;1275:18;18146:161:0;1162:187:1;16312:69:0;;;;;;;;;;;;;;;;;;;1500:25:1;;;1488:2;1473:18;16312:69:0;1354:177:1;3619:108:0;;;;;;;;;;-1:-1:-1;3707:12:0;;3619:108;;25370:179;;;;;;;;;;;;;:::i;:::-;;18315:448;;;;;;;;;;-1:-1:-1;18315:448:0;;;;;:::i;:::-;;:::i;3461:93::-;;;;;;;;;;-1:-1:-1;3461:93:0;;3544:2;2139:36:1;;2127:2;2112:18;3461:93:0;1997:184:1;18771:248:0;;;;;;;;;;-1:-1:-1;18771:248:0;;;;;:::i;:::-;;:::i;26302:403::-;;;;;;;;;;;;;:::i;15420:91::-;;;;;;;;;;-1:-1:-1;15420:91:0;;;;;:::i;:::-;;:::i;25772:236::-;;;;;;;;;;-1:-1:-1;25772:236:0;;;;;:::i;:::-;;:::i;16132:28::-;;;;;;;;;;-1:-1:-1;16132:28:0;;;;-1:-1:-1;;;;;16132:28:0;;;;;;-1:-1:-1;;;;;2535:32:1;;;2517:51;;2505:2;2490:18;16132:28:0;2371:203:1;16956:43:0;;;;;;;;;;-1:-1:-1;16956:43:0;;;;;;;;;;;;;;;;2781:25:1;;;2837:2;2822:18;;2815:34;;;;2865:18;;;2858:34;2769:2;2754:18;16956:43:0;2579:319:1;25557:207:0;;;;;;;;;;-1:-1:-1;25557:207:0;;;;;:::i;:::-;;:::i;16454:60::-;;;;;;;;;;;;;;;;16521:62;;;;;;;;;;;;;;;;16388:59;;;;;;;;;;;;;;;;3790:127;;;;;;;;;;-1:-1:-1;3790:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;3891:18:0;3864:7;3891:18;;;;;;;;;;;;3790:127;13704:94;;;;;;;;;;;;;:::i;16867:35::-;;;;;;;;;;-1:-1:-1;16867:35:0;;;;;;;;;;;;16097:28;;;;;;;;;;-1:-1:-1;16097:28:0;;;;-1:-1:-1;;;;;16097:28:0;;;16592:75;;;;;;;;;;-1:-1:-1;16592:75:0;;;;-1:-1:-1;;;;;16592:75:0;;;15830:164;;;;;;;;;;-1:-1:-1;15830:164:0;;;;;:::i;:::-;;:::i;16671:79::-;;;;;;;;;;;;16708:42;16671:79;;26713:143;;;;;;;;;;-1:-1:-1;26713:143:0;;;;;:::i;:::-;;:::i;13481:87::-;;;;;;;;;;-1:-1:-1;13554:6:0;;-1:-1:-1;;;;;13554:6:0;13481:87;;16273:30;;;;;;;;;;;;;;;;2718:104;;;;;;;;;;;;;:::i;19027:410::-;;;;;;;;;;-1:-1:-1;19027:410:0;;;;;:::i;:::-;;:::i;19445:165::-;;;;;;;;;;-1:-1:-1;19445:165:0;;;;;:::i;:::-;;:::i;17008:41::-;;;;;;;;;;-1:-1:-1;17008:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;26016:278;;;;;;;;;;-1:-1:-1;26016:278:0;;;;;:::i;:::-;;:::i;17056:43::-;;;;;;;;;;-1:-1:-1;17056:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;4409:201;;;;;;;;;;-1:-1:-1;4409:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;4575:18:0;;;4543:7;4575:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4409:201;13806:192;;;;;;;;;;-1:-1:-1;13806:192:0;;;;;:::i;:::-;;:::i;16909:40::-;;;;;;;;;;-1:-1:-1;16909:40:0;;;;;;;;;;;;16229:37;;;;;;;;;;-1:-1:-1;16229:37:0;;;;-1:-1:-1;;;16229:37:0;;;;;;2499:100;2553:13;2586:5;2579:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2499:100;:::o;18146:161::-;18221:4;18238:39;301:10;18261:7;18270:6;18238:8;:39::i;:::-;-1:-1:-1;18295:4:0;18146:161;;;;;:::o;25370:179::-;13554:6;;-1:-1:-1;;;;;13554:6:0;301:10;13616:23;13608:68;;;;-1:-1:-1;;;13608:68:0;;;;;;;:::i;:::-;;;;;;;;;25433:10:::1;::::0;-1:-1:-1;;;25433:10:0;::::1;;;25432:11;25424:48;;;::::0;-1:-1:-1;;;25424:48:0;;6556:2:1;25424:48:0::1;::::0;::::1;6538:21:1::0;6595:2;6575:18;;;6568:30;6634:26;6614:18;;;6607:54;6678:18;;25424:48:0::1;6354:348:1::0;25424:48:0::1;25483:10;:17:::0;;-1:-1:-1;;;;25483:17:0::1;-1:-1:-1::0;;;25483:17:0::1;::::0;;25529:12:::1;25511:15;:30:::0;25370:179::o;18315:448::-;18447:4;18464:36;18474:6;18482:9;18493:6;18464:9;:36::i;:::-;-1:-1:-1;;;;;18540:19:0;;18513:24;18540:19;;;:11;:19;;;;;;;;301:10;18540:33;;;;;;;;18592:26;;;;18584:79;;;;-1:-1:-1;;;18584:79:0;;6909:2:1;18584:79:0;;;6891:21:1;6948:2;6928:18;;;6921:30;6987:34;6967:18;;;6960:62;-1:-1:-1;;;7038:18:1;;;7031:38;7086:19;;18584:79:0;6707:404:1;18584:79:0;18674:57;18683:6;301:10;18705:25;18724:6;18705:16;:25;:::i;:::-;18674:8;:57::i;:::-;-1:-1:-1;18751:4:0;;18315:448;-1:-1:-1;;;;18315:448:0:o;18771:248::-;301:10;18887:4;18941:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;18941:34:0;;;;;;;;;;18887:4;;18909:80;;18932:7;;18941:47;;18978:10;;18941:47;:::i;26302:403::-;13554:6;;-1:-1:-1;;;;;13554:6:0;301:10;13616:23;13608:68;;;;-1:-1:-1;;;13608:68:0;;;;;;;:::i;:::-;3707:12;;26356:11:::1;:27:::0;3707:12;;26394::::1;:28:::0;3707:12;;26433:14:::1;:30:::0;26516:4:::1;26502:13;3707:12:::0;;;3619:108;26502:13:::1;:18;;;;:::i;:::-;26476:23;:44:::0;26541:14:::1;::::0;;::::1;::::0;;::::1;::::0;;26547:1:::1;26541:14:::0;;;-1:-1:-1;26541:14:0::1;::::0;;::::1;::::0;;;;;;;;;26533:5:::1;:22:::0;;;;;;;;;;;26578:14;;;;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;26566:9:::1;:26:::0;;;;;;;;;;26605:19:::1;:17;:19::i;:::-;26655:11;::::0;26668:12:::1;::::0;26682:14:::1;::::0;26642:55:::1;::::0;;2781:25:1;;;2837:2;2822:18;;2815:34;;;;2865:18;;;2858:34;26642:55:0;::::1;::::0;;;;2769:2:1;26642:55:0;;::::1;26302:403::o:0;15420:91::-;15476:27;301:10;15496:6;15476:5;:27::i;:::-;15420:91;:::o;25772:236::-;13554:6;;-1:-1:-1;;;;;13554:6:0;301:10;13616:23;13608:68;;;;-1:-1:-1;;;13608:68:0;;;;;;;:::i;:::-;25909:1:::1;25896:10;:14;25888:48;;;::::0;-1:-1:-1;;;25888:48:0;;7935:2:1;25888:48:0::1;::::0;::::1;7917:21:1::0;7974:2;7954:18;;;7947:30;-1:-1:-1;;;7993:18:1;;;7986:51;8054:18;;25888:48:0::1;7733:345:1::0;25888:48:0::1;25986:14;3544:2:::0;25986::::1;:14;:::i;:::-;25973:27;::::0;:10;:27:::1;:::i;:::-;25947:23;:53:::0;-1:-1:-1;25772:236:0:o;25557:207::-;13554:6;;-1:-1:-1;;;;;13554:6:0;301:10;13616:23;13608:68;;;;-1:-1:-1;;;13608:68:0;;;;;;;:::i;:::-;25656:9:::1;25651:106;25675:8;:15;25671:1;:19;25651:106;;;25739:6;25712:11;:24;25724:8;25733:1;25724:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;25712:24:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;25712:24:0;:33;;-1:-1:-1;;25712:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25692:3;::::1;::::0;::::1;:::i;:::-;;;;25651:106;;;;25557:207:::0;;:::o;13704:94::-;13554:6;;-1:-1:-1;;;;;13554:6:0;301:10;13616:23;13608:68;;;;-1:-1:-1;;;13608:68:0;;;;;;;:::i;:::-;13769:21:::1;13787:1;13769:9;:21::i;:::-;13704:94::o:0;15830:164::-;15907:46;15923:7;301:10;15946:6;15907:15;:46::i;:::-;15964:22;15970:7;15979:6;15964:5;:22::i;:::-;15830:164;;:::o;26713:143::-;13554:6;;-1:-1:-1;;;;;13554:6:0;301:10;13616:23;13608:68;;;;-1:-1:-1;;;13608:68:0;;;;;;;:::i;:::-;26824:15:::1;::::0;26798:50:::1;::::0;-1:-1:-1;;;26798:50:0;;-1:-1:-1;;;;;26824:15:0;;::::1;26798:50;::::0;::::1;10085:51:1::0;10152:18;;;10145:34;;;26798:25:0;;::::1;::::0;::::1;::::0;10058:18:1;;26798:50:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;2718:104::-:0;2774:13;2807:7;2800:14;;;;;:::i;19027:410::-;301:10;19148:4;19197:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;19197:34:0;;;;;;;;;;19250:35;;;;19242:85;;;;-1:-1:-1;;;19242:85:0;;10642:2:1;19242:85:0;;;10624:21:1;10681:2;10661:18;;;10654:30;10720:34;10700:18;;;10693:62;-1:-1:-1;;;10771:18:1;;;10764:35;10816:19;;19242:85:0;10440:401:1;19242:85:0;19338:67;301:10;19361:7;19370:34;19389:15;19370:16;:34;:::i;19338:67::-;-1:-1:-1;19425:4:0;;19027:410;-1:-1:-1;;;19027:410:0:o;19445:165::-;19523:4;19540:40;19550:10;19562:9;19573:6;19540:9;:40::i;26016:278::-;13554:6;;-1:-1:-1;;;;;13554:6:0;301:10;13616:23;13608:68;;;;-1:-1:-1;;;13608:68:0;;;;;;;:::i;:::-;26147:2:::1;26130:13;:19;;26121:29;;;::::0;::::1;;26188:2;26170:14;:20;;26161:30;;;::::0;::::1;;26210:26;::::0;;::::1;::::0;;::::1;::::0;;;;;-1:-1:-1;26210:26:0::1;::::0;;::::1;::::0;;;;;;;;;26202:5:::1;:34:::0;;;;;;;;;;;;26259:27;;;;::::1;::::0;;;;;;;::::1;::::0;;;;;;;26247:9:::1;:39:::0;;;;;;;26016:278::o;13806:192::-;13554:6;;-1:-1:-1;;;;;13554:6:0;301:10;13616:23;13608:68;;;;-1:-1:-1;;;13608:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13895:22:0;::::1;13887:73;;;::::0;-1:-1:-1;;;13887:73:0;;11048:2:1;13887:73:0::1;::::0;::::1;11030:21:1::0;11087:2;11067:18;;;11060:30;11126:34;11106:18;;;11099:62;-1:-1:-1;;;11177:18:1;;;11170:36;11223:19;;13887:73:0::1;10846:402:1::0;13887:73:0::1;13971:19;13981:8;13971:9;:19::i;11129:380::-:0;-1:-1:-1;;;;;11265:19:0;;11257:68;;;;-1:-1:-1;;;11257:68:0;;11455:2:1;11257:68:0;;;11437:21:1;11494:2;11474:18;;;11467:30;11533:34;11513:18;;;11506:62;-1:-1:-1;;;11584:18:1;;;11577:34;11628:19;;11257:68:0;11253:400:1;11257:68:0;-1:-1:-1;;;;;11344:21:0;;11336:68;;;;-1:-1:-1;;;11336:68:0;;11860:2:1;11336:68:0;;;11842:21:1;11899:2;11879:18;;;11872:30;11938:34;11918:18;;;11911:62;-1:-1:-1;;;11989:18:1;;;11982:32;12031:19;;11336:68:0;11658:398:1;11336:68:0;-1:-1:-1;;;;;11417:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;11469:32;;1500:25:1;;;11469:32:0;;1473:18:1;11469:32:0;;;;;;;11129:380;;;:::o;19618:3214::-;19768:1;19759:6;:10;19751:64;;;;-1:-1:-1;;;19751:64:0;;12263:2:1;19751:64:0;;;12245:21:1;12302:2;12282:18;;;12275:30;12341:34;12321:18;;;12314:62;-1:-1:-1;;;12392:18:1;;;12385:39;12441:19;;19751:64:0;12061:405:1;19751:64:0;-1:-1:-1;;;;;19835:19:0;;;;;;:11;:19;;;;;;;;19834:20;:47;;;;-1:-1:-1;;;;;;19859:22:0;;;;;;:11;:22;;;;;;;;19858:23;19834:47;19826:79;;;;-1:-1:-1;;;19826:79:0;;12673:2:1;19826:79:0;;;12655:21:1;12712:2;12692:18;;;12685:30;-1:-1:-1;;;12731:18:1;;;12724:49;12790:18;;19826:79:0;12471:343:1;19826:79:0;-1:-1:-1;;;;;19923:17:0;;;;;;:9;:17;;;;;;;;19922:18;:43;;;;-1:-1:-1;;;;;;19945:20:0;;;;;;:9;:20;;;;;;;;19944:21;19922:43;19918:118;;;19990:10;;-1:-1:-1;;;19990:10:0;;;;19982:42;;;;-1:-1:-1;;;19982:42:0;;13021:2:1;19982:42:0;;;13003:21:1;13060:2;13040:18;;;13033:30;-1:-1:-1;;;13079:18:1;;;13072:49;13138:18;;19982:42:0;12819:343:1;19982:42:0;20062:13;;-1:-1:-1;;;;;20052:23:0;;;20062:13;;20052:23;:61;;;;-1:-1:-1;20094:15:0;;:19;;20112:1;20094:19;:::i;:::-;20079:12;:34;20052:61;20048:123;;;-1:-1:-1;;;;;20130:22:0;;;;;;:11;:22;;;;;:29;;-1:-1:-1;;20130:29:0;20155:4;20130:29;;;20048:123;20197:13;;-1:-1:-1;;;;;20187:23:0;;;20197:13;;20187:23;:48;;;;-1:-1:-1;;;;;;20215:20:0;;;;;;:9;:20;;;;;;;;20214:21;20187:48;:63;;;;-1:-1:-1;20240:10:0;;-1:-1:-1;;;20240:10:0;;;;20239:11;20187:63;20183:315;;;20285:11;;20275:6;:21;;20267:63;;;;-1:-1:-1;;;20267:63:0;;13369:2:1;20267:63:0;;;13351:21:1;13408:2;13388:18;;;13381:30;13447:31;13427:18;;;13420:59;13496:18;;20267:63:0;13167:353:1;20267:63:0;20404:14;;20394:6;20371:20;20381:9;-1:-1:-1;;;;;3891:18:0;3864:7;3891:18;;;;;;;;;;;;3790:127;20371:20;:29;;;;:::i;:::-;:47;;20345:141;;;;-1:-1:-1;;;20345:141:0;;13727:2:1;20345:141:0;;;13709:21:1;;;13746:18;;;13739:30;13805:34;13785:18;;;13778:62;13857:18;;20345:141:0;13525:356:1;20345:141:0;20538:13;;-1:-1:-1;;;;;20528:23:0;;;20538:13;;20528:23;;;;:48;;-1:-1:-1;;;;;;20556:20:0;;;;;;:9;:20;;;;;;;;20555:21;20528:48;:70;;;;-1:-1:-1;;;;;;20581:17:0;;;;;;:9;:17;;;;;;;;20580:18;20528:70;:85;;;;-1:-1:-1;20603:10:0;;-1:-1:-1;;;20603:10:0;;;;20602:11;20528:85;20510:441;;;20658:12;;20648:6;:22;;20640:65;;;;-1:-1:-1;;;20640:65:0;;14088:2:1;20640:65:0;;;14070:21:1;14127:2;14107:18;;;14100:30;14166:32;14146:18;;;14139:60;14216:18;;20640:65:0;13886:354:1;20640:65:0;20737:13;;-1:-1:-1;;;;;20724:26:0;;;20737:13;;20724:26;20720:220;;20834:14;;20824:6;20801:20;20811:9;-1:-1:-1;;;;;3891:18:0;3864:7;3891:18;;;;;;;;;;;;3790:127;20801:20;:29;;;;:::i;:::-;:47;;20771:153;;;;-1:-1:-1;;;20771:153:0;;13727:2:1;20771:153:0;;;13709:21:1;;;13746:18;;;13739:30;13805:34;13785:18;;;13778:62;13857:18;;20771:153:0;13525:356:1;20771:153:0;20963:15;20989:14;21014:11;21036:15;21062:18;21091:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;21091:25:0;21204:10;;-1:-1:-1;;;21204:10:0;;;;;:31;;-1:-1:-1;;;;;;21218:17:0;;;;;;:9;:17;;;;;;;;21204:31;:55;;;-1:-1:-1;;;;;;21239:20:0;;;;;;:9;:20;;;;;;;;21204:55;21200:865;;;21280:1;21274:7;;21200:865;;;21345:13;;-1:-1:-1;;;;;21345:13:0;;;21332:26;;;;21328:737;;21441:9;:19;21402;;:58;;21441:19;21402:58;:::i;:::-;21516:14;;21545:24;;;;;;;;21516:9;21545:24;;;;;;;;;;;;;;;21375:85;;-1:-1:-1;21375:85:0;;-1:-1:-1;21516:14:0;-1:-1:-1;21545:24:0;-1:-1:-1;21328:737:0;;;21601:13;;-1:-1:-1;;;;;21601:13:0;;;21591:23;;;;21587:478;;21693:5;:15;21658;;:50;;21693:15;21658:50;:::i;:::-;21764:10;;21789:20;;;;;;;;21764:5;21789:20;;;;;;;;;;;;;;;21631:77;;-1:-1:-1;21631:77:0;;-1:-1:-1;21764:10:0;-1:-1:-1;21789:20:0;-1:-1:-1;21587:478:0;;;21912:13;:23;21869;;:66;;21912:23;21869:66;:::i;:::-;21992:18;;22025:28;;;;;;;;21992:13;22025:28;;;;;;;;;;;;;;;21842:93;;-1:-1:-1;21842:93:0;;-1:-1:-1;21992:18:0;-1:-1:-1;22025:28:0;-1:-1:-1;21587:478:0;22103:3;22084:15;22093:6;22084;:15;:::i;:::-;22083:23;;;;:::i;:::-;22077:29;-1:-1:-1;22151:3:0;22131:16;22140:7;22131:6;:16;:::i;:::-;22130:24;;;;:::i;:::-;22268:18;;22117:37;;-1:-1:-1;;;;22268:18:0;;;;:45;;;;-1:-1:-1;22300:13:0;;-1:-1:-1;;;;;22290:23:0;;;22300:13;;22290:23;;22268:45;22264:81;;;22315:30;22323:7;22332:12;22315:7;:30::i;:::-;22387:63;22403:6;22411:9;22432:16;22438:10;22432:3;:16;:::i;:::-;22422:27;;:6;:27;:::i;:::-;22387:15;:63::i;:::-;22492:14;;22489:77;;22523:31;22535:6;22543:10;22523:11;:31::i;:::-;22580:7;;22576:249;;22652:11;;22648:164;;22684:17;22725:3;22705:16;22714:7;22705:6;:16;:::i;:::-;22704:24;;;;:::i;:::-;22684:44;;22747:49;22763:6;22779:4;22786:9;22747:15;:49::i;:::-;22665:147;22648:164;19740:3092;;;;;;19618:3214;;;:::o;9947:744::-;-1:-1:-1;;;;;10031:21:0;;10023:67;;;;-1:-1:-1;;;10023:67:0;;14447:2:1;10023:67:0;;;14429:21:1;14486:2;14466:18;;;14459:30;14525:34;14505:18;;;14498:62;-1:-1:-1;;;14576:18:1;;;14569:31;14617:19;;10023:67:0;14245:397:1;10023:67:0;-1:-1:-1;;;;;10195:18:0;;10170:22;10195:18;;;;;;;;;;;10232:24;;;;10224:71;;;;-1:-1:-1;;;10224:71:0;;14849:2:1;10224:71:0;;;14831:21:1;14888:2;14868:18;;;14861:30;14927:34;14907:18;;;14900:62;-1:-1:-1;;;14978:18:1;;;14971:32;15020:19;;10224:71:0;14647:398:1;10224:71:0;-1:-1:-1;;;;;10331:18:0;;:9;:18;;;;;;;;;;;;10352:23;;;10331:44;;10470:12;:22;;;;;;;10575:42;;1500:25:1;;;10601:6:0;;10331:18;10575:42;;1473:18:1;10575:42:0;;;;;;;25651:106:::1;25557:207:::0;;:::o;14006:173::-;14081:6;;;-1:-1:-1;;;;;14098:17:0;;;-1:-1:-1;;;;;;14098:17:0;;;;;;;14131:40;;14081:6;;;14098:17;14081:6;;14131:40;;14062:16;;14131:40;14051:128;14006:173;:::o;5218:419::-;-1:-1:-1;;;;;4575:18:0;;;5319:24;4575:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;5386:37:0;;5382:248;;5468:6;5448:16;:26;;5440:68;;;;-1:-1:-1;;;5440:68:0;;15252:2:1;5440:68:0;;;15234:21:1;15291:2;15271:18;;;15264:30;15330:31;15310:18;;;15303:59;15379:18;;5440:68:0;15050:353:1;5440:68:0;5552:51;5561:5;5568:7;5596:6;5577:16;:25;5552:8;:51::i;:::-;5308:329;5218:419;;;:::o;22840:1437::-;17472:10;;-1:-1:-1;;;17472:10:0;;;;17467:110;;17499:10;:17;;-1:-1:-1;;;;17499:17:0;-1:-1:-1;;;17499:17:0;;;22931:49;;22962:7:::1;22931:49;23036:4;22992:23;3891:18:::0;;;;;;;;;;;23076:23:::1;::::0;23057:42;::::1;23053:1217;;23146:1;23120:23;;:27;23116:109;;;-1:-1:-1::0;23186:23:0::1;::::0;23116:109:::1;23296:19;23318:11;:7:::0;23328:1:::1;23318:11;:::i;:::-;23296:33;;23344:32;23438:11;23398:9;:19;;;23380:15;:37;;;;:::i;:::-;23379:70;;;;:::i;:::-;23344:105:::0;-1:-1:-1;23464:14:0::1;23481:42;23344:105:::0;23481:15;:42:::1;:::i;:::-;23464:59:::0;-1:-1:-1;23565:21:0::1;23603:24;23464:59:::0;23603:16:::1;:24::i;:::-;23644:20;23667:38;23691:14:::0;23667:21:::1;:38;:::i;:::-;23644:61;;23720:19;23772:9;:19;;;23758:11;:33;;;;:::i;:::-;23742:50;::::0;:12;:50:::1;:::i;:::-;23720:72;;23807:29;23853:9;:19;;;23839:11;:33;;;;:::i;:::-;23807:65:::0;-1:-1:-1;23893:25:0;;23889:172:::1;;23984:61;23997:24;24023:21;23984:12;:61::i;:::-;24118:19:::0;;24077:20:::1;::::0;24100:15:::1;:11:::0;24114:1:::1;24100:15;:::i;:::-;:37;;;;:::i;:::-;24077:60:::0;-1:-1:-1;24156:16:0;;24152:105:::1;;24201:15;::::0;24193:48:::1;::::0;-1:-1:-1;;;;;24201:15:0::1;24228:12:::0;24193:34:::1;:48::i;:::-;23101:1169;;;;;;;;23053:1217;22918:1359;17531:1;17547:10:::0;:18;;-1:-1:-1;;;;17547:18:0;;;22840:1437;;:::o;8633:578::-;-1:-1:-1;;;;;8773:20:0;;8765:70;;;;-1:-1:-1;;;8765:70:0;;15610:2:1;8765:70:0;;;15592:21:1;15649:2;15629:18;;;15622:30;15688:34;15668:18;;;15661:62;-1:-1:-1;;;15739:18:1;;;15732:35;15784:19;;8765:70:0;15408:401:1;8765:70:0;-1:-1:-1;;;;;8854:23:0;;8846:71;;;;-1:-1:-1;;;8846:71:0;;16016:2:1;8846:71:0;;;15998:21:1;16055:2;16035:18;;;16028:30;16094:34;16074:18;;;16067:62;-1:-1:-1;;;16145:18:1;;;16138:33;16188:19;;8846:71:0;15814:399:1;8846:71:0;-1:-1:-1;;;;;8954:17:0;;8930:21;8954:17;;;;;;;;;;;8990:23;;;;8982:74;;;;-1:-1:-1;;;8982:74:0;;16420:2:1;8982:74:0;;;16402:21:1;16459:2;16439:18;;;16432:30;16498:34;16478:18;;;16471:62;-1:-1:-1;;;16549:18:1;;;16542:36;16595:19;;8982:74:0;16218:402:1;8982:74:0;9087:22;9103:6;9087:13;:22;:::i;:::-;-1:-1:-1;;;;;9067:17:0;;;:9;:17;;;;;;;;;;;:42;;;;9120:20;;;;;;;;:30;;9144:6;;9067:9;9120:30;;9144:6;;9120:30;:::i;:::-;;;;;;;;9185:9;-1:-1:-1;;;;;9168:35:0;9177:6;-1:-1:-1;;;;;9168:35:0;;9196:6;9168:35;;;;1500:25:1;;1488:2;1473:18;;1354:177;9168:35:0;;;;;;;;8754:457;8633:578;;;:::o;24285:555::-;24435:16;;;24449:1;24435:16;;;;;;;;24411:21;;24435:16;;;;;;;;;;-1:-1:-1;24435:16:0;24411:40;;24480:4;24462;24467:1;24462:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24462:23:0;;;:7;;;;;;;;;;:23;;;;24506:13;;:20;;;-1:-1:-1;;;24506:20:0;;;;:13;;;;;:18;;:20;;;;;24462:7;;24506:20;;;;;:13;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24496:4;24501:1;24496:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24496:30:0;;;:7;;;;;;;;;:30;24571:13;;24539:60;;24556:4;;24571:13;24587:11;24539:8;:60::i;:::-;24638:13;;:194;;-1:-1:-1;;;24638:194:0;;-1:-1:-1;;;;;24638:13:0;;;;:64;;:194;;24717:11;;24638:13;;24759:4;;24786;;24806:15;;24638:194;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24340:500;24285:555;:::o;24848:514::-;25028:13;;24996:60;;25013:4;;-1:-1:-1;;;;;25028:13:0;25044:11;24996:8;:60::i;:::-;25099:13;;:255;;-1:-1:-1;;;25099:255:0;;25171:4;25099:255;;;18207:34:1;18257:18;;;18250:34;;;25099:13:0;18300:18:1;;;18293:34;;;18343:18;;;18336:34;16708:42:0;18386:19:1;;;18379:44;25328:15:0;18439:19:1;;;18432:35;-1:-1:-1;;;;;25099:13:0;;;;:29;;25137:9;;18141:19:1;;25099:255:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;24848:514;;:::o;12924:319::-;13039:6;13014:21;:31;;13006:73;;;;-1:-1:-1;;;13006:73:0;;18991:2:1;13006:73:0;;;18973:21:1;19030:2;19010:18;;;19003:30;19069:31;19049:18;;;19042:59;19118:18;;13006:73:0;18789:353:1;13006:73:0;13093:12;13111:9;-1:-1:-1;;;;;13111:14:0;13134:6;13111:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13092:54;;;13165:7;13157:78;;;;-1:-1:-1;;;13157:78:0;;19559:2:1;13157:78:0;;;19541:21:1;19598:2;19578:18;;;19571:30;19637:34;19617:18;;;19610:62;19708:28;19688:18;;;19681:56;19754:19;;13157:78:0;19357:422:1;14:548;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:134;771:20;;800:31;771:20;800:31;:::i;:::-;703:134;;;:::o;842:315::-;910:6;918;971:2;959:9;950:7;946:23;942:32;939:52;;;987:1;984;977:12;939:52;1026:9;1013:23;1045:31;1070:5;1045:31;:::i;:::-;1095:5;1147:2;1132:18;;;;1119:32;;-1:-1:-1;;;842:315:1:o;1536:456::-;1613:6;1621;1629;1682:2;1670:9;1661:7;1657:23;1653:32;1650:52;;;1698:1;1695;1688:12;1650:52;1737:9;1724:23;1756:31;1781:5;1756:31;:::i;:::-;1806:5;-1:-1:-1;1863:2:1;1848:18;;1835:32;1876:33;1835:32;1876:33;:::i;:::-;1536:456;;1928:7;;-1:-1:-1;;;1982:2:1;1967:18;;;;1954:32;;1536:456::o;2186:180::-;2245:6;2298:2;2286:9;2277:7;2273:23;2269:32;2266:52;;;2314:1;2311;2304:12;2266:52;-1:-1:-1;2337:23:1;;2186:180;-1:-1:-1;2186:180:1:o;2903:127::-;2964:10;2959:3;2955:20;2952:1;2945:31;2995:4;2992:1;2985:15;3019:4;3016:1;3009:15;3035:118;3121:5;3114:13;3107:21;3100:5;3097:32;3087:60;;3143:1;3140;3133:12;3158:128;3223:20;;3252:28;3223:20;3252:28;:::i;3291:1191::-;3381:6;3389;3442:2;3430:9;3421:7;3417:23;3413:32;3410:52;;;3458:1;3455;3448:12;3410:52;3498:9;3485:23;3527:18;3568:2;3560:6;3557:14;3554:34;;;3584:1;3581;3574:12;3554:34;3622:6;3611:9;3607:22;3597:32;;3667:7;3660:4;3656:2;3652:13;3648:27;3638:55;;3689:1;3686;3679:12;3638:55;3725:2;3712:16;3747:4;3770:2;3766;3763:10;3760:36;;;3776:18;;:::i;:::-;3822:2;3819:1;3815:10;3854:2;3848:9;3917:2;3913:7;3908:2;3904;3900:11;3896:25;3888:6;3884:38;3972:6;3960:10;3957:22;3952:2;3940:10;3937:18;3934:46;3931:72;;;3983:18;;:::i;:::-;4019:2;4012:22;4069:18;;;4103:15;;;;-1:-1:-1;4145:11:1;;;4141:20;;;4173:19;;;4170:39;;;4205:1;4202;4195:12;4170:39;4229:11;;;;4249:148;4265:6;4260:3;4257:15;4249:148;;;4331:23;4350:3;4331:23;:::i;:::-;4319:36;;4282:12;;;;4375;;;;4249:148;;;4416:6;-1:-1:-1;4441:35:1;;-1:-1:-1;4457:18:1;;;4441:35;:::i;:::-;4431:45;;;;;;3291:1191;;;;;:::o;4487:247::-;4546:6;4599:2;4587:9;4578:7;4574:23;4570:32;4567:52;;;4615:1;4612;4605:12;4567:52;4654:9;4641:23;4673:31;4698:5;4673:31;:::i;:::-;4723:5;4487:247;-1:-1:-1;;;4487:247:1:o;4962:248::-;5030:6;5038;5091:2;5079:9;5070:7;5066:23;5062:32;5059:52;;;5107:1;5104;5097:12;5059:52;-1:-1:-1;;5130:23:1;;;5200:2;5185:18;;;5172:32;;-1:-1:-1;4962:248:1:o;5215:388::-;5283:6;5291;5344:2;5332:9;5323:7;5319:23;5315:32;5312:52;;;5360:1;5357;5350:12;5312:52;5399:9;5386:23;5418:31;5443:5;5418:31;:::i;:::-;5468:5;-1:-1:-1;5525:2:1;5510:18;;5497:32;5538:33;5497:32;5538:33;:::i;:::-;5590:7;5580:17;;;5215:388;;;;;:::o;5608:380::-;5687:1;5683:12;;;;5730;;;5751:61;;5805:4;5797:6;5793:17;5783:27;;5751:61;5858:2;5850:6;5847:14;5827:18;5824:38;5821:161;;5904:10;5899:3;5895:20;5892:1;5885:31;5939:4;5936:1;5929:15;5967:4;5964:1;5957:15;5821:161;;5608:380;;;:::o;5993:356::-;6195:2;6177:21;;;6214:18;;;6207:30;6273:34;6268:2;6253:18;;6246:62;6340:2;6325:18;;5993:356::o;7116:127::-;7177:10;7172:3;7168:20;7165:1;7158:31;7208:4;7205:1;7198:15;7232:4;7229:1;7222:15;7248:128;7315:9;;;7336:11;;;7333:37;;;7350:18;;:::i;7381:125::-;7446:9;;;7467:10;;;7464:36;;;7480:18;;:::i;7511:217::-;7551:1;7577;7567:132;;7621:10;7616:3;7612:20;7609:1;7602:31;7656:4;7653:1;7646:15;7684:4;7681:1;7674:15;7567:132;-1:-1:-1;7713:9:1;;7511:217::o;8083:422::-;8172:1;8215:5;8172:1;8229:270;8250:7;8240:8;8237:21;8229:270;;;8309:4;8305:1;8301:6;8297:17;8291:4;8288:27;8285:53;;;8318:18;;:::i;:::-;8368:7;8358:8;8354:22;8351:55;;;8388:16;;;;8351:55;8467:22;;;;8427:15;;;;8229:270;;;8233:3;8083:422;;;;;:::o;8510:806::-;8559:5;8589:8;8579:80;;-1:-1:-1;8630:1:1;8644:5;;8579:80;8678:4;8668:76;;-1:-1:-1;8715:1:1;8729:5;;8668:76;8760:4;8778:1;8773:59;;;;8846:1;8841:130;;;;8753:218;;8773:59;8803:1;8794:10;;8817:5;;;8841:130;8878:3;8868:8;8865:17;8862:43;;;8885:18;;:::i;:::-;-1:-1:-1;;8941:1:1;8927:16;;8956:5;;8753:218;;9055:2;9045:8;9042:16;9036:3;9030:4;9027:13;9023:36;9017:2;9007:8;9004:16;8999:2;8993:4;8990:12;8986:35;8983:77;8980:159;;;-1:-1:-1;9092:19:1;;;9124:5;;8980:159;9171:34;9196:8;9190:4;9171:34;:::i;:::-;9241:6;9237:1;9233:6;9229:19;9220:7;9217:32;9214:58;;;9252:18;;:::i;:::-;9290:20;;8510:806;-1:-1:-1;;;8510:806:1:o;9321:140::-;9379:5;9408:47;9449:4;9439:8;9435:19;9429:4;9408:47;:::i;9466:168::-;9539:9;;;9570;;9587:15;;;9581:22;;9567:37;9557:71;;9608:18;;:::i;9639:127::-;9700:10;9695:3;9691:20;9688:1;9681:31;9731:4;9728:1;9721:15;9755:4;9752:1;9745:15;9771:135;9810:3;9831:17;;;9828:43;;9851:18;;:::i;:::-;-1:-1:-1;9898:1:1;9887:13;;9771:135::o;10190:245::-;10257:6;10310:2;10298:9;10289:7;10285:23;10281:32;10278:52;;;10326:1;10323;10316:12;10278:52;10358:9;10352:16;10377:28;10399:5;10377:28;:::i;16625:251::-;16695:6;16748:2;16736:9;16727:7;16723:23;16719:32;16716:52;;;16764:1;16761;16754:12;16716:52;16796:9;16790:16;16815:31;16840:5;16815:31;:::i;16881:980::-;17143:4;17191:3;17180:9;17176:19;17222:6;17211:9;17204:25;17248:2;17286:6;17281:2;17270:9;17266:18;17259:34;17329:3;17324:2;17313:9;17309:18;17302:31;17353:6;17388;17382:13;17419:6;17411;17404:22;17457:3;17446:9;17442:19;17435:26;;17496:2;17488:6;17484:15;17470:29;;17517:1;17527:195;17541:6;17538:1;17535:13;17527:195;;;17606:13;;-1:-1:-1;;;;;17602:39:1;17590:52;;17697:15;;;;17662:12;;;;17638:1;17556:9;17527:195;;;-1:-1:-1;;;;;;;17778:32:1;;;;17773:2;17758:18;;17751:60;-1:-1:-1;;;17842:3:1;17827:19;17820:35;17739:3;16881:980;-1:-1:-1;;;16881:980:1:o;18478:306::-;18566:6;18574;18582;18635:2;18623:9;18614:7;18610:23;18606:32;18603:52;;;18651:1;18648;18641:12;18603:52;18680:9;18674:16;18664:26;;18730:2;18719:9;18715:18;18709:25;18699:35;;18774:2;18763:9;18759:18;18753:25;18743:35;;18478:306;;;;;:::o

Swarm Source

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