ETH Price: $2,229.42 (-2.00%)
 

Overview

Max Total Supply

100,000,000 UA1

Holders

309

Transfers

-
0

Market

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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:
Token

Compiler Version
v0.8.28+commit.7893614a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license
// SPDX-License-Identifier: MIT
/*

UA1 - Building the infrastructure for an autonomous, self-funded civilization.

Telegram: https://t.me/UA1Portal
X: https://x.com/ua1dotai         
Website: https://www.ua1.ai
Documentation: https://docs.ua1.ai

*/

pragma solidity ^0.8.28;
import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
import {IUniswapV2Router02} from "@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol";
import {IUniswapV2Factory} from "@uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol";

contract Token is ERC20, Ownable {
    uint256 public immutable MAX_SUPPLY;
    address public immutable pair;
    address public treasury;

    IUniswapV2Router02 private constant _router =
        IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

    address private immutable _weth;
    address private immutable _deployer;

    uint256 public startBlock;
    uint256 public startBlockTime;
    uint256 private raiseAmount;

    mapping(address account => bool) public isExcludedFromFees;
    mapping(address account => bool) public isExcludedFromMaxWallet;
    mapping(address origin => mapping(uint256 blockNumber => uint256 txCount))
        public maxBuyTxsPerBlockPerOrigin;
    uint256 private _maxBuyTxsPerBlockPerOrigin = 10;
    mapping(uint256 blockNumber => uint256 txCount) public maxBuyTxsPerBlock;
    uint256 private _maxBuyTxsPerBlock = 100;

    constructor(
        string memory name,
        string memory symbol,
        uint256 maxSupply,
        address _treasury
    ) ERC20(name, symbol) Ownable(msg.sender) {
        MAX_SUPPLY = maxSupply;
        _weth = _router.WETH();

        pair = IUniswapV2Factory(_router.factory()).createPair(
            address(this),
            _weth
        );

        isExcludedFromFees[msg.sender] = true;
        isExcludedFromFees[address(this)] = true;
        isExcludedFromFees[pair] = true;
        isExcludedFromFees[treasury] = true;
        isExcludedFromMaxWallet[msg.sender] = true;
        isExcludedFromMaxWallet[address(this)] = true;
        isExcludedFromMaxWallet[pair] = true;
        isExcludedFromMaxWallet[treasury] = true;

        _mint(msg.sender, maxSupply);
        _approve(msg.sender, address(_router), type(uint256).max);

        treasury = _treasury;
        _deployer = msg.sender;
        _approve(address(this), address(_router), type(uint256).max);
    }

    function setTreasury(address newTreasury) external {
        require(newTreasury != address(0), "treasury-is-0");
        require(
            msg.sender == _deployer || msg.sender == owner(),
            "only-deployer"
        );
        treasury = newTreasury;
    }

    function enableTrading() external onlyOwner {
        require(startBlock == 0, "trading-already-enabled");
        startBlock = block.number;
        startBlockTime = block.timestamp;
    }

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

    function setExcludedFromMaxWallet(
        address account,
        bool excluded
    ) external onlyOwner {
        isExcludedFromMaxWallet[account] = excluded;
    }

    function feesAndMaxWallet()
        external
        view
        returns (uint256 _feeBps, uint256 _maxWallet)
    {
        return _feesAndMaxWallet();
    }

    function _feesAndMaxWallet()
        internal
        view
        returns (uint256 _feeBps, uint256 _maxWallet)
    {
        if (startBlockTime == 0) {
            return (0, 0);
        }
        uint256 _diffSeconds = block.timestamp - startBlockTime;

        if (_diffSeconds < 3600) {
            // 1 min
            if (_diffSeconds < 60) {
                _feeBps = 4000; // 40%
                _maxWallet = MAX_SUPPLY / 1000; // 0.1%
                return (_feeBps, _maxWallet);
            }
            // 2-5 min
            if (_diffSeconds < 300) {
                _feeBps = 4000; // 40%
                _maxWallet = MAX_SUPPLY / 333; // 0.3%
                return (_feeBps, _maxWallet);
            }
            // 6-8 min
            if (_diffSeconds < 480) {
                _feeBps = 3000; // 30%
                _maxWallet = MAX_SUPPLY / 200; // 0.5%
                return (_feeBps, _maxWallet);
            }

            if (_diffSeconds < 900) {
                // 9-15 min
                _feeBps = 2000; // 20%
                _maxWallet = MAX_SUPPLY / 100; // 1%
                return (_feeBps, _maxWallet);
            }

            _feeBps = 500; // 5%
            _maxWallet = MAX_SUPPLY / 100; // 1%
            return (_feeBps, _maxWallet);
        }

        if (raiseAmount < 500 ether) {
            _feeBps = 500; // 5%;
        } else if (raiseAmount < 700 ether) {
            _feeBps = 400; // 4%;
        } else if (raiseAmount < 900 ether) {
            _feeBps = 300; // 3%;
        } else {
            _feeBps = 0; // 0%;
        }
        _maxWallet = MAX_SUPPLY; // no limit
        return (_feeBps, _maxWallet);
    }

    function _update(
        address from,
        address to,
        uint256 value
    ) internal override {
        (uint256 _feeBps, uint256 _maxWallet) = _feesAndMaxWallet();

        bool isBuy = from == pair;
        if (isBuy || to == pair) {
            require(
                startBlock > 0 || isExcludedFromFees[to],
                "trading-not-enabled"
            );

            if (_feeBps != 0) {
                if (isBuy && !isExcludedFromFees[to]) {
                    if (
                        startBlockTime > 0 &&
                        block.timestamp - startBlockTime < 180
                    ) {
                        require(
                            maxBuyTxsPerBlockPerOrigin[tx.origin][
                                block.number
                            ] < _maxBuyTxsPerBlockPerOrigin,
                            "max-buy-txs-per-block-per-origin-exceeded"
                        );
                        maxBuyTxsPerBlockPerOrigin[tx.origin][block.number]++;

                        require(
                            maxBuyTxsPerBlock[block.number] <
                                _maxBuyTxsPerBlock,
                            "max-buy-txs-per-block-exceeded"
                        );
                        maxBuyTxsPerBlock[block.number]++;
                    }

                    uint256 fee = (value * _feeBps) / 10000;
                    value -= fee;
                    super._update(from, address(this), fee);
                }

                if (!isBuy && !isExcludedFromFees[from]) {
                    uint256 fee = (value * _feeBps) / 10000;
                    value -= fee;
                    super._update(from, address(this), fee);
                    _swapTokensForEth();
                }
            } else {
                // sell any remaining tokens after cap is reached
                if (!isBuy && !isExcludedFromFees[from]) {
                    _swapTokensForEth();
                }
            }
        }

        require(
            isExcludedFromMaxWallet[to] || value + balanceOf(to) <= _maxWallet,
            "max-wallet-size-exceeded"
        );
        super._update(from, to, value);
    }

    function _swapTokensForEth() internal {
        uint256 startDiff = block.timestamp - startBlockTime;
        if (startDiff < 300) {
            return;
        }

        uint256 _tokenAmount = balanceOf(address(this));

        if (_tokenAmount == 0) {
            return;
        }

        address[] memory _path = new address[](2);
        _path[0] = _weth;
        _path[1] = address(this);

        // sell max 1 eth worth of tokens
        uint256 _maxTokenAmount = _router.getAmountsOut(1 ether, _path)[1];

        if (_tokenAmount > _maxTokenAmount) {
            _tokenAmount = _maxTokenAmount;
        }

        _path[0] = address(this);
        _path[1] = _weth;

        uint256 _treasuryBalanceBefore = address(treasury).balance;
        _router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            _tokenAmount,
            0,
            _path,
            treasury,
            block.timestamp
        );
        uint256 _treasuryBalanceAfter = address(treasury).balance;
        raiseAmount += _treasuryBalanceAfter - _treasuryBalanceBefore;
    }
}

pragma solidity >=0.5.0;

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

pragma solidity >=0.6.2;

import './IUniswapV2Router01.sol';

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

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

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)

pragma solidity ^0.8.20;

import {Context} from "../utils/Context.sol";

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

    /**
     * @dev The caller account is not authorized to perform an operation.
     */
    error OwnableUnauthorizedAccount(address account);

    /**
     * @dev The owner is not a valid owner account. (eg. `address(0)`)
     */
    error OwnableInvalidOwner(address owner);

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

    /**
     * @dev Initializes the contract setting the address provided by the deployer as the initial owner.
     */
    constructor(address initialOwner) {
        if (initialOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(initialOwner);
    }

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

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        if (owner() != _msgSender()) {
            revert OwnableUnauthorizedAccount(_msgSender());
        }
    }

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        if (newOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(newOwner);
    }

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

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.3.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.20;

import {IERC20} from "./IERC20.sol";
import {IERC20Metadata} from "./extensions/IERC20Metadata.sol";
import {Context} from "../../utils/Context.sol";
import {IERC20Errors} from "../../interfaces/draft-IERC6093.sol";

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC-20
 * applications.
 */
abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {
    mapping(address account => uint256) private _balances;

    mapping(address account => mapping(address spender => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * Both 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 returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual 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 default value returned by this function, unless
     * it's 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 returns (uint8) {
        return 18;
    }

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

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

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

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

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `value` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 value) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, value);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Skips emitting an {Approval} event indicating an allowance update. This is not
     * required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve].
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `value`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `value`.
     */
    function transferFrom(address from, address to, uint256 value) public virtual returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, value);
        _transfer(from, to, value);
        return true;
    }

    /**
     * @dev Moves a `value` amount of tokens from `from` to `to`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function _transfer(address from, address to, uint256 value) internal {
        if (from == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        if (to == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(from, to, value);
    }

    /**
     * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`
     * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding
     * this function.
     *
     * Emits a {Transfer} event.
     */
    function _update(address from, address to, uint256 value) internal virtual {
        if (from == address(0)) {
            // Overflow check required: The rest of the code assumes that totalSupply never overflows
            _totalSupply += value;
        } else {
            uint256 fromBalance = _balances[from];
            if (fromBalance < value) {
                revert ERC20InsufficientBalance(from, fromBalance, value);
            }
            unchecked {
                // Overflow not possible: value <= fromBalance <= totalSupply.
                _balances[from] = fromBalance - value;
            }
        }

        if (to == address(0)) {
            unchecked {
                // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.
                _totalSupply -= value;
            }
        } else {
            unchecked {
                // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.
                _balances[to] += value;
            }
        }

        emit Transfer(from, to, value);
    }

    /**
     * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).
     * Relies on the `_update` mechanism
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function _mint(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(address(0), account, value);
    }

    /**
     * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.
     * Relies on the `_update` mechanism.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead
     */
    function _burn(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        _update(account, address(0), value);
    }

    /**
     * @dev Sets `value` 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.
     *
     * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.
     */
    function _approve(address owner, address spender, uint256 value) internal {
        _approve(owner, spender, value, true);
    }

    /**
     * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.
     *
     * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by
     * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any
     * `Approval` event during `transferFrom` operations.
     *
     * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to
     * true using the following override:
     *
     * ```solidity
     * function _approve(address owner, address spender, uint256 value, bool) internal virtual override {
     *     super._approve(owner, spender, value, true);
     * }
     * ```
     *
     * Requirements are the same as {_approve}.
     */
    function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {
        if (owner == address(0)) {
            revert ERC20InvalidApprover(address(0));
        }
        if (spender == address(0)) {
            revert ERC20InvalidSpender(address(0));
        }
        _allowances[owner][spender] = value;
        if (emitEvent) {
            emit Approval(owner, spender, value);
        }
    }

    /**
     * @dev Updates `owner`'s allowance for `spender` based on spent `value`.
     *
     * Does not update the allowance value in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Does not emit an {Approval} event.
     */
    function _spendAllowance(address owner, address spender, uint256 value) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance < type(uint256).max) {
            if (currentAllowance < value) {
                revert ERC20InsufficientAllowance(spender, currentAllowance, value);
            }
            unchecked {
                _approve(owner, spender, currentAllowance - value, false);
            }
        }
    }
}

pragma solidity >=0.6.2;

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/draft-IERC6093.sol)
pragma solidity ^0.8.20;

/**
 * @dev Standard ERC-20 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.
 */
interface IERC20Errors {
    /**
     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param balance Current balance for the interacting account.
     * @param needed Minimum amount required to perform a transfer.
     */
    error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC20InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC20InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.
     * @param spender Address that may be allowed to operate on tokens without being their owner.
     * @param allowance Amount of tokens a `spender` is allowed to operate with.
     * @param needed Minimum amount required to perform a transfer.
     */
    error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC20InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `spender` to be approved. Used in approvals.
     * @param spender Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC20InvalidSpender(address spender);
}

/**
 * @dev Standard ERC-721 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens.
 */
interface IERC721Errors {
    /**
     * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20.
     * Used in balance queries.
     * @param owner Address of the current owner of a token.
     */
    error ERC721InvalidOwner(address owner);

    /**
     * @dev Indicates a `tokenId` whose `owner` is the zero address.
     * @param tokenId Identifier number of a token.
     */
    error ERC721NonexistentToken(uint256 tokenId);

    /**
     * @dev Indicates an error related to the ownership over a particular token. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param tokenId Identifier number of a token.
     * @param owner Address of the current owner of a token.
     */
    error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC721InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC721InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     * @param tokenId Identifier number of a token.
     */
    error ERC721InsufficientApproval(address operator, uint256 tokenId);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC721InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC721InvalidOperator(address operator);
}

/**
 * @dev Standard ERC-1155 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens.
 */
interface IERC1155Errors {
    /**
     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param balance Current balance for the interacting account.
     * @param needed Minimum amount required to perform a transfer.
     * @param tokenId Identifier number of a token.
     */
    error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC1155InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC1155InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     * @param owner Address of the current owner of a token.
     */
    error ERC1155MissingApprovalForAll(address operator, address owner);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC1155InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC1155InvalidOperator(address operator);

    /**
     * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.
     * Used in batch transfers.
     * @param idsLength Length of the array of token identifiers
     * @param valuesLength Length of the array of token amounts
     */
    error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)

pragma solidity ^0.8.20;

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

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

    function _contextSuffixLength() internal view virtual returns (uint256) {
        return 0;
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.20;

import {IERC20} from "../IERC20.sol";

/**
 * @dev Interface for the optional metadata functions from the ERC-20 standard.
 */
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);
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.20;

