ETH Price: $2,529.64 (+0.26%)

Token

Diversity Equity and Inclusion (DEI)
 

Overview

Max Total Supply

1,000,000,000 DEI

Holders

141

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
Null: 0x000...000
Balance
0 DEI

Value
$0.00
0x0000000000000000000000000000000000000000
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:
DEI

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-01-12
*/

/*

Hi friends. This #1 DEI community in world. We honor people. Fight bigot. Bring DEI to NBA and all place.

You join us: https://weidei.xyz

https://t.me/diversityequityandinclusion
https://twitter.com/wuwei113
https://twitter.com/dei4all



@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%%%%%%%%%%%%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%%#%#######**##%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%######*#*******###%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%%%%##+**+++****###%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%#%#%@%%@@%#+*#%#***###%%%%%%@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%#%%@@@@@@@@@@@#+*#@%*****####%%%%@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%##@@@@@@@@@@@@@@@%**%%*##++++****##%%@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%@@@@@@@@%*+*%@@@%@@@@@@@@@@@@@@%##*%%*++++++*##%%%@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@%%%%@@@@@%%%%%@@@@@@@@##*%@@@@@@@@@@@@@@@@@@@%@%**%##*====+**##%%@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@%%#####%####***@@@@@@@@%*#@@@@@@@@@@@@@@@@@@@@%**%+==+#*----==++**###@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@%##******++++++*@@@@@@@@#+#%%@@@@@@@@@@@@@@@@@@@@%+*+++***+----===++***#%@@@@@@@@@@@@@@
@@@@@@@@@@@@#**++++========+%@@@@@@@%++*+++*##%@@@@@@@@@@@@%%##+++-*%%%#*----====+++**%@@@@@@@@@@@@@
@@@@@@@@@@@#++++==========+%@@@@@@@@%*+====++++#@@@%@@@@@@@%*#+++++=#%@%%*---====+++***%@@@@@@@@@@@@
@@@@@@@@@@#+++============*@@@@@@@@%#**=--=-++***%@%%%%%@@%#++*+=*#=+%%@@#=--=====++++**%@@@@@@@@@@@
@@@@@@@@@#+++============+*@@@@@@@@%#*+--:+=-==*+*#%%##*%%*++*=%*#%%**%@@@==-======+++++*%@@@@@@@@@@
@@@@@@@@%++======-----===+%@@@@@@@%%*+==---=--+=+*==%%#=+++*#%%*%%@%@#%@@@=+========+++++*@@@@@@@@@@
@@@@@@@@+====-----------=*@@@@@@@@#*+=+===+==-====-==+#++=#%%@%%#@%%@@%@@@+==========+++++#@@@@@@@@@
@@@@@@@#===-------------=#@@@@@@@#*++++=--====+++-==-+-+#*+#%%@@%#@%@@@%@#*=--=========++++%@@@@@@@@
@@@@@@@+---------::::::-=@@@@@@%#******=-:-:-+=:-+==-=+-=*+=*##@@#@@@@@@%**------=========+*@@@@@@@@
@@@@@@%--------:::::::--%@@@@@%%%%@@@%%#*=--:+=-::--++=-::++++**#%%@%@@@@**--------========+@@@@@@@@
@@@@@@*--------::::::--+@@@@@+--=*++=++*+==-:--=+++*+**++=+::===*+*%%@@@@*+----------=======#@@@@@@@
@@@@@@=--------::::::=-#%%@**++*#%%#==+*+=-:..:=-=++=:-.......:..-+##@@@@%==-----------=====*@@@@@@@
@@@@@@---------::::::-*++##*=:**=%%%+++*+==...=++=++++*==-.:....---#*%%@@%--------------====+@@@@@@@
@@@@@@---------:::::-==++%-+::-====+##*#*+=-:+-+=::-%@@**+:--==:...=*%%*%@+==-----------====+@@@@@@@
@@@@@%----------::::+++:=#:-::---=+****%=++-:=-.++=+---==+*=......:++*==*%+==-------------==+@@@@@@@
@@@%%%-:::::----:::-++-:-+=:::::--=+++*#+=++===..-++----..--......-:--:+=++::::-----------==+@@@@@@@
@%%%%%-:::::::::::::++-::=+=-::::-=++*#*+=..=+:++-:::::...+.......=*-:.+=*+-:::::----------=*@@@@@@@
%%%%%%=..:::::::::::+=+-==-:+=:::-+*#%#*-::..-+=.-:::::.:+:.......=--=.+*#==::::::---------=#@@@@@@@
%%%%##*........:::::======+::-==++*#%*=---:....-=+++====-.........=:-:++*#:=:::::::--------=%@@@@@@@
%%%##*#..........::::-:--+#-::::--=*#***+==--=+==+=-:::.............:=#**#-=--::::---------+@@@@@@@@
%%%###*=.........:::::::-+#*------=+****+*+-=+=:.:*--::............-++**##+==-:::---------=%@@@@@@@@
%%%%##*#........:::---==-+%%=----=+=++++=::#:.....:---::.........-#*%**+*%*==+:----------=+@@@@@@@@@
@%%%%##**....:::::-+***+*%%@#---=+***#%%%#+---:...:==-:::.......:#%%%**+###==-=---------==@@@@@@@@@@
@%%%%%%#%+.:::::::-=**###@@@@#===+#%@@%@###***++*+*%#-:::......:#%##@***%%*++-----------=#@@@@@@@@@@
@@%%%%%%%%=.:::-:::-=***@@@@@@%+++*##%%@%****+==:::-#=:::......*%%%%%**#@%++=++=------==#@@@@@@@@@@@
@@@@@%%%%%%=::====--++#%@@@@@@@%******#%%%*++==--:.:---:::....:%#%%%%+*%@%*=++==----===*@@@@@@@@@@@@
@@@@@@@@@@@@==*%###*##%@@@@@@@@@@*++++**#%%%%*+-::::::::::::..-*+%%#*+#%@%*=++=+-----=*@@@@@@@@@@@@@
@@@@@@@@@@@@@%%%%%%%%%%@@@@@@@@@@#%*===++**#*=-::::::::::::...-##%%*+-**%++*+==------#@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@%%%%%%%%@@@@@@@@@@##%+++=++***-:::::::--:::.....#*##+*+*+*+--*--=---=%@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@#*+*###%%%%@@@@@@%*%+=++**####*+=====-:::.....:**##**#%#+++=+==---*@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@%+##****+#%@@@@@%%*+-==+**#%%%#+=---:::......:+##*##%@%*+++===-=#@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@%+**-==+%#%@@@@@@*---==+*###+=---:::::....-=*#+=+*#%##%##*=+#%@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@%=+--=+=-*@%@@@#----==+***+==--:::::...--=%@*:=#-==#*%%#%%%%%@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@%%+-=*-=*%@@@%+----==++**##*=--:::-:.:-+#@@%=-+=+==+####%%%%@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@%%#**+*%@#%+*-----==++***#*+=--:::::=**##%@@#*+#%#*###%%%%%@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@%%%%%%%#%*=*-----==+++**##*=----:-+**+**+#%@@%%%###%%%%%%@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@%%%%%%%*#===--===++**###+---++***==**%@@%%%%%%%%%%%%%@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%@%@@@@@@@%#*+++++*#%#+=+##*##%@@@@@@@@@%%%%%%%%%@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

*/ 


