ETH Price: $2,506.35 (-4.86%)

Token

USICoin (USIC)
 

Overview

Max Total Supply

200,000,000 USIC

Holders

302

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.52541862160087838 USIC

Value
$0.00
0xab70c25671cfefc01c7e35beced47845231fb428
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:
usic

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-10-23
*/

/**
 *Submitted for verification at EtherScan.com on 2021-06-20
*/

/**
 *
 *
   https://2pt0.xyz
   https://x.com/usic_ai
   https://t.me/+p0MPYXnL3Cc5MGFh
   

   Contract features:
   200,000,000 tokens
   3% buy tax in ETH sent to marketing, community & dev
   3% sell tax in ETH sent to marketing, community & dev
 */

// SPDX-License-Identifier: MIT
 
pragma solidity 0.8.17;
pragma experimental ABIEncoderV2;
 
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
 
// pragma solidity ^0.8.0;
 
/**
 * @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;
    }
}
 
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)
 
// pragma solidity ^0.8.0;
 
// import "../utils/Context.sol";
 
/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * 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);
    }
}
 
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)
 
// pragma solidity ^0.8.0;
 
/**
 * @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);
}
 
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)
 
// pragma solidity ^0.8.0;
 
// import "../IERC20.sol";
 
/**
 * @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);
}
 
// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)
 
// pragma solidity ^0.8.0;
 
// import "./IERC20.sol";
// import "./extensions/IERC20Metadata.sol";
// import "../../utils/Context.sol";
 
/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of 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 {}
}
 
// OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol)
 
// pragma solidity ^0.8.0;
 
// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.
 
/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }
 
    /**
     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }
 
    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }
 
    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }
 
    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }
 
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }
 
    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }
 
    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }
 
    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }
 
    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }
 
    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }
 
    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }
 
    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}
 
// pragma solidity >=0.5.0;
 
interface IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );
 
    function feeTo() external view returns (address);
 
    function feeToSetter() external view returns (address);
 
    function getPair(address tokenA, address tokenB)
        external
        view
        returns (address pair);
 
    function allPairs(uint256) external view returns (address pair);
 
    function allPairsLength() external view returns (uint256);
 
    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);
 
    function setFeeTo(address) external;
 
    function setFeeToSetter(address) external;
}
 
// pragma solidity >=0.6.2;
 
interface IUniswapV2Router01 {
    function factory() external pure returns (address);
 
    function WETH() external pure returns (address);
 
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );
 
    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );
 
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);
 
    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);
 
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);
 
    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);
 
    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);
 
    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);
 
    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);
 
    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);
 
    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);
 
    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);
 
    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);
 
    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);
 
    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);
 
    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
 
    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}
 
// pragma solidity >=0.6.2;
 
// import './IUniswapV2Router01.sol';
 
interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);
 
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);
 
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
 
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;
 
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}
 
contract usic is ERC20, Ownable {
    using SafeMath for uint256;
 
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public uniswapV2Pair;
    address public constant deadAddress = address(0xdead);
 
    bool private swapping;
 
    address public marketingWallet;
    address public developmentWallet;
    address public communityFundWallet;
 
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
 
    bool public tradingActive = false;
    bool public swapEnabled = false;
 
    uint256 public buyTotalFees;
    uint256 private buyMarketingFee;
    uint256 private buyDevelopmentFee;
    uint256 private buyCommunityFundFee;
 
    uint256 public sellTotalFees;
    uint256 private sellMarketingFee;
    uint256 private sellDevelopmentFee;
    uint256 private sellCommunityFundFee;
 
    uint256 private tokensForMarketing;
    uint256 private tokensForDevelopment;
    uint256 private tokensForCommunityFund;
    uint256 private previousFee;
 
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) private _isExcludedMaxTransactionAmount;
    mapping(address => bool) private automatedMarketMakerPairs;
 
    event ExcludeFromFees(address indexed account, bool isExcluded);
 
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
 
    event marketingWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );
 
    event developmentWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );
 
    event communityFundWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );
 
    constructor() ERC20("USICoin", "USIC") {
        uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        _approve(address(this), address(uniswapV2Router), type(uint256).max);
 
        uint256 totalSupply = 200_000_000 ether;
 
        maxTransactionAmount = (totalSupply) / 200; // 500,000,000 tokens
        maxWallet = (totalSupply) / 100;  // 1% of total supply (1,000,000,000 tokens)
        swapTokensAtAmount = (totalSupply * 5) / 10000;
 
        buyMarketingFee = 1;
        buyDevelopmentFee = 1;
        buyCommunityFundFee = 1;
        buyTotalFees =
            buyMarketingFee +
            buyDevelopmentFee +
            buyCommunityFundFee;
 
        sellMarketingFee = 1;
        sellDevelopmentFee = 1;
        sellCommunityFundFee = 1;
        sellTotalFees =
            sellMarketingFee +
            sellDevelopmentFee +
            sellCommunityFundFee;
 
        previousFee = sellTotalFees;
 
        marketingWallet = address(0x2C6B16adE880a3B5F3FCE087014B9dEcb13D300F); // Marketing Funds
        developmentWallet = address(0xC6aa2f0FF6b8563EA418ec2558890D6027413699); // DrewRoberts.eth
        communityFundWallet = address(0x08b74d0Dd543250Bf20F53E5dE9f66Ef3F88a7B9); // Community Funds
 
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(deadAddress, true);
        excludeFromFees(marketingWallet, true);
        excludeFromFees(developmentWallet, true);
        excludeFromFees(communityFundWallet, true);
 
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(deadAddress, true);
        excludeFromMaxTransaction(address(uniswapV2Router), true);
        excludeFromMaxTransaction(marketingWallet, true);
        excludeFromMaxTransaction(developmentWallet, true);
        excludeFromMaxTransaction(communityFundWallet, true);
 
        _mint(address(this), totalSupply);
    }
 
    receive() external payable {}
 
    function burn(uint256 amount) external {
        _burn(msg.sender, amount);
    }
 
    function enableTrading() external onlyOwner {
        require(!tradingActive, "Trading already active.");
 
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(
            address(this),
            uniswapV2Router.WETH()
        );
        _approve(address(this), address(uniswapV2Pair), type(uint256).max);
        IERC20(uniswapV2Pair).approve(
            address(uniswapV2Router),
            type(uint256).max
        );
 
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        excludeFromMaxTransaction(address(uniswapV2Pair), true);

        uint256 tokensInWallet = balanceOf(address(this));
        uint256 tokensToAdd = tokensInWallet * 90 / 100; // 90% of tokens in wallet go to LP
 
        uniswapV2Router.addLiquidityETH{value: address(this).balance}(
            address(this),
            tokensToAdd, 
            0,
            0,
            owner(),
            block.timestamp
        );
 
        tradingActive = true;
        swapEnabled = true;
    }
 
    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "ERC20: Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1000,
            "ERC20: Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }
 
    function updateMaxWalletAndTxnAmount(
        uint256 newTxnNum,
        uint256 newMaxWalletNum
    ) external onlyOwner {
        require(
            newTxnNum >= ((totalSupply() * 5) / 1000),
            "ERC20: Cannot set maxTxn lower than 0.5%"
        );
        require(
            newMaxWalletNum >= ((totalSupply() * 5) / 1000),
            "ERC20: Cannot set maxWallet lower than 0.5%"
        );
        maxWallet = newMaxWalletNum;
        maxTransactionAmount = newTxnNum;
    }
 
    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
 
    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _developmentFee,
        uint256 _communityFundFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyDevelopmentFee = _developmentFee;
        buyCommunityFundFee = _communityFundFee;
        buyTotalFees =
            buyMarketingFee +
            buyDevelopmentFee +
            buyCommunityFundFee;
        require(buyTotalFees <= 10, "ERC20: Must keep fees at 10% or less");
    }
 
    function updateSellFees(
        uint256 _marketingFee,
        uint256 _developmentFee,
        uint256 _communityFundFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellDevelopmentFee = _developmentFee;
        sellCommunityFundFee = _communityFundFee;
        sellTotalFees =
            sellMarketingFee +
            sellDevelopmentFee +
            sellCommunityFundFee;
        previousFee = sellTotalFees;
        require(sellTotalFees <= 10, "ERC20: Must keep fees at 10% or less");
    }
 
    function updateMarketingWallet(address _marketingWallet)
        external
        onlyOwner
    {
        require(_marketingWallet != address(0), "ERC20: Address 0");
        address oldWallet = marketingWallet;
        marketingWallet = _marketingWallet;
        emit marketingWalletUpdated(marketingWallet, oldWallet);
    }
 
    function updateDevelopmentWallet(address _developmentWallet)
        external
        onlyOwner
    {
        require(_developmentWallet != address(0), "ERC20: Address 0");
        address oldWallet = developmentWallet;
        developmentWallet = _developmentWallet;
        emit developmentWalletUpdated(developmentWallet, oldWallet);
    }
 
    function updateCommunityFundWallet(address _communityFundWallet)
        external
        onlyOwner
    {
        require(_communityFundWallet != address(0), "ERC20: Address 0");
        address oldWallet = communityFundWallet;
        communityFundWallet = _communityFundWallet;
        emit communityFundWalletUpdated(communityFundWallet, oldWallet);
    }
 
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }
 
    function withdrawStuckETH() public onlyOwner {
        bool success;
        (success, ) = address(msg.sender).call{value: address(this).balance}(
            ""
        );
    }
 
    function withdrawStuckTokens(address tkn) public onlyOwner {
        require(IERC20(tkn).balanceOf(address(this)) > 0, "No tokens");
        uint256 amount = IERC20(tkn).balanceOf(address(this));
        IERC20(tkn).transfer(msg.sender, amount);
    }
 
    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
 
        emit SetAutomatedMarketMakerPair(pair, value);
    }
 
    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }
 
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
 
        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
 
        if (
            from != owner() &&
            to != owner() &&
            to != address(0) &&
            to != deadAddress &&
            !swapping
        ) {
            if (!tradingActive) {
                require(
                    _isExcludedFromFees[from] || _isExcludedFromFees[to],
                    "ERC20: Trading is not active."
                );
            }
 
            //when buy
            if (
                automatedMarketMakerPairs[from] &&
                !_isExcludedMaxTransactionAmount[to]
            ) {
                require(
                    amount <= maxTransactionAmount,
                    "ERC20: Buy transfer amount exceeds the maxTransactionAmount."
                );
                require(
                    amount + balanceOf(to) <= maxWallet,
                    "ERC20: Max wallet exceeded"
                );
            }
            //when sell
            else if (
                automatedMarketMakerPairs[to] &&
                !_isExcludedMaxTransactionAmount[from]
            ) {
                require(
                    amount <= maxTransactionAmount,
                    "ERC20: Sell transfer amount exceeds the maxTransactionAmount."
                );
            } else if (!_isExcludedMaxTransactionAmount[to]) {
                require(
                    amount + balanceOf(to) <= maxWallet,
                    "ERC20: Max wallet exceeded"
                );
            }
        }
 
        uint256 contractTokenBalance = balanceOf(address(this));
 
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;
 
        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
 
            swapBack();
 
            swapping = false;
        }
 
        bool takeFee = !swapping;
 
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
 
        uint256 fees = 0;
 
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForCommunityFund +=
                    (fees * sellCommunityFundFee) /
                    sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
                tokensForDevelopment +=
                    (fees * sellDevelopmentFee) /
                    sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForCommunityFund +=
                    (fees * buyCommunityFundFee) /
                    buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
                tokensForDevelopment +=
                    (fees * buyDevelopmentFee) /
                    buyTotalFees;
            }
 
            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }
 
            amount -= fees;
        }
 
        super._transfer(from, to, amount);
        sellTotalFees = previousFee;
    }
 
    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
 
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }
 
    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForCommunityFund +
            tokensForMarketing +
            tokensForDevelopment;
        bool success;
 
        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }
 
        if (contractBalance > swapTokensAtAmount * 20) {
            contractBalance = swapTokensAtAmount * 20;
        }
 
        swapTokensForEth(contractBalance);
 
        uint256 ethBalance = address(this).balance;
 
        uint256 ethForDevelopment = ethBalance.mul(tokensForDevelopment).div(
            totalTokensToSwap
        );
 
        uint256 ethForCommunityFund = ethBalance
            .mul(tokensForCommunityFund)
            .div(totalTokensToSwap);
 
        tokensForMarketing = 0;
        tokensForDevelopment = 0;
        tokensForCommunityFund = 0;
 
        (success, ) = address(communityFundWallet).call{
            value: ethForCommunityFund
        }("");
 
        (success, ) = address(developmentWallet).call{value: ethForDevelopment}(
            ""
        );
 
        (success, ) = address(marketingWallet).call{
            value: address(this).balance
        }("");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","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":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"communityFundWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"developmentWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","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":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"communityFundWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"developmentWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","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":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_developmentFee","type":"uint256"},{"internalType":"uint256","name":"_communityFundFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_communityFundWallet","type":"address"}],"name":"updateCommunityFundWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_developmentWallet","type":"address"}],"name":"updateDevelopmentWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTxnNum","type":"uint256"},{"internalType":"uint256","name":"newMaxWalletNum","type":"uint256"}],"name":"updateMaxWalletAndTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_developmentFee","type":"uint256"},{"internalType":"uint256","name":"_communityFundFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tkn","type":"address"}],"name":"withdrawStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a0604052600d805461ffff191690553480156200001c57600080fd5b50604051806040016040528060078152602001662aa9a4a1b7b4b760c91b815250604051806040016040528060048152602001635553494360e01b81525081600390816200006b9190620006e8565b5060046200007a8282620006e8565b5050506200009762000091620002fe60201b60201c565b62000302565b737a250d5630b4cf539739df2c5dacb4c659f2488d6080819052620000c190309060001962000354565b6aa56fa5b99019a5c8000000620000da60c882620007ca565b600a55620000ea606482620007ca565b600c55612710620000fd826005620007ed565b620001099190620007ca565b600b556001600f819055601081905560118190556200012981806200080d565b6200013591906200080d565b600e5560016013819055601481905560158190556200015581806200080d565b6200016191906200080d565b6012819055601955600780546001600160a01b0319908116732c6b16ade880a3b5f3fce087014b9decb13d300f1790915560088054821673c6aa2f0ff6b8563ea418ec2558890d6027413699179055600980549091167308b74d0dd543250bf20f53e5de9f66ef3f88a7b9179055620001ee620001e66005546001600160a01b031690565b600162000480565b620001fb30600162000480565b6200020a61dead600162000480565b60075462000223906001600160a01b0316600162000480565b6008546200023c906001600160a01b0316600162000480565b60095462000255906001600160a01b0316600162000480565b620002746200026c6005546001600160a01b031690565b6001620004e9565b62000281306001620004e9565b6200029061dead6001620004e9565b608051620002a0906001620004e9565b600754620002b9906001600160a01b03166001620004e9565b600854620002d2906001600160a01b03166001620004e9565b600954620002eb906001600160a01b03166001620004e9565b620002f730826200051e565b5062000823565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038316620003bc5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b0382166200041f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401620003b3565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6200048a620005e1565b6001600160a01b0382166000818152601a6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b620004f3620005e1565b6001600160a01b03919091166000908152601b60205260409020805460ff1916911515919091179055565b6001600160a01b038216620005765760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620003b3565b80600260008282546200058a91906200080d565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6005546001600160a01b031633146200063d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620003b3565b565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200066f57607f821691505b6020821081036200069057634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200063f57600081815260208120601f850160051c81016020861015620006bf5750805b601f850160051c820191505b81811015620006e057828155600101620006cb565b505050505050565b81516001600160401b0381111562000704576200070462000644565b6200071c816200071584546200065a565b8462000696565b602080601f8311600181146200075457600084156200073b5750858301515b600019600386901b1c1916600185901b178555620006e0565b600085815260208120601f198616915b82811015620007855788860151825594840194600190910190840162000764565b5085821015620007a45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600082620007e857634e487b7160e01b600052601260045260246000fd5b500490565b8082028115828204841417620008075762000807620007b4565b92915050565b80820180821115620008075762000807620007b4565b60805161292262000870600039600081816102c30152818161097a01528181610a0b01528181610b4301528181610c1c0152818161230d015281816123c6015261240201526129226000f3fe60806040526004361061024a5760003560e01c80638da5cb5b11610139578063c17b5b8c116100b6578063dd62ed3e1161007a578063dd62ed3e146106d7578063e2f45605146106f7578063f023f5731461070d578063f2fde38b1461072d578063f5648a4f1461074d578063f8b45b051461076257600080fd5b8063c17b5b8c1461064b578063c8c8ebe41461066b578063cb96372814610681578063d257b34f146106a1578063d85ba063146106c157600080fd5b8063a9059cbb116100fd578063a9059cbb146105b1578063aacebbe3146105d1578063bbc0c742146105f1578063c02466681461060b578063c04a54141461062b57600080fd5b80638da5cb5b1461051e57806395d89b411461053c5780639618839914610551578063a25975a214610571578063a457c2d71461059157600080fd5b806349bd5a5e116101c7578063715018a61161018b578063715018a6146104945780637571336a146104a957806375f0a874146104c95780638095d564146104e95780638a8c523c1461050957600080fd5b806349bd5a5e146103d05780634fbee193146103f05780636a486a8e146104295780636ddd17131461043f57806370a082311461045e57600080fd5b806323b872dd1161020e57806323b872dd1461033c57806327c8f8351461035c578063313ce56714610372578063395093511461038e57806342966c68146103ae57600080fd5b806306fdde0314610256578063095ea7b3146102815780631694505e146102b157806318160ddd146102fd578063197b5a301461031c57600080fd5b3661025157005b600080fd5b34801561026257600080fd5b5061026b610778565b6040516102789190612476565b60405180910390f35b34801561028d57600080fd5b506102a161029c3660046124d9565b61080a565b6040519015158152602001610278565b3480156102bd57600080fd5b506102e57f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610278565b34801561030957600080fd5b506002545b604051908152602001610278565b34801561032857600080fd5b506009546102e5906001600160a01b031681565b34801561034857600080fd5b506102a1610357366004612505565b610824565b34801561036857600080fd5b506102e561dead81565b34801561037e57600080fd5b5060405160128152602001610278565b34801561039a57600080fd5b506102a16103a93660046124d9565b610848565b3480156103ba57600080fd5b506103ce6103c9366004612546565b61086a565b005b3480156103dc57600080fd5b506006546102e5906001600160a01b031681565b3480156103fc57600080fd5b506102a161040b36600461255f565b6001600160a01b03166000908152601a602052604090205460ff1690565b34801561043557600080fd5b5061030e60125481565b34801561044b57600080fd5b50600d546102a190610100900460ff1681565b34801561046a57600080fd5b5061030e61047936600461255f565b6001600160a01b031660009081526020819052604090205490565b3480156104a057600080fd5b506103ce610877565b3480156104b557600080fd5b506103ce6104c436600461258a565b61088b565b3480156104d557600080fd5b506007546102e5906001600160a01b031681565b3480156104f557600080fd5b506103ce6105043660046125c3565b6108be565b34801561051557600080fd5b506103ce61091d565b34801561052a57600080fd5b506005546001600160a01b03166102e5565b34801561054857600080fd5b5061026b610d04565b34801561055d57600080fd5b506103ce61056c3660046125ef565b610d13565b34801561057d57600080fd5b506103ce61058c36600461255f565b610e28565b34801561059d57600080fd5b506102a16105ac3660046124d9565b610ea7565b3480156105bd57600080fd5b506102a16105cc3660046124d9565b610f22565b3480156105dd57600080fd5b506103ce6105ec36600461255f565b610f30565b3480156105fd57600080fd5b50600d546102a19060ff1681565b34801561061757600080fd5b506103ce61062636600461258a565b610faf565b34801561063757600080fd5b506008546102e5906001600160a01b031681565b34801561065757600080fd5b506103ce6106663660046125c3565b611016565b34801561067757600080fd5b5061030e600a5481565b34801561068d57600080fd5b506103ce61069c36600461255f565b61106c565b3480156106ad57600080fd5b506102a16106bc366004612546565b6111f7565b3480156106cd57600080fd5b5061030e600e5481565b3480156106e357600080fd5b5061030e6106f2366004612611565b611337565b34801561070357600080fd5b5061030e600b5481565b34801561071957600080fd5b506103ce61072836600461255f565b611362565b34801561073957600080fd5b506103ce61074836600461255f565b6113e1565b34801561075957600080fd5b506103ce611457565b34801561076e57600080fd5b5061030e600c5481565b6060600380546107879061263f565b80601f01602080910402602001604051908101604052809291908181526020018280546107b39061263f565b80156108005780601f106107d557610100808354040283529160200191610800565b820191906000526020600020905b8154815290600101906020018083116107e357829003601f168201915b5050505050905090565b6000336108188185856114ac565b60019150505b92915050565b6000336108328582856115d0565b61083d858585611644565b506001949350505050565b60003361081881858561085b8383611337565b610865919061268f565b6114ac565b6108743382611d6e565b50565b61087f611ea0565b6108896000611efa565b565b610893611ea0565b6001600160a01b03919091166000908152601b60205260409020805460ff1916911515919091179055565b6108c6611ea0565b600f83905560108290556011819055806108e0838561268f565b6108ea919061268f565b600e819055600a10156109185760405162461bcd60e51b815260040161090f906126a2565b60405180910390fd5b505050565b610925611ea0565b600d5460ff16156109785760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720616c7265616479206163746976652e000000000000000000604482015260640161090f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109fa91906126e6565b6001600160a01b031663c9c65396307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8b91906126e6565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610ad8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610afc91906126e6565b600680546001600160a01b0319166001600160a01b03929092169182179055610b299030906000196114ac565b60065460405163095ea7b360e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015260001960248301529091169063095ea7b3906044016020604051808303816000875af1158015610b9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc19190612703565b50600654610bd9906001600160a01b03166001611f4c565b600654610bf0906001600160a01b0316600161088b565b30600090815260208190526040812054906064610c0e83605a612720565b610c189190612737565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f305d719473084600080610c616005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015610cc9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610cee9190612759565b5050600d805461ffff1916610101179055505050565b6060600480546107879061263f565b610d1b611ea0565b6103e8610d2760025490565b610d32906005612720565b610d3c9190612737565b821015610d9c5760405162461bcd60e51b815260206004820152602860248201527f45524332303a2043616e6e6f7420736574206d617854786e206c6f776572207460448201526768616e20302e352560c01b606482015260840161090f565b6103e8610da860025490565b610db3906005612720565b610dbd9190612737565b811015610e205760405162461bcd60e51b815260206004820152602b60248201527f45524332303a2043616e6e6f7420736574206d617857616c6c6574206c6f776560448201526a72207468616e20302e352560a81b606482015260840161090f565b600c55600a55565b610e30611ea0565b6001600160a01b038116610e565760405162461bcd60e51b815260040161090f90612787565b600980546001600160a01b038381166001600160a01b03198316811790935560405191169182917fa13e0842056b6007f193cc5de6b4f061118c03f9e43e8ad46768a6fa48211a7390600090a35050565b60003381610eb58286611337565b905083811015610f155760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161090f565b61083d82868684036114ac565b600033610818818585611644565b610f38611ea0565b6001600160a01b038116610f5e5760405162461bcd60e51b815260040161090f90612787565b600780546001600160a01b038381166001600160a01b03198316811790935560405191169182917fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567490600090a35050565b610fb7611ea0565b6001600160a01b0382166000818152601a6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b61101e611ea0565b60138390556014829055601581905580611038838561268f565b611042919061268f565b60128190556019819055600a10156109185760405162461bcd60e51b815260040161090f906126a2565b611074611ea0565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156110bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110df91906127b1565b116111185760405162461bcd60e51b81526020600482015260096024820152684e6f20746f6b656e7360b81b604482015260640161090f565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa15801561115f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118391906127b1565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af11580156111d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109189190612703565b6000611201611ea0565b620186a061120e60025490565b611219906001612720565b6112239190612737565b8210156112985760405162461bcd60e51b815260206004820152603c60248201527f45524332303a205377617020616d6f756e742063616e6e6f74206265206c6f7760448201527f6572207468616e20302e3030312520746f74616c20737570706c792e00000000606482015260840161090f565b6103e86112a460025490565b6112af906005612720565b6112b99190612737565b82111561132e5760405162461bcd60e51b815260206004820152603b60248201527f45524332303a205377617020616d6f756e742063616e6e6f742062652068696760448201527f686572207468616e20302e352520746f74616c20737570706c792e0000000000606482015260840161090f565b50600b55600190565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61136a611ea0565b6001600160a01b0381166113905760405162461bcd60e51b815260040161090f90612787565b600880546001600160a01b038381166001600160a01b03198316811790935560405191169182917ffaf1b77ed79f6e898c44dd8ab36b330c7b2fd39bcaab05ed6362480df870396590600090a35050565b6113e9611ea0565b6001600160a01b03811661144e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161090f565b61087481611efa565b61145f611ea0565b604051600090339047908381818185875af1925050503d80600081146114a1576040519150601f19603f3d011682016040523d82523d6000602084013e6114a6565b606091505b50505050565b6001600160a01b03831661150e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161090f565b6001600160a01b03821661156f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161090f565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006115dc8484611337565b905060001981146114a657818110156116375760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161090f565b6114a684848484036114ac565b6001600160a01b03831661166a5760405162461bcd60e51b815260040161090f906127ca565b6001600160a01b0382166116905760405162461bcd60e51b815260040161090f9061280f565b806000036116a45761091883836000611fa0565b6005546001600160a01b038481169116148015906116d057506005546001600160a01b03838116911614155b80156116e457506001600160a01b03821615155b80156116fb57506001600160a01b03821661dead14155b80156117115750600654600160a01b900460ff16155b15611a3457600d5460ff166117ab576001600160a01b0383166000908152601a602052604090205460ff168061175f57506001600160a01b0382166000908152601a602052604090205460ff165b6117ab5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2054726164696e67206973206e6f74206163746976652e000000604482015260640161090f565b6001600160a01b0383166000908152601c602052604090205460ff1680156117ec57506001600160a01b0382166000908152601b602052604090205460ff16155b156118e257600a548111156118695760405162461bcd60e51b815260206004820152603c60248201527f45524332303a20427579207472616e7366657220616d6f756e7420657863656560448201527f647320746865206d61785472616e73616374696f6e416d6f756e742e00000000606482015260840161090f565b600c546001600160a01b03831660009081526020819052604090205461188f908361268f565b11156118dd5760405162461bcd60e51b815260206004820152601a60248201527f45524332303a204d61782077616c6c6574206578636565646564000000000000604482015260640161090f565b611a34565b6001600160a01b0382166000908152601c602052604090205460ff16801561192357506001600160a01b0383166000908152601b602052604090205460ff16155b156119a057600a548111156118dd5760405162461bcd60e51b815260206004820152603d60248201527f45524332303a2053656c6c207472616e7366657220616d6f756e74206578636560448201527f65647320746865206d61785472616e73616374696f6e416d6f756e742e000000606482015260840161090f565b6001600160a01b0382166000908152601b602052604090205460ff16611a3457600c546001600160a01b0383166000908152602081905260409020546119e6908361268f565b1115611a345760405162461bcd60e51b815260206004820152601a60248201527f45524332303a204d61782077616c6c6574206578636565646564000000000000604482015260640161090f565b30600090815260208190526040902054600b5481108015908190611a5f5750600d54610100900460ff165b8015611a755750600654600160a01b900460ff16155b8015611a9a57506001600160a01b0385166000908152601c602052604090205460ff16155b8015611abf57506001600160a01b0385166000908152601a602052604090205460ff16155b8015611ae457506001600160a01b0384166000908152601a602052604090205460ff16155b15611b12576006805460ff60a01b1916600160a01b179055611b046120ca565b6006805460ff60a01b191690555b6006546001600160a01b0386166000908152601a602052604090205460ff600160a01b909204821615911680611b6057506001600160a01b0385166000908152601a602052604090205460ff165b15611b69575060005b60008115611d54576001600160a01b0386166000908152601c602052604090205460ff168015611b9b57506000601254115b15611c5957611bc06064611bba6012548861229790919063ffffffff16565b906122aa565b905060125460155482611bd39190612720565b611bdd9190612737565b60186000828254611bee919061268f565b9091555050601254601354611c039083612720565b611c0d9190612737565b60166000828254611c1e919061268f565b9091555050601254601454611c339083612720565b611c3d9190612737565b60176000828254611c4e919061268f565b90915550611d369050565b6001600160a01b0387166000908152601c602052604090205460ff168015611c8357506000600e54115b15611d3657611ca26064611bba600e548861229790919063ffffffff16565b9050600e5460115482611cb59190612720565b611cbf9190612737565b60186000828254611cd0919061268f565b9091555050600e54600f54611ce59083612720565b611cef9190612737565b60166000828254611d00919061268f565b9091555050600e54601054611d159083612720565b611d1f9190612737565b60176000828254611d30919061268f565b90915550505b8015611d4757611d47873083611fa0565b611d518186612852565b94505b611d5f878787611fa0565b50506019546012555050505050565b6001600160a01b038216611dce5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161090f565b6001600160a01b03821660009081526020819052604090205481811015611e425760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161090f565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6005546001600160a01b031633146108895760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161090f565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000818152601c6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316611fc65760405162461bcd60e51b815260040161090f906127ca565b6001600160a01b038216611fec5760405162461bcd60e51b815260040161090f9061280f565b6001600160a01b038316600090815260208190526040902054818110156120645760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161090f565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36114a6565b30600090815260208190526040812054905060006017546016546018546120f1919061268f565b6120fb919061268f565b9050600082158061210a575081155b1561211457505050565b600b54612122906014612720565b83111561213a57600b54612137906014612720565b92505b612143836122b6565b6000479050600061216384611bba6017548561229790919063ffffffff16565b9050600061218085611bba6018548661229790919063ffffffff16565b60006016819055601781905560188190556009546040519293506001600160a01b031691839181818185875af1925050503d80600081146121dd576040519150601f19603f3d011682016040523d82523d6000602084013e6121e2565b606091505b50506008546040519195506001600160a01b0316908390600081818185875af1925050503d8060008114612232576040519150601f19603f3d011682016040523d82523d6000602084013e612237565b606091505b50506007546040519195506001600160a01b0316904790600081818185875af1925050503d8060008114612287576040519150601f19603f3d011682016040523d82523d6000602084013e61228c565b606091505b505050505050505050565b60006122a38284612720565b9392505050565b60006122a38284612737565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106122eb576122eb612865565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612369573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061238d91906126e6565b816001815181106123a0576123a0612865565b60200260200101906001600160a01b031690816001600160a01b0316815250506123eb307f0000000000000000000000000000000000000000000000000000000000000000846114ac565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac9479061244090859060009086903090429060040161287b565b600060405180830381600087803b15801561245a57600080fd5b505af115801561246e573d6000803e3d6000fd5b505050505050565b600060208083528351808285015260005b818110156124a357858101830151858201604001528201612487565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461087457600080fd5b600080604083850312156124ec57600080fd5b82356124f7816124c4565b946020939093013593505050565b60008060006060848603121561251a57600080fd5b8335612525816124c4565b92506020840135612535816124c4565b929592945050506040919091013590565b60006020828403121561255857600080fd5b5035919050565b60006020828403121561257157600080fd5b81356122a3816124c4565b801515811461087457600080fd5b6000806040838503121561259d57600080fd5b82356125a8816124c4565b915060208301356125b88161257c565b809150509250929050565b6000806000606084860312156125d857600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561260257600080fd5b50508035926020909101359150565b6000806040838503121561262457600080fd5b823561262f816124c4565b915060208301356125b8816124c4565b600181811c9082168061265357607f821691505b60208210810361267357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561081e5761081e612679565b60208082526024908201527f45524332303a204d757374206b656570206665657320617420313025206f72206040820152636c65737360e01b606082015260800190565b6000602082840312156126f857600080fd5b81516122a3816124c4565b60006020828403121561271557600080fd5b81516122a38161257c565b808202811582820484141761081e5761081e612679565b60008261275457634e487b7160e01b600052601260045260246000fd5b500490565b60008060006060848603121561276e57600080fd5b8351925060208401519150604084015190509250925092565b60208082526010908201526f045524332303a204164647265737320360841b604082015260600190565b6000602082840312156127c357600080fd5b5051919050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8181038181111561081e5761081e612679565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156128cb5784516001600160a01b0316835293830193918301916001016128a6565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212200e99d7fde3bb58deb142d23571d0cc5623e0b470d859b8a838f90f43fb579c0564736f6c63430008110033

Deployed Bytecode

0x60806040526004361061024a5760003560e01c80638da5cb5b11610139578063c17b5b8c116100b6578063dd62ed3e1161007a578063dd62ed3e146106d7578063e2f45605146106f7578063f023f5731461070d578063f2fde38b1461072d578063f5648a4f1461074d578063f8b45b051461076257600080fd5b8063c17b5b8c1461064b578063c8c8ebe41461066b578063cb96372814610681578063d257b34f146106a1578063d85ba063146106c157600080fd5b8063a9059cbb116100fd578063a9059cbb146105b1578063aacebbe3146105d1578063bbc0c742146105f1578063c02466681461060b578063c04a54141461062b57600080fd5b80638da5cb5b1461051e57806395d89b411461053c5780639618839914610551578063a25975a214610571578063a457c2d71461059157600080fd5b806349bd5a5e116101c7578063715018a61161018b578063715018a6146104945780637571336a146104a957806375f0a874146104c95780638095d564146104e95780638a8c523c1461050957600080fd5b806349bd5a5e146103d05780634fbee193146103f05780636a486a8e146104295780636ddd17131461043f57806370a082311461045e57600080fd5b806323b872dd1161020e57806323b872dd1461033c57806327c8f8351461035c578063313ce56714610372578063395093511461038e57806342966c68146103ae57600080fd5b806306fdde0314610256578063095ea7b3146102815780631694505e146102b157806318160ddd146102fd578063197b5a301461031c57600080fd5b3661025157005b600080fd5b34801561026257600080fd5b5061026b610778565b6040516102789190612476565b60405180910390f35b34801561028d57600080fd5b506102a161029c3660046124d9565b61080a565b6040519015158152602001610278565b3480156102bd57600080fd5b506102e57f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610278565b34801561030957600080fd5b506002545b604051908152602001610278565b34801561032857600080fd5b506009546102e5906001600160a01b031681565b34801561034857600080fd5b506102a1610357366004612505565b610824565b34801561036857600080fd5b506102e561dead81565b34801561037e57600080fd5b5060405160128152602001610278565b34801561039a57600080fd5b506102a16103a93660046124d9565b610848565b3480156103ba57600080fd5b506103ce6103c9366004612546565b61086a565b005b3480156103dc57600080fd5b506006546102e5906001600160a01b031681565b3480156103fc57600080fd5b506102a161040b36600461255f565b6001600160a01b03166000908152601a602052604090205460ff1690565b34801561043557600080fd5b5061030e60125481565b34801561044b57600080fd5b50600d546102a190610100900460ff1681565b34801561046a57600080fd5b5061030e61047936600461255f565b6001600160a01b031660009081526020819052604090205490565b3480156104a057600080fd5b506103ce610877565b3480156104b557600080fd5b506103ce6104c436600461258a565b61088b565b3480156104d557600080fd5b506007546102e5906001600160a01b031681565b3480156104f557600080fd5b506103ce6105043660046125c3565b6108be565b34801561051557600080fd5b506103ce61091d565b34801561052a57600080fd5b506005546001600160a01b03166102e5565b34801561054857600080fd5b5061026b610d04565b34801561055d57600080fd5b506103ce61056c3660046125ef565b610d13565b34801561057d57600080fd5b506103ce61058c36600461255f565b610e28565b34801561059d57600080fd5b506102a16105ac3660046124d9565b610ea7565b3480156105bd57600080fd5b506102a16105cc3660046124d9565b610f22565b3480156105dd57600080fd5b506103ce6105ec36600461255f565b610f30565b3480156105fd57600080fd5b50600d546102a19060ff1681565b34801561061757600080fd5b506103ce61062636600461258a565b610faf565b34801561063757600080fd5b506008546102e5906001600160a01b031681565b34801561065757600080fd5b506103ce6106663660046125c3565b611016565b34801561067757600080fd5b5061030e600a5481565b34801561068d57600080fd5b506103ce61069c36600461255f565b61106c565b3480156106ad57600080fd5b506102a16106bc366004612546565b6111f7565b3480156106cd57600080fd5b5061030e600e5481565b3480156106e357600080fd5b5061030e6106f2366004612611565b611337565b34801561070357600080fd5b5061030e600b5481565b34801561071957600080fd5b506103ce61072836600461255f565b611362565b34801561073957600080fd5b506103ce61074836600461255f565b6113e1565b34801561075957600080fd5b506103ce611457565b34801561076e57600080fd5b5061030e600c5481565b6060600380546107879061263f565b80601f01602080910402602001604051908101604052809291908181526020018280546107b39061263f565b80156108005780601f106107d557610100808354040283529160200191610800565b820191906000526020600020905b8154815290600101906020018083116107e357829003601f168201915b5050505050905090565b6000336108188185856114ac565b60019150505b92915050565b6000336108328582856115d0565b61083d858585611644565b506001949350505050565b60003361081881858561085b8383611337565b610865919061268f565b6114ac565b6108743382611d6e565b50565b61087f611ea0565b6108896000611efa565b565b610893611ea0565b6001600160a01b03919091166000908152601b60205260409020805460ff1916911515919091179055565b6108c6611ea0565b600f83905560108290556011819055806108e0838561268f565b6108ea919061268f565b600e819055600a10156109185760405162461bcd60e51b815260040161090f906126a2565b60405180910390fd5b505050565b610925611ea0565b600d5460ff16156109785760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720616c7265616479206163746976652e000000000000000000604482015260640161090f565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109fa91906126e6565b6001600160a01b031663c9c65396307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8b91906126e6565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610ad8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610afc91906126e6565b600680546001600160a01b0319166001600160a01b03929092169182179055610b299030906000196114ac565b60065460405163095ea7b360e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8116600483015260001960248301529091169063095ea7b3906044016020604051808303816000875af1158015610b9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc19190612703565b50600654610bd9906001600160a01b03166001611f4c565b600654610bf0906001600160a01b0316600161088b565b30600090815260208190526040812054906064610c0e83605a612720565b610c189190612737565b90507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663f305d719473084600080610c616005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015610cc9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610cee9190612759565b5050600d805461ffff1916610101179055505050565b6060600480546107879061263f565b610d1b611ea0565b6103e8610d2760025490565b610d32906005612720565b610d3c9190612737565b821015610d9c5760405162461bcd60e51b815260206004820152602860248201527f45524332303a2043616e6e6f7420736574206d617854786e206c6f776572207460448201526768616e20302e352560c01b606482015260840161090f565b6103e8610da860025490565b610db3906005612720565b610dbd9190612737565b811015610e205760405162461bcd60e51b815260206004820152602b60248201527f45524332303a2043616e6e6f7420736574206d617857616c6c6574206c6f776560448201526a72207468616e20302e352560a81b606482015260840161090f565b600c55600a55565b610e30611ea0565b6001600160a01b038116610e565760405162461bcd60e51b815260040161090f90612787565b600980546001600160a01b038381166001600160a01b03198316811790935560405191169182917fa13e0842056b6007f193cc5de6b4f061118c03f9e43e8ad46768a6fa48211a7390600090a35050565b60003381610eb58286611337565b905083811015610f155760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161090f565b61083d82868684036114ac565b600033610818818585611644565b610f38611ea0565b6001600160a01b038116610f5e5760405162461bcd60e51b815260040161090f90612787565b600780546001600160a01b038381166001600160a01b03198316811790935560405191169182917fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567490600090a35050565b610fb7611ea0565b6001600160a01b0382166000818152601a6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b61101e611ea0565b60138390556014829055601581905580611038838561268f565b611042919061268f565b60128190556019819055600a10156109185760405162461bcd60e51b815260040161090f906126a2565b611074611ea0565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156110bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110df91906127b1565b116111185760405162461bcd60e51b81526020600482015260096024820152684e6f20746f6b656e7360b81b604482015260640161090f565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa15801561115f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118391906127b1565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af11580156111d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109189190612703565b6000611201611ea0565b620186a061120e60025490565b611219906001612720565b6112239190612737565b8210156112985760405162461bcd60e51b815260206004820152603c60248201527f45524332303a205377617020616d6f756e742063616e6e6f74206265206c6f7760448201527f6572207468616e20302e3030312520746f74616c20737570706c792e00000000606482015260840161090f565b6103e86112a460025490565b6112af906005612720565b6112b99190612737565b82111561132e5760405162461bcd60e51b815260206004820152603b60248201527f45524332303a205377617020616d6f756e742063616e6e6f742062652068696760448201527f686572207468616e20302e352520746f74616c20737570706c792e0000000000606482015260840161090f565b50600b55600190565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61136a611ea0565b6001600160a01b0381166113905760405162461bcd60e51b815260040161090f90612787565b600880546001600160a01b038381166001600160a01b03198316811790935560405191169182917ffaf1b77ed79f6e898c44dd8ab36b330c7b2fd39bcaab05ed6362480df870396590600090a35050565b6113e9611ea0565b6001600160a01b03811661144e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161090f565b61087481611efa565b61145f611ea0565b604051600090339047908381818185875af1925050503d80600081146114a1576040519150601f19603f3d011682016040523d82523d6000602084013e6114a6565b606091505b50505050565b6001600160a01b03831661150e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161090f565b6001600160a01b03821661156f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161090f565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006115dc8484611337565b905060001981146114a657818110156116375760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161090f565b6114a684848484036114ac565b6001600160a01b03831661166a5760405162461bcd60e51b815260040161090f906127ca565b6001600160a01b0382166116905760405162461bcd60e51b815260040161090f9061280f565b806000036116a45761091883836000611fa0565b6005546001600160a01b038481169116148015906116d057506005546001600160a01b03838116911614155b80156116e457506001600160a01b03821615155b80156116fb57506001600160a01b03821661dead14155b80156117115750600654600160a01b900460ff16155b15611a3457600d5460ff166117ab576001600160a01b0383166000908152601a602052604090205460ff168061175f57506001600160a01b0382166000908152601a602052604090205460ff165b6117ab5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2054726164696e67206973206e6f74206163746976652e000000604482015260640161090f565b6001600160a01b0383166000908152601c602052604090205460ff1680156117ec57506001600160a01b0382166000908152601b602052604090205460ff16155b156118e257600a548111156118695760405162461bcd60e51b815260206004820152603c60248201527f45524332303a20427579207472616e7366657220616d6f756e7420657863656560448201527f647320746865206d61785472616e73616374696f6e416d6f756e742e00000000606482015260840161090f565b600c546001600160a01b03831660009081526020819052604090205461188f908361268f565b11156118dd5760405162461bcd60e51b815260206004820152601a60248201527f45524332303a204d61782077616c6c6574206578636565646564000000000000604482015260640161090f565b611a34565b6001600160a01b0382166000908152601c602052604090205460ff16801561192357506001600160a01b0383166000908152601b602052604090205460ff16155b156119a057600a548111156118dd5760405162461bcd60e51b815260206004820152603d60248201527f45524332303a2053656c6c207472616e7366657220616d6f756e74206578636560448201527f65647320746865206d61785472616e73616374696f6e416d6f756e742e000000606482015260840161090f565b6001600160a01b0382166000908152601b602052604090205460ff16611a3457600c546001600160a01b0383166000908152602081905260409020546119e6908361268f565b1115611a345760405162461bcd60e51b815260206004820152601a60248201527f45524332303a204d61782077616c6c6574206578636565646564000000000000604482015260640161090f565b30600090815260208190526040902054600b5481108015908190611a5f5750600d54610100900460ff165b8015611a755750600654600160a01b900460ff16155b8015611a9a57506001600160a01b0385166000908152601c602052604090205460ff16155b8015611abf57506001600160a01b0385166000908152601a602052604090205460ff16155b8015611ae457506001600160a01b0384166000908152601a602052604090205460ff16155b15611b12576006805460ff60a01b1916600160a01b179055611b046120ca565b6006805460ff60a01b191690555b6006546001600160a01b0386166000908152601a602052604090205460ff600160a01b909204821615911680611b6057506001600160a01b0385166000908152601a602052604090205460ff165b15611b69575060005b60008115611d54576001600160a01b0386166000908152601c602052604090205460ff168015611b9b57506000601254115b15611c5957611bc06064611bba6012548861229790919063ffffffff16565b906122aa565b905060125460155482611bd39190612720565b611bdd9190612737565b60186000828254611bee919061268f565b9091555050601254601354611c039083612720565b611c0d9190612737565b60166000828254611c1e919061268f565b9091555050601254601454611c339083612720565b611c3d9190612737565b60176000828254611c4e919061268f565b90915550611d369050565b6001600160a01b0387166000908152601c602052604090205460ff168015611c8357506000600e54115b15611d3657611ca26064611bba600e548861229790919063ffffffff16565b9050600e5460115482611cb59190612720565b611cbf9190612737565b60186000828254611cd0919061268f565b9091555050600e54600f54611ce59083612720565b611cef9190612737565b60166000828254611d00919061268f565b9091555050600e54601054611d159083612720565b611d1f9190612737565b60176000828254611d30919061268f565b90915550505b8015611d4757611d47873083611fa0565b611d518186612852565b94505b611d5f878787611fa0565b50506019546012555050505050565b6001600160a01b038216611dce5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161090f565b6001600160a01b03821660009081526020819052604090205481811015611e425760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161090f565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6005546001600160a01b031633146108895760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161090f565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000818152601c6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316611fc65760405162461bcd60e51b815260040161090f906127ca565b6001600160a01b038216611fec5760405162461bcd60e51b815260040161090f9061280f565b6001600160a01b038316600090815260208190526040902054818110156120645760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161090f565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36114a6565b30600090815260208190526040812054905060006017546016546018546120f1919061268f565b6120fb919061268f565b9050600082158061210a575081155b1561211457505050565b600b54612122906014612720565b83111561213a57600b54612137906014612720565b92505b612143836122b6565b6000479050600061216384611bba6017548561229790919063ffffffff16565b9050600061218085611bba6018548661229790919063ffffffff16565b60006016819055601781905560188190556009546040519293506001600160a01b031691839181818185875af1925050503d80600081146121dd576040519150601f19603f3d011682016040523d82523d6000602084013e6121e2565b606091505b50506008546040519195506001600160a01b0316908390600081818185875af1925050503d8060008114612232576040519150601f19603f3d011682016040523d82523d6000602084013e612237565b606091505b50506007546040519195506001600160a01b0316904790600081818185875af1925050503d8060008114612287576040519150601f19603f3d011682016040523d82523d6000602084013e61228c565b606091505b505050505050505050565b60006122a38284612720565b9392505050565b60006122a38284612737565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106122eb576122eb612865565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612369573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061238d91906126e6565b816001815181106123a0576123a0612865565b60200260200101906001600160a01b031690816001600160a01b0316815250506123eb307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846114ac565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac9479061244090859060009086903090429060040161287b565b600060405180830381600087803b15801561245a57600080fd5b505af115801561246e573d6000803e3d6000fd5b505050505050565b600060208083528351808285015260005b818110156124a357858101830151858201604001528201612487565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461087457600080fd5b600080604083850312156124ec57600080fd5b82356124f7816124c4565b946020939093013593505050565b60008060006060848603121561251a57600080fd5b8335612525816124c4565b92506020840135612535816124c4565b929592945050506040919091013590565b60006020828403121561255857600080fd5b5035919050565b60006020828403121561257157600080fd5b81356122a3816124c4565b801515811461087457600080fd5b6000806040838503121561259d57600080fd5b82356125a8816124c4565b915060208301356125b88161257c565b809150509250929050565b6000806000606084860312156125d857600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561260257600080fd5b50508035926020909101359150565b6000806040838503121561262457600080fd5b823561262f816124c4565b915060208301356125b8816124c4565b600181811c9082168061265357607f821691505b60208210810361267357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561081e5761081e612679565b60208082526024908201527f45524332303a204d757374206b656570206665657320617420313025206f72206040820152636c65737360e01b606082015260800190565b6000602082840312156126f857600080fd5b81516122a3816124c4565b60006020828403121561271557600080fd5b81516122a38161257c565b808202811582820484141761081e5761081e612679565b60008261275457634e487b7160e01b600052601260045260246000fd5b500490565b60008060006060848603121561276e57600080fd5b8351925060208401519150604084015190509250925092565b60208082526010908201526f045524332303a204164647265737320360841b604082015260600190565b6000602082840312156127c357600080fd5b5051919050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8181038181111561081e5761081e612679565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156128cb5784516001600160a01b0316835293830193918301916001016128a6565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212200e99d7fde3bb58deb142d23571d0cc5623e0b470d859b8a838f90f43fb579c0564736f6c63430008110033

Deployed Bytecode Sourcemap

35172:15041:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9823:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12331:242;;;;;;;;;;-1:-1:-1;12331:242:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;12331:242:0;1023:187:1;35247:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1406:32:1;;;1388:51;;1376:2;1361:18;35247:51:0;1215:230:1;10955:108:0;;;;;;;;;;-1:-1:-1;11043:12:0;;10955:108;;;1596:25:1;;;1584:2;1569:18;10955:108:0;1450:177:1;35510:34:0;;;;;;;;;;-1:-1:-1;35510:34:0;;;;-1:-1:-1;;;;;35510:34:0;;;13154:295;;;;;;;;;;-1:-1:-1;13154:295:0;;;;;:::i;:::-;;:::i;35340:53::-;;;;;;;;;;;;35386:6;35340:53;;10796:93;;;;;;;;;;-1:-1:-1;10796:93:0;;10879:2;2443:36:1;;2431:2;2416:18;10796:93:0;2301:184:1;13859:270:0;;;;;;;;;;-1:-1:-1;13859:270:0;;;;;:::i;:::-;;:::i;39061:83::-;;;;;;;;;;-1:-1:-1;39061:83:0;;;;;:::i;:::-;;:::i;:::-;;35305:28;;;;;;;;;;-1:-1:-1;35305:28:0;;;;-1:-1:-1;;;;;35305:28:0;;;44410:126;;;;;;;;;;-1:-1:-1;44410:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;44500:28:0;44476:4;44500:28;;;:19;:28;;;;;;;;;44410:126;35908:28;;;;;;;;;;;;;;;;35710:31;;;;;;;;;;-1:-1:-1;35710:31:0;;;;;;;;;;;11127:177;;;;;;;;;;-1:-1:-1;11127:177:0;;;;;:::i;:::-;-1:-1:-1;;;;;11278:18:0;11246:7;11278:18;;;;;;;;;;;;11127:177;3176:103;;;;;;;;;;;;;:::i;41253:167::-;;;;;;;;;;-1:-1:-1;41253:167:0;;;;;:::i;:::-;;:::i;35434:30::-;;;;;;;;;;-1:-1:-1;35434:30:0;;;;-1:-1:-1;;;;;35434:30:0;;;41429:497;;;;;;;;;;-1:-1:-1;41429:497:0;;;;;:::i;:::-;;:::i;39153:1055::-;;;;;;;;;;;;;:::i;2533:87::-;;;;;;;;;;-1:-1:-1;2606:6:0;;-1:-1:-1;;;;;2606:6:0;2533:87;;10043:104;;;;;;;;;;;;;:::i;40737:507::-;;;;;;;;;;-1:-1:-1;40737:507:0;;;;;:::i;:::-;;:::i;43190:366::-;;;;;;;;;;-1:-1:-1;43190:366:0;;;;;:::i;:::-;;:::i;14633:506::-;;;;;;;;;;-1:-1:-1;14633:506:0;;;;;:::i;:::-;;:::i;11511:234::-;;;;;;;;;;-1:-1:-1;11511:234:0;;;;;:::i;:::-;;:::i;42488:334::-;;;;;;;;;;-1:-1:-1;42488:334:0;;;;;:::i;:::-;;:::i;35670:33::-;;;;;;;;;;-1:-1:-1;35670:33:0;;;;;;;;43565:182;;;;;;;;;;-1:-1:-1;43565:182:0;;;;;:::i;:::-;;:::i;35471:32::-;;;;;;;;;;-1:-1:-1;35471:32:0;;;;-1:-1:-1;;;;;35471:32:0;;;41935:544;;;;;;;;;;-1:-1:-1;41935:544:0;;;;;:::i;:::-;;:::i;35554:35::-;;;;;;;;;;;;;;;;43948:255;;;;;;;;;;-1:-1:-1;43948:255:0;;;;;:::i;:::-;;:::i;40217:511::-;;;;;;;;;;-1:-1:-1;40217:511:0;;;;;:::i;:::-;;:::i;35751:27::-;;;;;;;;;;;;;;;;11809:201;;;;;;;;;;-1:-1:-1;11809:201:0;;;;;:::i;:::-;;:::i;35596:33::-;;;;;;;;;;;;;;;;42831:350;;;;;;;;;;-1:-1:-1;42831:350:0;;;;;:::i;:::-;;:::i;3435:238::-;;;;;;;;;;-1:-1:-1;3435:238:0;;;;;:::i;:::-;;:::i;43756:183::-;;;;;;;;;;;;;:::i;35636:24::-;;;;;;;;;;;;;;;;9823:100;9877:13;9910:5;9903:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9823:100;:::o;12331:242::-;12450:4;1149:10;12511:32;1149:10;12527:7;12536:6;12511:8;:32::i;:::-;12561:4;12554:11;;;12331:242;;;;;:::o;13154:295::-;13285:4;1149:10;13343:38;13359:4;1149:10;13374:6;13343:15;:38::i;:::-;13392:27;13402:4;13408:2;13412:6;13392:9;:27::i;:::-;-1:-1:-1;13437:4:0;;13154:295;-1:-1:-1;;;;13154:295:0:o;13859:270::-;13974:4;1149:10;14035:64;1149:10;14051:7;14088:10;14060:25;1149:10;14051:7;14060:9;:25::i;:::-;:38;;;;:::i;:::-;14035:8;:64::i;39061:83::-;39111:25;39117:10;39129:6;39111:5;:25::i;:::-;39061:83;:::o;3176:103::-;2418:13;:11;:13::i;:::-;3241:30:::1;3268:1;3241:18;:30::i;:::-;3176:103::o:0;41253:167::-;2418:13;:11;:13::i;:::-;-1:-1:-1;;;;;41366:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;41366:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;41253:167::o;41429:497::-;2418:13;:11;:13::i;:::-;41591:15:::1;:31:::0;;;41633:17:::1;:35:::0;;;41679:19:::1;:39:::0;;;41701:17;41757:48:::1;41653:15:::0;41609:13;41757:48:::1;:::i;:::-;:83;;;;:::i;:::-;41729:12;:111:::0;;;41875:2:::1;-1:-1:-1::0;41859:18:0::1;41851:67;;;;-1:-1:-1::0;;;41851:67:0::1;;;;;;;:::i;:::-;;;;;;;;;41429:497:::0;;;:::o;39153:1055::-;2418:13;:11;:13::i;:::-;39217::::1;::::0;::::1;;39216:14;39208:50;;;::::0;-1:-1:-1;;;39208:50:0;;5658:2:1;39208:50:0::1;::::0;::::1;5640:21:1::0;5697:2;5677:18;;;5670:30;5736:25;5716:18;;;5709:53;5779:18;;39208:50:0::1;5456:347:1::0;39208:50:0::1;39306:15;-1:-1:-1::0;;;;;39306:23:0::1;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;39288:55:0::1;;39366:4;39386:15;-1:-1:-1::0;;;;;39386:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39288:131;::::0;-1:-1:-1;;;;;;39288:131:0::1;::::0;;;;;;-1:-1:-1;;;;;6294:15:1;;;39288:131:0::1;::::0;::::1;6276:34:1::0;6346:15;;6326:18;;;6319:43;6211:18;;39288:131:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39272:13;:147:::0;;-1:-1:-1;;;;;;39272:147:0::1;-1:-1:-1::0;;;;;39272:147:0;;;::::1;::::0;;::::1;::::0;;39430:66:::1;::::0;39447:4:::1;::::0;-1:-1:-1;;39430:8:0::1;:66::i;:::-;39514:13;::::0;39507:111:::1;::::0;-1:-1:-1;;;39507:111:0;;-1:-1:-1;;;;;39559:15:0::1;6565:32:1::0;;39507:111:0::1;::::0;::::1;6547:51:1::0;-1:-1:-1;;6614:18:1;;;6607:34;39514:13:0;;::::1;::::0;39507:29:::1;::::0;6520:18:1;;39507:111:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;39669:13:0::1;::::0;39632:58:::1;::::0;-1:-1:-1;;;;;39669:13:0::1;::::0;39632:28:::1;:58::i;:::-;39735:13;::::0;39701:55:::1;::::0;-1:-1:-1;;;;;39735:13:0::1;::::0;39701:25:::1;:55::i;:::-;39812:4;39769:22;11278:18:::0;;;;;;;;;;;;39873:3:::1;39851:19;11278:18:::0;39868:2:::1;39851:19;:::i;:::-;:25;;;;:::i;:::-;39829:47;;39926:15;-1:-1:-1::0;;;;;39926:31:0::1;;39965:21;40010:4;40030:11;40057:1;40073::::0;40089:7:::1;2606:6:::0;;-1:-1:-1;;;;;2606:6:0;;2533:87;40089:7:::1;39926:211;::::0;::::1;::::0;;;-1:-1:-1;;;;;;39926:211:0;;;-1:-1:-1;;;;;7656:15:1;;;39926:211:0::1;::::0;::::1;7638:34:1::0;7688:18;;;7681:34;;;;7731:18;;;7724:34;;;;7774:18;;;7767:34;7838:15;;;7817:19;;;7810:44;40111:15:0::1;7870:19:1::0;;;7863:35;7572:19;;39926:211:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;40151:13:0::1;:20:::0;;-1:-1:-1;;40182:18:0;;;;;-1:-1:-1;;;39153:1055:0:o;10043:104::-;10099:13;10132:7;10125:14;;;;;:::i;40737:507::-;2418:13;:11;:13::i;:::-;40931:4:::1;40910:13;11043:12:::0;;;10955:108;40910:13:::1;:17;::::0;40926:1:::1;40910:17;:::i;:::-;40909:26;;;;:::i;:::-;40895:9;:41;;40873:131;;;::::0;-1:-1:-1;;;40873:131:0;;8422:2:1;40873:131:0::1;::::0;::::1;8404:21:1::0;8461:2;8441:18;;;8434:30;8500:34;8480:18;;;8473:62;-1:-1:-1;;;8551:18:1;;;8544:38;8599:19;;40873:131:0::1;8220:404:1::0;40873:131:0::1;41079:4;41058:13;11043:12:::0;;;10955:108;41058:13:::1;:17;::::0;41074:1:::1;41058:17;:::i;:::-;41057:26;;;;:::i;:::-;41037:15;:47;;41015:140;;;::::0;-1:-1:-1;;;41015:140:0;;8831:2:1;41015:140:0::1;::::0;::::1;8813:21:1::0;8870:2;8850:18;;;8843:30;8909:34;8889:18;;;8882:62;-1:-1:-1;;;8960:18:1;;;8953:41;9011:19;;41015:140:0::1;8629:407:1::0;41015:140:0::1;41166:9;:27:::0;41204:20:::1;:32:::0;40737:507::o;43190:366::-;2418:13;:11;:13::i;:::-;-1:-1:-1;;;;;43316:34:0;::::1;43308:63;;;;-1:-1:-1::0;;;43308:63:0::1;;;;;;;:::i;:::-;43402:19;::::0;;-1:-1:-1;;;;;43432:42:0;;::::1;-1:-1:-1::0;;;;;;43432:42:0;::::1;::::0;::::1;::::0;;;43490:58:::1;::::0;43402:19;::::1;::::0;;;43490:58:::1;::::0;43382:17:::1;::::0;43490:58:::1;43297:259;43190:366:::0;:::o;14633:506::-;14753:4;1149:10;14753:4;14841:25;1149:10;14858:7;14841:9;:25::i;:::-;14814:52;;14919:15;14899:16;:35;;14877:122;;;;-1:-1:-1;;;14877:122:0;;9588:2:1;14877:122:0;;;9570:21:1;9627:2;9607:18;;;9600:30;9666:34;9646:18;;;9639:62;-1:-1:-1;;;9717:18:1;;;9710:35;9762:19;;14877:122:0;9386:401:1;14877:122:0;15035:60;15044:5;15051:7;15079:15;15060:16;:34;15035:8;:60::i;11511:234::-;11626:4;1149:10;11687:28;1149:10;11704:2;11708:6;11687:9;:28::i;42488:334::-;2418:13;:11;:13::i;:::-;-1:-1:-1;;;;;42606:30:0;::::1;42598:59;;;;-1:-1:-1::0;;;42598:59:0::1;;;;;;;:::i;:::-;42688:15;::::0;;-1:-1:-1;;;;;42714:34:0;;::::1;-1:-1:-1::0;;;;;;42714:34:0;::::1;::::0;::::1;::::0;;;42764:50:::1;::::0;42688:15;::::1;::::0;;;42764:50:::1;::::0;42668:17:::1;::::0;42764:50:::1;42587:235;42488:334:::0;:::o;43565:182::-;2418:13;:11;:13::i;:::-;-1:-1:-1;;;;;43650:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;43650:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;43705:34;;1163:41:1;;;43705:34:0::1;::::0;1136:18:1;43705:34:0::1;;;;;;;43565:182:::0;;:::o;41935:544::-;2418:13;:11;:13::i;:::-;42098:16:::1;:32:::0;;;42141:18:::1;:36:::0;;;42188:20:::1;:40:::0;;;42211:17;42268:50:::1;42162:15:::0;42117:13;42268:50:::1;:::i;:::-;:86;;;;:::i;:::-;42239:13;:115:::0;;;42365:11:::1;:27:::0;;;42428:2:::1;-1:-1:-1::0;42411:19:0::1;42403:68;;;;-1:-1:-1::0;;;42403:68:0::1;;;;;;;:::i;43948:255::-:0;2418:13;:11;:13::i;:::-;44026:36:::1;::::0;-1:-1:-1;;;44026:36:0;;44056:4:::1;44026:36;::::0;::::1;1388:51:1::0;44065:1:0::1;::::0;-1:-1:-1;;;;;44026:21:0;::::1;::::0;::::1;::::0;1361:18:1;;44026:36:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;44018:62;;;::::0;-1:-1:-1;;;44018:62:0;;10183:2:1;44018:62:0::1;::::0;::::1;10165:21:1::0;10222:1;10202:18;;;10195:29;-1:-1:-1;;;10240:18:1;;;10233:39;10289:18;;44018:62:0::1;9981:332:1::0;44018:62:0::1;44108:36;::::0;-1:-1:-1;;;44108:36:0;;44138:4:::1;44108:36;::::0;::::1;1388:51:1::0;44091:14:0::1;::::0;-1:-1:-1;;;;;44108:21:0;::::1;::::0;::::1;::::0;1361:18:1;;44108:36:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44155:40;::::0;-1:-1:-1;;;44155:40:0;;44176:10:::1;44155:40;::::0;::::1;6547:51:1::0;6614:18;;;6607:34;;;44091:53:0;;-1:-1:-1;;;;;;44155:20:0;::::1;::::0;::::1;::::0;6520:18:1;;44155:40:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;40217:511::-:0;40325:4;2418:13;:11;:13::i;:::-;40404:6:::1;40383:13;11043:12:::0;;;10955:108;40383:13:::1;:17;::::0;40399:1:::1;40383:17;:::i;:::-;40382:28;;;;:::i;:::-;40369:9;:41;;40347:151;;;::::0;-1:-1:-1;;;40347:151:0;;10520:2:1;40347:151:0::1;::::0;::::1;10502:21:1::0;10559:2;10539:18;;;10532:30;10598:34;10578:18;;;10571:62;10669:30;10649:18;;;10642:58;10717:19;;40347:151:0::1;10318:424:1::0;40347:151:0::1;40566:4;40545:13;11043:12:::0;;;10955:108;40545:13:::1;:17;::::0;40561:1:::1;40545:17;:::i;:::-;40544:26;;;;:::i;:::-;40531:9;:39;;40509:148;;;::::0;-1:-1:-1;;;40509:148:0;;10949:2:1;40509:148:0::1;::::0;::::1;10931:21:1::0;10988:2;10968:18;;;10961:30;11027:34;11007:18;;;11000:62;11098:29;11078:18;;;11071:57;11145:19;;40509:148:0::1;10747:423:1::0;40509:148:0::1;-1:-1:-1::0;40668:18:0::1;:30:::0;40716:4:::1;::::0;40217:511::o;11809:201::-;-1:-1:-1;;;;;11975:18:0;;;11943:7;11975:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;11809:201::o;42831:350::-;2418:13;:11;:13::i;:::-;-1:-1:-1;;;;;42953:32:0;::::1;42945:61;;;;-1:-1:-1::0;;;42945:61:0::1;;;;;;;:::i;:::-;43037:17;::::0;;-1:-1:-1;;;;;43065:38:0;;::::1;-1:-1:-1::0;;;;;;43065:38:0;::::1;::::0;::::1;::::0;;;43119:54:::1;::::0;43037:17;::::1;::::0;;;43119:54:::1;::::0;43017:17:::1;::::0;43119:54:::1;42934:247;42831:350:::0;:::o;3435:238::-;2418:13;:11;:13::i;:::-;-1:-1:-1;;;;;3538:22:0;::::1;3516:110;;;::::0;-1:-1:-1;;;3516:110:0;;11377:2:1;3516:110:0::1;::::0;::::1;11359:21:1::0;11416:2;11396:18;;;11389:30;11455:34;11435:18;;;11428:62;-1:-1:-1;;;11506:18:1;;;11499:36;11552:19;;3516:110:0::1;11175:402:1::0;3516:110:0::1;3637:28;3656:8;3637:18;:28::i;43756:183::-:0;2418:13;:11;:13::i;:::-;43849:82:::1;::::0;43812:12:::1;::::0;43857:10:::1;::::0;43881:21:::1;::::0;43812:12;43849:82;43812:12;43849:82;43881:21;43857:10;43849:82:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;43756:183:0:o;18782:381::-;-1:-1:-1;;;;;18918:19:0;;18910:68;;;;-1:-1:-1;;;18910:68:0;;11994:2:1;18910:68:0;;;11976:21:1;12033:2;12013:18;;;12006:30;12072:34;12052:18;;;12045:62;-1:-1:-1;;;12123:18:1;;;12116:34;12167:19;;18910:68:0;11792:400:1;18910:68:0;-1:-1:-1;;;;;18997:21:0;;18989:68;;;;-1:-1:-1;;;18989:68:0;;12399:2:1;18989:68:0;;;12381:21:1;12438:2;12418:18;;;12411:30;12477:34;12457:18;;;12450:62;-1:-1:-1;;;12528:18:1;;;12521:32;12570:19;;18989:68:0;12197:398:1;18989:68:0;-1:-1:-1;;;;;19071:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;19123:32;;1596:25:1;;;19123:32:0;;1569:18:1;19123:32:0;;;;;;;18782:381;;;:::o;19455:502::-;19590:24;19617:25;19627:5;19634:7;19617:9;:25::i;:::-;19590:52;;-1:-1:-1;;19657:16:0;:37;19653:297;;19757:6;19737:16;:26;;19711:117;;;;-1:-1:-1;;;19711:117:0;;12802:2:1;19711:117:0;;;12784:21:1;12841:2;12821:18;;;12814:30;12880:31;12860:18;;;12853:59;12929:18;;19711:117:0;12600:353:1;19711:117:0;19872:51;19881:5;19888:7;19916:6;19897:16;:25;19872:8;:51::i;44545:3853::-;-1:-1:-1;;;;;44677:18:0;;44669:68;;;;-1:-1:-1;;;44669:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44756:16:0;;44748:64;;;;-1:-1:-1;;;44748:64:0;;;;;;;:::i;:::-;44830:6;44840:1;44830:11;44826:93;;44858:28;44874:4;44880:2;44884:1;44858:15;:28::i;44826:93::-;2606:6;;-1:-1:-1;;;;;44950:15:0;;;2606:6;;44950:15;;;;:45;;-1:-1:-1;2606:6:0;;-1:-1:-1;;;;;44982:13:0;;;2606:6;;44982:13;;44950:45;:78;;;;-1:-1:-1;;;;;;45012:16:0;;;;44950:78;:112;;;;-1:-1:-1;;;;;;45045:17:0;;35386:6;45045:17;;44950:112;:138;;;;-1:-1:-1;45080:8:0;;-1:-1:-1;;;45080:8:0;;;;45079:9;44950:138;44932:1512;;;45120:13;;;;45115:210;;-1:-1:-1;;;;;45184:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;45213:23:0;;;;;;:19;:23;;;;;;;;45184:52;45154:155;;;;-1:-1:-1;;;45154:155:0;;13970:2:1;45154:155:0;;;13952:21:1;14009:2;13989:18;;;13982:30;14048:31;14028:18;;;14021:59;14097:18;;45154:155:0;13768:353:1;45154:155:0;-1:-1:-1;;;;;45388:31:0;;;;;;:25;:31;;;;;;;;:88;;;;-1:-1:-1;;;;;;45441:35:0;;;;;;:31;:35;;;;;;;;45440:36;45388:88;45366:1067;;;45551:20;;45541:6;:30;;45511:164;;;;-1:-1:-1;;;45511:164:0;;14328:2:1;45511:164:0;;;14310:21:1;14367:2;14347:18;;;14340:30;14406:34;14386:18;;;14379:62;14477:30;14457:18;;;14450:58;14525:19;;45511:164:0;14126:424:1;45511:164:0;45750:9;;-1:-1:-1;;;;;11278:18:0;;11246:7;11278:18;;;;;;;;;;;45724:22;;:6;:22;:::i;:::-;:35;;45694:135;;;;-1:-1:-1;;;45694:135:0;;14757:2:1;45694:135:0;;;14739:21:1;14796:2;14776:18;;;14769:30;14835:28;14815:18;;;14808:56;14881:18;;45694:135:0;14555:350:1;45694:135:0;45366:1067;;;-1:-1:-1;;;;;45911:29:0;;;;;;:25;:29;;;;;;;;:88;;;;-1:-1:-1;;;;;;45962:37:0;;;;;;:31;:37;;;;;;;;45961:38;45911:88;45889:544;;;46074:20;;46064:6;:30;;46034:165;;;;-1:-1:-1;;;46034:165:0;;15112:2:1;46034:165:0;;;15094:21:1;15151:2;15131:18;;;15124:30;15190:34;15170:18;;;15163:62;15261:31;15241:18;;;15234:59;15310:19;;46034:165:0;14910:425:1;45889:544:0;-1:-1:-1;;;;;46226:35:0;;;;;;:31;:35;;;;;;;;46221:212;;46338:9;;-1:-1:-1;;;;;11278:18:0;;11246:7;11278:18;;;;;;;;;;;46312:22;;:6;:22;:::i;:::-;:35;;46282:135;;;;-1:-1:-1;;;46282:135:0;;14757:2:1;46282:135:0;;;14739:21:1;14796:2;14776:18;;;14769:30;14835:28;14815:18;;;14808:56;14881:18;;46282:135:0;14555:350:1;46282:135:0;46506:4;46457:28;11278:18;;;;;;;;;;;46565;;46541:42;;;;;;;46615:35;;-1:-1:-1;46639:11:0;;;;;;;46615:35;:61;;;;-1:-1:-1;46668:8:0;;-1:-1:-1;;;46668:8:0;;;;46667:9;46615:61;:110;;;;-1:-1:-1;;;;;;46694:31:0;;;;;;:25;:31;;;;;;;;46693:32;46615:110;:153;;;;-1:-1:-1;;;;;;46743:25:0;;;;;;:19;:25;;;;;;;;46742:26;46615:153;:194;;;;-1:-1:-1;;;;;;46786:23:0;;;;;;:19;:23;;;;;;;;46785:24;46615:194;46597:328;;;46836:8;:15;;-1:-1:-1;;;;46836:15:0;-1:-1:-1;;;46836:15:0;;;46869:10;:8;:10::i;:::-;46897:8;:16;;-1:-1:-1;;;;46897:16:0;;;46597:328;46954:8;;-1:-1:-1;;;;;46980:25:0;;46938:12;46980:25;;;:19;:25;;;;;;46954:8;-1:-1:-1;;;46954:8:0;;;;;46953:9;;46980:25;;:52;;-1:-1:-1;;;;;;47009:23:0;;;;;;:19;:23;;;;;;;;46980:52;46976:100;;;-1:-1:-1;47059:5:0;46976:100;47089:12;47123:7;47119:1187;;;-1:-1:-1;;;;;47175:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;47224:1;47208:13;;:17;47175:50;47171:984;;;47253:34;47283:3;47253:25;47264:13;;47253:6;:10;;:25;;;;:::i;:::-;:29;;:34::i;:::-;47246:41;;47406:13;;47361:20;;47354:4;:27;;;;:::i;:::-;47353:66;;;;:::i;:::-;47306:22;;:113;;;;;;;:::i;:::-;;;;-1:-1:-1;;47488:13:0;;47468:16;;47461:23;;:4;:23;:::i;:::-;47460:41;;;;:::i;:::-;47438:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;47616:13:0;;47573:18;;47566:25;;:4;:25;:::i;:::-;47565:64;;;;:::i;:::-;47520:20;;:109;;;;;;;:::i;:::-;;;;-1:-1:-1;47171:984:0;;-1:-1:-1;47171:984:0;;-1:-1:-1;;;;;47691:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;47741:1;47726:12;;:16;47691:51;47687:468;;;47770:33;47799:3;47770:24;47781:12;;47770:6;:10;;:24;;;;:::i;:33::-;47763:40;;47921:12;;47877:19;;47870:4;:26;;;;:::i;:::-;47869:64;;;;:::i;:::-;47822:22;;:111;;;;;;;:::i;:::-;;;;-1:-1:-1;;48001:12:0;;47982:15;;47975:22;;:4;:22;:::i;:::-;47974:39;;;;:::i;:::-;47952:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;48127:12:0;;48085:17;;48078:24;;:4;:24;:::i;:::-;48077:62;;;;:::i;:::-;48032:20;;:107;;;;;;;:::i;:::-;;;;-1:-1:-1;;47687:468:0;48176:8;;48172:91;;48205:42;48221:4;48235;48242;48205:15;:42::i;:::-;48280:14;48290:4;48280:14;;:::i;:::-;;;47119:1187;48319:33;48335:4;48341:2;48345:6;48319:15;:33::i;:::-;-1:-1:-1;;48379:11:0;;48363:13;:27;-1:-1:-1;;;;;44545:3853:0:o;17664:679::-;-1:-1:-1;;;;;17748:21:0;;17740:67;;;;-1:-1:-1;;;17740:67:0;;15675:2:1;17740:67:0;;;15657:21:1;15714:2;15694:18;;;15687:30;15753:34;15733:18;;;15726:62;-1:-1:-1;;;15804:18:1;;;15797:31;15845:19;;17740:67:0;15473:397:1;17740:67:0;-1:-1:-1;;;;;17909:18:0;;17884:22;17909:18;;;;;;;;;;;17946:24;;;;17938:71;;;;-1:-1:-1;;;17938:71:0;;16077:2:1;17938:71:0;;;16059:21:1;16116:2;16096:18;;;16089:30;16155:34;16135:18;;;16128:62;-1:-1:-1;;;16206:18:1;;;16199:32;16248:19;;17938:71:0;15875:398:1;17938:71:0;-1:-1:-1;;;;;18045:18:0;;:9;:18;;;;;;;;;;;18066:23;;;18045:44;;18184:12;:22;;;;;;;18236:37;1596:25:1;;;18045:9:0;;:18;18236:37;;1569:18:1;18236:37:0;;;;;;;41429:497;;;:::o;2699:132::-;2606:6;;-1:-1:-1;;;;;2606:6:0;1149:10;2763:23;2755:68;;;;-1:-1:-1;;;2755:68:0;;16480:2:1;2755:68:0;;;16462:21:1;;;16499:18;;;16492:30;16558:34;16538:18;;;16531:62;16610:18;;2755:68:0;16278:356:1;3834:191:0;3927:6;;;-1:-1:-1;;;;;3944:17:0;;;-1:-1:-1;;;;;;3944:17:0;;;;;;;3977:40;;3927:6;;;3944:17;3927:6;;3977:40;;3908:16;;3977:40;3897:128;3834:191;:::o;44212:189::-;-1:-1:-1;;;;;44295:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;44295:39:0;;;;;;;;;;44353:40;;44295:39;;:31;44353:40;;;44212:189;;:::o;15610:881::-;-1:-1:-1;;;;;15741:18:0;;15733:68;;;;-1:-1:-1;;;15733:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15820:16:0;;15812:64;;;;-1:-1:-1;;;15812:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15964:15:0;;15942:19;15964:15;;;;;;;;;;;16012:21;;;;15990:109;;;;-1:-1:-1;;;15990:109:0;;16841:2:1;15990:109:0;;;16823:21:1;16880:2;16860:18;;;16853:30;16919:34;16899:18;;;16892:62;-1:-1:-1;;;16970:18:1;;;16963:36;17016:19;;15990:109:0;16639:402:1;15990:109:0;-1:-1:-1;;;;;16135:15:0;;;:9;:15;;;;;;;;;;;16153:20;;;16135:38;;16353:13;;;;;;;;;;:23;;;;;;16406:26;;1596:25:1;;;16353:13:0;;16406:26;;1569:18:1;16406:26:0;;;;;;;16446:37;41429:497;48919:1291;49002:4;48958:23;11278:18;;;;;;;;;;;48958:50;;49019:25;49119:20;;49085:18;;49047:22;;:56;;;;:::i;:::-;:92;;;;:::i;:::-;49019:120;-1:-1:-1;49150:12:0;49180:20;;;:46;;-1:-1:-1;49204:22:0;;49180:46;49176:85;;;49243:7;;;48919:1291::o;49176:85::-;49296:18;;:23;;49317:2;49296:23;:::i;:::-;49278:15;:41;49274:115;;;49354:18;;:23;;49375:2;49354:23;:::i;:::-;49336:41;;49274:115;49402:33;49419:15;49402:16;:33::i;:::-;49449:18;49470:21;49449:42;;49505:25;49533:83;49588:17;49533:36;49548:20;;49533:10;:14;;:36;;;;:::i;:83::-;49505:111;;49630:27;49660:89;49731:17;49660:52;49689:22;;49660:10;:28;;:52;;;;:::i;:89::-;49784:1;49763:18;:22;;;49796:20;:24;;;49831:22;:26;;;49893:19;;49885:89;;49630:119;;-1:-1:-1;;;;;;49893:19:0;;49630:119;;49885:89;49784:1;49885:89;49630:119;49893:19;49885:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;50010:17:0;;50002:85;;49871:103;;-1:-1:-1;;;;;;50010:17:0;;50041;;50002:85;;;;50041:17;50010;50002:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;50123:15:0;;50115:87;;49988:99;;-1:-1:-1;;;;;;50123:15:0;;50166:21;;50115:87;;;;50166:21;50123:15;50115:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;48919:1291:0:o;25145:98::-;25203:7;25230:5;25234:1;25230;:5;:::i;:::-;25223:12;25145:98;-1:-1:-1;;;25145:98:0:o;25545:::-;25603:7;25630:5;25634:1;25630;:5;:::i;48407:503::-;48497:16;;;48511:1;48497:16;;;;;;;;48473:21;;48497:16;;;;;;;;;;-1:-1:-1;48497:16:0;48473:40;;48542:4;48524;48529:1;48524:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;48524:23:0;;;-1:-1:-1;;;;;48524:23:0;;;;;48568:15;-1:-1:-1;;;;;48568:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48558:4;48563:1;48558:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;48558:32:0;;;-1:-1:-1;;;;;48558:32:0;;;;;48604:62;48621:4;48636:15;48654:11;48604:8;:62::i;:::-;48706:196;;-1:-1:-1;;;48706:196:0;;-1:-1:-1;;;;;48706:15:0;:66;;;;:196;;48787:11;;48813:1;;48829:4;;48856;;48876:15;;48706:196;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48462:448;48407:503;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1840:456::-;1917:6;1925;1933;1986:2;1974:9;1965:7;1961:23;1957:32;1954:52;;;2002:1;1999;1992:12;1954:52;2041:9;2028:23;2060:31;2085:5;2060:31;:::i;:::-;2110:5;-1:-1:-1;2167:2:1;2152:18;;2139:32;2180:33;2139:32;2180:33;:::i;:::-;1840:456;;2232:7;;-1:-1:-1;;;2286:2:1;2271:18;;;;2258:32;;1840:456::o;2490:180::-;2549:6;2602:2;2590:9;2581:7;2577:23;2573:32;2570:52;;;2618:1;2615;2608:12;2570:52;-1:-1:-1;2641:23:1;;2490:180;-1:-1:-1;2490:180:1:o;2675:247::-;2734:6;2787:2;2775:9;2766:7;2762:23;2758:32;2755:52;;;2803:1;2800;2793:12;2755:52;2842:9;2829:23;2861:31;2886:5;2861:31;:::i;2927:118::-;3013:5;3006:13;2999:21;2992:5;2989:32;2979:60;;3035:1;3032;3025:12;3050:382;3115:6;3123;3176:2;3164:9;3155:7;3151:23;3147:32;3144:52;;;3192:1;3189;3182:12;3144:52;3231:9;3218:23;3250:31;3275:5;3250:31;:::i;:::-;3300:5;-1:-1:-1;3357:2:1;3342:18;;3329:32;3370:30;3329:32;3370:30;:::i;:::-;3419:7;3409:17;;;3050:382;;;;;:::o;3437:316::-;3514:6;3522;3530;3583:2;3571:9;3562:7;3558:23;3554:32;3551:52;;;3599:1;3596;3589:12;3551:52;-1:-1:-1;;3622:23:1;;;3692:2;3677:18;;3664:32;;-1:-1:-1;3743:2:1;3728:18;;;3715:32;;3437:316;-1:-1:-1;3437:316:1:o;3758:248::-;3826:6;3834;3887:2;3875:9;3866:7;3862:23;3858:32;3855:52;;;3903:1;3900;3893:12;3855:52;-1:-1:-1;;3926:23:1;;;3996:2;3981:18;;;3968:32;;-1:-1:-1;3758:248:1:o;4011:388::-;4079:6;4087;4140:2;4128:9;4119:7;4115:23;4111:32;4108:52;;;4156:1;4153;4146:12;4108:52;4195:9;4182:23;4214:31;4239:5;4214:31;:::i;:::-;4264:5;-1:-1:-1;4321:2:1;4306:18;;4293:32;4334:33;4293:32;4334:33;:::i;4404:380::-;4483:1;4479:12;;;;4526;;;4547:61;;4601:4;4593:6;4589:17;4579:27;;4547:61;4654:2;4646:6;4643:14;4623:18;4620:38;4617:161;;4700:10;4695:3;4691:20;4688:1;4681:31;4735:4;4732:1;4725:15;4763:4;4760:1;4753:15;4617:161;;4404:380;;;:::o;4789:127::-;4850:10;4845:3;4841:20;4838:1;4831:31;4881:4;4878:1;4871:15;4905:4;4902:1;4895:15;4921:125;4986:9;;;5007:10;;;5004:36;;;5020:18;;:::i;5051:400::-;5253:2;5235:21;;;5292:2;5272:18;;;5265:30;5331:34;5326:2;5311:18;;5304:62;-1:-1:-1;;;5397:2:1;5382:18;;5375:34;5441:3;5426:19;;5051:400::o;5808:251::-;5878:6;5931:2;5919:9;5910:7;5906:23;5902:32;5899:52;;;5947:1;5944;5937:12;5899:52;5979:9;5973:16;5998:31;6023:5;5998:31;:::i;6652:245::-;6719:6;6772:2;6760:9;6751:7;6747:23;6743:32;6740:52;;;6788:1;6785;6778:12;6740:52;6820:9;6814:16;6839:28;6861:5;6839:28;:::i;6902:168::-;6975:9;;;7006;;7023:15;;;7017:22;;7003:37;6993:71;;7044:18;;:::i;7075:217::-;7115:1;7141;7131:132;;7185:10;7180:3;7176:20;7173:1;7166:31;7220:4;7217:1;7210:15;7248:4;7245:1;7238:15;7131:132;-1:-1:-1;7277:9:1;;7075:217::o;7909:306::-;7997:6;8005;8013;8066:2;8054:9;8045:7;8041:23;8037:32;8034:52;;;8082:1;8079;8072:12;8034:52;8111:9;8105:16;8095:26;;8161:2;8150:9;8146:18;8140:25;8130:35;;8205:2;8194:9;8190:18;8184:25;8174:35;;7909:306;;;;;:::o;9041:340::-;9243:2;9225:21;;;9282:2;9262:18;;;9255:30;-1:-1:-1;;;9316:2:1;9301:18;;9294:46;9372:2;9357:18;;9041:340::o;9792:184::-;9862:6;9915:2;9903:9;9894:7;9890:23;9886:32;9883:52;;;9931:1;9928;9921:12;9883:52;-1:-1:-1;9954:16:1;;9792:184;-1:-1:-1;9792:184:1:o;12958:401::-;13160:2;13142:21;;;13199:2;13179:18;;;13172:30;13238:34;13233:2;13218:18;;13211:62;-1:-1:-1;;;13304:2:1;13289:18;;13282:35;13349:3;13334:19;;12958:401::o;13364:399::-;13566:2;13548:21;;;13605:2;13585:18;;;13578:30;13644:34;13639:2;13624:18;;13617:62;-1:-1:-1;;;13710:2:1;13695:18;;13688:33;13753:3;13738:19;;13364:399::o;15340:128::-;15407:9;;;15428:11;;;15425:37;;;15442:18;;:::i;17178:127::-;17239:10;17234:3;17230:20;17227:1;17220:31;17270:4;17267:1;17260:15;17294:4;17291:1;17284:15;17310:980;17572:4;17620:3;17609:9;17605:19;17651:6;17640:9;17633:25;17677:2;17715:6;17710:2;17699:9;17695:18;17688:34;17758:3;17753:2;17742:9;17738:18;17731:31;17782:6;17817;17811:13;17848:6;17840;17833:22;17886:3;17875:9;17871:19;17864:26;;17925:2;17917:6;17913:15;17899:29;;17946:1;17956:195;17970:6;17967:1;17964:13;17956:195;;;18035:13;;-1:-1:-1;;;;;18031:39:1;18019:52;;18126:15;;;;18091:12;;;;18067:1;17985:9;17956:195;;;-1:-1:-1;;;;;;;18207:32:1;;;;18202:2;18187:18;;18180:60;-1:-1:-1;;;18271:3:1;18256:19;18249:35;18168:3;17310:980;-1:-1:-1;;;17310:980:1:o

Swarm Source

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