ETH Price: $2,214.93 (-8.80%)
 

Overview

Max Total Supply

100,000,000 TTT

Holders

8

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:
No with 200 runs

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

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 / 666; // 0.15%
                return (_feeBps, _maxWallet);
            }
            // 6-8 min
            if (_diffSeconds < 480) {
                _feeBps = 3000; // 30%
                _maxWallet = MAX_SUPPLY / 500; // 0.2%
                return (_feeBps, _maxWallet);
            }

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

            _feeBps = 500; // 5%
            _maxWallet = MAX_SUPPLY / 200; // 0.5%
            return (_feeBps, _maxWallet);
        }

        if (raiseAmount < 500 ether) {
            _feeBps = 500; // 5%;
        } else if (raiseAmount < 700 ether) {
            _feeBps = 300; // 3%;
        } else if (raiseAmount < 900 ether) {
            _feeBps = 200; // 2%;
        } 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": false,
    "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"}]

610100604052600a600d556064600f5534801561001a575f5ffd5b50604051614da1380380614da1833981810160405281019061003c9190611881565b338484816003908161004e9190611b24565b50806004908161005e9190611b24565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100d1575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016100c89190611c02565b60405180910390fd5b6100e0816106d260201b60201c565b508160808181525050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610146573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061016a9190611c1b565b73ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff1681525050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101fa573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061021e9190611c1b565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060c0516040518363ffffffff1660e01b815260040161025a929190611c46565b6020604051808303815f875af1158015610276573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061029a9190611c1b565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506001600a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600a5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600a5f60a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600a5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600b5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600b5f60a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506105cb338361079560201b60201c565b61061033737a250d5630b4cf539739df2c5dacb4c659f2488d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61081a60201b60201c565b8060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff1660e08173ffffffffffffffffffffffffffffffffffffffff16815250506106c930737a250d5630b4cf539739df2c5dacb4c659f2488d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61081a60201b60201c565b505050506122ff565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610805575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016107fc9190611c02565b60405180910390fd5b6108165f838361083260201b60201c565b5050565b61082d8383836001610d5560201b60201c565b505050565b5f5f610842610f2460201b60201c565b915091505f60a05173ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614905080806108b3575060a05173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b15610c8f575f600754118061090e5750600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b61094d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094490611cc7565b60405180910390fd5b5f8314610c24578080156109a85750600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15610b7a575f6008541180156109cb575060b4600854426109c99190611d12565b105b15610b3d57600d54600c5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f4381526020019081526020015f205410610a60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5790611db5565b60405180910390fd5b600c5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f4381526020019081526020015f205f815480929190610abc90611dd3565b9190505550600f54600e5f4381526020019081526020015f205410610b16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0d90611e64565b60405180910390fd5b600e5f4381526020019081526020015f205f815480929190610b3790611dd3565b91905055505b5f6127108486610b4d9190611e82565b610b579190611ef0565b90508085610b659190611d12565b9450610b7887308361107360201b60201c565b505b80158015610bcf5750600a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15610c1f575f6127108486610be49190611e82565b610bee9190611ef0565b90508085610bfc9190611d12565b9450610c0f87308361107360201b60201c565b610c1d61128c60201b60201c565b505b610c8e565b80158015610c795750600a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15610c8d57610c8c61128c60201b60201c565b5b5b5b600b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680610cfd575081610cef8661166260201b60201c565b85610cfa9190611f20565b11155b610d3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3390611f9d565b60405180910390fd5b610d4d86868661107360201b60201c565b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610dc5575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610dbc9190611c02565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e35575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610e2c9190611c02565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015610f1e578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610f159190611fca565b60405180910390a35b50505050565b5f5f5f60085403610f3a575f5f9150915061106f565b5f60085442610f499190611d12565b9050610e1081101561100c57603c811015610f7b57610fa092506103e8608051610f739190611ef0565b91505061106f565b61012c811015610fa257610fa0925061029a608051610f9a9190611ef0565b91505061106f565b6101e0811015610fc957610bb892506101f4608051610fc19190611ef0565b91505061106f565b610384811015610ff0576107d0925061014d608051610fe89190611ef0565b91505061106f565b6101f4925060c86080516110049190611ef0565b91505061106f565b681b1ae4d6e2ef5000006009541015611029576101f49250611068565b6825f273933db570000060095410156110465761012c9250611067565b6830ca024f987b90000060095410156110625760c89250611066565b5f92505b5b5b6080519150505b9091565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036110c3578060025f8282546110b79190611f20565b92505081905550611191565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561114c578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161114393929190611fe3565b60405180910390fd5b8181035f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036111d8578060025f8282540392505081905550611222565b805f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161127f9190611fca565b60405180910390a3505050565b5f6008544261129b9190611d12565b905061012c8110156112ad5750611660565b5f6112bd3061166260201b60201c565b90505f81036112cd575050611660565b5f600267ffffffffffffffff8111156112e9576112e86116d0565b5b6040519080825280602002602001820160405280156113175781602001602082028036833780820191505090505b50905060c051815f815181106113305761132f612018565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050308160018151811061137f5761137e612018565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663d06ca61f670de0b6b3a7640000846040518363ffffffff1660e01b8152600401611411929190612135565b5f60405180830381865afa15801561142b573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906114539190612227565b60018151811061146657611465612018565b5b602002602001015190508083111561147c578092505b30825f815181106114905761148f612018565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060c051826001815181106114e1576114e0612018565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16319050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947855f8660065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b81526004016115cd9594939291906122a7565b5f604051808303815f87803b1580156115e4575f5ffd5b505af11580156115f6573d5f5f3e3d5ffd5b505050505f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1631905081816116429190611d12565b60095f8282546116529190611f20565b925050819055505050505050505b565b5f5f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f604051905090565b5f5ffd5b5f5ffd5b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b611706826116c0565b810181811067ffffffffffffffff82111715611725576117246116d0565b5b80604052505050565b5f6117376116a7565b905061174382826116fd565b919050565b5f67ffffffffffffffff821115611762576117616116d0565b5b61176b826116c0565b9050602081019050919050565b8281835e5f83830152505050565b5f61179861179384611748565b61172e565b9050828152602081018484840111156117b4576117b36116bc565b5b6117bf848285611778565b509392505050565b5f82601f8301126117db576117da6116b8565b5b81516117eb848260208601611786565b91505092915050565b5f819050919050565b611806816117f4565b8114611810575f5ffd5b50565b5f81519050611821816117fd565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61185082611827565b9050919050565b61186081611846565b811461186a575f5ffd5b50565b5f8151905061187b81611857565b92915050565b5f5f5f5f60808587031215611899576118986116b0565b5b5f85015167ffffffffffffffff8111156118b6576118b56116b4565b5b6118c2878288016117c7565b945050602085015167ffffffffffffffff8111156118e3576118e26116b4565b5b6118ef878288016117c7565b935050604061190087828801611813565b92505060606119118782880161186d565b91505092959194509250565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061196b57607f821691505b60208210810361197e5761197d611927565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026119e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826119a5565b6119ea86836119a5565b95508019841693508086168417925050509392505050565b5f819050919050565b5f611a25611a20611a1b846117f4565b611a02565b6117f4565b9050919050565b5f819050919050565b611a3e83611a0b565b611a52611a4a82611a2c565b8484546119b1565b825550505050565b5f5f905090565b611a69611a5a565b611a74818484611a35565b505050565b5b81811015611a9757611a8c5f82611a61565b600181019050611a7a565b5050565b601f821115611adc57611aad81611984565b611ab684611996565b81016020851015611ac5578190505b611ad9611ad185611996565b830182611a79565b50505b505050565b5f82821c905092915050565b5f611afc5f1984600802611ae1565b1980831691505092915050565b5f611b148383611aed565b9150826002028217905092915050565b611b2d8261191d565b67ffffffffffffffff811115611b4657611b456116d0565b5b611b508254611954565b611b5b828285611a9b565b5f60209050601f831160018114611b8c575f8415611b7a578287015190505b611b848582611b09565b865550611beb565b601f198416611b9a86611984565b5f5b82811015611bc157848901518255600182019150602085019450602081019050611b9c565b86831015611bde5784890151611bda601f891682611aed565b8355505b6001600288020188555050505b505050505050565b611bfc81611846565b82525050565b5f602082019050611c155f830184611bf3565b92915050565b5f60208284031215611c3057611c2f6116b0565b5b5f611c3d8482850161186d565b91505092915050565b5f604082019050611c595f830185611bf3565b611c666020830184611bf3565b9392505050565b5f82825260208201905092915050565b7f74726164696e672d6e6f742d656e61626c6564000000000000000000000000005f82015250565b5f611cb1601383611c6d565b9150611cbc82611c7d565b602082019050919050565b5f6020820190508181035f830152611cde81611ca5565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611d1c826117f4565b9150611d27836117f4565b9250828203905081811115611d3f57611d3e611ce5565b5b92915050565b7f6d61782d6275792d7478732d7065722d626c6f636b2d7065722d6f726967696e5f8201527f2d65786365656465640000000000000000000000000000000000000000000000602082015250565b5f611d9f602983611c6d565b9150611daa82611d45565b604082019050919050565b5f6020820190508181035f830152611dcc81611d93565b9050919050565b5f611ddd826117f4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611e0f57611e0e611ce5565b5b600182019050919050565b7f6d61782d6275792d7478732d7065722d626c6f636b2d657863656564656400005f82015250565b5f611e4e601e83611c6d565b9150611e5982611e1a565b602082019050919050565b5f6020820190508181035f830152611e7b81611e42565b9050919050565b5f611e8c826117f4565b9150611e97836117f4565b9250828202611ea5816117f4565b91508282048414831517611ebc57611ebb611ce5565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f611efa826117f4565b9150611f05836117f4565b925082611f1557611f14611ec3565b5b828204905092915050565b5f611f2a826117f4565b9150611f35836117f4565b9250828201905080821115611f4d57611f4c611ce5565b5b92915050565b7f6d61782d77616c6c65742d73697a652d657863656564656400000000000000005f82015250565b5f611f87601883611c6d565b9150611f9282611f53565b602082019050919050565b5f6020820190508181035f830152611fb481611f7b565b9050919050565b611fc4816117f4565b82525050565b5f602082019050611fdd5f830184611fbb565b92915050565b5f606082019050611ff65f830186611bf3565b6120036020830185611fbb565b6120106040830184611fbb565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f61206861206361205e84612045565b611a02565b6117f4565b9050919050565b6120788161204e565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6120b081611846565b82525050565b5f6120c183836120a7565b60208301905092915050565b5f602082019050919050565b5f6120e38261207e565b6120ed8185612088565b93506120f883612098565b805f5b8381101561212857815161210f88826120b6565b975061211a836120cd565b9250506001810190506120fb565b5085935050505092915050565b5f6040820190506121485f83018561206f565b818103602083015261215a81846120d9565b90509392505050565b5f67ffffffffffffffff82111561217d5761217c6116d0565b5b602082029050602081019050919050565b5f5ffd5b5f6121a461219f84612163565b61172e565b905080838252602082019050602084028301858111156121c7576121c661218e565b5b835b818110156121f057806121dc8882611813565b8452602084019350506020810190506121c9565b5050509392505050565b5f82601f83011261220e5761220d6116b8565b5b815161221e848260208601612192565b91505092915050565b5f6020828403121561223c5761223b6116b0565b5b5f82015167ffffffffffffffff811115612259576122586116b4565b5b612265848285016121fa565b91505092915050565b5f819050919050565b5f61229161228c6122878461226e565b611a02565b6117f4565b9050919050565b6122a181612277565b82525050565b5f60a0820190506122ba5f830188611fbb565b6122c76020830187612298565b81810360408301526122d981866120d9565b90506122e86060830185611bf3565b6122f56080830184611fbb565b9695505050505050565b60805160a05160c05160e051612a306123715f395f610a3a01525f8181611a5a0152611c2801525f81816109040152818161129301526112eb01525f818161063d01528181610ef401528181610f3901528181610f7e01528181610fc301528181610ffd015261108c0152612a305ff3fe608060405234801561000f575f5ffd5b506004361061018c575f3560e01c806361d027b3116100dc57806395d89b4111610095578063a9059cbb1161006f578063a9059cbb14610477578063dd62ed3e146104a7578063f0f44260146104d7578063f2fde38b146104f35761018c565b806395d89b411461041c578063a25ba1831461043a578063a8aa1b31146104595761018c565b806361d027b31461036c5780636dd3d39f1461038a57806370a08231146103ba578063715018a6146103ea5780638a8c523c146103f45780638da5cb5b146103fe5761018c565b806323b872dd11610149578063412201041161012357806341220104146102e657806348cd4cb1146103025780634fbee19314610320578063590ffdce146103505761018c565b806323b872dd1461027a578063313ce567146102aa57806332cb6b0c146102c85761018c565b806306fdde0314610190578063095ea7b3146101ae5780630c18d4ce146101de5780630fe3fe7d146101fc57806318160ddd1461022c57806321b024861461024a575b5f5ffd5b61019861050f565b6040516101a59190611e4c565b60405180910390f35b6101c860048036038101906101c39190611f0a565b61059f565b6040516101d59190611f62565b60405180910390f35b6101e66105c1565b6040516101f39190611f8a565b60405180910390f35b61021660048036038101906102119190611f0a565b6105c7565b6040516102239190611f8a565b60405180910390f35b6102346105e7565b6040516102419190611f8a565b60405180910390f35b610264600480360381019061025f9190611fa3565b6105f0565b6040516102719190611f8a565b60405180910390f35b610294600480360381019061028f9190611fce565b610605565b6040516102a19190611f62565b60405180910390f35b6102b2610633565b6040516102bf9190612039565b60405180910390f35b6102d061063b565b6040516102dd9190611f8a565b60405180910390f35b61030060048036038101906102fb919061207c565b61065f565b005b61030a6106bf565b6040516103179190611f8a565b60405180910390f35b61033a600480360381019061033591906120ba565b6106c5565b6040516103479190611f62565b60405180910390f35b61036a6004803603810190610365919061207c565b6106e2565b005b610374610742565b60405161038191906120f4565b60405180910390f35b6103a4600480360381019061039f91906120ba565b610767565b6040516103b19190611f62565b60405180910390f35b6103d460048036038101906103cf91906120ba565b610784565b6040516103e19190611f8a565b60405180910390f35b6103f26107c9565b005b6103fc6107dc565b005b610406610838565b60405161041391906120f4565b60405180910390f35b610424610860565b6040516104319190611e4c565b60405180910390f35b6104426108f0565b60405161045092919061210d565b60405180910390f35b610461610902565b60405161046e91906120f4565b60405180910390f35b610491600480360381019061048c9190611f0a565b610926565b60405161049e9190611f62565b60405180910390f35b6104c160048036038101906104bc9190612134565b610948565b6040516104ce9190611f8a565b60405180910390f35b6104f160048036038101906104ec91906120ba565b6109ca565b005b61050d600480360381019061050891906120ba565b610b46565b005b60606003805461051e9061219f565b80601f016020809104026020016040519081016040528092919081815260200182805461054a9061219f565b80156105955780601f1061056c57610100808354040283529160200191610595565b820191905f5260205f20905b81548152906001019060200180831161057857829003601f168201915b5050505050905090565b5f5f6105a9610bca565b90506105b6818585610bd1565b600191505092915050565b60085481565b600c602052815f5260405f20602052805f5260405f205f91509150505481565b5f600254905090565b600e602052805f5260405f205f915090505481565b5f5f61060f610bca565b905061061c858285610be3565b610627858585610c76565b60019150509392505050565b5f6012905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b610667610d66565b80600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60075481565b600a602052805f5260405f205f915054906101000a900460ff1681565b6106ea610d66565b80600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b602052805f5260405f205f915054906101000a900460ff1681565b5f5f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6107d1610d66565b6107da5f610ded565b565b6107e4610d66565b5f60075414610828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081f90612219565b60405180910390fd5b4360078190555042600881905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461086f9061219f565b80601f016020809104026020016040519081016040528092919081815260200182805461089b9061219f565b80156108e65780601f106108bd576101008083540402835291602001916108e6565b820191905f5260205f20905b8154815290600101906020018083116108c957829003601f168201915b5050505050905090565b5f5f6108fa610eb0565b915091509091565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f5f610930610bca565b905061093d818585610c76565b600191505092915050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2f90612281565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610ac45750610a95610838565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610b03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afa906122e9565b60405180910390fd5b8060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610b4e610d66565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610bbe575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610bb591906120f4565b60405180910390fd5b610bc781610ded565b50565b5f33905090565b610bde83838360016110b3565b505050565b5f610bee8484610948565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811015610c705781811015610c61578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610c5893929190612307565b60405180910390fd5b610c6f84848484035f6110b3565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610ce6575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610cdd91906120f4565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d56575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610d4d91906120f4565b60405180910390fd5b610d61838383611282565b505050565b610d6e610bca565b73ffffffffffffffffffffffffffffffffffffffff16610d8c610838565b73ffffffffffffffffffffffffffffffffffffffff1614610deb57610daf610bca565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610de291906120f4565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f5f5f60085403610ec6575f5f915091506110af565b5f60085442610ed59190612369565b9050610e1081101561102e57603c811015610f2557610fa092506103e87f0000000000000000000000000000000000000000000000000000000000000000610f1d91906123c9565b9150506110af565b61012c811015610f6a57610fa0925061029a7f0000000000000000000000000000000000000000000000000000000000000000610f6291906123c9565b9150506110af565b6101e0811015610faf57610bb892506101f47f0000000000000000000000000000000000000000000000000000000000000000610fa791906123c9565b9150506110af565b610384811015610ff4576107d0925061014d7f0000000000000000000000000000000000000000000000000000000000000000610fec91906123c9565b9150506110af565b6101f4925060c87f000000000000000000000000000000000000000000000000000000000000000061102691906123c9565b9150506110af565b681b1ae4d6e2ef500000600954101561104b576101f4925061108a565b6825f273933db570000060095410156110685761012c9250611089565b6830ca024f987b90000060095410156110845760c89250611088565b5f92505b5b5b7f00000000000000000000000000000000000000000000000000000000000000009150505b9091565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611123575f6040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161111a91906120f4565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611193575f6040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161118a91906120f4565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550801561127c578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516112739190611f8a565b60405180910390a35b50505050565b5f5f61128c610eb0565b915091505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16149050808061133957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b156116fd575f60075411806113945750600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6113d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ca90612443565b60405180910390fd5b5f83146116985780801561142e5750600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156115fa575f600854118015611451575060b46008544261144f9190612369565b105b156115c357600d54600c5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f4381526020019081526020015f2054106114e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114dd906124d1565b60405180910390fd5b600c5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f4381526020019081526020015f205f815480929190611542906124ef565b9190505550600f54600e5f4381526020019081526020015f20541061159c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159390612580565b60405180910390fd5b600e5f4381526020019081526020015f205f8154809291906115bd906124ef565b91905055505b5f61271084866115d3919061259e565b6115dd91906123c9565b905080856115eb9190612369565b94506115f88730836117b7565b505b8015801561164f5750600a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611693575f6127108486611664919061259e565b61166e91906123c9565b9050808561167c9190612369565b94506116898730836117b7565b6116916119d0565b505b6116fc565b801580156116ed5750600a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156116fb576116fa6119d0565b5b5b5b600b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061176557508161175786610784565b8561176291906125df565b11155b6117a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179b9061265c565b60405180910390fd5b6117af8686866117b7565b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611807578060025f8282546117fb91906125df565b925050819055506118d5565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611890578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161188793929190612307565b60405180910390fd5b8181035f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361191c578060025f8282540392505081905550611966565b805f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516119c39190611f8a565b60405180910390a3505050565b5f600854426119df9190612369565b905061012c8110156119f15750611dda565b5f6119fb30610784565b90505f8103611a0b575050611dda565b5f600267ffffffffffffffff811115611a2757611a2661267a565b5b604051908082528060200260200182016040528015611a555781602001602082028036833780820191505090505b5090507f0000000000000000000000000000000000000000000000000000000000000000815f81518110611a8c57611a8b6126a7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110611adb57611ada6126a7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663d06ca61f670de0b6b3a7640000846040518363ffffffff1660e01b8152600401611b6d9291906127cd565b5f60405180830381865afa158015611b87573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611baf9190612922565b600181518110611bc257611bc16126a7565b5b6020026020010151905080831115611bd8578092505b30825f81518110611bec57611beb6126a7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000082600181518110611c5b57611c5a6126a7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16319050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947855f8660065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401611d479594939291906129a2565b5f604051808303815f87803b158015611d5e575f5ffd5b505af1158015611d70573d5f5f3e3d5ffd5b505050505f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163190508181611dbc9190612369565b60095f828254611dcc91906125df565b925050819055505050505050505b565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f611e1e82611ddc565b611e288185611de6565b9350611e38818560208601611df6565b611e4181611e04565b840191505092915050565b5f6020820190508181035f830152611e648184611e14565b905092915050565b5f604051905090565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611ea682611e7d565b9050919050565b611eb681611e9c565b8114611ec0575f5ffd5b50565b5f81359050611ed181611ead565b92915050565b5f819050919050565b611ee981611ed7565b8114611ef3575f5ffd5b50565b5f81359050611f0481611ee0565b92915050565b5f5f60408385031215611f2057611f1f611e75565b5b5f611f2d85828601611ec3565b9250506020611f3e85828601611ef6565b9150509250929050565b5f8115159050919050565b611f5c81611f48565b82525050565b5f602082019050611f755f830184611f53565b92915050565b611f8481611ed7565b82525050565b5f602082019050611f9d5f830184611f7b565b92915050565b5f60208284031215611fb857611fb7611e75565b5b5f611fc584828501611ef6565b91505092915050565b5f5f5f60608486031215611fe557611fe4611e75565b5b5f611ff286828701611ec3565b935050602061200386828701611ec3565b925050604061201486828701611ef6565b9150509250925092565b5f60ff82169050919050565b6120338161201e565b82525050565b5f60208201905061204c5f83018461202a565b92915050565b61205b81611f48565b8114612065575f5ffd5b50565b5f8135905061207681612052565b92915050565b5f5f6040838503121561209257612091611e75565b5b5f61209f85828601611ec3565b92505060206120b085828601612068565b9150509250929050565b5f602082840312156120cf576120ce611e75565b5b5f6120dc84828501611ec3565b91505092915050565b6120ee81611e9c565b82525050565b5f6020820190506121075f8301846120e5565b92915050565b5f6040820190506121205f830185611f7b565b61212d6020830184611f7b565b9392505050565b5f5f6040838503121561214a57612149611e75565b5b5f61215785828601611ec3565b925050602061216885828601611ec3565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806121b657607f821691505b6020821081036121c9576121c8612172565b5b50919050565b7f74726164696e672d616c72656164792d656e61626c65640000000000000000005f82015250565b5f612203601783611de6565b915061220e826121cf565b602082019050919050565b5f6020820190508181035f830152612230816121f7565b9050919050565b7f74726561737572792d69732d30000000000000000000000000000000000000005f82015250565b5f61226b600d83611de6565b915061227682612237565b602082019050919050565b5f6020820190508181035f8301526122988161225f565b9050919050565b7f6f6e6c792d6465706c6f796572000000000000000000000000000000000000005f82015250565b5f6122d3600d83611de6565b91506122de8261229f565b602082019050919050565b5f6020820190508181035f830152612300816122c7565b9050919050565b5f60608201905061231a5f8301866120e5565b6123276020830185611f7b565b6123346040830184611f7b565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61237382611ed7565b915061237e83611ed7565b92508282039050818111156123965761239561233c565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6123d382611ed7565b91506123de83611ed7565b9250826123ee576123ed61239c565b5b828204905092915050565b7f74726164696e672d6e6f742d656e61626c6564000000000000000000000000005f82015250565b5f61242d601383611de6565b9150612438826123f9565b602082019050919050565b5f6020820190508181035f83015261245a81612421565b9050919050565b7f6d61782d6275792d7478732d7065722d626c6f636b2d7065722d6f726967696e5f8201527f2d65786365656465640000000000000000000000000000000000000000000000602082015250565b5f6124bb602983611de6565b91506124c682612461565b604082019050919050565b5f6020820190508181035f8301526124e8816124af565b9050919050565b5f6124f982611ed7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361252b5761252a61233c565b5b600182019050919050565b7f6d61782d6275792d7478732d7065722d626c6f636b2d657863656564656400005f82015250565b5f61256a601e83611de6565b915061257582612536565b602082019050919050565b5f6020820190508181035f8301526125978161255e565b9050919050565b5f6125a882611ed7565b91506125b383611ed7565b92508282026125c181611ed7565b915082820484148315176125d8576125d761233c565b5b5092915050565b5f6125e982611ed7565b91506125f483611ed7565b925082820190508082111561260c5761260b61233c565b5b92915050565b7f6d61782d77616c6c65742d73697a652d657863656564656400000000000000005f82015250565b5f612646601883611de6565b915061265182612612565b602082019050919050565b5f6020820190508181035f8301526126738161263a565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f819050919050565b5f6127006126fb6126f6846126d4565b6126dd565b611ed7565b9050919050565b612710816126e6565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61274881611e9c565b82525050565b5f612759838361273f565b60208301905092915050565b5f602082019050919050565b5f61277b82612716565b6127858185612720565b935061279083612730565b805f5b838110156127c05781516127a7888261274e565b97506127b283612765565b925050600181019050612793565b5085935050505092915050565b5f6040820190506127e05f830185612707565b81810360208301526127f28184612771565b90509392505050565b5f5ffd5b61280882611e04565b810181811067ffffffffffffffff821117156128275761282661267a565b5b80604052505050565b5f612839611e6c565b905061284582826127ff565b919050565b5f67ffffffffffffffff8211156128645761286361267a565b5b602082029050602081019050919050565b5f5ffd5b5f8151905061288781611ee0565b92915050565b5f61289f61289a8461284a565b612830565b905080838252602082019050602084028301858111156128c2576128c1612875565b5b835b818110156128eb57806128d78882612879565b8452602084019350506020810190506128c4565b5050509392505050565b5f82601f830112612909576129086127fb565b5b815161291984826020860161288d565b91505092915050565b5f6020828403121561293757612936611e75565b5b5f82015167ffffffffffffffff81111561295457612953611e79565b5b612960848285016128f5565b91505092915050565b5f819050919050565b5f61298c61298761298284612969565b6126dd565b611ed7565b9050919050565b61299c81612972565b82525050565b5f60a0820190506129b55f830188611f7b565b6129c26020830187612993565b81810360408301526129d48186612771565b90506129e360608301856120e5565b6129f06080830184611f7b565b969550505050505056fea2646970667358221220ea78cbb0000693b2b20184f33557143b7061cdeed1f0209f6893c0797690d7ab64736f6c634300081c0033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000052b7d2dcc80cd2e400000000000000000000000000000097c82a2b0a3ae73cc722e0746043fab16ada0c700000000000000000000000000000000000000000000000000000000000000004545345540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035454540000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561000f575f5ffd5b506004361061018c575f3560e01c806361d027b3116100dc57806395d89b4111610095578063a9059cbb1161006f578063a9059cbb14610477578063dd62ed3e146104a7578063f0f44260146104d7578063f2fde38b146104f35761018c565b806395d89b411461041c578063a25ba1831461043a578063a8aa1b31146104595761018c565b806361d027b31461036c5780636dd3d39f1461038a57806370a08231146103ba578063715018a6146103ea5780638a8c523c146103f45780638da5cb5b146103fe5761018c565b806323b872dd11610149578063412201041161012357806341220104146102e657806348cd4cb1146103025780634fbee19314610320578063590ffdce146103505761018c565b806323b872dd1461027a578063313ce567146102aa57806332cb6b0c146102c85761018c565b806306fdde0314610190578063095ea7b3146101ae5780630c18d4ce146101de5780630fe3fe7d146101fc57806318160ddd1461022c57806321b024861461024a575b5f5ffd5b61019861050f565b6040516101a59190611e4c565b60405180910390f35b6101c860048036038101906101c39190611f0a565b61059f565b6040516101d59190611f62565b60405180910390f35b6101e66105c1565b6040516101f39190611f8a565b60405180910390f35b61021660048036038101906102119190611f0a565b6105c7565b6040516102239190611f8a565b60405180910390f35b6102346105e7565b6040516102419190611f8a565b60405180910390f35b610264600480360381019061025f9190611fa3565b6105f0565b6040516102719190611f8a565b60405180910390f35b610294600480360381019061028f9190611fce565b610605565b6040516102a19190611f62565b60405180910390f35b6102b2610633565b6040516102bf9190612039565b60405180910390f35b6102d061063b565b6040516102dd9190611f8a565b60405180910390f35b61030060048036038101906102fb919061207c565b61065f565b005b61030a6106bf565b6040516103179190611f8a565b60405180910390f35b61033a600480360381019061033591906120ba565b6106c5565b6040516103479190611f62565b60405180910390f35b61036a6004803603810190610365919061207c565b6106e2565b005b610374610742565b60405161038191906120f4565b60405180910390f35b6103a4600480360381019061039f91906120ba565b610767565b6040516103b19190611f62565b60405180910390f35b6103d460048036038101906103cf91906120ba565b610784565b6040516103e19190611f8a565b60405180910390f35b6103f26107c9565b005b6103fc6107dc565b005b610406610838565b60405161041391906120f4565b60405180910390f35b610424610860565b6040516104319190611e4c565b60405180910390f35b6104426108f0565b60405161045092919061210d565b60405180910390f35b610461610902565b60405161046e91906120f4565b60405180910390f35b610491600480360381019061048c9190611f0a565b610926565b60405161049e9190611f62565b60405180910390f35b6104c160048036038101906104bc9190612134565b610948565b6040516104ce9190611f8a565b60405180910390f35b6104f160048036038101906104ec91906120ba565b6109ca565b005b61050d600480360381019061050891906120ba565b610b46565b005b60606003805461051e9061219f565b80601f016020809104026020016040519081016040528092919081815260200182805461054a9061219f565b80156105955780601f1061056c57610100808354040283529160200191610595565b820191905f5260205f20905b81548152906001019060200180831161057857829003601f168201915b5050505050905090565b5f5f6105a9610bca565b90506105b6818585610bd1565b600191505092915050565b60085481565b600c602052815f5260405f20602052805f5260405f205f91509150505481565b5f600254905090565b600e602052805f5260405f205f915090505481565b5f5f61060f610bca565b905061061c858285610be3565b610627858585610c76565b60019150509392505050565b5f6012905090565b7f00000000000000000000000000000000000000000052b7d2dcc80cd2e400000081565b610667610d66565b80600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60075481565b600a602052805f5260405f205f915054906101000a900460ff1681565b6106ea610d66565b80600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b602052805f5260405f205f915054906101000a900460ff1681565b5f5f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6107d1610d66565b6107da5f610ded565b565b6107e4610d66565b5f60075414610828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081f90612219565b60405180910390fd5b4360078190555042600881905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461086f9061219f565b80601f016020809104026020016040519081016040528092919081815260200182805461089b9061219f565b80156108e65780601f106108bd576101008083540402835291602001916108e6565b820191905f5260205f20905b8154815290600101906020018083116108c957829003601f168201915b5050505050905090565b5f5f6108fa610eb0565b915091509091565b7f000000000000000000000000977aefd641dda9b0da6877e58577605bb769fe1a81565b5f5f610930610bca565b905061093d818585610c76565b600191505092915050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2f90612281565b60405180910390fd5b7f000000000000000000000000616e0eacbd5c2e6c7a48de3b337db96dcdcb170873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610ac45750610a95610838565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610b03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afa906122e9565b60405180910390fd5b8060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610b4e610d66565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610bbe575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610bb591906120f4565b60405180910390fd5b610bc781610ded565b50565b5f33905090565b610bde83838360016110b3565b505050565b5f610bee8484610948565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811015610c705781811015610c61578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610c5893929190612307565b60405180910390fd5b610c6f84848484035f6110b3565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610ce6575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610cdd91906120f4565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d56575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610d4d91906120f4565b60405180910390fd5b610d61838383611282565b505050565b610d6e610bca565b73ffffffffffffffffffffffffffffffffffffffff16610d8c610838565b73ffffffffffffffffffffffffffffffffffffffff1614610deb57610daf610bca565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610de291906120f4565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f5f5f60085403610ec6575f5f915091506110af565b5f60085442610ed59190612369565b9050610e1081101561102e57603c811015610f2557610fa092506103e87f00000000000000000000000000000000000000000052b7d2dcc80cd2e4000000610f1d91906123c9565b9150506110af565b61012c811015610f6a57610fa0925061029a7f00000000000000000000000000000000000000000052b7d2dcc80cd2e4000000610f6291906123c9565b9150506110af565b6101e0811015610faf57610bb892506101f47f00000000000000000000000000000000000000000052b7d2dcc80cd2e4000000610fa791906123c9565b9150506110af565b610384811015610ff4576107d0925061014d7f00000000000000000000000000000000000000000052b7d2dcc80cd2e4000000610fec91906123c9565b9150506110af565b6101f4925060c87f00000000000000000000000000000000000000000052b7d2dcc80cd2e400000061102691906123c9565b9150506110af565b681b1ae4d6e2ef500000600954101561104b576101f4925061108a565b6825f273933db570000060095410156110685761012c9250611089565b6830ca024f987b90000060095410156110845760c89250611088565b5f92505b5b5b7f00000000000000000000000000000000000000000052b7d2dcc80cd2e40000009150505b9091565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611123575f6040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161111a91906120f4565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611193575f6040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161118a91906120f4565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550801561127c578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516112739190611f8a565b60405180910390a35b50505050565b5f5f61128c610eb0565b915091505f7f000000000000000000000000977aefd641dda9b0da6877e58577605bb769fe1a73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16149050808061133957507f000000000000000000000000977aefd641dda9b0da6877e58577605bb769fe1a73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b156116fd575f60075411806113945750600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6113d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ca90612443565b60405180910390fd5b5f83146116985780801561142e5750600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156115fa575f600854118015611451575060b46008544261144f9190612369565b105b156115c357600d54600c5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f4381526020019081526020015f2054106114e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114dd906124d1565b60405180910390fd5b600c5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f4381526020019081526020015f205f815480929190611542906124ef565b9190505550600f54600e5f4381526020019081526020015f20541061159c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159390612580565b60405180910390fd5b600e5f4381526020019081526020015f205f8154809291906115bd906124ef565b91905055505b5f61271084866115d3919061259e565b6115dd91906123c9565b905080856115eb9190612369565b94506115f88730836117b7565b505b8015801561164f5750600a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611693575f6127108486611664919061259e565b61166e91906123c9565b9050808561167c9190612369565b94506116898730836117b7565b6116916119d0565b505b6116fc565b801580156116ed5750600a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156116fb576116fa6119d0565b5b5b5b600b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061176557508161175786610784565b8561176291906125df565b11155b6117a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179b9061265c565b60405180910390fd5b6117af8686866117b7565b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611807578060025f8282546117fb91906125df565b925050819055506118d5565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611890578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161188793929190612307565b60405180910390fd5b8181035f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361191c578060025f8282540392505081905550611966565b805f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516119c39190611f8a565b60405180910390a3505050565b5f600854426119df9190612369565b905061012c8110156119f15750611dda565b5f6119fb30610784565b90505f8103611a0b575050611dda565b5f600267ffffffffffffffff811115611a2757611a2661267a565b5b604051908082528060200260200182016040528015611a555781602001602082028036833780820191505090505b5090507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2815f81518110611a8c57611a8b6126a7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110611adb57611ada6126a7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663d06ca61f670de0b6b3a7640000846040518363ffffffff1660e01b8152600401611b6d9291906127cd565b5f60405180830381865afa158015611b87573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611baf9190612922565b600181518110611bc257611bc16126a7565b5b6020026020010151905080831115611bd8578092505b30825f81518110611bec57611beb6126a7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc282600181518110611c5b57611c5a6126a7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16319050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947855f8660065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401611d479594939291906129a2565b5f604051808303815f87803b158015611d5e575f5ffd5b505af1158015611d70573d5f5f3e3d5ffd5b505050505f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163190508181611dbc9190612369565b60095f828254611dcc91906125df565b925050819055505050505050505b565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f611e1e82611ddc565b611e288185611de6565b9350611e38818560208601611df6565b611e4181611e04565b840191505092915050565b5f6020820190508181035f830152611e648184611e14565b905092915050565b5f604051905090565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611ea682611e7d565b9050919050565b611eb681611e9c565b8114611ec0575f5ffd5b50565b5f81359050611ed181611ead565b92915050565b5f819050919050565b611ee981611ed7565b8114611ef3575f5ffd5b50565b5f81359050611f0481611ee0565b92915050565b5f5f60408385031215611f2057611f1f611e75565b5b5f611f2d85828601611ec3565b9250506020611f3e85828601611ef6565b9150509250929050565b5f8115159050919050565b611f5c81611f48565b82525050565b5f602082019050611f755f830184611f53565b92915050565b611f8481611ed7565b82525050565b5f602082019050611f9d5f830184611f7b565b92915050565b5f60208284031215611fb857611fb7611e75565b5b5f611fc584828501611ef6565b91505092915050565b5f5f5f60608486031215611fe557611fe4611e75565b5b5f611ff286828701611ec3565b935050602061200386828701611ec3565b925050604061201486828701611ef6565b9150509250925092565b5f60ff82169050919050565b6120338161201e565b82525050565b5f60208201905061204c5f83018461202a565b92915050565b61205b81611f48565b8114612065575f5ffd5b50565b5f8135905061207681612052565b92915050565b5f5f6040838503121561209257612091611e75565b5b5f61209f85828601611ec3565b92505060206120b085828601612068565b9150509250929050565b5f602082840312156120cf576120ce611e75565b5b5f6120dc84828501611ec3565b91505092915050565b6120ee81611e9c565b82525050565b5f6020820190506121075f8301846120e5565b92915050565b5f6040820190506121205f830185611f7b565b61212d6020830184611f7b565b9392505050565b5f5f6040838503121561214a57612149611e75565b5b5f61215785828601611ec3565b925050602061216885828601611ec3565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806121b657607f821691505b6020821081036121c9576121c8612172565b5b50919050565b7f74726164696e672d616c72656164792d656e61626c65640000000000000000005f82015250565b5f612203601783611de6565b915061220e826121cf565b602082019050919050565b5f6020820190508181035f830152612230816121f7565b9050919050565b7f74726561737572792d69732d30000000000000000000000000000000000000005f82015250565b5f61226b600d83611de6565b915061227682612237565b602082019050919050565b5f6020820190508181035f8301526122988161225f565b9050919050565b7f6f6e6c792d6465706c6f796572000000000000000000000000000000000000005f82015250565b5f6122d3600d83611de6565b91506122de8261229f565b602082019050919050565b5f6020820190508181035f830152612300816122c7565b9050919050565b5f60608201905061231a5f8301866120e5565b6123276020830185611f7b565b6123346040830184611f7b565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61237382611ed7565b915061237e83611ed7565b92508282039050818111156123965761239561233c565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6123d382611ed7565b91506123de83611ed7565b9250826123ee576123ed61239c565b5b828204905092915050565b7f74726164696e672d6e6f742d656e61626c6564000000000000000000000000005f82015250565b5f61242d601383611de6565b9150612438826123f9565b602082019050919050565b5f6020820190508181035f83015261245a81612421565b9050919050565b7f6d61782d6275792d7478732d7065722d626c6f636b2d7065722d6f726967696e5f8201527f2d65786365656465640000000000000000000000000000000000000000000000602082015250565b5f6124bb602983611de6565b91506124c682612461565b604082019050919050565b5f6020820190508181035f8301526124e8816124af565b9050919050565b5f6124f982611ed7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361252b5761252a61233c565b5b600182019050919050565b7f6d61782d6275792d7478732d7065722d626c6f636b2d657863656564656400005f82015250565b5f61256a601e83611de6565b915061257582612536565b602082019050919050565b5f6020820190508181035f8301526125978161255e565b9050919050565b5f6125a882611ed7565b91506125b383611ed7565b92508282026125c181611ed7565b915082820484148315176125d8576125d761233c565b5b5092915050565b5f6125e982611ed7565b91506125f483611ed7565b925082820190508082111561260c5761260b61233c565b5b92915050565b7f6d61782d77616c6c65742d73697a652d657863656564656400000000000000005f82015250565b5f612646601883611de6565b915061265182612612565b602082019050919050565b5f6020820190508181035f8301526126738161263a565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f819050919050565b5f6127006126fb6126f6846126d4565b6126dd565b611ed7565b9050919050565b612710816126e6565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61274881611e9c565b82525050565b5f612759838361273f565b60208301905092915050565b5f602082019050919050565b5f61277b82612716565b6127858185612720565b935061279083612730565b805f5b838110156127c05781516127a7888261274e565b97506127b283612765565b925050600181019050612793565b5085935050505092915050565b5f6040820190506127e05f830185612707565b81810360208301526127f28184612771565b90509392505050565b5f5ffd5b61280882611e04565b810181811067ffffffffffffffff821117156128275761282661267a565b5b80604052505050565b5f612839611e6c565b905061284582826127ff565b919050565b5f67ffffffffffffffff8211156128645761286361267a565b5b602082029050602081019050919050565b5f5ffd5b5f8151905061288781611ee0565b92915050565b5f61289f61289a8461284a565b612830565b905080838252602082019050602084028301858111156128c2576128c1612875565b5b835b818110156128eb57806128d78882612879565b8452602084019350506020810190506128c4565b5050509392505050565b5f82601f830112612909576129086127fb565b5b815161291984826020860161288d565b91505092915050565b5f6020828403121561293757612936611e75565b5b5f82015167ffffffffffffffff81111561295457612953611e79565b5b612960848285016128f5565b91505092915050565b5f819050919050565b5f61298c61298761298284612969565b6126dd565b611ed7565b9050919050565b61299c81612972565b82525050565b5f60a0820190506129b55f830188611f7b565b6129c26020830187612993565b81810360408301526129d48186612771565b90506129e360608301856120e5565b6129f06080830184611f7b565b969550505050505056fea2646970667358221220ea78cbb0000693b2b20184f33557143b7061cdeed1f0209f6893c0797690d7ab64736f6c634300081c0033

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

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000052b7d2dcc80cd2e400000000000000000000000000000097c82a2b0a3ae73cc722e0746043fab16ada0c700000000000000000000000000000000000000000000000000000000000000004545345540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035454540000000000000000000000000000000000000000000000000000000000

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

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 00000000000000000000000000000000000000000052b7d2dcc80cd2e4000000
Arg [3] : 00000000000000000000000097c82a2b0a3ae73cc722e0746043fab16ada0c70
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [5] : 5453455400000000000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [7] : 5454540000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