/**
 * @dev Interface of the ERC-20 standard as defined in the ERC.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /**
     * @dev Returns the value of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the value of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves a `value` amount of tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 value) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets a `value` amount of tokens as the allowance of `spender` over the
     * caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 value) external returns (bool);

    /**
     * @dev Moves a `value` amount of tokens from `from` to `to` using the
     * allowance mechanism. `value` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address from, address to, uint256 value) external returns (bool);
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  },
  "remappings": []
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"maxSupply","type":"uint256"},{"internalType":"address","name":"_treasury","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feesAndMaxWallet","outputs":[{"internalType":"uint256","name":"_feeBps","type":"uint256"},{"internalType":"uint256","name":"_maxWallet","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"maxBuyTxsPerBlock","outputs":[{"internalType":"uint256","name":"txCount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"origin","type":"address"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"maxBuyTxsPerBlockPerOrigin","outputs":[{"internalType":"uint256","name":"txCount","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":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludedFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newTreasury","type":"address"}],"name":"setTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startBlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","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":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

610100604052600a600d556064600f5534801561001a575f5ffd5b5060405161289138038061289183398101604081905261003991610d83565b33848460036100488382610e86565b5060046100558282610e86565b5050506001600160a01b03811661008657604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b61008f816102f4565b5081608081815250505f5160206128715f395f51905f526001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100e1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101059190610f40565b6001600160a01b031660c0526040805163c45a015560e01b815290515f5160206128715f395f51905f529163c45a01559160048083019260209291908290030181865afa158015610158573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061017c9190610f40565b60c0516040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303815f875af11580156101ca573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101ee9190610f40565b6001600160a01b0390811660a0819052335f818152600a602090815260408083208054600160ff1991821681179092553080865283862080548316841790558786528386208054831684179055600680548a1687528487208054841685179055878752600b9095528386208054831684179055855282852080548216831790559584528184208054871682179055915490951682529390208054909216909217905561029a9083610345565b6102b3335f5160206128715f395f51905f525f1961037d565b600680546001600160a01b0319166001600160a01b0383161790553360e0526102eb305f5160206128715f395f51905f525f1961037d565b5050505061114a565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b03821661036e5760405163ec442f0560e01b81525f600482015260240161007d565b6103795f838361038f565b5050565b61038a838383600161073b565b505050565b5f8061039961080e565b60a05191935091506001600160a01b0386811691161480806103ce575060a0516001600160a01b0316856001600160a01b0316145b1561068f575f60075411806103fa57506001600160a01b0385165f908152600a602052604090205460ff165b6104465760405162461bcd60e51b815260206004820152601360248201527f74726164696e672d6e6f742d656e61626c656400000000000000000000000000604482015260640161007d565b821561065c5780801561047157506001600160a01b0385165f908152600a602052604090205460ff16155b156105f1575f600854118015610494575060b4600854426104929190610f74565b105b156105be57600d54325f908152600c60209081526040808320438452909152902054106105155760405162461bcd60e51b815260206004820152602960248201527f6d61782d6275792d7478732d7065722d626c6f636b2d7065722d6f726967696e6044820152680b595e18d95959195960ba1b606482015260840161007d565b325f908152600c60209081526040808320438452909152812080549161053a83610f8d565b9091555050600f54435f908152600e60205260409020541061059e5760405162461bcd60e51b815260206004820152601e60248201527f6d61782d6275792d7478732d7065722d626c6f636b2d65786365656465640000604482015260640161007d565b435f908152600e602052604081208054916105b883610f8d565b91905055505b5f6127106105cc8587610fa5565b6105d69190610fbc565b90506105e28186610f74565b94506105ef873083610934565b505b8015801561061757506001600160a01b0386165f908152600a602052604090205460ff16155b15610657575f61271061062a8587610fa5565b6106349190610fbc565b90506106408186610f74565b945061064d873083610934565b610655610a5a565b505b61068f565b8015801561068257506001600160a01b0386165f908152600a602052604090205460ff16155b1561068f5761068f610a5a565b6001600160a01b0385165f908152600b602052604090205460ff16806106dc5750816106cf866001600160a01b03165f9081526020819052604090205490565b6106d99086610fdb565b11155b6107285760405162461bcd60e51b815260206004820152601860248201527f6d61782d77616c6c65742d73697a652d65786365656465640000000000000000604482015260640161007d565b610733868686610934565b505050505050565b6001600160a01b0384166107645760405163e602df0560e01b81525f600482015260240161007d565b6001600160a01b03831661078d57604051634a1406b160e11b81525f600482015260240161007d565b6001600160a01b038085165f908152600160209081526040808320938716835292905220829055801561080857826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516107ff91815260200190565b60405180910390a35b50505050565b5f5f6008545f0361082157505f91829150565b5f600854426108309190610f74565b9050610e108110156108d057603c81101561086157610fa092506103e860805161085a9190610fbc565b9150509091565b61012c81101561088057610fa0925061014d60805161085a9190610fbc565b6101e081101561089e57610bb8925060c860805161085a9190610fbc565b6103848110156108bc576107d09250606460805161085a9190610fbc565b6101f49250606460805161085a9190610fbc565b681b1ae4d6e2ef50000060095410156108ed576101f4925061092b565b6825f273933db5700000600954101561090a57610190925061092b565b6830ca024f987b90000060095410156109275761012c925061092b565b5f92505b50506080519091565b6001600160a01b03831661095e578060025f8282546109539190610fdb565b909155506109ce9050565b6001600160a01b0383165f90815260208190526040902054818110156109b05760405163391434e360e21b81526001600160a01b0385166004820152602481018290526044810183905260640161007d565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b0382166109ea57600280548290039055610a08565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610a4d91815260200190565b60405180910390a3505050565b5f60085442610a699190610f74565b905061012c811015610a785750565b305f9081526020819052604081205490819003610a93575050565b6040805160028082526060820183525f9260208301908036833701905050905060c051815f81518110610ac857610ac8610fee565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110610afc57610afc610fee565b6001600160a01b039092166020928302919091019091015260405163d06ca61f60e01b81525f905f5160206128715f395f51905f529063d06ca61f90610b5090670de0b6b3a7640000908690600401611045565b5f60405180830381865afa158015610b6a573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610b919190810190611065565b600181518110610ba357610ba3610fee565b6020026020010151905080831115610bb9578092505b30825f81518110610bcc57610bcc610fee565b60200260200101906001600160a01b031690816001600160a01b03168152505060c05182600181518110610c0257610c02610fee565b6001600160a01b03928316602091820292909201015260065460405163791ac94760e01b815291168031915f5160206128715f395f51905f529163791ac94791610c569188915f918991429060040161110f565b5f604051808303815f87803b158015610c6d575f5ffd5b505af1158015610c7f573d5f5f3e3d5ffd5b50506006546001600160a01b0316319150610c9c90508282610f74565b60095f828254610cac9190610fdb565b9091555050505050505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715610cf557610cf5610cb9565b604052919050565b5f82601f830112610d0c575f5ffd5b81516001600160401b03811115610d2557610d25610cb9565b610d38601f8201601f1916602001610ccd565b818152846020838601011115610d4c575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b80516001600160a01b0381168114610d7e575f5ffd5b919050565b5f5f5f5f60808587031215610d96575f5ffd5b84516001600160401b03811115610dab575f5ffd5b610db787828801610cfd565b602087015190955090506001600160401b03811115610dd4575f5ffd5b610de087828801610cfd565b60408701519094509250610df8905060608601610d68565b905092959194509250565b600181811c90821680610e1757607f821691505b602082108103610e3557634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561038a57805f5260205f20601f840160051c81016020851015610e605750805b601f840160051c820191505b81811015610e7f575f8155600101610e6c565b5050505050565b81516001600160401b03811115610e9f57610e9f610cb9565b610eb381610ead8454610e03565b84610e3b565b6020601f821160018114610ee5575f8315610ece5750848201515b5f19600385901b1c1916600184901b178455610e7f565b5f84815260208120601f198516915b82811015610f145787850151825560209485019460019092019101610ef4565b5084821015610f3157868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f60208284031215610f50575f5ffd5b610f5982610d68565b9392505050565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610f8757610f87610f60565b92915050565b5f60018201610f9e57610f9e610f60565b5060010190565b8082028115828204841417610f8757610f87610f60565b5f82610fd657634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115610f8757610f87610f60565b634e487b7160e01b5f52603260045260245ffd5b5f8151808452602084019350602083015f5b8281101561103b5781516001600160a01b0316865260209586019590910190600101611014565b5093949350505050565b828152604060208201525f61105d6040830184611002565b949350505050565b5f60208284031215611075575f5ffd5b81516001600160401b0381111561108a575f5ffd5b8201601f8101841361109a575f5ffd5b80516001600160401b038111156110b3576110b3610cb9565b8060051b6110c360208201610ccd565b918252602081840181019290810190878411156110de575f5ffd5b6020850194505b83851015611104578451808352602095860195909350909101906110e5565b979650505050505050565b85815284602082015260a060408201525f61112d60a0830186611002565b6001600160a01b0394909416606083015250608001529392505050565b60805160a05160c05160e0516116b56111bc5f395f61064c01525f818161109001526111ee01525f818161039001528181610b3a0152610b7801525f818161025b015281816108ca0152818161090c0152818161094601528181610980015281816109b00152610a3101526116b55ff3fe608060405234801561000f575f5ffd5b5060043610610187575f3560e01c806361d027b3116100d957806395d89b4111610093578063a9059cbb1161006e578063a9059cbb146103b2578063dd62ed3e146103c5578063f0f44260146103fd578063f2fde38b14610410575f5ffd5b806395d89b4114610366578063a25ba1831461036e578063a8aa1b311461038b575f5ffd5b806361d027b3146102d05780636dd3d39f146102fb57806370a082311461031d578063715018a6146103455780638a8c523c1461034d5780638da5cb5b14610355575f5ffd5b806323b872dd11610144578063412201041161011f578063412201041461027d57806348cd4cb1146102925780634fbee1931461029b578063590ffdce146102bd575f5ffd5b806323b872dd14610234578063313ce5671461024757806332cb6b0c14610256575f5ffd5b806306fdde031461018b578063095ea7b3146101a95780630c18d4ce146101cc5780630fe3fe7d146101e357806318160ddd1461020d57806321b0248614610215575b5f5ffd5b610193610423565b6040516101a091906112de565b60405180910390f35b6101bc6101b736600461132e565b6104b3565b60405190151581526020016101a0565b6101d560085481565b6040519081526020016101a0565b6101d56101f136600461132e565b600c60209081525f928352604080842090915290825290205481565b6002546101d5565b6101d5610223366004611356565b600e6020525f908152604090205481565b6101bc61024236600461136d565b6104cc565b604051601281526020016101a0565b6101d57f000000000000000000000000000000000000000000000000000000000000000081565b61029061028b3660046113a7565b6104ef565b005b6101d560075481565b6101bc6102a93660046113e0565b600a6020525f908152604090205460ff1681565b6102906102cb3660046113a7565b610521565b6006546102e3906001600160a01b031681565b6040516001600160a01b0390911681526020016101a0565b6101bc6103093660046113e0565b600b6020525f908152604090205460ff1681565b6101d561032b3660046113e0565b6001600160a01b03165f9081526020819052604090205490565b610290610553565b610290610566565b6005546001600160a01b03166102e3565b6101936105cd565b6103766105dc565b604080519283526020830191909152016101a0565b6102e37f000000000000000000000000000000000000000000000000000000000000000081565b6101bc6103c036600461132e565b6105ee565b6101d56103d3366004611400565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b61029061040b3660046113e0565b6105fb565b61029061041e3660046113e0565b6106e0565b60606003805461043290611431565b80601f016020809104026020016040519081016040528092919081815260200182805461045e90611431565b80156104a95780601f10610480576101008083540402835291602001916104a9565b820191905f5260205f20905b81548152906001019060200180831161048c57829003601f168201915b5050505050905090565b5f336104c081858561071d565b60019150505b92915050565b5f336104d985828561072f565b6104e48585856107ab565b506001949350505050565b6104f7610808565b6001600160a01b03919091165f908152600b60205260409020805460ff1916911515919091179055565b610529610808565b6001600160a01b03919091165f908152600a60205260409020805460ff1916911515919091179055565b61055b610808565b6105645f610835565b565b61056e610808565b600754156105c35760405162461bcd60e51b815260206004820152601760248201527f74726164696e672d616c72656164792d656e61626c656400000000000000000060448201526064015b60405180910390fd5b4360075542600855565b60606004805461043290611431565b5f5f6105e6610886565b915091509091565b5f336104c08185856107ab565b6001600160a01b0381166106415760405162461bcd60e51b815260206004820152600d60248201526c074726561737572792d69732d3609c1b60448201526064016105ba565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061068257506005546001600160a01b031633145b6106be5760405162461bcd60e51b815260206004820152600d60248201526c37b7363c96b232b83637bcb2b960991b60448201526064016105ba565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6106e8610808565b6001600160a01b03811661071157604051631e4fbdf760e01b81525f60048201526024016105ba565b61071a81610835565b50565b61072a8383836001610a57565b505050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f198110156107a5578181101561079757604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016105ba565b6107a584848484035f610a57565b50505050565b6001600160a01b0383166107d457604051634b637e8f60e11b81525f60048201526024016105ba565b6001600160a01b0382166107fd5760405163ec442f0560e01b81525f60048201526024016105ba565b61072a838383610b29565b6005546001600160a01b031633146105645760405163118cdaa760e01b81523360048201526024016105ba565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f5f6008545f0361089957505f91829150565b5f600854426108a8919061147d565b9050610e108110156109d457603c8110156108f557610fa092506108ee6103e87f0000000000000000000000000000000000000000000000000000000000000000611490565b9150509091565b61012c81101561093057610fa092506108ee61014d7f0000000000000000000000000000000000000000000000000000000000000000611490565b6101e081101561096a57610bb892506108ee60c87f0000000000000000000000000000000000000000000000000000000000000000611490565b6103848110156109a4576107d092506108ee60647f0000000000000000000000000000000000000000000000000000000000000000611490565b6101f492506108ee60647f0000000000000000000000000000000000000000000000000000000000000000611490565b681b1ae4d6e2ef50000060095410156109f1576101f49250610a2f565b6825f273933db57000006009541015610a0e576101909250610a2f565b6830ca024f987b9000006009541015610a2b5761012c9250610a2f565b5f92505b7f00000000000000000000000000000000000000000000000000000000000000009150509091565b6001600160a01b038416610a805760405163e602df0560e01b81525f60048201526024016105ba565b6001600160a01b038316610aa957604051634a1406b160e11b81525f60048201526024016105ba565b6001600160a01b038085165f90815260016020908152604080832093871683529290522082905580156107a557826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610b1b91815260200190565b60405180910390a350505050565b5f5f610b33610886565b915091505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b03161490508080610bac57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b0316145b15610e63575f6007541180610bd857506001600160a01b0385165f908152600a602052604090205460ff165b610c1a5760405162461bcd60e51b81526020600482015260136024820152721d1c98591a5b99cb5b9bdd0b595b98589b1959606a1b60448201526064016105ba565b8215610e3057808015610c4557506001600160a01b0385165f908152600a602052604090205460ff16155b15610dc5575f600854118015610c68575060b460085442610c66919061147d565b105b15610d9257600d54325f908152600c6020908152604080832043845290915290205410610ce95760405162461bcd60e51b815260206004820152602960248201527f6d61782d6275792d7478732d7065722d626c6f636b2d7065722d6f726967696e6044820152680b595e18d95959195960ba1b60648201526084016105ba565b325f908152600c602090815260408083204384529091528120805491610d0e836114af565b9091555050600f54435f908152600e602052604090205410610d725760405162461bcd60e51b815260206004820152601e60248201527f6d61782d6275792d7478732d7065722d626c6f636b2d6578636565646564000060448201526064016105ba565b435f908152600e60205260408120805491610d8c836114af565b91905055505b5f612710610da085876114c7565b610daa9190611490565b9050610db6818661147d565b9450610dc3873083610f0f565b505b80158015610deb57506001600160a01b0386165f908152600a602052604090205460ff16155b15610e2b575f612710610dfe85876114c7565b610e089190611490565b9050610e14818661147d565b9450610e21873083610f0f565b610e29611035565b505b610e63565b80158015610e5657506001600160a01b0386165f908152600a602052604090205460ff16155b15610e6357610e63611035565b6001600160a01b0385165f908152600b602052604090205460ff1680610eb0575081610ea3866001600160a01b03165f9081526020819052604090205490565b610ead90866114de565b11155b610efc5760405162461bcd60e51b815260206004820152601860248201527f6d61782d77616c6c65742d73697a652d6578636565646564000000000000000060448201526064016105ba565b610f07868686610f0f565b505050505050565b6001600160a01b038316610f39578060025f828254610f2e91906114de565b90915550610fa99050565b6001600160a01b0383165f9081526020819052604090205481811015610f8b5760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016105ba565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b038216610fc557600280548290039055610fe3565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161102891815260200190565b60405180910390a3505050565b5f60085442611044919061147d565b905061012c8110156110535750565b305f908152602081905260408120549081900361106e575050565b6040805160028082526060820183525f926020830190803683370190505090507f0000000000000000000000000000000000000000000000000000000000000000815f815181106110c1576110c1611505565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106110f5576110f5611505565b6001600160a01b039092166020928302919091019091015260405163d06ca61f60e01b81525f90737a250d5630b4cf539739df2c5dacb4c659f2488d9063d06ca61f9061115090670de0b6b3a764000090869060040161155c565b5f60405180830381865afa15801561116a573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611191919081019061157c565b6001815181106111a3576111a3611505565b60200260200101519050808311156111b9578092505b30825f815181106111cc576111cc611505565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000008260018151811061122057611220611505565b6001600160a01b03928316602091820292909201015260065460405163791ac94760e01b81529116803191737a250d5630b4cf539739df2c5dacb4c659f2488d9163791ac9479161127b9188915f9189914290600401611644565b5f604051808303815f87803b158015611292575f5ffd5b505af11580156112a4573d5f5f3e3d5ffd5b50506006546001600160a01b03163191506112c19050828261147d565b60095f8282546112d191906114de565b9091555050505050505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b0381168114611329575f5ffd5b919050565b5f5f6040838503121561133f575f5ffd5b61134883611313565b946020939093013593505050565b5f60208284031215611366575f5ffd5b5035919050565b5f5f5f6060848603121561137f575f5ffd5b61138884611313565b925061139660208501611313565b929592945050506040919091013590565b5f5f604083850312156113b8575f5ffd5b6113c183611313565b9150602083013580151581146113d5575f5ffd5b809150509250929050565b5f602082840312156113f0575f5ffd5b6113f982611313565b9392505050565b5f5f60408385031215611411575f5ffd5b61141a83611313565b915061142860208401611313565b90509250929050565b600181811c9082168061144557607f821691505b60208210810361146357634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156104c6576104c6611469565b5f826114aa57634e487b7160e01b5f52601260045260245ffd5b500490565b5f600182016114c0576114c0611469565b5060010190565b80820281158282048414176104c6576104c6611469565b808201808211156104c6576104c6611469565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f8151808452602084019350602083015f5b828110156115525781516001600160a01b031686526020958601959091019060010161152b565b5093949350505050565b828152604060208201525f6115746040830184611519565b949350505050565b5f6020828403121561158c575f5ffd5b815167ffffffffffffffff8111156115a2575f5ffd5b8201601f810184136115b2575f5ffd5b805167ffffffffffffffff8111156115cc576115cc6114f1565b8060051b604051601f19603f830116810181811067ffffffffffffffff821117156115f9576115f96114f1565b604052918252602081840181019290810187841115611616575f5ffd5b6020850194505b838510156116395784518082526020958601959093500161161d565b509695505050505050565b85815284602082015260a060408201525f61166260a0830186611519565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220c3dc0d3b6dbb03044616e8ad4e2301ae41ba9ee0a47ce587b3439f6ead499e1264736f6c634300081c00330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000052b7d2dcc80cd2e4000000000000000000000000000000b7f1c238c0aa52078ca59e8e99d39391fa2cfbf10000000000000000000000000000000000000000000000000000000000000003554131000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035541310000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561000f575f5ffd5b5060043610610187575f3560e01c806361d027b3116100d957806395d89b4111610093578063a9059cbb1161006e578063a9059cbb146103b2578063dd62ed3e146103c5578063f0f44260146103fd578063f2fde38b14610410575f5ffd5b806395d89b4114610366578063a25ba1831461036e578063a8aa1b311461038b575f5ffd5b806361d027b3146102d05780636dd3d39f146102fb57806370a082311461031d578063715018a6146103455780638a8c523c1461034d5780638da5cb5b14610355575f5ffd5b806323b872dd11610144578063412201041161011f578063412201041461027d57806348cd4cb1146102925780634fbee1931461029b578063590ffdce146102bd575f5ffd5b806323b872dd14610234578063313ce5671461024757806332cb6b0c14610256575f5ffd5b806306fdde031461018b578063095ea7b3146101a95780630c18d4ce146101cc5780630fe3fe7d146101e357806318160ddd1461020d57806321b0248614610215575b5f5ffd5b610193610423565b6040516101a091906112de565b60405180910390f35b6101bc6101b736600461132e565b6104b3565b60405190151581526020016101a0565b6101d560085481565b6040519081526020016101a0565b6101d56101f136600461132e565b600c60209081525f928352604080842090915290825290205481565b6002546101d5565b6101d5610223366004611356565b600e6020525f908152604090205481565b6101bc61024236600461136d565b6104cc565b604051601281526020016101a0565b6101d57f00000000000000000000000000000000000000000052b7d2dcc80cd2e400000081565b61029061028b3660046113a7565b6104ef565b005b6101d560075481565b6101bc6102a93660046113e0565b600a6020525f908152604090205460ff1681565b6102906102cb3660046113a7565b610521565b6006546102e3906001600160a01b031681565b6040516001600160a01b0390911681526020016101a0565b6101bc6103093660046113e0565b600b6020525f908152604090205460ff1681565b6101d561032b3660046113e0565b6001600160a01b03165f9081526020819052604090205490565b610290610553565b610290610566565b6005546001600160a01b03166102e3565b6101936105cd565b6103766105dc565b604080519283526020830191909152016101a0565b6102e37f000000000000000000000000e62d6cf2bfd1fb75e99c00f55dc249bbc931d21081565b6101bc6103c036600461132e565b6105ee565b6101d56103d3366004611400565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b61029061040b3660046113e0565b6105fb565b61029061041e3660046113e0565b6106e0565b60606003805461043290611431565b80601f016020809104026020016040519081016040528092919081815260200182805461045e90611431565b80156104a95780601f10610480576101008083540402835291602001916104a9565b820191905f5260205f20905b81548152906001019060200180831161048c57829003601f168201915b5050505050905090565b5f336104c081858561071d565b60019150505b92915050565b5f336104d985828561072f565b6104e48585856107ab565b506001949350505050565b6104f7610808565b6001600160a01b03919091165f908152600b60205260409020805460ff1916911515919091179055565b610529610808565b6001600160a01b03919091165f908152600a60205260409020805460ff1916911515919091179055565b61055b610808565b6105645f610835565b565b61056e610808565b600754156105c35760405162461bcd60e51b815260206004820152601760248201527f74726164696e672d616c72656164792d656e61626c656400000000000000000060448201526064015b60405180910390fd5b4360075542600855565b60606004805461043290611431565b5f5f6105e6610886565b915091509091565b5f336104c08185856107ab565b6001600160a01b0381166106415760405162461bcd60e51b815260206004820152600d60248201526c074726561737572792d69732d3609c1b60448201526064016105ba565b336001600160a01b037f000000000000000000000000aa7dfb7bc532fd8cd4d162a092373f216549763f16148061068257506005546001600160a01b031633145b6106be5760405162461bcd60e51b815260206004820152600d60248201526c37b7363c96b232b83637bcb2b960991b60448201526064016105ba565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6106e8610808565b6001600160a01b03811661071157604051631e4fbdf760e01b81525f60048201526024016105ba565b61071a81610835565b50565b61072a8383836001610a57565b505050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f198110156107a5578181101561079757604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016105ba565b6107a584848484035f610a57565b50505050565b6001600160a01b0383166107d457604051634b637e8f60e11b81525f60048201526024016105ba565b6001600160a01b0382166107fd5760405163ec442f0560e01b81525f60048201526024016105ba565b61072a838383610b29565b6005546001600160a01b031633146105645760405163118cdaa760e01b81523360048201526024016105ba565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f5f6008545f0361089957505f91829150565b5f600854426108a8919061147d565b9050610e108110156109d457603c8110156108f557610fa092506108ee6103e87f00000000000000000000000000000000000000000052b7d2dcc80cd2e4000000611490565b9150509091565b61012c81101561093057610fa092506108ee61014d7f00000000000000000000000000000000000000000052b7d2dcc80cd2e4000000611490565b6101e081101561096a57610bb892506108ee60c87f00000000000000000000000000000000000000000052b7d2dcc80cd2e4000000611490565b6103848110156109a4576107d092506108ee60647f00000000000000000000000000000000000000000052b7d2dcc80cd2e4000000611490565b6101f492506108ee60647f00000000000000000000000000000000000000000052b7d2dcc80cd2e4000000611490565b681b1ae4d6e2ef50000060095410156109f1576101f49250610a2f565b6825f273933db57000006009541015610a0e576101909250610a2f565b6830ca024f987b9000006009541015610a2b5761012c9250610a2f565b5f92505b7f00000000000000000000000000000000000000000052b7d2dcc80cd2e40000009150509091565b6001600160a01b038416610a805760405163e602df0560e01b81525f60048201526024016105ba565b6001600160a01b038316610aa957604051634a1406b160e11b81525f60048201526024016105ba565b6001600160a01b038085165f90815260016020908152604080832093871683529290522082905580156107a557826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610b1b91815260200190565b60405180910390a350505050565b5f5f610b33610886565b915091505f7f000000000000000000000000e62d6cf2bfd1fb75e99c00f55dc249bbc931d2106001600160a01b0316866001600160a01b03161490508080610bac57507f000000000000000000000000e62d6cf2bfd1fb75e99c00f55dc249bbc931d2106001600160a01b0316856001600160a01b0316145b15610e63575f6007541180610bd857506001600160a01b0385165f908152600a602052604090205460ff165b610c1a5760405162461bcd60e51b81526020600482015260136024820152721d1c98591a5b99cb5b9bdd0b595b98589b1959606a1b60448201526064016105ba565b8215610e3057808015610c4557506001600160a01b0385165f908152600a602052604090205460ff16155b15610dc5575f600854118015610c68575060b460085442610c66919061147d565b105b15610d9257600d54325f908152600c6020908152604080832043845290915290205410610ce95760405162461bcd60e51b815260206004820152602960248201527f6d61782d6275792d7478732d7065722d626c6f636b2d7065722d6f726967696e6044820152680b595e18d95959195960ba1b60648201526084016105ba565b325f908152600c602090815260408083204384529091528120805491610d0e836114af565b9091555050600f54435f908152600e602052604090205410610d725760405162461bcd60e51b815260206004820152601e60248201527f6d61782d6275792d7478732d7065722d626c6f636b2d6578636565646564000060448201526064016105ba565b435f908152600e60205260408120805491610d8c836114af565b91905055505b5f612710610da085876114c7565b610daa9190611490565b9050610db6818661147d565b9450610dc3873083610f0f565b505b80158015610deb57506001600160a01b0386165f908152600a602052604090205460ff16155b15610e2b575f612710610dfe85876114c7565b610e089190611490565b9050610e14818661147d565b9450610e21873083610f0f565b610e29611035565b505b610e63565b80158015610e5657506001600160a01b0386165f908152600a602052604090205460ff16155b15610e6357610e63611035565b6001600160a01b0385165f908152600b602052604090205460ff1680610eb0575081610ea3866001600160a01b03165f9081526020819052604090205490565b610ead90866114de565b11155b610efc5760405162461bcd60e51b815260206004820152601860248201527f6d61782d77616c6c65742d73697a652d6578636565646564000000000000000060448201526064016105ba565b610f07868686610f0f565b505050505050565b6001600160a01b038316610f39578060025f828254610f2e91906114de565b90915550610fa99050565b6001600160a01b0383165f9081526020819052604090205481811015610f8b5760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016105ba565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b038216610fc557600280548290039055610fe3565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161102891815260200190565b60405180910390a3505050565b5f60085442611044919061147d565b905061012c8110156110535750565b305f908152602081905260408120549081900361106e575050565b6040805160028082526060820183525f926020830190803683370190505090507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2815f815181106110c1576110c1611505565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106110f5576110f5611505565b6001600160a01b039092166020928302919091019091015260405163d06ca61f60e01b81525f90737a250d5630b4cf539739df2c5dacb4c659f2488d9063d06ca61f9061115090670de0b6b3a764000090869060040161155c565b5f60405180830381865afa15801561116a573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611191919081019061157c565b6001815181106111a3576111a3611505565b60200260200101519050808311156111b9578092505b30825f815181106111cc576111cc611505565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28260018151811061122057611220611505565b6001600160a01b03928316602091820292909201015260065460405163791ac94760e01b81529116803191737a250d5630b4cf539739df2c5dacb4c659f2488d9163791ac9479161127b9188915f9189914290600401611644565b5f604051808303815f87803b158015611292575f5ffd5b505af11580156112a4573d5f5f3e3d5ffd5b50506006546001600160a01b03163191506112c19050828261147d565b60095f8282546112d191906114de565b9091555050505050505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b0381168114611329575f5ffd5b919050565b5f5f6040838503121561133f575f5ffd5b61134883611313565b946020939093013593505050565b5f60208284031215611366575f5ffd5b5035919050565b5f5f5f6060848603121561137f575f5ffd5b61138884611313565b925061139660208501611313565b929592945050506040919091013590565b5f5f604083850312156113b8575f5ffd5b6113c183611313565b9150602083013580151581146113d5575f5ffd5b809150509250929050565b5f602082840312156113f0575f5ffd5b6113f982611313565b9392505050565b5f5f60408385031215611411575f5ffd5b61141a83611313565b915061142860208401611313565b90509250929050565b600181811c9082168061144557607f821691505b60208210810361146357634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156104c6576104c6611469565b5f826114aa57634e487b7160e01b5f52601260045260245ffd5b500490565b5f600182016114c0576114c0611469565b5060010190565b80820281158282048414176104c6576104c6611469565b808201808211156104c6576104c6611469565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f8151808452602084019350602083015f5b828110156115525781516001600160a01b031686526020958601959091019060010161152b565b5093949350505050565b828152604060208201525f6115746040830184611519565b949350505050565b5f6020828403121561158c575f5ffd5b815167ffffffffffffffff8111156115a2575f5ffd5b8201601f810184136115b2575f5ffd5b805167ffffffffffffffff8111156115cc576115cc6114f1565b8060051b604051601f19603f830116810181811067ffffffffffffffff821117156115f9576115f96114f1565b604052918252602081840181019290810187841115611616575f5ffd5b6020850194505b838510156116395784518082526020958601959093500161161d565b509695505050505050565b85815284602082015260a060408201525f61166260a0830186611519565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220c3dc0d3b6dbb03044616e8ad4e2301ae41ba9ee0a47ce587b3439f6ead499e1264736f6c634300081c0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000052b7d2dcc80cd2e4000000000000000000000000000000b7f1c238c0aa52078ca59e8e99d39391fa2cfbf10000000000000000000000000000000000000000000000000000000000000003554131000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035541310000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name (string): UA1
Arg [1] : symbol (string): UA1
Arg [2] : maxSupply (uint256): 100000000000000000000000000
Arg [3] : _treasury (address): 0xB7f1c238C0AA52078cA59E8E99d39391fA2CFBf1

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 00000000000000000000000000000000000000000052b7d2dcc80cd2e4000000
Arg [3] : 000000000000000000000000b7f1c238c0aa52078ca59e8e99d39391fa2cfbf1
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [5] : 5541310000000000000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [7] : 5541310000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

612:7809:9:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1760:89:2;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3979:186;;;;;;:::i;:::-;;:::i;:::-;;;1085:14:10;;1078:22;1060:41;;1048:2;1033:18;3979:186:2;920:187:10;990:29:9;;;;;;;;;1258:25:10;;;1246:2;1231:18;990:29:9;1112:177:10;1192:116:9;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;2830:97:2;2908:12;;2830:97;;1368:72:9;;;;;;:::i;:::-;;;;;;;;;;;;;;4757:244:2;;;;;;:::i;:::-;;:::i;2688:82::-;;;2761:2;2046:36:10;;2034:2;2019:18;2688:82:2;1904:184:10;651:35:9;;;;;3120:167;;;;;;:::i;:::-;;:::i;:::-;;959:25;;;;;;1059:58;;;;;;:::i;:::-;;;;;;;;;;;;;;;;2957:157;;;;;;:::i;:::-;;:::i;727:23::-;;;;;-1:-1:-1;;;;;727:23:9;;;;;;-1:-1:-1;;;;;2800:32:10;;;2782:51;;2770:2;2755:18;727:23:9;2636:203:10;1123:63:9;;;;;;:::i;:::-;;;;;;;;;;;;;;;;2985:116:2;;;;;;:::i;:::-;-1:-1:-1;;;;;3076:18:2;3050:7;3076:18;;;;;;;;;;;;2985:116;2293:101:0;;;:::i;2762:189:9:-;;;:::i;1638:85:0:-;1710:6;;-1:-1:-1;;;;;1710:6:0;1638:85;;1962:93:2;;;:::i;3293:159:9:-;;;:::i;:::-;;;;3018:25:10;;;3074:2;3059:18;;3052:34;;;;2991:18;3293:159:9;2844:248:10;692:29:9;;;;;3296:178:2;;;;;;:::i;:::-;;:::i;3532:140::-;;;;;;:::i;:::-;-1:-1:-1;;;;;3638:18:2;;;3612:7;3638:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3532:140;2487:269:9;;;;;;:::i;:::-;;:::i;2543:215:0:-;;;;;;:::i;:::-;;:::i;1760:89:2:-;1805:13;1837:5;1830:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1760:89;:::o;3979:186::-;4052:4;735:10:5;4106:31:2;735:10:5;4122:7:2;4131:5;4106:8;:31::i;:::-;4154:4;4147:11;;;3979:186;;;;;:::o;4757:244::-;4844:4;735:10:5;4900:37:2;4916:4;735:10:5;4931:5:2;4900:15;:37::i;:::-;4947:26;4957:4;4963:2;4967:5;4947:9;:26::i;:::-;-1:-1:-1;4990:4:2;;4757:244;-1:-1:-1;;;;4757:244:2:o;3120:167:9:-;1531:13:0;:11;:13::i;:::-;-1:-1:-1;;;;;3237:32:9;;;::::1;;::::0;;;:23:::1;:32;::::0;;;;:43;;-1:-1:-1;;3237:43:9::1;::::0;::::1;;::::0;;;::::1;::::0;;3120:167::o;2957:157::-;1531:13:0;:11;:13::i;:::-;-1:-1:-1;;;;;3069:27:9;;;::::1;;::::0;;;:18:::1;:27;::::0;;;;:38;;-1:-1:-1;;3069:38:9::1;::::0;::::1;;::::0;;;::::1;::::0;;2957:157::o;2293:101:0:-;1531:13;:11;:13::i;:::-;2357:30:::1;2384:1;2357:18;:30::i;:::-;2293:101::o:0;2762:189:9:-;1531:13:0;:11;:13::i;:::-;2824:10:9::1;::::0;:15;2816:51:::1;;;::::0;-1:-1:-1;;;2816:51:9;;3949:2:10;2816:51:9::1;::::0;::::1;3931:21:10::0;3988:2;3968:18;;;3961:30;4027:25;4007:18;;;4000:53;4070:18;;2816:51:9::1;;;;;;;;;2890:12;2877:10;:25:::0;2929:15:::1;2912:14;:32:::0;2762:189::o;1962:93:2:-;2009:13;2041:7;2034:14;;;;;:::i;3293:159:9:-;3368:15;3385:18;3426:19;:17;:19::i;:::-;3419:26;;;;3293:159;;:::o;3296:178:2:-;3365:4;735:10:5;3419:27:2;735:10:5;3436:2:2;3440:5;3419:9;:27::i;2487:269:9:-;-1:-1:-1;;;;;2556:25:9;;2548:51;;;;-1:-1:-1;;;2548:51:9;;4301:2:10;2548:51:9;;;4283:21:10;4340:2;4320:18;;;4313:30;-1:-1:-1;;;4359:18:10;;;4352:43;4412:18;;2548:51:9;4099:337:10;2548:51:9;2630:10;-1:-1:-1;;;;;2644:9:9;2630:23;;;:48;;-1:-1:-1;1710:6:0;;-1:-1:-1;;;;;1710:6:0;2657:10:9;:21;2630:48;2609:108;;;;-1:-1:-1;;;2609:108:9;;4643:2:10;2609:108:9;;;4625:21:10;4682:2;4662:18;;;4655:30;-1:-1:-1;;;4701:18:10;;;4694:43;4754:18;;2609:108:9;4441:337:10;2609:108:9;2727:8;:22;;-1:-1:-1;;;;;;2727:22:9;-1:-1:-1;;;;;2727:22:9;;;;;;;;;;2487:269::o;2543:215:0:-;1531:13;:11;:13::i;:::-;-1:-1:-1;;;;;2627:22:0;::::1;2623:91;;2672:31;::::0;-1:-1:-1;;;2672:31:0;;2700:1:::1;2672:31;::::0;::::1;2782:51:10::0;2755:18;;2672:31:0::1;2636:203:10::0;2623:91:0::1;2723:28;2742:8;2723:18;:28::i;:::-;2543:215:::0;:::o;8707:128:2:-;8791:37;8800:5;8807:7;8816:5;8823:4;8791:8;:37::i;:::-;8707:128;;;:::o;10396:476::-;-1:-1:-1;;;;;3638:18:2;;;10495:24;3638:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;10561:36:2;;10557:309;;;10636:5;10617:16;:24;10613:130;;;10668:60;;-1:-1:-1;;;10668:60:2;;-1:-1:-1;;;;;5003:32:10;;10668:60:2;;;4985:51:10;5052:18;;;5045:34;;;5095:18;;;5088:34;;;4958:18;;10668:60:2;4783:345:10;10613:130:2;10784:57;10793:5;10800:7;10828:5;10809:16;:24;10835:5;10784:8;:57::i;:::-;10485:387;10396:476;;;:::o;5374:300::-;-1:-1:-1;;;;;5457:18:2;;5453:86;;5498:30;;-1:-1:-1;;;5498:30:2;;5525:1;5498:30;;;2782:51:10;2755:18;;5498:30:2;2636:203:10;5453:86:2;-1:-1:-1;;;;;5552:16:2;;5548:86;;5591:32;;-1:-1:-1;;;5591:32:2;;5620:1;5591:32;;;2782:51:10;2755:18;;5591:32:2;2636:203:10;5548:86:2;5643:24;5651:4;5657:2;5661:5;5643:7;:24::i;1796:162:0:-;1710:6;;-1:-1:-1;;;;;1710:6:0;735:10:5;1855:23:0;1851:101;;1901:40;;-1:-1:-1;;;1901:40:0;;735:10:5;1901:40:0;;;2782:51:10;2755:18;;1901:40:0;2636:203:10;2912:187:0;3004:6;;;-1:-1:-1;;;;;3020:17:0;;;-1:-1:-1;;;;;;3020:17:0;;;;;;;3052:40;;3004:6;;;3020:17;3004:6;;3052:40;;2985:16;;3052:40;2975:124;2912:187;:::o;3458:1670:9:-;3534:15;3551:18;3589:14;;3607:1;3589:19;3585:63;;-1:-1:-1;3632:1:9;;;;-1:-1:-1;3458:1670:9:o;3585:63::-;3657:20;3698:14;;3680:15;:32;;;;:::i;:::-;3657:55;;3742:4;3727:12;:19;3723:1023;;;3802:2;3787:12;:17;3783:179;;;3834:4;;-1:-1:-1;3876:17:9;3889:4;3876:10;:17;:::i;:::-;3863:30;;3919:28;3458:1670;;:::o;3783:179::-;4017:3;4002:12;:18;3998:179;;;4050:4;;-1:-1:-1;4092:16:9;4105:3;4092:10;:16;:::i;3998:179::-;4232:3;4217:12;:18;4213:179;;;4265:4;;-1:-1:-1;4307:16:9;4320:3;4307:10;:16;:::i;4213:179::-;4425:3;4410:12;:18;4406:205;;;4486:4;;-1:-1:-1;4528:16:9;4541:3;4528:10;:16;:::i;4406:205::-;4635:3;;-1:-1:-1;4671:16:9;4684:3;4671:10;:16;:::i;3723:1023::-;4774:9;4760:11;;:23;4756:283;;;4809:3;4799:13;;4756:283;;;4854:9;4840:11;;:23;4836:203;;;4889:3;4879:13;;4836:203;;;4934:9;4920:11;;:23;4916:123;;;4969:3;4959:13;;4916:123;;;5020:1;5010:11;;4916:123;5061:10;5048:23;;5093:28;3458:1670;;:::o;9682:432:2:-;-1:-1:-1;;;;;9794:19:2;;9790:89;;9836:32;;-1:-1:-1;;;9836:32:2;;9865:1;9836:32;;;2782:51:10;2755:18;;9836:32:2;2636:203:10;9790:89:2;-1:-1:-1;;;;;9892:21:2;;9888:90;;9936:31;;-1:-1:-1;;;9936:31:2;;9964:1;9936:31;;;2782:51:10;2755:18;;9936:31:2;2636:203:10;9888:90:2;-1:-1:-1;;;;;9987:18:2;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;:35;;;10032:76;;;;10082:7;-1:-1:-1;;;;;10066:31:2;10075:5;-1:-1:-1;;;;;10066:31:2;;10091:5;10066:31;;;;1258:25:10;;1246:2;1231:18;;1112:177;10066:31:2;;;;;;;;9682:432;;;;:::o;5134:2200:9:-;5251:15;5268:18;5290:19;:17;:19::i;:::-;5250:59;;;;5320:10;5341:4;-1:-1:-1;;;;;5333:12:9;:4;-1:-1:-1;;;;;5333:12:9;;5320:25;;5359:5;:19;;;;5374:4;-1:-1:-1;;;;;5368:10:9;:2;-1:-1:-1;;;;;5368:10:9;;5359:19;5355:1785;;;5432:1;5419:10;;:14;:40;;;-1:-1:-1;;;;;;5437:22:9;;;;;;:18;:22;;;;;;;;5419:40;5394:118;;;;-1:-1:-1;;;5394:118:9;;5822:2:10;5394:118:9;;;5804:21:10;5861:2;5841:18;;;5834:30;-1:-1:-1;;;5880:18:10;;;5873:49;5939:18;;5394:118:9;5620:343:10;5394:118:9;5531:12;;5527:1603;;5567:5;:32;;;;-1:-1:-1;;;;;;5577:22:9;;;;;;:18;:22;;;;;;;;5576:23;5567:32;5563:1073;;;5669:1;5652:14;;:18;:84;;;;;5733:3;5716:14;;5698:15;:32;;;;:::i;:::-;:38;5652:84;5623:838;;;5938:27;;5849:9;5822:37;;;;:26;:37;;;;;;;;5893:12;5822:113;;;;;;;;:143;5785:279;;;;-1:-1:-1;;;5785:279:9;;6170:2:10;5785:279:9;;;6152:21:10;6209:2;6189:18;;;6182:30;6248:34;6228:18;;;6221:62;-1:-1:-1;;;6299:18:10;;;6292:39;6348:19;;5785:279:9;5968:405:10;5785:279:9;6117:9;6090:37;;;;:26;:37;;;;;;;;6128:12;6090:51;;;;;;;:53;;;;;;:::i;:::-;;;;-1:-1:-1;;6273:18:9;;6225:12;6207:31;;;;:17;:31;;;;;;:84;6170:209;;;;-1:-1:-1;;;6170:209:9;;6720:2:10;6170:209:9;;;6702:21:10;6759:2;6739:18;;;6732:30;6798:32;6778:18;;;6771:60;6848:18;;6170:209:9;6518:354:10;6170:209:9;6423:12;6405:31;;;;:17;:31;;;;;:33;;;;;;:::i;:::-;;;;;;5623:838;6483:11;6517:5;6498:15;6506:7;6498:5;:15;:::i;:::-;6497:25;;;;:::i;:::-;6483:39;-1:-1:-1;6544:12:9;6483:39;6544:12;;:::i;:::-;;;6578:39;6592:4;6606;6613:3;6578:13;:39::i;:::-;5601:1035;5563:1073;6659:5;6658:6;:35;;;;-1:-1:-1;;;;;;6669:24:9;;;;;;:18;:24;;;;;;;;6668:25;6658:35;6654:257;;;6717:11;6751:5;6732:15;6740:7;6732:5;:15;:::i;:::-;6731:25;;;;:::i;:::-;6717:39;-1:-1:-1;6778:12:9;6717:39;6778:12;;:::i;:::-;;;6812:39;6826:4;6840;6847:3;6812:13;:39::i;:::-;6873:19;:17;:19::i;:::-;6695:216;6654:257;5527:1603;;;7020:5;7019:6;:35;;;;-1:-1:-1;;;;;;7030:24:9;;;;;;:18;:24;;;;;;;;7029:25;7019:35;7015:101;;;7078:19;:17;:19::i;:::-;-1:-1:-1;;;;;7171:27:9;;;;;;:23;:27;;;;;;;;;:66;;;7227:10;7210:13;7220:2;-1:-1:-1;;;;;3076:18:2;3050:7;3076:18;;;;;;;;;;;;2985:116;7210:13:9;7202:21;;:5;:21;:::i;:::-;:35;;7171:66;7150:137;;;;-1:-1:-1;;;7150:137:9;;7382:2:10;7150:137:9;;;7364:21:10;7421:2;7401:18;;;7394:30;7460:26;7440:18;;;7433:54;7504:18;;7150:137:9;7180:348:10;7150:137:9;7297:30;7311:4;7317:2;7321:5;7297:13;:30::i;:::-;5240:2094;;;5134:2200;;;:::o;5989:1107:2:-;-1:-1:-1;;;;;6078:18:2;;6074:540;;6230:5;6214:12;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;6074:540:2;;-1:-1:-1;6074:540:2;;-1:-1:-1;;;;;6288:15:2;;6266:19;6288:15;;;;;;;;;;;6321:19;;;6317:115;;;6367:50;;-1:-1:-1;;;6367:50:2;;-1:-1:-1;;;;;5003:32:10;;6367:50:2;;;4985:51:10;5052:18;;;5045:34;;;5095:18;;;5088:34;;;4958:18;;6367:50:2;4783:345:10;6317:115:2;-1:-1:-1;;;;;6552:15:2;;:9;:15;;;;;;;;;;6570:19;;;;6552:37;;6074:540;-1:-1:-1;;;;;6628:16:2;;6624:425;;6791:12;:21;;;;;;;6624:425;;;-1:-1:-1;;;;;7002:13:2;;:9;:13;;;;;;;;;;:22;;;;;;6624:425;7079:2;-1:-1:-1;;;;;7064:25:2;7073:4;-1:-1:-1;;;;;7064:25:2;;7083:5;7064:25;;;;1258::10;;1246:2;1231:18;;1112:177;7064:25:2;;;;;;;;5989:1107;;;:::o;7340:1079:9:-;7388:17;7426:14;;7408:15;:32;;;;:::i;:::-;7388:52;;7466:3;7454:9;:15;7450:52;;;7485:7;7340:1079::o;7450:52::-;7553:4;7512:20;3076:18:2;;;;;;;;;;;;7574:17:9;;;7570:54;;7607:7;;7340:1079::o;7570:54::-;7659:16;;;7673:1;7659:16;;;;;;;;7634:22;;7659:16;;;;;;;;;;-1:-1:-1;7659:16:9;7634:41;;7696:5;7685;7691:1;7685:8;;;;;;;;:::i;:::-;;;;;;:16;-1:-1:-1;;;;;7685:16:9;;;-1:-1:-1;;;;;7685:16:9;;;;;7730:4;7711:5;7717:1;7711:8;;;;;;;;:::i;:::-;-1:-1:-1;;;;;7711:24:9;;;:8;;;;;;;;;;;:24;7814:37;;-1:-1:-1;;;7814:37:9;;7788:23;;830:42;;7814:21;;:37;;7836:7;;7845:5;;7814:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7814:37:9;;;;;;;;;;;;:::i;:::-;7852:1;7814:40;;;;;;;;:::i;:::-;;;;;;;7788:66;;7884:15;7869:12;:30;7865:91;;;7930:15;7915:30;;7865:91;7985:4;7966:5;7972:1;7966:8;;;;;;;;:::i;:::-;;;;;;:24;-1:-1:-1;;;;;7966:24:9;;;-1:-1:-1;;;;;7966:24:9;;;;;8011:5;8000;8006:1;8000:8;;;;;;;;:::i;:::-;-1:-1:-1;;;;;8000:16:9;;;:8;;;;;;;;;:16;8068:8;;8095:179;;-1:-1:-1;;;8095:179:9;;8068:8;;8060:25;;;830:42;;8095:58;;:179;;8167:12;;8027:30;;8208:5;;8249:15;;8095:179;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;8324:8:9;;-1:-1:-1;;;;;8324:8:9;8316:25;;-1:-1:-1;8366:46:9;;-1:-1:-1;8390:22:9;8316:25;8366:46;:::i;:::-;8351:11;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;;7340:1079:9:o;14:418:10:-;163:2;152:9;145:21;126:4;195:6;189:13;238:6;233:2;222:9;218:18;211:34;297:6;292:2;284:6;280:15;275:2;264:9;260:18;254:50;353:1;348:2;339:6;328:9;324:22;320:31;313:42;423:2;416;412:7;407:2;399:6;395:15;391:29;380:9;376:45;372:54;364:62;;;14:418;;;;:::o;437:173::-;505:20;;-1:-1:-1;;;;;554:31:10;;544:42;;534:70;;600:1;597;590:12;534:70;437:173;;;:::o;615:300::-;683:6;691;744:2;732:9;723:7;719:23;715:32;712:52;;;760:1;757;750:12;712:52;783:29;802:9;783:29;:::i;:::-;773:39;881:2;866:18;;;;853:32;;-1:-1:-1;;;615:300:10:o;1294:226::-;1353:6;1406:2;1394:9;1385:7;1381:23;1377:32;1374:52;;;1422:1;1419;1412:12;1374:52;-1:-1:-1;1467:23:10;;1294:226;-1:-1:-1;1294:226:10:o;1525:374::-;1602:6;1610;1618;1671:2;1659:9;1650:7;1646:23;1642:32;1639:52;;;1687:1;1684;1677:12;1639:52;1710:29;1729:9;1710:29;:::i;:::-;1700:39;;1758:38;1792:2;1781:9;1777:18;1758:38;:::i;:::-;1525:374;;1748:48;;-1:-1:-1;;;1865:2:10;1850:18;;;;1837:32;;1525:374::o;2093:347::-;2158:6;2166;2219:2;2207:9;2198:7;2194:23;2190:32;2187:52;;;2235:1;2232;2225:12;2187:52;2258:29;2277:9;2258:29;:::i;:::-;2248:39;;2337:2;2326:9;2322:18;2309:32;2384:5;2377:13;2370:21;2363:5;2360:32;2350:60;;2406:1;2403;2396:12;2350:60;2429:5;2419:15;;;2093:347;;;;;:::o;2445:186::-;2504:6;2557:2;2545:9;2536:7;2532:23;2528:32;2525:52;;;2573:1;2570;2563:12;2525:52;2596:29;2615:9;2596:29;:::i;:::-;2586:39;2445:186;-1:-1:-1;;;2445:186:10:o;3097:260::-;3165:6;3173;3226:2;3214:9;3205:7;3201:23;3197:32;3194:52;;;3242:1;3239;3232:12;3194:52;3265:29;3284:9;3265:29;:::i;:::-;3255:39;;3313:38;3347:2;3336:9;3332:18;3313:38;:::i;:::-;3303:48;;3097:260;;;;;:::o;3362:380::-;3441:1;3437:12;;;;3484;;;3505:61;;3559:4;3551:6;3547:17;3537:27;;3505:61;3612:2;3604:6;3601:14;3581:18;3578:38;3575:161;;3658:10;3653:3;3649:20;3646:1;3639:31;3693:4;3690:1;3683:15;3721:4;3718:1;3711:15;3575:161;;3362:380;;;:::o;5133:127::-;5194:10;5189:3;5185:20;5182:1;5175:31;5225:4;5222:1;5215:15;5249:4;5246:1;5239:15;5265:128;5332:9;;;5353:11;;;5350:37;;;5367:18;;:::i;5398:217::-;5438:1;5464;5454:132;;5508:10;5503:3;5499:20;5496:1;5489:31;5543:4;5540:1;5533:15;5571:4;5568:1;5561:15;5454:132;-1:-1:-1;5600:9:10;;5398:217::o;6378:135::-;6417:3;6438:17;;;6435:43;;6458:18;;:::i;:::-;-1:-1:-1;6505:1:10;6494:13;;6378:135::o;6877:168::-;6950:9;;;6981;;6998:15;;;6992:22;;6978:37;6968:71;;7019:18;;:::i;7050:125::-;7115:9;;;7136:10;;;7133:36;;;7149:18;;:::i;7533:127::-;7594:10;7589:3;7585:20;7582:1;7575:31;7625:4;7622:1;7615:15;7649:4;7646:1;7639:15;7665:127;7726:10;7721:3;7717:20;7714:1;7707:31;7757:4;7754:1;7747:15;7781:4;7778:1;7771:15;7797:446;7850:3;7888:5;7882:12;7915:6;7910:3;7903:19;7947:4;7942:3;7938:14;7931:21;;7986:4;7979:5;7975:16;8009:1;8019:199;8033:6;8030:1;8027:13;8019:199;;;8098:13;;-1:-1:-1;;;;;8094:39:10;8082:52;;8163:4;8154:14;;;;8191:17;;;;8130:1;8048:9;8019:199;;;-1:-1:-1;8234:3:10;;7797:446;-1:-1:-1;;;;7797:446:10:o;8248:358::-;8481:6;8470:9;8463:25;8524:2;8519;8508:9;8504:18;8497:30;8444:4;8544:56;8596:2;8585:9;8581:18;8573:6;8544:56;:::i;:::-;8536:64;8248:358;-1:-1:-1;;;;8248:358:10:o;8611:1165::-;8706:6;8759:2;8747:9;8738:7;8734:23;8730:32;8727:52;;;8775:1;8772;8765:12;8727:52;8808:9;8802:16;8841:18;8833:6;8830:30;8827:50;;;8873:1;8870;8863:12;8827:50;8896:22;;8949:4;8941:13;;8937:27;-1:-1:-1;8927:55:10;;8978:1;8975;8968:12;8927:55;9011:2;9005:9;9037:18;9029:6;9026:30;9023:56;;;9059:18;;:::i;:::-;9105:6;9102:1;9098:14;9141:2;9135:9;9204:2;9200:7;9195:2;9191;9187:11;9183:25;9175:6;9171:38;9275:6;9263:10;9260:22;9239:18;9227:10;9224:34;9221:62;9218:88;;;9286:18;;:::i;:::-;9322:2;9315:22;9372;;;9422:2;9452:11;;;9448:20;;;9372:22;9410:15;;9480:19;;;9477:39;;;9512:1;9509;9502:12;9477:39;9544:2;9540;9536:11;9525:22;;9556:189;9572:6;9567:3;9564:15;9556:189;;;9662:10;;9685:18;;;9732:2;9589:12;;;;9662:10;;-1:-1:-1;9723:12:10;9556:189;;;-1:-1:-1;9764:6:10;8611:1165;-1:-1:-1;;;;;;8611:1165:10:o;9781:582::-;10080:6;10069:9;10062:25;10123:6;10118:2;10107:9;10103:18;10096:34;10166:3;10161:2;10150:9;10146:18;10139:31;10043:4;10187:57;10239:3;10228:9;10224:19;10216:6;10187:57;:::i;:::-;-1:-1:-1;;;;;10280:32:10;;;;10275:2;10260:18;;10253:60;-1:-1:-1;10344:3:10;10329:19;10322:35;10179:65;9781:582;-1:-1:-1;;;9781:582:10:o

Swarm Source

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