// SPDX-License-Identifier: MIT
pragma solidity 0.8.21;

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

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

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

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

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

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

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. 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 {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        _transferOwnership(newOwner);
    }

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

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
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 amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

    /**
     * @dev Moves `amount` 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 amount) 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 `amount` 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 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` 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 amount
    ) external returns (bool);
}

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
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);
}

/**
 * @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}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 *
 * 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 ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the 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 override returns (uint8) {
        return 18;
    }

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

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

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

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

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` 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 amount
    ) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * 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 `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

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

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

        return true;
    }

    /**
     * @dev Moves `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.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(
            fromBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

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

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

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

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

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

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

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

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

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

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

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

/// Uniswap factory interface
interface IFactory {
    function createPair(
        address tokenA,
        address tokenB
    ) external returns (address pair);
}

/// Uniswap Router interface
interface IUniswapRouter {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

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

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

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

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

/// @title DEI: Diversity Equity and Inclusion
contract DEI is ERC20, Ownable {
    /// @notice MAX SUPPLY 1 Billion DEI
    uint256 private constant MAX_SUPPLY = 1_000_000_000 * 1e18;
    /// @notice max buy per tx
    uint256 maxBuyAmountPerTx = MAX_SUPPLY / 100;
    /// @notice max sell per tx
    uint256 maxSellAmountPerTx = MAX_SUPPLY / 100;
    /// @notice marketing wallet address
    address public marketingWallet = 0x2d28DAe821982842f2Af805BF0FA7384E69EA7b6;
    /// @notice WeiWuSalary wallet address
    address public weiWuSalaryWallet =
        0xC0Cc0E340c7a6F154c86ec0455ffF55f1c07B868;
    /// @notice uniswapV2Router
    IUniswapRouter public immutable uniswapV2Router;
    /// @notice uniswapPair
    address public immutable uniswapPair;
    /// fees struct
    struct BuyFee {
        uint256 marketing;
        uint256 weiWuSalary;
        uint256 autoLP;
    }
    struct SellFee {
        uint256 marketing;
        uint256 weiWuSalary;
        uint256 autoLP;
    }

    /// @notice buyFee
    BuyFee public buyFee;
    /// @notice sellFee
    SellFee public sellFee;
    /// @notice swapping status
    bool swapping = false;
    /// @notice tax is modifiable or not
    bool taxIsLocked = false;
    /// @notice tax admin
    address taxAdmin;
    /// @notice manage exclude / incclude from fees
    mapping(address => bool) isExcludedFromFees;

    ///  errors
    error OnlyMarketingWallet();
    error MaxBuyPerTxExceeds();
    error MaxSellPerTxExceeds();
    error OnlyTaxAdmin();
    error Renounced();
    error MinOnePercent();

    constructor() ERC20("Diversity Equity and Inclusion", "DEI") {
        uniswapV2Router = IUniswapRouter(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        uniswapPair = IFactory(uniswapV2Router.factory()).createPair(
            address(this),
            uniswapV2Router.WETH()
        );
        taxAdmin = address(0xaBDF7661B28698fD6Db04991968E0DfaCd949411);

        buyFee.marketing = 1;
        buyFee.weiWuSalary = 1;
        buyFee.autoLP = 1;

        sellFee.marketing = 1;
        sellFee.weiWuSalary = 1;
        sellFee.autoLP = 1;

        isExcludedFromFees[owner()] = true;
        isExcludedFromFees[address(this)] = true;
        isExcludedFromFees[marketingWallet] = true;
        isExcludedFromFees[weiWuSalaryWallet] = true;
        _mint(msg.sender, MAX_SUPPLY);
    }

    receive() external payable {}

    /// @dev claim any erc20 token, accidently sent to token contract
    /// @param token: token to rescue
    /// @param amount: amount to rescue
    /// Requirements -
    /// only marketing wallet can rescue stucked tokens
    function claimStuckedERC20(address token, uint256 amount) external {
        if (msg.sender != marketingWallet) {
            revert OnlyMarketingWallet();
        }
        // bytes4(keccak256(bytes('transfer(address,uint256)')));
        (bool success, bytes memory data) = token.call(
            abi.encodeWithSelector(0xa9059cbb, marketingWallet, amount)
        );
        require(
            success && (data.length == 0 || abi.decode(data, (bool))),
            "BARC: TOKEN_CLAIM_FAILED"
        );
    }

    /// @dev exclude or include a address from / to fees
    /// @param user: user address to exclude or include
    /// @param excluded: true to exclude, false to include
    function exlcudeFromFees(address user, bool excluded) external onlyOwner {
        isExcludedFromFees[user] = excluded;
    }

    /// @dev update max buy  amount per tx globally
    /// @param _percent: pecent of total supply
    /// Requirements -
    /// must be 1 or more
    function updateBuyAmountPerTx(uint256 _percent) external onlyOwner {
        if (_percent < 1) {
            revert MinOnePercent();
        }
        maxBuyAmountPerTx = (totalSupply() * _percent) / 100;
    }

    /// @dev update max sell amount per tx globally
    ///  /// @param _percent: pecent of total supply
    /// Requirements -
    /// must be 1 or more
    function updateSellAmountPerTx(uint256 _percent) external onlyOwner {
        if (_percent < 1) {
            revert MinOnePercent();
        }
        maxSellAmountPerTx = (totalSupply() * _percent) / 100;
    }

    /// @dev update buy tax globally
    /// @param _marketing: new  marketing tax on buy
    /// @param _wwsalary: new wei wu tax on buy
    /// @param _lp: new lp tax on buy
    function updateBuyTax(
        uint256 _marketing,
        uint256 _wwsalary,
        uint256 _lp
    ) external {
        if (taxIsLocked) {
            revert Renounced();
        }
        if(owner() != address(0)){
            require (msg.sender == owner());
        } else {
           require ( msg.sender == taxAdmin);
        }
        buyFee.marketing = _marketing;
        buyFee.weiWuSalary = _wwsalary;
        buyFee.autoLP = _lp;
    }

    /// @dev update sell tax globally
    /// @param _marketing: new  marketing tax on sell
    /// @param _wwsalary: new wei wu tax on sell
    /// @param _lp: new lp tax on sell
    function updateSellTax(
        uint256 _marketing,
        uint256 _wwsalary,
        uint256 _lp
    ) external {
        if (taxIsLocked) {
            revert Renounced();
        }
        if(owner() != address(0)){
            require (msg.sender == owner());
        } else {
           require ( msg.sender == taxAdmin);
        }
        sellFee.marketing = _marketing;
        sellFee.weiWuSalary = _wwsalary;
        sellFee.autoLP = _lp;
    }

    /// @dev renounce Tax lock status
    /// Once this is called, tax values won't be
    /// changeable anymore
    function revokeTaxOwnership() external {
        if (msg.sender != taxAdmin) {
            revert OnlyTaxAdmin();
        }
        if (taxIsLocked) {
            revert Renounced();
        }
        taxIsLocked = true;
    }

    /// @notice manage token transfer and fees
    ///         fees is applicable for first 48 hours from launch
    ///         after 48 hours, fees will become zero globally
    /// @dev See {ERC20-_transfer}
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        bool takeFee = true;
        if (isExcludedFromFees[from] || isExcludedFromFees[to]) {
            takeFee = false;
        }

        if (takeFee) {
            uint256 fee;
            uint256 weiWuSalaryTax;
            if (from == uniswapPair) {
                if (amount > maxBuyAmountPerTx) {
                    revert MaxBuyPerTxExceeds();
                }
                uint256 totalBuyFee = buyFee.marketing +
                    buyFee.weiWuSalary +
                    buyFee.autoLP;
                if (totalBuyFee > 0) {
                    fee = (amount * totalBuyFee) / 100;
                    weiWuSalaryTax = (fee * buyFee.weiWuSalary) / totalBuyFee;
                }
            } else if (to == uniswapPair) {
                if (amount > maxSellAmountPerTx) {
                    revert MaxSellPerTxExceeds();
                }
                uint256 totalSellFee = sellFee.marketing +
                    sellFee.weiWuSalary +
                    sellFee.autoLP;
                if (totalSellFee > 0) {
                    fee = (amount * totalSellFee) / 100;
                    weiWuSalaryTax = (fee * sellFee.weiWuSalary) / totalSellFee;
                }
            }

            amount = amount - fee;
            if (fee > 0) {
                super._transfer(from, address(this), fee);
            }
            if (weiWuSalaryTax > 0) {
                super._transfer(
                    address(this),
                    weiWuSalaryWallet,
                    weiWuSalaryTax
                );
            }
            
        }
        uint256 contractBalance = balanceOf(address(this));

        bool canSwap = contractBalance >= 100e18 &&
            from != uniswapPair &&
            (!isExcludedFromFees[from]) &&
            !swapping;
        if (canSwap) {
            swapping = true;
            swapAndLiquify(contractBalance);
            swapping = false;
        }

        super._transfer(from, to, amount);
    }

    /// @notice swap and liquify
    /// transfer collected tax to designated addresses as per there share
    function swapAndLiquify(uint256 tokens) private {
        uint256 total = buyFee.autoLP +
            sellFee.autoLP +
            buyFee.marketing +
            sellFee.marketing;
        uint256 lpHalf = ((buyFee.autoLP + sellFee.autoLP) * tokens) /
            (total * 2);
        uint256 tokensForSwap = (tokens - lpHalf);
        swapTokensForETH(tokensForSwap);
        uint256 ethBalance = address(this).balance;
        uint256 lpEth = (ethBalance * lpHalf) / tokens;
        if (lpEth > 0 && lpHalf > 0) {
            addLiquidity(lpEth, lpHalf);
        }
        if (address(this).balance > 0) {
            bool sent;
            (sent, ) = marketingWallet.call{value: address(this).balance}("");
        }
    }

    ///@notice swap the tax tokens for eth and send to marketing wallet
    function swapTokensForETH(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> wbnb
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        if (allowance(address(this), address(uniswapV2Router)) < tokenAmount) {
            _approve(
                address(this),
                address(uniswapV2Router),
                type(uint256).max
            );
        }

        uint256 out = uniswapV2Router.getAmountsOut(tokenAmount, path)[1];
        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            (out * 80) / 100, //20% Slippage
            path,
            address(this),
            block.timestamp + 360
        );
    }

    /// add liquidity
    function addLiquidity(uint256 ethAmount, uint256 tokens) private {
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokens,
            0,
            0,
            address(0xdead), // burn lp
            block.timestamp + 360
        );
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"MaxBuyPerTxExceeds","type":"error"},{"inputs":[],"name":"MaxSellPerTxExceeds","type":"error"},{"inputs":[],"name":"MinOnePercent","type":"error"},{"inputs":[],"name":"OnlyMarketingWallet","type":"error"},{"inputs":[],"name":"OnlyTaxAdmin","type":"error"},{"inputs":[],"name":"Renounced","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":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"weiWuSalary","type":"uint256"},{"internalType":"uint256","name":"autoLP","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimStuckedERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"exlcudeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revokeTaxOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"weiWuSalary","type":"uint256"},{"internalType":"uint256","name":"autoLP","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":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_percent","type":"uint256"}],"name":"updateBuyAmountPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_wwsalary","type":"uint256"},{"internalType":"uint256","name":"_lp","type":"uint256"}],"name":"updateBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_percent","type":"uint256"}],"name":"updateSellAmountPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_wwsalary","type":"uint256"},{"internalType":"uint256","name":"_lp","type":"uint256"}],"name":"updateSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"weiWuSalaryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526200001d60646b033b2e3c9fd0803ce80000006200049a565b6006556200003960646b033b2e3c9fd0803ce80000006200049a565b600755600880546001600160a01b0319908116732d28dae821982842f2af805bf0fa7384e69ea7b6179091556009805490911673c0cc0e340c7a6f154c86ec0455fff55f1c07b8681790556010805461ffff191690553480156200009b575f80fd5b506040518060400160405280601e81526020017f4469766572736974792045717569747920616e6420496e636c7573696f6e00008152506040518060400160405280600381526020016244454960e81b8152508160039081620000ff919062000559565b5060046200010e828262000559565b5050506200012b620001256200037c60201b60201c565b62000380565b737a250d5630b4cf539739df2c5dacb4c659f2488d60808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156200017f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001a5919062000621565b6001600160a01b031663c9c65396306080516001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001f3573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000219919062000621565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af115801562000264573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200028a919062000621565b6001600160a01b031660a0526010805462010000600160b01b03191675abdf7661b28698fd6db04991968e0dfacd94941100001790556001600a819055600b819055600c819055600d819055600e819055600f81905560115f620002f66005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182015f908120805495151560ff19968716179055308152601190935281832080548516600190811790915560085482168452828420805486168217905560095490911683529120805490921617905562000376336b033b2e3c9fd0803ce8000000620003d1565b62000676565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b0382166200042c5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060025f8282546200043f919062000650565b90915550506001600160a01b0382165f81815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b5f82620004b557634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52604160045260245ffd5b600181811c90821680620004e357607f821691505b6020821081036200050257634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111562000495575f81815260208120601f850160051c81016020861015620005305750805b601f850160051c820191505b8181101562000551578281556001016200053c565b505050505050565b81516001600160401b03811115620005755762000575620004ba565b6200058d81620005868454620004ce565b8462000508565b602080601f831160018114620005c3575f8415620005ab5750858301515b5f19600386901b1c1916600185901b17855562000551565b5f85815260208120601f198616915b82811015620005f357888601518255948401946001909101908401620005d2565b50858210156200061157878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f6020828403121562000632575f80fd5b81516001600160a01b038116811462000649575f80fd5b9392505050565b808201808211156200067057634e487b7160e01b5f52601160045260245ffd5b92915050565b60805160a051611a99620006d75f395f81816104cc01528181610d6801528181610e260152610f4201525f818161024d0152818161133d015281816113f50152818161142501528181611464015281816114fa01526115ab0152611a995ff3fe608060405260043610610198575f3560e01c80635c3aa156116100e7578063a0a485ca11610087578063c816841b11610062578063c816841b146104bb578063cb5ca669146104ee578063dd62ed3e1461050d578063f2fde38b1461052c575f80fd5b8063a0a485ca1461045e578063a457c2d71461047d578063a9059cbb1461049c575f80fd5b806375f0a874116100c257806375f0a874146103ef5780637a20d3da1461040e5780638da5cb5b1461042d57806395d89b411461044a575f80fd5b80635c3aa1561461039357806370a08231146103a7578063715018a6146103db575f80fd5b806318160ddd11610152578063313ce5671161012d578063313ce5671461031c57806335b115131461033757806339509351146103565780634706240214610375575f80fd5b806318160ddd146102a657806323b872dd146102c45780632b14ca56146102e3575f80fd5b806305f93650146101a357806306fdde03146101c4578063095ea7b3146101ee5780630e3d3bc51461021d5780631694505e1461023c5780631706fbc514610287575f80fd5b3661019f57005b5f80fd5b3480156101ae575f80fd5b506101c26101bd36600461164a565b61054b565b005b3480156101cf575f80fd5b506101d86105da565b6040516101e59190611695565b60405180910390f35b3480156101f9575f80fd5b5061020d6102083660046116db565b61066a565b60405190151581526020016101e5565b348015610228575f80fd5b506101c2610237366004611705565b610683565b348015610247575f80fd5b5061026f7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101e5565b348015610292575f80fd5b506101c26102a1366004611729565b6106d3565b3480156102b1575f80fd5b506002545b6040519081526020016101e5565b3480156102cf575f80fd5b5061020d6102de366004611760565b610705565b3480156102ee575f80fd5b50600d54600e54600f5461030192919083565b604080519384526020840192909252908201526060016101e5565b348015610327575f80fd5b50604051601281526020016101e5565b348015610342575f80fd5b506101c2610351366004611705565b610728565b348015610361575f80fd5b5061020d6103703660046116db565b610778565b348015610380575f80fd5b50600a54600b54600c5461030192919083565b34801561039e575f80fd5b506101c2610799565b3480156103b2575f80fd5b506102b66103c136600461179e565b6001600160a01b03165f9081526020819052604090205490565b3480156103e6575f80fd5b506101c2610804565b3480156103fa575f80fd5b5060085461026f906001600160a01b031681565b348015610419575f80fd5b506101c26104283660046116db565b610817565b348015610438575f80fd5b506005546001600160a01b031661026f565b348015610455575f80fd5b506101d861095f565b348015610469575f80fd5b506101c261047836600461164a565b61096e565b348015610488575f80fd5b5061020d6104973660046116db565b6109fd565b3480156104a7575f80fd5b5061020d6104b63660046116db565b610a77565b3480156104c6575f80fd5b5061026f7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104f9575f80fd5b5060095461026f906001600160a01b031681565b348015610518575f80fd5b506102b66105273660046117c0565b610a84565b348015610537575f80fd5b506101c261054636600461179e565b610aae565b601054610100900460ff161561057457604051637649e6b760e01b815260040160405180910390fd5b5f6105876005546001600160a01b031690565b6001600160a01b0316146105b0576005546001600160a01b031633146105ab575f80fd5b6105cc565b6010546201000090046001600160a01b031633146105cc575f80fd5b600d92909255600e55600f55565b6060600380546105e9906117ec565b80601f0160208091040260200160405190810160405280929190818152602001828054610615906117ec565b80156106605780601f1061063757610100808354040283529160200191610660565b820191905f5260205f20905b81548152906001019060200180831161064357829003601f168201915b5050505050905090565b5f33610677818585610b27565b60019150505b92915050565b61068b610c4a565b60018110156106ad5760405163f921e6df60e01b815260040160405180910390fd5b6064816106b960025490565b6106c39190611838565b6106cd919061184f565b60075550565b6106db610c4a565b6001600160a01b03919091165f908152601160205260409020805460ff1916911515919091179055565b5f33610712858285610ca4565b61071d858585610d16565b506001949350505050565b610730610c4a565b60018110156107525760405163f921e6df60e01b815260040160405180910390fd5b60648161075e60025490565b6107689190611838565b610772919061184f565b60065550565b5f3361067781858561078a8383610a84565b610794919061186e565b610b27565b6010546201000090046001600160a01b031633146107ca576040516330c0757760e01b815260040160405180910390fd5b601054610100900460ff16156107f357604051637649e6b760e01b815260040160405180910390fd5b6010805461ff001916610100179055565b61080c610c4a565b6108155f610fe6565b565b6008546001600160a01b031633146108425760405163e734c0b760e01b815260040160405180910390fd5b600854604080516001600160a01b039283166024820152604480820185905282518083039091018152606490910182526020810180516001600160e01b031663a9059cbb60e01b17905290515f928392908616916108a09190611881565b5f604051808303815f865af19150503d805f81146108d9576040519150601f19603f3d011682016040523d82523d5f602084013e6108de565b606091505b5091509150818015610908575080511580610908575080806020019051810190610908919061189c565b6109595760405162461bcd60e51b815260206004820152601860248201527f424152433a20544f4b454e5f434c41494d5f4641494c4544000000000000000060448201526064015b60405180910390fd5b50505050565b6060600480546105e9906117ec565b601054610100900460ff161561099757604051637649e6b760e01b815260040160405180910390fd5b5f6109aa6005546001600160a01b031690565b6001600160a01b0316146109d3576005546001600160a01b031633146109ce575f80fd5b6109ef565b6010546201000090046001600160a01b031633146109ef575f80fd5b600a92909255600b55600c55565b5f3381610a0a8286610a84565b905083811015610a6a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610950565b61071d8286868403610b27565b5f33610677818585610d16565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b610ab6610c4a565b6001600160a01b038116610b1b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610950565b610b2481610fe6565b50565b6001600160a01b038316610b895760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610950565b6001600160a01b038216610bea5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610950565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b031633146108155760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610950565b5f610caf8484610a84565b90505f1981146109595781811015610d095760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610950565b6109598484848403610b27565b6001600160a01b0383165f9081526011602052604090205460019060ff1680610d5657506001600160a01b0383165f9081526011602052604090205460ff165b15610d5e57505f5b8015610f1c575f807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b031603610e2457600654841115610dc25760405163acdd04e360e01b815260040160405180910390fd5b600c54600b54600a545f9291610dd79161186e565b610de1919061186e565b90508015610e1e576064610df58287611838565b610dff919061184f565b600b549093508190610e119085611838565b610e1b919061184f565b91505b50610ede565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031603610ede57600754841115610e8057604051630992619960e31b815260040160405180910390fd5b600f54600e54600d545f9291610e959161186e565b610e9f919061186e565b90508015610edc576064610eb38287611838565b610ebd919061184f565b600e549093508190610ecf9085611838565b610ed9919061184f565b91505b505b610ee882856118b7565b93508115610efb57610efb863084611037565b8015610f1957600954610f199030906001600160a01b031683611037565b50505b305f908152602081905260408120549068056bc75e2d631000008210801590610f7757507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b031614155b8015610f9b57506001600160a01b0386165f9081526011602052604090205460ff16155b8015610faa575060105460ff16155b90508015610fd3576010805460ff19166001179055610fc8826111d9565b6010805460ff191690555b610fde868686611037565b505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b03831661109b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610950565b6001600160a01b0382166110fd5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610950565b6001600160a01b0383165f90815260208190526040902054818110156111745760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610950565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610959565b600d54600a54600f54600c545f9392916111f29161186e565b6111fc919061186e565b611206919061186e565b90505f611214826002611838565b600f54600c5485916112259161186e565b61122f9190611838565b611239919061184f565b90505f61124682856118b7565b9050611251816112e8565b475f8561125e8584611838565b611268919061184f565b90505f8111801561127857505f84115b156112875761128781856115a1565b4715610fde576008546040515f916001600160a01b03169047908381818185875af1925050503d805f81146112d7576040519150601f19603f3d011682016040523d82523d5f602084013e6112dc565b606091505b50505050505050505050565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061131b5761131b6118de565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611397573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113bb91906118f2565b816001815181106113ce576113ce6118de565b60200260200101906001600160a01b031690816001600160a01b03168152505081611419307f0000000000000000000000000000000000000000000000000000000000000000610a84565b101561144b5761144b307f00000000000000000000000000000000000000000000000000000000000000005f19610b27565b60405163d06ca61f60e01b81525f906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d06ca61f9061149b908690869060040161194f565b5f60405180830381865afa1580156114b5573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526114dc919081019061196f565b6001815181106114ee576114ee6118de565b602002602001015190507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663791ac9478460648460506115379190611838565b611541919061184f565b853061154f4261016861186e565b6040518663ffffffff1660e01b815260040161156f959493929190611a28565b5f604051808303815f87803b158015611586575f80fd5b505af1158015611598573d5f803e3d5ffd5b50505050505050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663f305d7198330845f8061dead6115e44261016861186e565b60405160e089901b6001600160e01b03191681526001600160a01b039687166004820152602481019590955260448501939093526064840191909152909216608482015260a481019190915260c4015f604051808303818588803b158015611586575f80fd5b5f805f6060848603121561165c575f80fd5b505081359360208301359350604090920135919050565b5f5b8381101561168d578181015183820152602001611675565b50505f910152565b602081525f82518060208401526116b3816040850160208701611673565b601f01601f19169190910160400192915050565b6001600160a01b0381168114610b24575f80fd5b5f80604083850312156116ec575f80fd5b82356116f7816116c7565b946020939093013593505050565b5f60208284031215611715575f80fd5b5035919050565b8015158114610b24575f80fd5b5f806040838503121561173a575f80fd5b8235611745816116c7565b915060208301356117558161171c565b809150509250929050565b5f805f60608486031215611772575f80fd5b833561177d816116c7565b9250602084013561178d816116c7565b929592945050506040919091013590565b5f602082840312156117ae575f80fd5b81356117b9816116c7565b9392505050565b5f80604083850312156117d1575f80fd5b82356117dc816116c7565b91506020830135611755816116c7565b600181811c9082168061180057607f821691505b60208210810361181e57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761067d5761067d611824565b5f8261186957634e487b7160e01b5f52601260045260245ffd5b500490565b8082018082111561067d5761067d611824565b5f8251611892818460208701611673565b9190910192915050565b5f602082840312156118ac575f80fd5b81516117b98161171c565b8181038181111561067d5761067d611824565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215611902575f80fd5b81516117b9816116c7565b5f8151808452602080850194508084015f5b838110156119445781516001600160a01b03168752958201959082019060010161191f565b509495945050505050565b828152604060208201525f611967604083018461190d565b949350505050565b5f6020808385031215611980575f80fd5b825167ffffffffffffffff80821115611997575f80fd5b818501915085601f8301126119aa575f80fd5b8151818111156119bc576119bc6118ca565b8060051b604051601f19603f830116810181811085821117156119e1576119e16118ca565b6040529182528482019250838101850191888311156119fe575f80fd5b938501935b82851015611a1c57845184529385019392850192611a03565b98975050505050505050565b85815284602082015260a060408201525f611a4660a083018661190d565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220cf1d7ac884870240c7c5494231d4e0c47c1f22f7e13e6b1699687b5c28ce4d3d64736f6c63430008150033

Deployed Bytecode

0x608060405260043610610198575f3560e01c80635c3aa156116100e7578063a0a485ca11610087578063c816841b11610062578063c816841b146104bb578063cb5ca669146104ee578063dd62ed3e1461050d578063f2fde38b1461052c575f80fd5b8063a0a485ca1461045e578063a457c2d71461047d578063a9059cbb1461049c575f80fd5b806375f0a874116100c257806375f0a874146103ef5780637a20d3da1461040e5780638da5cb5b1461042d57806395d89b411461044a575f80fd5b80635c3aa1561461039357806370a08231146103a7578063715018a6146103db575f80fd5b806318160ddd11610152578063313ce5671161012d578063313ce5671461031c57806335b115131461033757806339509351146103565780634706240214610375575f80fd5b806318160ddd146102a657806323b872dd146102c45780632b14ca56146102e3575f80fd5b806305f93650146101a357806306fdde03146101c4578063095ea7b3146101ee5780630e3d3bc51461021d5780631694505e1461023c5780631706fbc514610287575f80fd5b3661019f57005b5f80fd5b3480156101ae575f80fd5b506101c26101bd36600461164a565b61054b565b005b3480156101cf575f80fd5b506101d86105da565b6040516101e59190611695565b60405180910390f35b3480156101f9575f80fd5b5061020d6102083660046116db565b61066a565b60405190151581526020016101e5565b348015610228575f80fd5b506101c2610237366004611705565b610683565b348015610247575f80fd5b5061026f7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016101e5565b348015610292575f80fd5b506101c26102a1366004611729565b6106d3565b3480156102b1575f80fd5b506002545b6040519081526020016101e5565b3480156102cf575f80fd5b5061020d6102de366004611760565b610705565b3480156102ee575f80fd5b50600d54600e54600f5461030192919083565b604080519384526020840192909252908201526060016101e5565b348015610327575f80fd5b50604051601281526020016101e5565b348015610342575f80fd5b506101c2610351366004611705565b610728565b348015610361575f80fd5b5061020d6103703660046116db565b610778565b348015610380575f80fd5b50600a54600b54600c5461030192919083565b34801561039e575f80fd5b506101c2610799565b3480156103b2575f80fd5b506102b66103c136600461179e565b6001600160a01b03165f9081526020819052604090205490565b3480156103e6575f80fd5b506101c2610804565b3480156103fa575f80fd5b5060085461026f906001600160a01b031681565b348015610419575f80fd5b506101c26104283660046116db565b610817565b348015610438575f80fd5b506005546001600160a01b031661026f565b348015610455575f80fd5b506101d861095f565b348015610469575f80fd5b506101c261047836600461164a565b61096e565b348015610488575f80fd5b5061020d6104973660046116db565b6109fd565b3480156104a7575f80fd5b5061020d6104b63660046116db565b610a77565b3480156104c6575f80fd5b5061026f7f000000000000000000000000cebab19329927a48f32ffd2a247c79868a3bf0f381565b3480156104f9575f80fd5b5060095461026f906001600160a01b031681565b348015610518575f80fd5b506102b66105273660046117c0565b610a84565b348015610537575f80fd5b506101c261054636600461179e565b610aae565b601054610100900460ff161561057457604051637649e6b760e01b815260040160405180910390fd5b5f6105876005546001600160a01b031690565b6001600160a01b0316146105b0576005546001600160a01b031633146105ab575f80fd5b6105cc565b6010546201000090046001600160a01b031633146105cc575f80fd5b600d92909255600e55600f55565b6060600380546105e9906117ec565b80601f0160208091040260200160405190810160405280929190818152602001828054610615906117ec565b80156106605780601f1061063757610100808354040283529160200191610660565b820191905f5260205f20905b81548152906001019060200180831161064357829003601f168201915b5050505050905090565b5f33610677818585610b27565b60019150505b92915050565b61068b610c4a565b60018110156106ad5760405163f921e6df60e01b815260040160405180910390fd5b6064816106b960025490565b6106c39190611838565b6106cd919061184f565b60075550565b6106db610c4a565b6001600160a01b03919091165f908152601160205260409020805460ff1916911515919091179055565b5f33610712858285610ca4565b61071d858585610d16565b506001949350505050565b610730610c4a565b60018110156107525760405163f921e6df60e01b815260040160405180910390fd5b60648161075e60025490565b6107689190611838565b610772919061184f565b60065550565b5f3361067781858561078a8383610a84565b610794919061186e565b610b27565b6010546201000090046001600160a01b031633146107ca576040516330c0757760e01b815260040160405180910390fd5b601054610100900460ff16156107f357604051637649e6b760e01b815260040160405180910390fd5b6010805461ff001916610100179055565b61080c610c4a565b6108155f610fe6565b565b6008546001600160a01b031633146108425760405163e734c0b760e01b815260040160405180910390fd5b600854604080516001600160a01b039283166024820152604480820185905282518083039091018152606490910182526020810180516001600160e01b031663a9059cbb60e01b17905290515f928392908616916108a09190611881565b5f604051808303815f865af19150503d805f81146108d9576040519150601f19603f3d011682016040523d82523d5f602084013e6108de565b606091505b5091509150818015610908575080511580610908575080806020019051810190610908919061189c565b6109595760405162461bcd60e51b815260206004820152601860248201527f424152433a20544f4b454e5f434c41494d5f4641494c4544000000000000000060448201526064015b60405180910390fd5b50505050565b6060600480546105e9906117ec565b601054610100900460ff161561099757604051637649e6b760e01b815260040160405180910390fd5b5f6109aa6005546001600160a01b031690565b6001600160a01b0316146109d3576005546001600160a01b031633146109ce575f80fd5b6109ef565b6010546201000090046001600160a01b031633146109ef575f80fd5b600a92909255600b55600c55565b5f3381610a0a8286610a84565b905083811015610a6a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610950565b61071d8286868403610b27565b5f33610677818585610d16565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b610ab6610c4a565b6001600160a01b038116610b1b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610950565b610b2481610fe6565b50565b6001600160a01b038316610b895760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610950565b6001600160a01b038216610bea5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610950565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b031633146108155760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610950565b5f610caf8484610a84565b90505f1981146109595781811015610d095760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610950565b6109598484848403610b27565b6001600160a01b0383165f9081526011602052604090205460019060ff1680610d5657506001600160a01b0383165f9081526011602052604090205460ff165b15610d5e57505f5b8015610f1c575f807f000000000000000000000000cebab19329927a48f32ffd2a247c79868a3bf0f36001600160a01b0316866001600160a01b031603610e2457600654841115610dc25760405163acdd04e360e01b815260040160405180910390fd5b600c54600b54600a545f9291610dd79161186e565b610de1919061186e565b90508015610e1e576064610df58287611838565b610dff919061184f565b600b549093508190610e119085611838565b610e1b919061184f565b91505b50610ede565b7f000000000000000000000000cebab19329927a48f32ffd2a247c79868a3bf0f36001600160a01b0316856001600160a01b031603610ede57600754841115610e8057604051630992619960e31b815260040160405180910390fd5b600f54600e54600d545f9291610e959161186e565b610e9f919061186e565b90508015610edc576064610eb38287611838565b610ebd919061184f565b600e549093508190610ecf9085611838565b610ed9919061184f565b91505b505b610ee882856118b7565b93508115610efb57610efb863084611037565b8015610f1957600954610f199030906001600160a01b031683611037565b50505b305f908152602081905260408120549068056bc75e2d631000008210801590610f7757507f000000000000000000000000cebab19329927a48f32ffd2a247c79868a3bf0f36001600160a01b0316866001600160a01b031614155b8015610f9b57506001600160a01b0386165f9081526011602052604090205460ff16155b8015610faa575060105460ff16155b90508015610fd3576010805460ff19166001179055610fc8826111d9565b6010805460ff191690555b610fde868686611037565b505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b03831661109b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610950565b6001600160a01b0382166110fd5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610950565b6001600160a01b0383165f90815260208190526040902054818110156111745760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610950565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610959565b600d54600a54600f54600c545f9392916111f29161186e565b6111fc919061186e565b611206919061186e565b90505f611214826002611838565b600f54600c5485916112259161186e565b61122f9190611838565b611239919061184f565b90505f61124682856118b7565b9050611251816112e8565b475f8561125e8584611838565b611268919061184f565b90505f8111801561127857505f84115b156112875761128781856115a1565b4715610fde576008546040515f916001600160a01b03169047908381818185875af1925050503d805f81146112d7576040519150601f19603f3d011682016040523d82523d5f602084013e6112dc565b606091505b50505050505050505050565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061131b5761131b6118de565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611397573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113bb91906118f2565b816001815181106113ce576113ce6118de565b60200260200101906001600160a01b031690816001600160a01b03168152505081611419307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d610a84565b101561144b5761144b307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d5f19610b27565b60405163d06ca61f60e01b81525f906001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063d06ca61f9061149b908690869060040161194f565b5f60405180830381865afa1580156114b5573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526114dc919081019061196f565b6001815181106114ee576114ee6118de565b602002602001015190507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663791ac9478460648460506115379190611838565b611541919061184f565b853061154f4261016861186e565b6040518663ffffffff1660e01b815260040161156f959493929190611a28565b5f604051808303815f87803b158015611586575f80fd5b505af1158015611598573d5f803e3d5ffd5b50505050505050565b6001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d1663f305d7198330845f8061dead6115e44261016861186e565b60405160e089901b6001600160e01b03191681526001600160a01b039687166004820152602481019590955260448501939093526064840191909152909216608482015260a481019190915260c4015f604051808303818588803b158015611586575f80fd5b5f805f6060848603121561165c575f80fd5b505081359360208301359350604090920135919050565b5f5b8381101561168d578181015183820152602001611675565b50505f910152565b602081525f82518060208401526116b3816040850160208701611673565b601f01601f19169190910160400192915050565b6001600160a01b0381168114610b24575f80fd5b5f80604083850312156116ec575f80fd5b82356116f7816116c7565b946020939093013593505050565b5f60208284031215611715575f80fd5b5035919050565b8015158114610b24575f80fd5b5f806040838503121561173a575f80fd5b8235611745816116c7565b915060208301356117558161171c565b809150509250929050565b5f805f60608486031215611772575f80fd5b833561177d816116c7565b9250602084013561178d816116c7565b929592945050506040919091013590565b5f602082840312156117ae575f80fd5b81356117b9816116c7565b9392505050565b5f80604083850312156117d1575f80fd5b82356117dc816116c7565b91506020830135611755816116c7565b600181811c9082168061180057607f821691505b60208210810361181e57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761067d5761067d611824565b5f8261186957634e487b7160e01b5f52601260045260245ffd5b500490565b8082018082111561067d5761067d611824565b5f8251611892818460208701611673565b9190910192915050565b5f602082840312156118ac575f80fd5b81516117b98161171c565b8181038181111561067d5761067d611824565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215611902575f80fd5b81516117b9816116c7565b5f8151808452602080850194508084015f5b838110156119445781516001600160a01b03168752958201959082019060010161191f565b509495945050505050565b828152604060208201525f611967604083018461190d565b949350505050565b5f6020808385031215611980575f80fd5b825167ffffffffffffffff80821115611997575f80fd5b818501915085601f8301126119aa575f80fd5b8151818111156119bc576119bc6118ca565b8060051b604051601f19603f830116810181811085821117156119e1576119e16118ca565b6040529182528482019250838101850191888311156119fe575f80fd5b938501935b82851015611a1c57845184529385019392850192611a03565b98975050505050505050565b85815284602082015260a060408201525f611a4660a083018661190d565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220cf1d7ac884870240c7c5494231d4e0c47c1f22f7e13e6b1699687b5c28ce4d3d64736f6c63430008150033

Deployed Bytecode Sourcemap

26761:10453:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31888:470;;;;;;;;;;-1:-1:-1;31888:470:0;;;;;:::i;:::-;;:::i;:::-;;14114:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16540:226;;;;;;;;;;-1:-1:-1;16540:226:0;;;;;:::i;:::-;;:::i;:::-;;;1612:14:1;;1605:22;1587:41;;1575:2;1560:18;16540:226:0;1447:187:1;30825:217:0;;;;;;;;;;-1:-1:-1;30825:217:0;;;;;:::i;:::-;;:::i;27368:47::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2010:32:1;;;1992:51;;1980:2;1965:18;27368:47:0;1824:225:1;30156:127:0;;;;;;;;;;-1:-1:-1;30156:127:0;;;;;:::i;:::-;;:::i;15243:108::-;;;;;;;;;;-1:-1:-1;15331:12:0;;15243:108;;;2710:25:1;;;2698:2;2683:18;15243:108:0;2564:177:1;17346:295:0;;;;;;;;;;-1:-1:-1;17346:295:0;;;;;:::i;:::-;;:::i;27816:22::-;;;;;;;;;;-1:-1:-1;27816:22:0;;;;;;;;;;;;;;;;3409:25:1;;;3465:2;3450:18;;3443:34;;;;3493:18;;;3486:34;3397:2;3382:18;27816:22:0;3207:319:1;15085:93:0;;;;;;;;;;-1:-1:-1;15085:93:0;;15168:2;3673:36:1;;3661:2;3646:18;15085:93:0;3531:184:1;30444:215:0;;;;;;;;;;-1:-1:-1;30444:215:0;;;;;:::i;:::-;;:::i;18050:263::-;;;;;;;;;;-1:-1:-1;18050:263:0;;;;;:::i;:::-;;:::i;27764:20::-;;;;;;;;;;-1:-1:-1;27764:20:0;;;;;;;;;;;;32483:234;;;;;;;;;;;;;:::i;15414:143::-;;;;;;;;;;-1:-1:-1;15414:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;15531:18:0;15504:7;15531:18;;;;;;;;;;;;15414:143;8129:103;;;;;;;;;;;;;:::i;27116:75::-;;;;;;;;;;-1:-1:-1;27116:75:0;;;;-1:-1:-1;;;;;27116:75:0;;;29447:526;;;;;;;;;;-1:-1:-1;29447:526:0;;;;;:::i;:::-;;:::i;7488:87::-;;;;;;;;;;-1:-1:-1;7561:6:0;;-1:-1:-1;;;;;7561:6:0;7488:87;;14333:104;;;;;;;;;;;;;:::i;31230:466::-;;;;;;;;;;-1:-1:-1;31230:466:0;;;;;:::i;:::-;;:::i;18816:498::-;;;;;;;;;;-1:-1:-1;18816:498:0;;;;;:::i;:::-;;:::i;15763:218::-;;;;;;;;;;-1:-1:-1;15763:218:0;;;;;:::i;:::-;;:::i;27451:36::-;;;;;;;;;;;;;;;27242:86;;;;;;;;;;-1:-1:-1;27242:86:0;;;;-1:-1:-1;;;;;27242:86:0;;;16044:176;;;;;;;;;;-1:-1:-1;16044:176:0;;;;;:::i;:::-;;:::i;8387:238::-;;;;;;;;;;-1:-1:-1;8387:238:0;;;;;:::i;:::-;;:::i;31888:470::-;32021:11;;;;;;;32017:62;;;32056:11;;-1:-1:-1;;;32056:11:0;;;;;;;;;;;32017:62;32111:1;32092:7;7561:6;;-1:-1:-1;;;;;7561:6:0;;7488:87;32092:7;-1:-1:-1;;;;;32092:21:0;;32089:148;;7561:6;;-1:-1:-1;;;;;7561:6:0;32138:10;:21;32129:31;;;;;;32089:148;;;32216:8;;;;;-1:-1:-1;;;;;32216:8:0;32202:10;:22;32192:33;;;;;;32247:7;:30;;;;32288:19;:31;32330:14;:20;31888:470::o;14114:100::-;14168:13;14201:5;14194:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14114:100;:::o;16540:226::-;16648:4;6252:10;16704:32;6252:10;16720:7;16729:6;16704:8;:32::i;:::-;16754:4;16747:11;;;16540:226;;;;;:::o;30825:217::-;7374:13;:11;:13::i;:::-;30919:1:::1;30908:8;:12;30904:67;;;30944:15;;-1:-1:-1::0;;;30944:15:0::1;;;;;;;;;;;30904:67;31031:3;31019:8;31003:13;15331:12:::0;;;15243:108;31003:13:::1;:24;;;;:::i;:::-;31002:32;;;;:::i;:::-;30981:18;:53:::0;-1:-1:-1;30825:217:0:o;30156:127::-;7374:13;:11;:13::i;:::-;-1:-1:-1;;;;;30240:24:0;;;::::1;;::::0;;;:18:::1;:24;::::0;;;;:35;;-1:-1:-1;;30240:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;30156:127::o;17346:295::-;17477:4;6252:10;17535:38;17551:4;6252:10;17566:6;17535:15;:38::i;:::-;17584:27;17594:4;17600:2;17604:6;17584:9;:27::i;:::-;-1:-1:-1;17629:4:0;;17346:295;-1:-1:-1;;;;17346:295:0:o;30444:215::-;7374:13;:11;:13::i;:::-;30537:1:::1;30526:8;:12;30522:67;;;30562:15;;-1:-1:-1::0;;;30562:15:0::1;;;;;;;;;;;30522:67;30648:3;30636:8;30620:13;15331:12:::0;;;15243:108;30620:13:::1;:24;;;;:::i;:::-;30619:32;;;;:::i;:::-;30599:17;:52:::0;-1:-1:-1;30444:215:0:o;18050:263::-;18163:4;6252:10;18219:64;6252:10;18235:7;18272:10;18244:25;6252:10;18235:7;18244:9;:25::i;:::-;:38;;;;:::i;:::-;18219:8;:64::i;32483:234::-;32551:8;;;;;-1:-1:-1;;;;;32551:8:0;32537:10;:22;32533:76;;32583:14;;-1:-1:-1;;;32583:14:0;;;;;;;;;;;32533:76;32623:11;;;;;;;32619:62;;;32658:11;;-1:-1:-1;;;32658:11:0;;;;;;;;;;;32619:62;32691:11;:18;;-1:-1:-1;;32691:18:0;;;;;32483:234::o;8129:103::-;7374:13;:11;:13::i;:::-;8194:30:::1;8221:1;8194:18;:30::i;:::-;8129:103::o:0;29447:526::-;29543:15;;-1:-1:-1;;;;;29543:15:0;29529:10;:29;29525:90;;29582:21;;-1:-1:-1;;;29582:21:0;;;;;;;;;;;29525:90;29788:15;;29753:59;;;-1:-1:-1;;;;;29788:15:0;;;29753:59;;;5789:51:1;5856:18;;;;5849:34;;;29753:59:0;;;;;;;;;;5762:18:1;;;;29753:59:0;;;;;;;-1:-1:-1;;;;;29753:59:0;-1:-1:-1;;;29753:59:0;;;29728:95;;-1:-1:-1;;;;29728:10:0;;;;:95;;29753:59;29728:95;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29692:131;;;;29856:7;:57;;;;-1:-1:-1;29868:11:0;;:16;;:44;;;29899:4;29888:24;;;;;;;;;;;;:::i;:::-;29834:131;;;;-1:-1:-1;;;29834:131:0;;6638:2:1;29834:131:0;;;6620:21:1;6677:2;6657:18;;;6650:30;6716:26;6696:18;;;6689:54;6760:18;;29834:131:0;;;;;;;;;29514:459;;29447:526;;:::o;14333:104::-;14389:13;14422:7;14415:14;;;;;:::i;31230:466::-;31362:11;;;;;;;31358:62;;;31397:11;;-1:-1:-1;;;31397:11:0;;;;;;;;;;;31358:62;31452:1;31433:7;7561:6;;-1:-1:-1;;;;;7561:6:0;;7488:87;31433:7;-1:-1:-1;;;;;31433:21:0;;31430:148;;7561:6;;-1:-1:-1;;;;;7561:6:0;31479:10;:21;31470:31;;;;;;31430:148;;;31557:8;;;;;-1:-1:-1;;;;;31557:8:0;31543:10;:22;31533:33;;;;;;31588:6;:29;;;;31628:18;:30;31669:13;:19;31230:466::o;18816:498::-;18934:4;6252:10;18934:4;19017:25;6252:10;19034:7;19017:9;:25::i;:::-;18990:52;;19095:15;19075:16;:35;;19053:122;;;;-1:-1:-1;;;19053:122:0;;6991:2:1;19053:122:0;;;6973:21:1;7030:2;7010:18;;;7003:30;7069:34;7049:18;;;7042:62;-1:-1:-1;;;7120:18:1;;;7113:35;7165:19;;19053:122:0;6789:401:1;19053:122:0;19211:60;19220:5;19227:7;19255:15;19236:16;:34;19211:8;:60::i;15763:218::-;15867:4;6252:10;15923:28;6252:10;15940:2;15944:6;15923:9;:28::i;16044:176::-;-1:-1:-1;;;;;16185:18:0;;;16158:7;16185:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;16044:176::o;8387:238::-;7374:13;:11;:13::i;:::-;-1:-1:-1;;;;;8490:22:0;::::1;8468:110;;;::::0;-1:-1:-1;;;8468:110:0;;7397:2:1;8468:110:0::1;::::0;::::1;7379:21:1::0;7436:2;7416:18;;;7409:30;7475:34;7455:18;;;7448:62;-1:-1:-1;;;7526:18:1;;;7519:36;7572:19;;8468:110:0::1;7195:402:1::0;8468:110:0::1;8589:28;8608:8;8589:18;:28::i;:::-;8387:238:::0;:::o;22942:380::-;-1:-1:-1;;;;;23078:19:0;;23070:68;;;;-1:-1:-1;;;23070:68:0;;7804:2:1;23070:68:0;;;7786:21:1;7843:2;7823:18;;;7816:30;7882:34;7862:18;;;7855:62;-1:-1:-1;;;7933:18:1;;;7926:34;7977:19;;23070:68:0;7602:400:1;23070:68:0;-1:-1:-1;;;;;23157:21:0;;23149:68;;;;-1:-1:-1;;;23149:68:0;;8209:2:1;23149:68:0;;;8191:21:1;8248:2;8228:18;;;8221:30;8287:34;8267:18;;;8260:62;-1:-1:-1;;;8338:18:1;;;8331:32;8380:19;;23149:68:0;8007:398:1;23149:68:0;-1:-1:-1;;;;;23230:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;23282:32;;2710:25:1;;;23282:32:0;;2683:18:1;23282:32:0;;;;;;;22942:380;;;:::o;7653:132::-;7561:6;;-1:-1:-1;;;;;7561:6:0;6252:10;7717:23;7709:68;;;;-1:-1:-1;;;7709:68:0;;8612:2:1;7709:68:0;;;8594:21:1;;;8631:18;;;8624:30;8690:34;8670:18;;;8663:62;8742:18;;7709:68:0;8410:356:1;23613:502:0;23748:24;23775:25;23785:5;23792:7;23775:9;:25::i;:::-;23748:52;;-1:-1:-1;;23815:16:0;:37;23811:297;;23915:6;23895:16;:26;;23869:117;;;;-1:-1:-1;;;23869:117:0;;8973:2:1;23869:117:0;;;8955:21:1;9012:2;8992:18;;;8985:30;9051:31;9031:18;;;9024:59;9100:18;;23869:117:0;8771:353:1;23869:117:0;24030:51;24039:5;24046:7;24074:6;24055:16;:25;24030:8;:51::i;32940:2156::-;-1:-1:-1;;;;;33098:24:0;;33064:12;33098:24;;;:18;:24;;;;;;33079:4;;33098:24;;;:50;;-1:-1:-1;;;;;;33126:22:0;;;;;;:18;:22;;;;;;;;33098:50;33094:98;;;-1:-1:-1;33175:5:0;33094:98;33208:7;33204:1477;;;33232:11;33258:22;33307:11;-1:-1:-1;;;;;33299:19:0;:4;-1:-1:-1;;;;;33299:19:0;;33295:1000;;33352:17;;33343:6;:26;33339:102;;;33401:20;;-1:-1:-1;;;33401:20:0;;;;;;;;;;;33339:102;33563:13;;33521:18;;33563:6;33481:16;33459:19;;33563:13;33481:58;;;:::i;:::-;:95;;;;:::i;:::-;33459:117;-1:-1:-1;33599:15:0;;33595:178;;33670:3;33646:20;33655:11;33646:6;:20;:::i;:::-;33645:28;;;;:::i;:::-;33720:18;;33639:34;;-1:-1:-1;33742:11:0;;33714:24;;33639:34;33714:24;:::i;:::-;33713:40;;;;:::i;:::-;33696:57;;33595:178;33320:468;33295:1000;;;33804:11;-1:-1:-1;;;;;33798:17:0;:2;-1:-1:-1;;;;;33798:17:0;;33794:501;;33849:18;;33840:6;:27;33836:104;;;33899:21;;-1:-1:-1;;;33899:21:0;;;;;;;;;;;33836:104;34065:14;;34022:19;;34065:7;33981:17;33958:20;;34065:14;33981:60;;;:::i;:::-;:98;;;;:::i;:::-;33958:121;-1:-1:-1;34102:16:0;;34098:182;;34175:3;34150:21;34159:12;34150:6;:21;:::i;:::-;34149:29;;;;:::i;:::-;34225:19;;34143:35;;-1:-1:-1;34248:12:0;;34219:25;;34143:35;34219:25;:::i;:::-;34218:42;;;;:::i;:::-;34201:59;;34098:182;33817:478;33794:501;34320:12;34329:3;34320:6;:12;:::i;:::-;34311:21;-1:-1:-1;34351:7:0;;34347:89;;34379:41;34395:4;34409;34416:3;34379:15;:41::i;:::-;34454:18;;34450:206;;34567:17;;34493:147;;34539:4;;-1:-1:-1;;;;;34567:17:0;34607:14;34493:15;:147::i;:::-;33217:1464;;33204:1477;34735:4;34691:23;15531:18;;;;;;;;;;;;34788:6;34769:25;;;;;:61;;;34819:11;-1:-1:-1;;;;;34811:19:0;:4;-1:-1:-1;;;;;34811:19:0;;;34769:61;:105;;;;-1:-1:-1;;;;;;34849:24:0;;;;;;:18;:24;;;;;;;;34848:25;34769:105;:131;;;;-1:-1:-1;34892:8:0;;;;34891:9;34769:131;34754:146;;34915:7;34911:132;;;34939:8;:15;;-1:-1:-1;;34939:15:0;34950:4;34939:15;;;34969:31;34984:15;34969:14;:31::i;:::-;35015:8;:16;;-1:-1:-1;;35015:16:0;;;34911:132;35055:33;35071:4;35077:2;35081:6;35055:15;:33::i;:::-;33053:2043;;;32940:2156;;;:::o;8785:191::-;8878:6;;;-1:-1:-1;;;;;8895:17:0;;;-1:-1:-1;;;;;;8895:17:0;;;;;;;8928:40;;8878:6;;;8895:17;8878:6;;8928:40;;8859:16;;8928:40;8848:128;8785:191;:::o;19784:877::-;-1:-1:-1;;;;;19915:18:0;;19907:68;;;;-1:-1:-1;;;19907:68:0;;9464:2:1;19907:68:0;;;9446:21:1;9503:2;9483:18;;;9476:30;9542:34;9522:18;;;9515:62;-1:-1:-1;;;9593:18:1;;;9586:35;9638:19;;19907:68:0;9262:401:1;19907:68:0;-1:-1:-1;;;;;19994:16:0;;19986:64;;;;-1:-1:-1;;;19986:64:0;;9870:2:1;19986:64:0;;;9852:21:1;9909:2;9889:18;;;9882:30;9948:34;9928:18;;;9921:62;-1:-1:-1;;;9999:18:1;;;9992:33;10042:19;;19986:64:0;9668:399:1;19986:64:0;-1:-1:-1;;;;;20136:15:0;;20114:19;20136:15;;;;;;;;;;;20184:21;;;;20162:109;;;;-1:-1:-1;;;20162:109:0;;10274:2:1;20162:109:0;;;10256:21:1;10313:2;10293:18;;;10286:30;10352:34;10332:18;;;10325:62;-1:-1:-1;;;10403:18:1;;;10396:36;10449:19;;20162:109:0;10072:402:1;20162:109:0;-1:-1:-1;;;;;20307:15:0;;;:9;:15;;;;;;;;;;;20325:20;;;20307:38;;20525:13;;;;;;;;;;:23;;;;;;20577:26;;2710:25:1;;;20525:13:0;;20577:26;;2683:18:1;20577:26:0;;;;;;;20616:37;24715:125;35213:743;35379:7;:17;35347:6;:16;35317:14;;35288:13;;35272;;35379:17;35347:16;35288:43;;;:::i;:::-;:75;;;;:::i;:::-;:108;;;;:::i;:::-;35272:124;-1:-1:-1;35407:14:0;35484:9;35272:124;35492:1;35484:9;:::i;:::-;35442:14;;35426:13;;35460:6;;35426:30;;;:::i;:::-;35425:41;;;;:::i;:::-;35424:70;;;;:::i;:::-;35407:87;-1:-1:-1;35505:21:0;35530:15;35407:87;35530:6;:15;:::i;:::-;35505:41;;35557:31;35574:13;35557:16;:31::i;:::-;35620:21;35599:18;35692:6;35669:19;35682:6;35620:21;35669:19;:::i;:::-;35668:30;;;;:::i;:::-;35652:46;;35721:1;35713:5;:9;:23;;;;;35735:1;35726:6;:10;35713:23;35709:83;;;35753:27;35766:5;35773:6;35753:12;:27::i;:::-;35806:21;:25;35802:147;;35883:15;;:54;;35848:9;;-1:-1:-1;;;;;35883:15:0;;35911:21;;35848:9;35883:54;35848:9;35883:54;35911:21;35883:15;:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;35261:695:0;;;;;35213:743;:::o;36037:841::-;36187:16;;;36201:1;36187:16;;;;;;;;36163:21;;36187:16;;;;;;;;;;-1:-1:-1;36187:16:0;36163:40;;36232:4;36214;36219:1;36214:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;36214:23:0;;;-1:-1:-1;;;;;36214:23:0;;;;;36258:15;-1:-1:-1;;;;;36258:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36248:4;36253:1;36248:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;36248:32:0;;;-1:-1:-1;;;;;36248:32:0;;;;;36350:11;36297:50;36315:4;36330:15;36297:9;:50::i;:::-;:64;36293:231;;;36378:134;36413:4;36445:15;-1:-1:-1;;36378:8:0;:134::i;:::-;36550:48;;-1:-1:-1;;;36550:48:0;;36536:11;;-1:-1:-1;;;;;36550:15:0;:29;;;;:48;;36580:11;;36593:4;;36550:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;36550:48:0;;;;;;;;;;;;:::i;:::-;36599:1;36550:51;;;;;;;;:::i;:::-;;;;;;;36536:65;;36638:15;-1:-1:-1;;;;;36638:66:0;;36719:11;36758:3;36746;36752:2;36746:8;;;;:::i;:::-;36745:16;;;;:::i;:::-;36791:4;36818;36838:21;:15;36856:3;36838:21;:::i;:::-;36638:232;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36092:786;;36037:841;:::o;36909:302::-;-1:-1:-1;;;;;36985:15:0;:31;;37024:9;37057:4;37077:6;37098:1;;37138:6;37171:21;:15;37189:3;37171:21;:::i;:::-;36985:218;;;;;;-1:-1:-1;;;;;;36985:218:0;;;-1:-1:-1;;;;;14060:15:1;;;36985:218:0;;;14042:34:1;14092:18;;;14085:34;;;;14135:18;;;14128:34;;;;14178:18;;;14171:34;;;;14242:15;;;14221:19;;;14214:44;14274:19;;;14267:35;;;;13976:19;;36985:218:0;;;;;;;;;;;;;;;;;;;14:316:1;91:6;99;107;160:2;148:9;139:7;135:23;131:32;128:52;;;176:1;173;166:12;128:52;-1:-1:-1;;199:23:1;;;269:2;254:18;;241:32;;-1:-1:-1;320:2:1;305:18;;;292:32;;14:316;-1:-1:-1;14:316:1:o;335:250::-;420:1;430:113;444:6;441:1;438:13;430:113;;;520:11;;;514:18;501:11;;;494:39;466:2;459:10;430:113;;;-1:-1:-1;;577:1:1;559:16;;552:27;335:250::o;590:396::-;739:2;728:9;721:21;702:4;771:6;765:13;814:6;809:2;798:9;794:18;787:34;830:79;902:6;897:2;886:9;882:18;877:2;869:6;865:15;830:79;:::i;:::-;970:2;949:15;-1:-1:-1;;945:29:1;930:45;;;;977:2;926:54;;590:396;-1:-1:-1;;590:396:1:o;991:131::-;-1:-1:-1;;;;;1066:31:1;;1056:42;;1046:70;;1112:1;1109;1102:12;1127:315;1195:6;1203;1256:2;1244:9;1235:7;1231:23;1227:32;1224:52;;;1272:1;1269;1262:12;1224:52;1311:9;1298:23;1330:31;1355:5;1330:31;:::i;:::-;1380:5;1432:2;1417:18;;;;1404:32;;-1:-1:-1;;;1127:315:1:o;1639:180::-;1698:6;1751:2;1739:9;1730:7;1726:23;1722:32;1719:52;;;1767:1;1764;1757:12;1719:52;-1:-1:-1;1790:23:1;;1639:180;-1:-1:-1;1639:180:1:o;2054:118::-;2140:5;2133:13;2126:21;2119:5;2116:32;2106:60;;2162:1;2159;2152:12;2177:382;2242:6;2250;2303:2;2291:9;2282:7;2278:23;2274:32;2271:52;;;2319:1;2316;2309:12;2271:52;2358:9;2345:23;2377:31;2402:5;2377:31;:::i;:::-;2427:5;-1:-1:-1;2484:2:1;2469:18;;2456:32;2497:30;2456:32;2497:30;:::i;:::-;2546:7;2536:17;;;2177:382;;;;;:::o;2746:456::-;2823:6;2831;2839;2892:2;2880:9;2871:7;2867:23;2863:32;2860:52;;;2908:1;2905;2898:12;2860:52;2947:9;2934:23;2966:31;2991:5;2966:31;:::i;:::-;3016:5;-1:-1:-1;3073:2:1;3058:18;;3045:32;3086:33;3045:32;3086:33;:::i;:::-;2746:456;;3138:7;;-1:-1:-1;;;3192:2:1;3177:18;;;;3164:32;;2746:456::o;3720:247::-;3779:6;3832:2;3820:9;3811:7;3807:23;3803:32;3800:52;;;3848:1;3845;3838:12;3800:52;3887:9;3874:23;3906:31;3931:5;3906:31;:::i;:::-;3956:5;3720:247;-1:-1:-1;;;3720:247:1:o;4180:388::-;4248:6;4256;4309:2;4297:9;4288:7;4284:23;4280:32;4277:52;;;4325:1;4322;4315:12;4277:52;4364:9;4351:23;4383:31;4408:5;4383:31;:::i;:::-;4433:5;-1:-1:-1;4490:2:1;4475:18;;4462:32;4503:33;4462:32;4503:33;:::i;4573:380::-;4652:1;4648:12;;;;4695;;;4716:61;;4770:4;4762:6;4758:17;4748:27;;4716:61;4823:2;4815:6;4812:14;4792:18;4789:38;4786:161;;4869:10;4864:3;4860:20;4857:1;4850:31;4904:4;4901:1;4894:15;4932:4;4929:1;4922:15;4786:161;;4573:380;;;:::o;4958:127::-;5019:10;5014:3;5010:20;5007:1;5000:31;5050:4;5047:1;5040:15;5074:4;5071:1;5064:15;5090:168;5163:9;;;5194;;5211:15;;;5205:22;;5191:37;5181:71;;5232:18;;:::i;5263:217::-;5303:1;5329;5319:132;;5373:10;5368:3;5364:20;5361:1;5354:31;5408:4;5405:1;5398:15;5436:4;5433:1;5426:15;5319:132;-1:-1:-1;5465:9:1;;5263:217::o;5485:125::-;5550:9;;;5571:10;;;5568:36;;;5584:18;;:::i;5894:287::-;6023:3;6061:6;6055:13;6077:66;6136:6;6131:3;6124:4;6116:6;6112:17;6077:66;:::i;:::-;6159:16;;;;;5894:287;-1:-1:-1;;5894:287:1:o;6186:245::-;6253:6;6306:2;6294:9;6285:7;6281:23;6277:32;6274:52;;;6322:1;6319;6312:12;6274:52;6354:9;6348:16;6373:28;6395:5;6373:28;:::i;9129:128::-;9196:9;;;9217:11;;;9214:37;;;9231:18;;:::i;10689:127::-;10750:10;10745:3;10741:20;10738:1;10731:31;10781:4;10778:1;10771:15;10805:4;10802:1;10795:15;10821:127;10882:10;10877:3;10873:20;10870:1;10863:31;10913:4;10910:1;10903:15;10937:4;10934:1;10927:15;10953:251;11023:6;11076:2;11064:9;11055:7;11051:23;11047:32;11044:52;;;11092:1;11089;11082:12;11044:52;11124:9;11118:16;11143:31;11168:5;11143:31;:::i;11209:461::-;11262:3;11300:5;11294:12;11327:6;11322:3;11315:19;11353:4;11382:2;11377:3;11373:12;11366:19;;11419:2;11412:5;11408:14;11440:1;11450:195;11464:6;11461:1;11458:13;11450:195;;;11529:13;;-1:-1:-1;;;;;11525:39:1;11513:52;;11585:12;;;;11620:15;;;;11561:1;11479:9;11450:195;;;-1:-1:-1;11661:3:1;;11209:461;-1:-1:-1;;;;;11209:461:1:o;11675:332::-;11882:6;11871:9;11864:25;11925:2;11920;11909:9;11905:18;11898:30;11845:4;11945:56;11997:2;11986:9;11982:18;11974:6;11945:56;:::i;:::-;11937:64;11675:332;-1:-1:-1;;;;11675:332:1:o;12012:1105::-;12107:6;12138:2;12181;12169:9;12160:7;12156:23;12152:32;12149:52;;;12197:1;12194;12187:12;12149:52;12230:9;12224:16;12259:18;12300:2;12292:6;12289:14;12286:34;;;12316:1;12313;12306:12;12286:34;12354:6;12343:9;12339:22;12329:32;;12399:7;12392:4;12388:2;12384:13;12380:27;12370:55;;12421:1;12418;12411:12;12370:55;12450:2;12444:9;12472:2;12468;12465:10;12462:36;;;12478:18;;:::i;:::-;12524:2;12521:1;12517:10;12556:2;12550:9;12619:2;12615:7;12610:2;12606;12602:11;12598:25;12590:6;12586:38;12674:6;12662:10;12659:22;12654:2;12642:10;12639:18;12636:46;12633:72;;;12685:18;;:::i;:::-;12721:2;12714:22;12771:18;;;12805:15;;;;-1:-1:-1;12847:11:1;;;12843:20;;;12875:19;;;12872:39;;;12907:1;12904;12897:12;12872:39;12931:11;;;;12951:135;12967:6;12962:3;12959:15;12951:135;;;13033:10;;13021:23;;12984:12;;;;13064;;;;12951:135;;;13105:6;12012:1105;-1:-1:-1;;;;;;;;12012:1105:1:o;13122:574::-;13413:6;13402:9;13395:25;13456:6;13451:2;13440:9;13436:18;13429:34;13499:3;13494:2;13483:9;13479:18;13472:31;13376:4;13520:57;13572:3;13561:9;13557:19;13549:6;13520:57;:::i;:::-;-1:-1:-1;;;;;13613:32:1;;;;13608:2;13593:18;;13586:60;-1:-1:-1;13677:3:1;13662:19;13655:35;13512:65;13122:574;-1:-1:-1;;;13122:574:1:o

Swarm Source

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