428:7814:9:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1760:89:2;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3979:186;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;806:29:9;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1008:116;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2830:97:2;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1184:72:9;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4757:244:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2688:82;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;467:35:9;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2936:167;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;775:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;875:58;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2773:157;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;543:23;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;939:63;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2985:116:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2293:101:0;;;:::i;:::-;;2578:189:9;;;:::i;:::-;;1638:85:0;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1962:93:2;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3109:159:9;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;508:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3296:178:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3532:140;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2303: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;4068:13;4084:12;:10;:12::i;:::-;4068:28;;4106:31;4115:5;4122:7;4131:5;4106:8;:31::i;:::-;4154:4;4147:11;;;3979:186;;;;:::o;806:29:9:-;;;;:::o;1008:116::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2830:97:2:-;2882:7;2908:12;;2901:19;;2830:97;:::o;1184:72:9:-;;;;;;;;;;;;;;;;;:::o;4757:244:2:-;4844:4;4860:15;4878:12;:10;:12::i;:::-;4860:30;;4900:37;4916:4;4922:7;4931:5;4900:15;:37::i;:::-;4947:26;4957:4;4963:2;4967:5;4947:9;:26::i;:::-;4990:4;4983:11;;;4757:244;;;;;:::o;2688:82::-;2737:5;2761:2;2754:9;;2688:82;:::o;467:35:9:-;;;:::o;2936:167::-;1531:13:0;:11;:13::i;:::-;3088:8:9::1;3053:23;:32;3077:7;3053:32;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;2936:167:::0;;:::o;775:25::-;;;;:::o;875:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;2773:157::-;1531:13:0;:11;:13::i;:::-;2915:8:9::1;2885:18;:27;2904:7;2885:27;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;2773:157:::0;;:::o;543:23::-;;;;;;;;;;;;;:::o;939:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;2985:116:2:-;3050:7;3076:9;:18;3086:7;3076:18;;;;;;;;;;;;;;;;3069:25;;2985:116;;;:::o;2293:101:0:-;1531:13;:11;:13::i;:::-;2357:30:::1;2384:1;2357:18;:30::i;:::-;2293:101::o:0;2578:189:9:-;1531:13:0;:11;:13::i;:::-;2654:1:9::1;2640:10;;:15;2632:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;2706:12;2693:10;:25;;;;2745:15;2728:14;:32;;;;2578:189::o:0;1638:85:0:-;1684:7;1710:6;;;;;;;;;;;1703:13;;1638:85;:::o;1962:93:2:-;2009:13;2041:7;2034:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1962:93;:::o;3109:159:9:-;3184:15;3201:18;3242:19;:17;:19::i;:::-;3235:26;;;;3109:159;;:::o;508:29::-;;;:::o;3296:178:2:-;3365:4;3381:13;3397:12;:10;:12::i;:::-;3381:28;;3419:27;3429:5;3436:2;3440:5;3419:9;:27::i;:::-;3463:4;3456:11;;;3296:178;;;;:::o;3532:140::-;3612:7;3638:11;:18;3650:5;3638:18;;;;;;;;;;;;;;;:27;3657:7;3638:27;;;;;;;;;;;;;;;;3631:34;;3532:140;;;;:::o;2303:269:9:-;2395:1;2372:25;;:11;:25;;;2364:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;2460:9;2446:23;;:10;:23;;;:48;;;;2487:7;:5;:7::i;:::-;2473:21;;:10;:21;;;2446:48;2425:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;2554:11;2543:8;;:22;;;;;;;;;;;;;;;;;;2303:269;:::o;2543:215:0:-;1531:13;:11;:13::i;:::-;2647:1:::1;2627:22;;:8;:22;;::::0;2623:91:::1;;2700:1;2672:31;;;;;;;;;;;:::i;:::-;;;;;;;;2623:91;2723:28;2742:8;2723:18;:28::i;:::-;2543:215:::0;:::o;656:96:5:-;709:7;735:10;728:17;;656:96;:::o;8707:128:2:-;8791:37;8800:5;8807:7;8816:5;8823:4;8791:8;:37::i;:::-;8707:128;;;:::o;10396:476::-;10495:24;10522:25;10532:5;10539:7;10522:9;:25::i;:::-;10495:52;;10580:17;10561:16;:36;10557:309;;;10636:5;10617:16;:24;10613:130;;;10695:7;10704:16;10722:5;10668:60;;;;;;;;;;;;;:::i;:::-;;;;;;;;10613:130;10784:57;10793:5;10800:7;10828:5;10809:16;:24;10835:5;10784:8;:57::i;:::-;10557:309;10485:387;10396:476;;;:::o;5374:300::-;5473:1;5457:18;;:4;:18;;;5453:86;;5525:1;5498:30;;;;;;;;;;;:::i;:::-;;;;;;;;5453:86;5566:1;5552:16;;:2;:16;;;5548:86;;5620:1;5591:32;;;;;;;;;;;:::i;:::-;;;;;;;;5548:86;5643:24;5651:4;5657:2;5661:5;5643:7;:24::i;:::-;5374:300;;;:::o;1796:162:0:-;1866:12;:10;:12::i;:::-;1855:23;;:7;:5;:7::i;:::-;:23;;;1851:101;;1928:12;:10;:12::i;:::-;1901:40;;;;;;;;;;;:::i;:::-;;;;;;;;1851:101;1796:162::o;2912:187::-;2985:16;3004:6;;;;;;;;;;;2985:25;;3029:8;3020:6;;:17;;;;;;;;;;;;;;;;;;3083:8;3052:40;;3073:8;3052:40;;;;;;;;;;;;2975:124;2912:187;:::o;3274:1675:9:-;3350:15;3367:18;3423:1;3405:14;;:19;3401:63;;3448:1;3451;3440:13;;;;;;3401:63;3473:20;3514:14;;3496:15;:32;;;;:::i;:::-;3473:55;;3558:4;3543:12;:19;3539:1028;;;3618:2;3603:12;:17;3599:179;;;3650:4;3640:14;;3705:4;3692:10;:17;;;;:::i;:::-;3679:30;;3735:28;;;3599:179;3833:3;3818:12;:18;3814:180;;;3866:4;3856:14;;3921:3;3908:10;:16;;;;:::i;:::-;3895:29;;3951:28;;;3814:180;4049:3;4034:12;:18;4030:179;;;4082:4;4072:14;;4137:3;4124:10;:16;;;;:::i;:::-;4111:29;;4166:28;;;4030:179;4242:3;4227:12;:18;4223:207;;;4303:4;4293:14;;4358:3;4345:10;:16;;;;:::i;:::-;4332:29;;4387:28;;;4223:207;4454:3;4444:13;;4503:3;4490:10;:16;;;;:::i;:::-;4477:29;;4528:28;;;3539:1028;4595:9;4581:11;;:23;4577:283;;;4630:3;4620:13;;4577:283;;;4675:9;4661:11;;:23;4657:203;;;4710:3;4700:13;;4657:203;;;4755:9;4741:11;;:23;4737:123;;;4790:3;4780:13;;4737:123;;;4841:1;4831:11;;4737:123;4657:203;4577:283;4882:10;4869:23;;4914:28;3274:1675;;;:::o;9682:432:2:-;9811:1;9794:19;;:5;:19;;;9790:89;;9865:1;9836:32;;;;;;;;;;;:::i;:::-;;;;;;;;9790:89;9911:1;9892:21;;:7;:21;;;9888:90;;9964:1;9936:31;;;;;;;;;;;:::i;:::-;;;;;;;;9888:90;10017:5;9987:11;:18;9999:5;9987:18;;;;;;;;;;;;;;;:27;10006:7;9987:27;;;;;;;;;;;;;;;:35;;;;10036:9;10032:76;;;10082:7;10066:31;;10075:5;10066:31;;;10091:5;10066:31;;;;;;:::i;:::-;;;;;;;;10032:76;9682:432;;;;:::o;4955:2200:9:-;5072:15;5089:18;5111:19;:17;:19::i;:::-;5071:59;;;;5141:10;5162:4;5154:12;;:4;:12;;;5141:25;;5180:5;:19;;;;5195:4;5189:10;;:2;:10;;;5180:19;5176:1785;;;5253:1;5240:10;;:14;:40;;;;5258:18;:22;5277:2;5258:22;;;;;;;;;;;;;;;;;;;;;;;;;5240:40;5215:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;5363:1;5352:7;:12;5348:1603;;5388:5;:32;;;;;5398:18;:22;5417:2;5398:22;;;;;;;;;;;;;;;;;;;;;;;;;5397:23;5388:32;5384:1073;;;5490:1;5473:14;;:18;:84;;;;;5554:3;5537:14;;5519:15;:32;;;;:::i;:::-;:38;5473:84;5444:838;;;5759:27;;5643:26;:37;5670:9;5643:37;;;;;;;;;;;;;;;:113;5714:12;5643:113;;;;;;;;;;;;:143;5606:279;;;;;;;;;;;;:::i;:::-;;;;;;;;;5911:26;:37;5938:9;5911:37;;;;;;;;;;;;;;;:51;5949:12;5911:51;;;;;;;;;;;;:53;;;;;;;;;:::i;:::-;;;;;;6094:18;;6028:17;:31;6046:12;6028:31;;;;;;;;;;;;:84;5991:209;;;;;;;;;;;;:::i;:::-;;;;;;;;;6226:17;:31;6244:12;6226:31;;;;;;;;;;;;:33;;;;;;;;;:::i;:::-;;;;;;5444:838;6304:11;6338:5;6327:7;6319:5;:15;;;;:::i;:::-;6318:25;;;;:::i;:::-;6304:39;;6374:3;6365:12;;;;;:::i;:::-;;;6399:39;6413:4;6427;6434:3;6399:13;:39::i;:::-;5422:1035;5384:1073;6480:5;6479:6;:35;;;;;6490:18;:24;6509:4;6490:24;;;;;;;;;;;;;;;;;;;;;;;;;6489:25;6479:35;6475:257;;;6538:11;6572:5;6561:7;6553:5;:15;;;;:::i;:::-;6552:25;;;;:::i;:::-;6538:39;;6608:3;6599:12;;;;;:::i;:::-;;;6633:39;6647:4;6661;6668:3;6633:13;:39::i;:::-;6694:19;:17;:19::i;:::-;6516:216;6475:257;5348:1603;;;6841:5;6840:6;:35;;;;;6851:18;:24;6870:4;6851:24;;;;;;;;;;;;;;;;;;;;;;;;;6850:25;6840:35;6836:101;;;6899:19;:17;:19::i;:::-;6836:101;5348:1603;5176:1785;6992:23;:27;7016:2;6992:27;;;;;;;;;;;;;;;;;;;;;;;;;:66;;;;7048:10;7031:13;7041:2;7031:9;:13::i;:::-;7023:5;:21;;;;:::i;:::-;:35;;6992:66;6971:137;;;;;;;;;;;;:::i;:::-;;;;;;;;;7118:30;7132:4;7138:2;7142:5;7118:13;:30::i;:::-;5061:2094;;;4955:2200;;;:::o;5989:1107:2:-;6094:1;6078:18;;:4;:18;;;6074:540;;6230:5;6214:12;;:21;;;;;;;:::i;:::-;;;;;;;;6074:540;;;6266:19;6288:9;:15;6298:4;6288:15;;;;;;;;;;;;;;;;6266:37;;6335:5;6321:11;:19;6317:115;;;6392:4;6398:11;6411:5;6367:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;6317:115;6584:5;6570:11;:19;6552:9;:15;6562:4;6552:15;;;;;;;;;;;;;;;:37;;;;6252:362;6074:540;6642:1;6628:16;;:2;:16;;;6624:425;;6807:5;6791:12;;:21;;;;;;;;;;;6624:425;;;7019:5;7002:9;:13;7012:2;7002:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;6624:425;7079:2;7064:25;;7073:4;7064:25;;;7083:5;7064:25;;;;;;:::i;:::-;;;;;;;;5989:1107;;;:::o;7161:1079:9:-;7209:17;7247:14;;7229:15;:32;;;;:::i;:::-;7209:52;;7287:3;7275:9;:15;7271:52;;;7306:7;;;7271:52;7333:20;7356:24;7374:4;7356:9;:24::i;:::-;7333:47;;7411:1;7395:12;:17;7391:54;;7428:7;;;;7391:54;7455:22;7494:1;7480:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7455:41;;7517:5;7506;7512:1;7506:8;;;;;;;;:::i;:::-;;;;;;;:16;;;;;;;;;;;7551:4;7532:5;7538:1;7532:8;;;;;;;;:::i;:::-;;;;;;;:24;;;;;;;;;;;7609:23;646:42;7635:21;;;7657:7;7666:5;7635:37;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7673:1;7635:40;;;;;;;;:::i;:::-;;;;;;;;7609:66;;7705:15;7690:12;:30;7686:91;;;7751:15;7736:30;;7686:91;7806:4;7787:5;7793:1;7787:8;;;;;;;;:::i;:::-;;;;;;;:24;;;;;;;;;;;7832:5;7821;7827:1;7821:8;;;;;;;;:::i;:::-;;;;;;;:16;;;;;;;;;;;7848:30;7889:8;;;;;;;;;;;7881:25;;;7848:58;;646:42;7916:58;;;7988:12;8014:1;8029:5;8048:8;;;;;;;;;;;8070:15;7916:179;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8105:29;8145:8;;;;;;;;;;;8137:25;;;8105:57;;8211:22;8187:21;:46;;;;:::i;:::-;8172:11;;:61;;;;;;;:::i;:::-;;;;;;;;7199:1041;;;;;;7161:1079;:::o;7:99:10:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:139::-;376:6;371:3;366;360:23;417:1;408:6;403:3;399:16;392:27;287:139;;;:::o;432:102::-;473:6;524:2;520:7;515:2;508:5;504:14;500:28;490:38;;432:102;;;:::o;540:377::-;628:3;656:39;689:5;656:39;:::i;:::-;711:71;775:6;770:3;711:71;:::i;:::-;704:78;;791:65;849:6;844:3;837:4;830:5;826:16;791:65;:::i;:::-;881:29;903:6;881:29;:::i;:::-;876:3;872:39;865:46;;632:285;540:377;;;;:::o;923:313::-;1036:4;1074:2;1063:9;1059:18;1051:26;;1123:9;1117:4;1113:20;1109:1;1098:9;1094:17;1087:47;1151:78;1224:4;1215:6;1151:78;:::i;:::-;1143:86;;923:313;;;;:::o;1242:75::-;1275:6;1308:2;1302:9;1292:19;;1242:75;:::o;1323:117::-;1432:1;1429;1422:12;1446:117;1555:1;1552;1545:12;1569:126;1606:7;1646:42;1639:5;1635:54;1624:65;;1569:126;;;:::o;1701:96::-;1738:7;1767:24;1785:5;1767:24;:::i;:::-;1756:35;;1701:96;;;:::o;1803:122::-;1876:24;1894:5;1876:24;:::i;:::-;1869:5;1866:35;1856:63;;1915:1;1912;1905:12;1856:63;1803:122;:::o;1931:139::-;1977:5;2015:6;2002:20;1993:29;;2031:33;2058:5;2031:33;:::i;:::-;1931:139;;;;:::o;2076:77::-;2113:7;2142:5;2131:16;;2076:77;;;:::o;2159:122::-;2232:24;2250:5;2232:24;:::i;:::-;2225:5;2222:35;2212:63;;2271:1;2268;2261:12;2212:63;2159:122;:::o;2287:139::-;2333:5;2371:6;2358:20;2349:29;;2387:33;2414:5;2387:33;:::i;:::-;2287:139;;;;:::o;2432:474::-;2500:6;2508;2557:2;2545:9;2536:7;2532:23;2528:32;2525:119;;;2563:79;;:::i;:::-;2525:119;2683:1;2708:53;2753:7;2744:6;2733:9;2729:22;2708:53;:::i;:::-;2698:63;;2654:117;2810:2;2836:53;2881:7;2872:6;2861:9;2857:22;2836:53;:::i;:::-;2826:63;;2781:118;2432:474;;;;;:::o;2912:90::-;2946:7;2989:5;2982:13;2975:21;2964:32;;2912:90;;;:::o;3008:109::-;3089:21;3104:5;3089:21;:::i;:::-;3084:3;3077:34;3008:109;;:::o;3123:210::-;3210:4;3248:2;3237:9;3233:18;3225:26;;3261:65;3323:1;3312:9;3308:17;3299:6;3261:65;:::i;:::-;3123:210;;;;:::o;3339:118::-;3426:24;3444:5;3426:24;:::i;:::-;3421:3;3414:37;3339:118;;:::o;3463:222::-;3556:4;3594:2;3583:9;3579:18;3571:26;;3607:71;3675:1;3664:9;3660:17;3651:6;3607:71;:::i;:::-;3463:222;;;;:::o;3691:329::-;3750:6;3799:2;3787:9;3778:7;3774:23;3770:32;3767:119;;;3805:79;;:::i;:::-;3767:119;3925:1;3950:53;3995:7;3986:6;3975:9;3971:22;3950:53;:::i;:::-;3940:63;;3896:117;3691:329;;;;:::o;4026:619::-;4103:6;4111;4119;4168:2;4156:9;4147:7;4143:23;4139:32;4136:119;;;4174:79;;:::i;:::-;4136:119;4294:1;4319:53;4364:7;4355:6;4344:9;4340:22;4319:53;:::i;:::-;4309:63;;4265:117;4421:2;4447:53;4492:7;4483:6;4472:9;4468:22;4447:53;:::i;:::-;4437:63;;4392:118;4549:2;4575:53;4620:7;4611:6;4600:9;4596:22;4575:53;:::i;:::-;4565:63;;4520:118;4026:619;;;;;:::o;4651:86::-;4686:7;4726:4;4719:5;4715:16;4704:27;;4651:86;;;:::o;4743:112::-;4826:22;4842:5;4826:22;:::i;:::-;4821:3;4814:35;4743:112;;:::o;4861:214::-;4950:4;4988:2;4977:9;4973:18;4965:26;;5001:67;5065:1;5054:9;5050:17;5041:6;5001:67;:::i;:::-;4861:214;;;;:::o;5081:116::-;5151:21;5166:5;5151:21;:::i;:::-;5144:5;5141:32;5131:60;;5187:1;5184;5177:12;5131:60;5081:116;:::o;5203:133::-;5246:5;5284:6;5271:20;5262:29;;5300:30;5324:5;5300:30;:::i;:::-;5203:133;;;;:::o;5342:468::-;5407:6;5415;5464:2;5452:9;5443:7;5439:23;5435:32;5432:119;;;5470:79;;:::i;:::-;5432:119;5590:1;5615:53;5660:7;5651:6;5640:9;5636:22;5615:53;:::i;:::-;5605:63;;5561:117;5717:2;5743:50;5785:7;5776:6;5765:9;5761:22;5743:50;:::i;:::-;5733:60;;5688:115;5342:468;;;;;:::o;5816:329::-;5875:6;5924:2;5912:9;5903:7;5899:23;5895:32;5892:119;;;5930:79;;:::i;:::-;5892:119;6050:1;6075:53;6120:7;6111:6;6100:9;6096:22;6075:53;:::i;:::-;6065:63;;6021:117;5816:329;;;;:::o;6151:118::-;6238:24;6256:5;6238:24;:::i;:::-;6233:3;6226:37;6151:118;;:::o;6275:222::-;6368:4;6406:2;6395:9;6391:18;6383:26;;6419:71;6487:1;6476:9;6472:17;6463:6;6419:71;:::i;:::-;6275:222;;;;:::o;6503:332::-;6624:4;6662:2;6651:9;6647:18;6639:26;;6675:71;6743:1;6732:9;6728:17;6719:6;6675:71;:::i;:::-;6756:72;6824:2;6813:9;6809:18;6800:6;6756:72;:::i;:::-;6503:332;;;;;:::o;6841:474::-;6909:6;6917;6966:2;6954:9;6945:7;6941:23;6937:32;6934:119;;;6972:79;;:::i;:::-;6934:119;7092:1;7117:53;7162:7;7153:6;7142:9;7138:22;7117:53;:::i;:::-;7107:63;;7063:117;7219:2;7245:53;7290:7;7281:6;7270:9;7266:22;7245:53;:::i;:::-;7235:63;;7190:118;6841:474;;;;;:::o;7321:180::-;7369:77;7366:1;7359:88;7466:4;7463:1;7456:15;7490:4;7487:1;7480:15;7507:320;7551:6;7588:1;7582:4;7578:12;7568:22;;7635:1;7629:4;7625:12;7656:18;7646:81;;7712:4;7704:6;7700:17;7690:27;;7646:81;7774:2;7766:6;7763:14;7743:18;7740:38;7737:84;;7793:18;;:::i;:::-;7737:84;7558:269;7507:320;;;:::o;7833:173::-;7973:25;7969:1;7961:6;7957:14;7950:49;7833:173;:::o;8012:366::-;8154:3;8175:67;8239:2;8234:3;8175:67;:::i;:::-;8168:74;;8251:93;8340:3;8251:93;:::i;:::-;8369:2;8364:3;8360:12;8353:19;;8012:366;;;:::o;8384:419::-;8550:4;8588:2;8577:9;8573:18;8565:26;;8637:9;8631:4;8627:20;8623:1;8612:9;8608:17;8601:47;8665:131;8791:4;8665:131;:::i;:::-;8657:139;;8384:419;;;:::o;8809:163::-;8949:15;8945:1;8937:6;8933:14;8926:39;8809:163;:::o;8978:366::-;9120:3;9141:67;9205:2;9200:3;9141:67;:::i;:::-;9134:74;;9217:93;9306:3;9217:93;:::i;:::-;9335:2;9330:3;9326:12;9319:19;;8978:366;;;:::o;9350:419::-;9516:4;9554:2;9543:9;9539:18;9531:26;;9603:9;9597:4;9593:20;9589:1;9578:9;9574:17;9567:47;9631:131;9757:4;9631:131;:::i;:::-;9623:139;;9350:419;;;:::o;9775:163::-;9915:15;9911:1;9903:6;9899:14;9892:39;9775:163;:::o;9944:366::-;10086:3;10107:67;10171:2;10166:3;10107:67;:::i;:::-;10100:74;;10183:93;10272:3;10183:93;:::i;:::-;10301:2;10296:3;10292:12;10285:19;;9944:366;;;:::o;10316:419::-;10482:4;10520:2;10509:9;10505:18;10497:26;;10569:9;10563:4;10559:20;10555:1;10544:9;10540:17;10533:47;10597:131;10723:4;10597:131;:::i;:::-;10589:139;;10316:419;;;:::o;10741:442::-;10890:4;10928:2;10917:9;10913:18;10905:26;;10941:71;11009:1;10998:9;10994:17;10985:6;10941:71;:::i;:::-;11022:72;11090:2;11079:9;11075:18;11066:6;11022:72;:::i;:::-;11104;11172:2;11161:9;11157:18;11148:6;11104:72;:::i;:::-;10741:442;;;;;;:::o;11189:180::-;11237:77;11234:1;11227:88;11334:4;11331:1;11324:15;11358:4;11355:1;11348:15;11375:194;11415:4;11435:20;11453:1;11435:20;:::i;:::-;11430:25;;11469:20;11487:1;11469:20;:::i;:::-;11464:25;;11513:1;11510;11506:9;11498:17;;11537:1;11531:4;11528:11;11525:37;;;11542:18;;:::i;:::-;11525:37;11375:194;;;;:::o;11575:180::-;11623:77;11620:1;11613:88;11720:4;11717:1;11710:15;11744:4;11741:1;11734:15;11761:185;11801:1;11818:20;11836:1;11818:20;:::i;:::-;11813:25;;11852:20;11870:1;11852:20;:::i;:::-;11847:25;;11891:1;11881:35;;11896:18;;:::i;:::-;11881:35;11938:1;11935;11931:9;11926:14;;11761:185;;;;:::o;11952:169::-;12092:21;12088:1;12080:6;12076:14;12069:45;11952:169;:::o;12127:366::-;12269:3;12290:67;12354:2;12349:3;12290:67;:::i;:::-;12283:74;;12366:93;12455:3;12366:93;:::i;:::-;12484:2;12479:3;12475:12;12468:19;;12127:366;;;:::o;12499:419::-;12665:4;12703:2;12692:9;12688:18;12680:26;;12752:9;12746:4;12742:20;12738:1;12727:9;12723:17;12716:47;12780:131;12906:4;12780:131;:::i;:::-;12772:139;;12499:419;;;:::o;12924:228::-;13064:34;13060:1;13052:6;13048:14;13041:58;13133:11;13128:2;13120:6;13116:15;13109:36;12924:228;:::o;13158:366::-;13300:3;13321:67;13385:2;13380:3;13321:67;:::i;:::-;13314:74;;13397:93;13486:3;13397:93;:::i;:::-;13515:2;13510:3;13506:12;13499:19;;13158:366;;;:::o;13530:419::-;13696:4;13734:2;13723:9;13719:18;13711:26;;13783:9;13777:4;13773:20;13769:1;13758:9;13754:17;13747:47;13811:131;13937:4;13811:131;:::i;:::-;13803:139;;13530:419;;;:::o;13955:233::-;13994:3;14017:24;14035:5;14017:24;:::i;:::-;14008:33;;14063:66;14056:5;14053:77;14050:103;;14133:18;;:::i;:::-;14050:103;14180:1;14173:5;14169:13;14162:20;;13955:233;;;:::o;14194:180::-;14334:32;14330:1;14322:6;14318:14;14311:56;14194:180;:::o;14380:366::-;14522:3;14543:67;14607:2;14602:3;14543:67;:::i;:::-;14536:74;;14619:93;14708:3;14619:93;:::i;:::-;14737:2;14732:3;14728:12;14721:19;;14380:366;;;:::o;14752:419::-;14918:4;14956:2;14945:9;14941:18;14933:26;;15005:9;14999:4;14995:20;14991:1;14980:9;14976:17;14969:47;15033:131;15159:4;15033:131;:::i;:::-;15025:139;;14752:419;;;:::o;15177:410::-;15217:7;15240:20;15258:1;15240:20;:::i;:::-;15235:25;;15274:20;15292:1;15274:20;:::i;:::-;15269:25;;15329:1;15326;15322:9;15351:30;15369:11;15351:30;:::i;:::-;15340:41;;15530:1;15521:7;15517:15;15514:1;15511:22;15491:1;15484:9;15464:83;15441:139;;15560:18;;:::i;:::-;15441:139;15225:362;15177:410;;;;:::o;15593:191::-;15633:3;15652:20;15670:1;15652:20;:::i;:::-;15647:25;;15686:20;15704:1;15686:20;:::i;:::-;15681:25;;15729:1;15726;15722:9;15715:16;;15750:3;15747:1;15744:10;15741:36;;;15757:18;;:::i;:::-;15741:36;15593:191;;;;:::o;15790:174::-;15930:26;15926:1;15918:6;15914:14;15907:50;15790:174;:::o;15970:366::-;16112:3;16133:67;16197:2;16192:3;16133:67;:::i;:::-;16126:74;;16209:93;16298:3;16209:93;:::i;:::-;16327:2;16322:3;16318:12;16311:19;;15970:366;;;:::o;16342:419::-;16508:4;16546:2;16535:9;16531:18;16523:26;;16595:9;16589:4;16585:20;16581:1;16570:9;16566:17;16559:47;16623:131;16749:4;16623:131;:::i;:::-;16615:139;;16342:419;;;:::o;16767:180::-;16815:77;16812:1;16805:88;16912:4;16909:1;16902:15;16936:4;16933:1;16926:15;16953:180;17001:77;16998:1;16991:88;17098:4;17095:1;17088:15;17122:4;17119:1;17112:15;17139:103;17202:7;17231:5;17220:16;;17139:103;;;:::o;17248:60::-;17276:3;17297:5;17290:12;;17248:60;;;:::o;17314:194::-;17390:9;17423:79;17441:60;17450:50;17494:5;17450:50;:::i;:::-;17441:60;:::i;:::-;17423:79;:::i;:::-;17410:92;;17314:194;;;:::o;17514:183::-;17627:63;17684:5;17627:63;:::i;:::-;17622:3;17615:76;17514:183;;:::o;17703:114::-;17770:6;17804:5;17798:12;17788:22;;17703:114;;;:::o;17823:184::-;17922:11;17956:6;17951:3;17944:19;17996:4;17991:3;17987:14;17972:29;;17823:184;;;;:::o;18013:132::-;18080:4;18103:3;18095:11;;18133:4;18128:3;18124:14;18116:22;;18013:132;;;:::o;18151:108::-;18228:24;18246:5;18228:24;:::i;:::-;18223:3;18216:37;18151:108;;:::o;18265:179::-;18334:10;18355:46;18397:3;18389:6;18355:46;:::i;:::-;18433:4;18428:3;18424:14;18410:28;;18265:179;;;;:::o;18450:113::-;18520:4;18552;18547:3;18543:14;18535:22;;18450:113;;;:::o;18599:732::-;18718:3;18747:54;18795:5;18747:54;:::i;:::-;18817:86;18896:6;18891:3;18817:86;:::i;:::-;18810:93;;18927:56;18977:5;18927:56;:::i;:::-;19006:7;19037:1;19022:284;19047:6;19044:1;19041:13;19022:284;;;19123:6;19117:13;19150:63;19209:3;19194:13;19150:63;:::i;:::-;19143:70;;19236:60;19289:6;19236:60;:::i;:::-;19226:70;;19082:224;19069:1;19066;19062:9;19057:14;;19022:284;;;19026:14;19322:3;19315:10;;18723:608;;;18599:732;;;;:::o;19337:535::-;19534:4;19572:2;19561:9;19557:18;19549:26;;19585:97;19679:1;19668:9;19664:17;19655:6;19585:97;:::i;:::-;19729:9;19723:4;19719:20;19714:2;19703:9;19699:18;19692:48;19757:108;19860:4;19851:6;19757:108;:::i;:::-;19749:116;;19337:535;;;;;:::o;19878:117::-;19987:1;19984;19977:12;20001:281;20084:27;20106:4;20084:27;:::i;:::-;20076:6;20072:40;20214:6;20202:10;20199:22;20178:18;20166:10;20163:34;20160:62;20157:88;;;20225:18;;:::i;:::-;20157:88;20265:10;20261:2;20254:22;20044:238;20001:281;;:::o;20288:129::-;20322:6;20349:20;;:::i;:::-;20339:30;;20378:33;20406:4;20398:6;20378:33;:::i;:::-;20288:129;;;:::o;20423:311::-;20500:4;20590:18;20582:6;20579:30;20576:56;;;20612:18;;:::i;:::-;20576:56;20662:4;20654:6;20650:17;20642:25;;20722:4;20716;20712:15;20704:23;;20423:311;;;:::o;20740:117::-;20849:1;20846;20839:12;20863:143;20920:5;20951:6;20945:13;20936:22;;20967:33;20994:5;20967:33;:::i;:::-;20863:143;;;;:::o;21029:732::-;21136:5;21161:81;21177:64;21234:6;21177:64;:::i;:::-;21161:81;:::i;:::-;21152:90;;21262:5;21291:6;21284:5;21277:21;21325:4;21318:5;21314:16;21307:23;;21378:4;21370:6;21366:17;21358:6;21354:30;21407:3;21399:6;21396:15;21393:122;;;21426:79;;:::i;:::-;21393:122;21541:6;21524:231;21558:6;21553:3;21550:15;21524:231;;;21633:3;21662:48;21706:3;21694:10;21662:48;:::i;:::-;21657:3;21650:61;21740:4;21735:3;21731:14;21724:21;;21600:155;21584:4;21579:3;21575:14;21568:21;;21524:231;;;21528:21;21142:619;;21029:732;;;;;:::o;21784:385::-;21866:5;21915:3;21908:4;21900:6;21896:17;21892:27;21882:122;;21923:79;;:::i;:::-;21882:122;22033:6;22027:13;22058:105;22159:3;22151:6;22144:4;22136:6;22132:17;22058:105;:::i;:::-;22049:114;;21872:297;21784:385;;;;:::o;22175:554::-;22270:6;22319:2;22307:9;22298:7;22294:23;22290:32;22287:119;;;22325:79;;:::i;:::-;22287:119;22466:1;22455:9;22451:17;22445:24;22496:18;22488:6;22485:30;22482:117;;;22518:79;;:::i;:::-;22482:117;22623:89;22704:7;22695:6;22684:9;22680:22;22623:89;:::i;:::-;22613:99;;22416:306;22175:554;;;;:::o;22735:85::-;22780:7;22809:5;22798:16;;22735:85;;;:::o;22826:158::-;22884:9;22917:61;22935:42;22944:32;22970:5;22944:32;:::i;:::-;22935:42;:::i;:::-;22917:61;:::i;:::-;22904:74;;22826:158;;;:::o;22990:147::-;23085:45;23124:5;23085:45;:::i;:::-;23080:3;23073:58;22990:147;;:::o;23143:831::-;23406:4;23444:3;23433:9;23429:19;23421:27;;23458:71;23526:1;23515:9;23511:17;23502:6;23458:71;:::i;:::-;23539:80;23615:2;23604:9;23600:18;23591:6;23539:80;:::i;:::-;23666:9;23660:4;23656:20;23651:2;23640:9;23636:18;23629:48;23694:108;23797:4;23788:6;23694:108;:::i;:::-;23686:116;;23812:72;23880:2;23869:9;23865:18;23856:6;23812:72;:::i;:::-;23894:73;23962:3;23951:9;23947:19;23938:6;23894:73;:::i;:::-;23143:831;;;;;;;;:::o

Swarm Source

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