ETH Price: $3,073.53 (-7.89%)
 

Overview

Max Total Supply

1,000,000 RUBT

Holders

24

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 2 Decimals)

Balance
0.01 RUBT

Value
$0.00
0x000000000001579c68832e3b57cbf6Da116fa987
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:
MyToken

Compiler Version
v0.8.22+commit.4fc1097e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-05-13
*/

// File: @openzeppelin/contracts/interfaces/draft-IERC6093.sol


// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC6093.sol)
pragma solidity ^0.8.20;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)

pragma solidity ^0.8.20;

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

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

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

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)

pragma solidity ^0.8.20;


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

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

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

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

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

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

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

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

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

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

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


// OpenZeppelin Contracts (last updated v5.0.0) (utils/Pausable.sol)

pragma solidity ^0.8.20;


/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    bool private _paused;

    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    /**
     * @dev The operation failed because the contract is paused.
     */
    error EnforcedPause();

    /**
     * @dev The operation failed because the contract is not paused.
     */
    error ExpectedPause();

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        _requireNotPaused();
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        _requirePaused();
        _;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Throws if the contract is paused.
     */
    function _requireNotPaused() internal view virtual {
        if (paused()) {
            revert EnforcedPause();
        }
    }

    /**
     * @dev Throws if the contract is not paused.
     */
    function _requirePaused() internal view virtual {
        if (!paused()) {
            revert ExpectedPause();
        }
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.20;

/**
 * @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 value of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol


// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.20;


/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

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

// File: @openzeppelin/contracts/token/ERC20/ERC20.sol


// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.20;





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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * 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 `value`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `value`.
     */
    function transferFrom(address from, address to, uint256 value) public virtual returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, value);
        _transfer(from, to, value);
        return true;
    }

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

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

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

        emit Transfer(from, to, value);
    }

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

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

    /**
     * @dev Sets `value` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     *
     * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.
     */
    function _approve(address owner, address spender, uint256 value) internal {
        _approve(owner, spender, value, true);
    }

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

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

// File: @openzeppelin/contracts/token/ERC20/extensions/ERC20Pausable.sol


// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/ERC20Pausable.sol)

pragma solidity ^0.8.20;



/**
 * @dev ERC20 token with pausable token transfers, minting and burning.
 *
 * Useful for scenarios such as preventing trades until the end of an evaluation
 * period, or having an emergency switch for freezing all token transfers in the
 * event of a large bug.
 *
 * IMPORTANT: This contract does not include public pause and unpause functions. In
 * addition to inheriting this contract, you must define both functions, invoking the
 * {Pausable-_pause} and {Pausable-_unpause} internal functions, with appropriate
 * access control, e.g. using {AccessControl} or {Ownable}. Not doing so will
 * make the contract pause mechanism of the contract unreachable, and thus unusable.
 */
abstract contract ERC20Pausable is ERC20, Pausable {
    /**
     * @dev See {ERC20-_update}.
     *
     * Requirements:
     *
     * - the contract must not be paused.
     */
    function _update(address from, address to, uint256 value) internal virtual override whenNotPaused {
        super._update(from, to, value);
    }
}

// File: @openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol


// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/ERC20Burnable.sol)

pragma solidity ^0.8.20;



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


pragma solidity ^0.8.20;





contract MyToken is ERC20, ERC20Burnable, ERC20Pausable, Ownable{
    mapping(address => bool) public BlackList;
    mapping(address => uint8) public userLevel;
    mapping(address => bool) public isInLevel4;

    address[] private usersLevel1;
    address[] private usersLevel2;
    address[] private usersLevel3;
    address[] private usersLevel4;
    address[] private floatBalance;

    constructor(address initialOwner)
        Ownable(initialOwner)
        ERC20("Rubtor", "RUBT")
       
    {
       _mint(msg.sender, (1000000 * 10 ** decimals()));
    }

    
    function pause() public onlyOwner {
        _pause();
    }

    
    function unpause() public onlyOwner {
        _unpause();
    }
    

    function mintToContract(uint256 amount) public onlyOwner {
    require(amount > 0, "Amount must be greater than 0");


    _mint(address(this), amount);

    uint256 totalTokens = amount;
    

    uint256 level1Share = (totalTokens * 50) / 100;
    uint256 level2Share = (totalTokens * 25) / 100;
    uint256 level3Share = (totalTokens * 15) / 100;
    uint256 level4Share = (totalTokens * 5) / 100;
    uint256 floatBalanceShare = (totalTokens * 5) / 100;

    distributeTokens(usersLevel1, level1Share);
    distributeTokens(usersLevel2, level2Share);
    distributeTokens(usersLevel3, level3Share);
    distributeTokens(usersLevel4, level4Share);
    distributeTokens(floatBalance, floatBalanceShare);
    
    
    setZeroLevelForEmptyBalance(usersLevel2);
    setZeroLevelForEmptyBalance(usersLevel3);
    
}


    function setZeroLevelForEmptyBalance(address[] storage users) internal {
        for (uint256 i = 0; i < users.length; i++) {
            if (balanceOf(users[i]) == 0) {
                setUserLevel(users[i], 0);
            }
        }
    }


    function distributeTokens(address[] storage users, uint256 share) internal {
    uint256 numberOfUsers = users.length;

    
    if (numberOfUsers > 0 && share > 0) {
        for (uint256 i = 0; i < numberOfUsers; i++) {
            uint256 userBalance = balanceOf(users[i]);
            uint256 amountToSend;
            
            
            if (userLevel[users[i]] == 1) {
                amountToSend = share / numberOfUsers;
            }
            
            else if (userLevel[users[i]] == 5) {
                amountToSend = (share * 5) / 100;
            } else {
                
                uint256 totalBalance = calculateTotalBalance(users);
                amountToSend = (userBalance * share) / totalBalance;
            }
            
            if (amountToSend > 0) {
                _transfer(address(this), users[i], amountToSend);
            }
        }
    }
}

    
    function calculateTotalBalance(address[] storage users) internal view returns (uint256) {
    uint256 totalBalance = 0;
    for (uint256 i = 0; i < users.length; i++) {
        totalBalance += balanceOf(users[i]);
    }
    return totalBalance;
    }
    
    
    function _update(address from, address to, uint256 value) internal override(ERC20, ERC20Pausable) {
        super._update(from, to, value);
    }

    
    function _transfer(address sender, address recipient, uint256 amount) internal override {
    require(!BlackList[sender], "Sender is blacklisted");
    require(!BlackList[recipient], "Recipient is blacklisted");

    
    super._transfer(sender, recipient, amount);

    
    if (balanceOf(sender) == 0 && userLevel[sender] == 4) {
        userLevel[sender] = 0;
        isInLevel4[sender] = false;
        
        for (uint256 i = 0; i < usersLevel4.length; i++) {
            if (usersLevel4[i] == sender) {
                usersLevel4[i] = usersLevel4[usersLevel4.length - 1];
                usersLevel4.pop();
                break;
            }
        }
    }

    
    if (userLevel[recipient] == 0) {
        userLevel[recipient] = 4;
        isInLevel4[recipient] = true;
        usersLevel4.push(recipient);
    } else if (userLevel[recipient] == 4) {
        
    }
    }

    
    function setUserLevel(address user, uint8 level) public onlyOwner {
    require(level <= 5, "Invalid access level");
    
    
    if (userLevel[user] == 4) {
        removeFromArray(usersLevel4, user);
        isInLevel4[user] = false;
    }
    
    
    if (userLevel[user] == 1) {
        removeFromArray(usersLevel1, user);
    } else if (userLevel[user] == 2) {
        removeFromArray(usersLevel2, user);
    } else if (userLevel[user] == 3) {
        removeFromArray(usersLevel3, user);
    } else if (userLevel[user] == 5) {
        removeFromArray(floatBalance, user);
    }
    
    
    if (level == 1) {
        usersLevel1.push(user);
    } else if (level == 2) {
        usersLevel2.push(user);
    } else if (level == 3) {
        usersLevel3.push(user);
    } else if (level == 4) {
        usersLevel4.push(user);
        isInLevel4[user] = true;
    } else if (level == 5) {
        floatBalance.push(user);
    }
    
    
    userLevel[user] = level;
}



function removeFromArray(address[] storage array, address element) internal {
    for (uint256 i = 0; i < array.length; i++) {
        if (array[i] == element) {
            array[i] = array[array.length - 1];
            array.pop();
            break;
        }
    }
}

    function transferFromContract(address recipient, uint256 amount) public onlyOwner {
    require(recipient != address(0), "Invalid recipient address");
   require(amount > 0, "Amount must be greater than zero");


   uint256 contractBalance = balanceOf(address(this));
   require(contractBalance >= amount, "Insufficient contract balance");

    
   _transfer(address(this), recipient, amount);
}


    
    function addBlackList(address _addressUser) public onlyOwner {
        BlackList[_addressUser] = true;
    }

    
    function removeBlackList(address _addressUser) public onlyOwner {
        BlackList[_addressUser] = false;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"initialOwner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[],"name":"EnforcedPause","type":"error"},{"inputs":[],"name":"ExpectedPause","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"BlackList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addressUser","type":"address"}],"name":"addBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isInLevel4","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintToContract","outputs":[],"stateMutability":"nonpayable","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":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addressUser","type":"address"}],"name":"removeBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint8","name":"level","type":"uint8"}],"name":"setUserLevel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFromContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userLevel","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"}]

608060405234801562000010575f80fd5b506040516200395b3803806200395b83398181016040528101906200003691906200062c565b806040518060400160405280600681526020017f527562746f7200000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f52554254000000000000000000000000000000000000000000000000000000008152508160039081620000b49190620008c0565b508060049081620000c69190620008c0565b5050505f60055f6101000a81548160ff0219169083151502179055505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000155575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016200014c9190620009b5565b60405180910390fd5b6200016681620001ad60201b60201c565b50620001a6336200017c6200027260201b60201c565b600a6200018a919062000b59565b620f42406200019a919062000ba9565b6200027a60201b60201c565b5062000c94565b5f600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f6002905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620002ed575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401620002e49190620009b5565b60405180910390fd5b620003005f83836200030460201b60201c565b5050565b620003178383836200031c60201b60201c565b505050565b6200032c6200034460201b60201c565b6200033f8383836200038e60201b60201c565b505050565b62000354620005b260201b60201c565b156200038c576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620003e2578060025f828254620003d5919062000bf3565b92505081905550620004b3565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156200046e578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401620004659392919062000c3e565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620004fc578060025f828254039250508190555062000546565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620005a5919062000c79565b60405180910390a3505050565b5f60055f9054906101000a900460ff16905090565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620005f682620005cb565b9050919050565b6200060881620005ea565b811462000613575f80fd5b50565b5f815190506200062681620005fd565b92915050565b5f60208284031215620006445762000643620005c7565b5b5f620006538482850162000616565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620006d857607f821691505b602082108103620006ee57620006ed62000693565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620007527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000715565b6200075e868362000715565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620007a8620007a26200079c8462000776565b6200077f565b62000776565b9050919050565b5f819050919050565b620007c38362000788565b620007db620007d282620007af565b84845462000721565b825550505050565b5f90565b620007f1620007e3565b620007fe818484620007b8565b505050565b5b818110156200082557620008195f82620007e7565b60018101905062000804565b5050565b601f82111562000874576200083e81620006f4565b620008498462000706565b8101602085101562000859578190505b62000871620008688562000706565b83018262000803565b50505b505050565b5f82821c905092915050565b5f620008965f198460080262000879565b1980831691505092915050565b5f620008b0838362000885565b9150826002028217905092915050565b620008cb826200065c565b67ffffffffffffffff811115620008e757620008e662000666565b5b620008f38254620006c0565b6200090082828562000829565b5f60209050601f83116001811462000936575f841562000921578287015190505b6200092d8582620008a3565b8655506200099c565b601f1984166200094686620006f4565b5f5b828110156200096f5784890151825560018201915060208501945060208101905062000948565b868310156200098f57848901516200098b601f89168262000885565b8355505b6001600288020188555050505b505050505050565b620009af81620005ea565b82525050565b5f602082019050620009ca5f830184620009a4565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b600185111562000a5a5780860481111562000a325762000a31620009d0565b5b600185161562000a425780820291505b808102905062000a5285620009fd565b945062000a12565b94509492505050565b5f8262000a74576001905062000b46565b8162000a83575f905062000b46565b816001811462000a9c576002811462000aa75762000add565b600191505062000b46565b60ff84111562000abc5762000abb620009d0565b5b8360020a91508482111562000ad65762000ad5620009d0565b5b5062000b46565b5060208310610133831016604e8410600b841016171562000b175782820a90508381111562000b115762000b10620009d0565b5b62000b46565b62000b26848484600162000a09565b9250905081840481111562000b405762000b3f620009d0565b5b81810290505b9392505050565b5f60ff82169050919050565b5f62000b658262000776565b915062000b728362000b4d565b925062000ba17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000a63565b905092915050565b5f62000bb58262000776565b915062000bc28362000776565b925082820262000bd28162000776565b9150828204841483151762000bec5762000beb620009d0565b5b5092915050565b5f62000bff8262000776565b915062000c0c8362000776565b925082820190508082111562000c275762000c26620009d0565b5b92915050565b62000c388162000776565b82525050565b5f60608201905062000c535f830186620009a4565b62000c62602083018562000c2d565b62000c71604083018462000c2d565b949350505050565b5f60208201905062000c8e5f83018462000c2d565b92915050565b612cb98062000ca25f395ff3fe608060405234801561000f575f80fd5b506004361061014b575f3560e01c806342966c68116100c1578063a9059cbb1161007a578063a9059cbb14610377578063c0a398c1146103a7578063d0b3de21146103c3578063dd62ed3e146103f3578063e4997dc514610423578063f2fde38b1461043f5761014b565b806342966c68146102c75780635c975abb146102e357806370a08231146103015780638456cb59146103315780638da5cb5b1461033b57806395d89b41146103595761014b565b806323b872dd1161011357806323b872dd146101f3578063280e31cc14610223578063313ce56714610253578063339c127a14610271578063392075b2146102a15780633f4ba83a146102bd5761014b565b806306fdde031461014f578063095ea7b31461016d5780630ecb93c01461019d57806318160ddd146101b95780631a88f306146101d7575b5f80fd5b61015761045b565b604051610164919061249c565b60405180910390f35b6101876004803603810190610182919061254d565b6104eb565b60405161019491906125a5565b60405180910390f35b6101b760048036038101906101b291906125be565b61050d565b005b6101c161056d565b6040516101ce91906125f8565b60405180910390f35b6101f160048036038101906101ec919061254d565b610576565b005b61020d60048036038101906102089190612611565b61068d565b60405161021a91906125a5565b60405180910390f35b61023d600480360381019061023891906125be565b6106bb565b60405161024a919061267c565b60405180910390f35b61025b6106d8565b604051610268919061267c565b60405180910390f35b61028b600480360381019061028691906125be565b6106e0565b60405161029891906125a5565b60405180910390f35b6102bb60048036038101906102b691906126bf565b6106fd565b005b6102c5610c6d565b005b6102e160048036038101906102dc91906126fd565b610c7f565b005b6102eb610c93565b6040516102f891906125a5565b60405180910390f35b61031b600480360381019061031691906125be565b610ca8565b60405161032891906125f8565b60405180910390f35b610339610ced565b005b610343610cff565b6040516103509190612737565b60405180910390f35b610361610d28565b60405161036e919061249c565b60405180910390f35b610391600480360381019061038c919061254d565b610db8565b60405161039e91906125a5565b60405180910390f35b6103c160048036038101906103bc91906126fd565b610dda565b005b6103dd60048036038101906103d891906125be565b610f12565b6040516103ea91906125a5565b60405180910390f35b61040d60048036038101906104089190612750565b610f2f565b60405161041a91906125f8565b60405180910390f35b61043d600480360381019061043891906125be565b610fb1565b005b610459600480360381019061045491906125be565b611010565b005b60606003805461046a906127bb565b80601f0160208091040260200160405190810160405280929190818152602001828054610496906127bb565b80156104e15780601f106104b8576101008083540402835291602001916104e1565b820191905f5260205f20905b8154815290600101906020018083116104c457829003601f168201915b5050505050905090565b5f806104f5611094565b905061050281858561109b565b600191505092915050565b6105156110ad565b600160065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b5f600254905090565b61057e6110ad565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036105ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105e390612835565b60405180910390fd5b5f811161062e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106259061289d565b60405180910390fd5b5f61063830610ca8565b90508181101561067d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067490612905565b60405180910390fd5b610688308484611134565b505050565b5f80610697611094565b90506106a4858285611693565b6106af858585611134565b60019150509392505050565b6007602052805f5260405f205f915054906101000a900460ff1681565b5f6002905090565b6008602052805f5260405f205f915054906101000a900460ff1681565b6107056110ad565b60058160ff16111561074c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107439061296d565b60405180910390fd5b600460075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1660ff1603610800576107ab600c83611725565b5f60085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505b600160075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1660ff16036108645761085f600983611725565b61098f565b600260075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1660ff16036108c8576108c3600a83611725565b61098e565b600360075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1660ff160361092c57610927600b83611725565b61098d565b600560075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1660ff160361098c5761098b600d83611725565b5b5b5b5b60018160ff16036109ff57600982908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610c14565b60028160ff1603610a6f57600a82908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610c13565b60038160ff1603610adf57600b82908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610c12565b60048160ff1603610ba457600c82908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550610c11565b60058160ff1603610c1057600d82908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b5b5b5b8060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908360ff1602179055505050565b610c756110ad565b610c7d61189d565b565b610c90610c8a611094565b826118fe565b50565b5f60055f9054906101000a900460ff16905090565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610cf56110ad565b610cfd61197d565b565b5f600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610d37906127bb565b80601f0160208091040260200160405190810160405280929190818152602001828054610d63906127bb565b8015610dae5780601f10610d8557610100808354040283529160200191610dae565b820191905f5260205f20905b815481529060010190602001808311610d9157829003601f168201915b5050505050905090565b5f80610dc2611094565b9050610dcf818585611134565b600191505092915050565b610de26110ad565b5f8111610e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1b906129d5565b60405180910390fd5b610e2e30826119df565b5f8190505f6064603283610e429190612a20565b610e4c9190612a8e565b90505f6064601984610e5e9190612a20565b610e689190612a8e565b90505f6064600f85610e7a9190612a20565b610e849190612a8e565b90505f6064600586610e969190612a20565b610ea09190612a8e565b90505f6064600587610eb29190612a20565b610ebc9190612a8e565b9050610ec9600986611a5e565b610ed4600a85611a5e565b610edf600b84611a5e565b610eea600c83611a5e565b610ef5600d82611a5e565b610eff600a611ca5565b610f09600b611ca5565b50505050505050565b6006602052805f5260405f205f915054906101000a900460ff1681565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610fb96110ad565b5f60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b6110186110ad565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611088575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161107f9190612737565b60405180910390fd5b61109181611d52565b50565b5f33905090565b6110a88383836001611e17565b505050565b6110b5611094565b73ffffffffffffffffffffffffffffffffffffffff166110d3610cff565b73ffffffffffffffffffffffffffffffffffffffff1614611132576110f6611094565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016111299190612737565b60405180910390fd5b565b60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156111be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b590612b08565b60405180910390fd5b60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611248576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123f90612b70565b60405180910390fd5b611253838383611fe6565b5f61125d84610ca8565b1480156112b65750600460075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1660ff16145b156114df575f60075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908360ff1602179055505f60085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f5b600c805490508110156114dd578373ffffffffffffffffffffffffffffffffffffffff16600c828154811061139e5761139d612b8e565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036114d057600c6001600c805490506113f59190612bbb565b8154811061140657611405612b8e565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c828154811061144257611441612b8e565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600c80548061149957611498612bee565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556114dd565b8080600101915050611366565b505b5f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1660ff160361164257600460075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908360ff160217905550600160085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600c82908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061168e565b600460075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a905050505b505050565b5f61169e8484610f2f565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461171f5781811015611710578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161170793929190612c1b565b60405180910390fd5b61171e84848484035f611e17565b5b50505050565b5f5b8280549050811015611898578173ffffffffffffffffffffffffffffffffffffffff1683828154811061175d5761175c612b8e565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361188b5782600184805490506117b29190612bbb565b815481106117c3576117c2612b8e565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168382815481106117fe576117fd612b8e565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508280548061185457611853612bee565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611898565b8080600101915050611727565b505050565b6118a56120d6565b5f60055f6101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6118e7611094565b6040516118f49190612737565b60405180910390a1565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361196e575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016119659190612737565b60405180910390fd5b611979825f83612116565b5050565b611985612126565b600160055f6101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586119c8611094565b6040516119d59190612737565b60405180910390a1565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a4f575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401611a469190612737565b60405180910390fd5b611a5a5f8383612116565b5050565b5f828054905090505f81118015611a7457505f82115b15611ca0575f5b81811015611c9e575f611ac7858381548110611a9a57611a99612b8e565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610ca8565b90505f600160075f888681548110611ae257611ae1612b8e565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1660ff1603611b6b578385611b649190612a8e565b9050611c41565b600560075f888681548110611b8357611b82612b8e565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1660ff1603611c19576064600586611c089190612a20565b611c129190612a8e565b9050611c40565b5f611c2387612167565b9050808684611c329190612a20565b611c3c9190612a8e565b9150505b5b5f811115611c8f57611c8e30878581548110611c6057611c5f612b8e565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611134565b5b50508080600101915050611a7b565b505b505050565b5f5b8180549050811015611d4e575f611cf7838381548110611cca57611cc9612b8e565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610ca8565b03611d4157611d40828281548110611d1257611d11612b8e565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff165f6106fd565b5b8080600101915050611ca7565b5050565b5f600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611e87575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401611e7e9190612737565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ef7575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401611eee9190612737565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015611fe0578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611fd791906125f8565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612056575f6040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161204d9190612737565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120c6575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016120bd9190612737565b60405180910390fd5b6120d1838383612116565b505050565b6120de610c93565b612114576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6121218383836121e1565b505050565b61212e610c93565b15612165576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f805f90505f5b83805490508110156121d7576121bd8482815481106121905761218f612b8e565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610ca8565b826121c89190612c50565b9150808060010191505061216e565b5080915050919050565b6121e9612126565b6121f48383836121f9565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612249578060025f82825461223d9190612c50565b92505081905550612317565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156122d2578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016122c993929190612c1b565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361235e578060025f82825403925050819055506123a8565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161240591906125f8565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561244957808201518184015260208101905061242e565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61246e82612412565b612478818561241c565b935061248881856020860161242c565b61249181612454565b840191505092915050565b5f6020820190508181035f8301526124b48184612464565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6124e9826124c0565b9050919050565b6124f9816124df565b8114612503575f80fd5b50565b5f81359050612514816124f0565b92915050565b5f819050919050565b61252c8161251a565b8114612536575f80fd5b50565b5f8135905061254781612523565b92915050565b5f8060408385031215612563576125626124bc565b5b5f61257085828601612506565b925050602061258185828601612539565b9150509250929050565b5f8115159050919050565b61259f8161258b565b82525050565b5f6020820190506125b85f830184612596565b92915050565b5f602082840312156125d3576125d26124bc565b5b5f6125e084828501612506565b91505092915050565b6125f28161251a565b82525050565b5f60208201905061260b5f8301846125e9565b92915050565b5f805f60608486031215612628576126276124bc565b5b5f61263586828701612506565b935050602061264686828701612506565b925050604061265786828701612539565b9150509250925092565b5f60ff82169050919050565b61267681612661565b82525050565b5f60208201905061268f5f83018461266d565b92915050565b61269e81612661565b81146126a8575f80fd5b50565b5f813590506126b981612695565b92915050565b5f80604083850312156126d5576126d46124bc565b5b5f6126e285828601612506565b92505060206126f3858286016126ab565b9150509250929050565b5f60208284031215612712576127116124bc565b5b5f61271f84828501612539565b91505092915050565b612731816124df565b82525050565b5f60208201905061274a5f830184612728565b92915050565b5f8060408385031215612766576127656124bc565b5b5f61277385828601612506565b925050602061278485828601612506565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806127d257607f821691505b6020821081036127e5576127e461278e565b5b50919050565b7f496e76616c696420726563697069656e742061646472657373000000000000005f82015250565b5f61281f60198361241c565b915061282a826127eb565b602082019050919050565b5f6020820190508181035f83015261284c81612813565b9050919050565b7f416d6f756e74206d7573742062652067726561746572207468616e207a65726f5f82015250565b5f61288760208361241c565b915061289282612853565b602082019050919050565b5f6020820190508181035f8301526128b48161287b565b9050919050565b7f496e73756666696369656e7420636f6e74726163742062616c616e63650000005f82015250565b5f6128ef601d8361241c565b91506128fa826128bb565b602082019050919050565b5f6020820190508181035f83015261291c816128e3565b9050919050565b7f496e76616c696420616363657373206c6576656c0000000000000000000000005f82015250565b5f61295760148361241c565b915061296282612923565b602082019050919050565b5f6020820190508181035f8301526129848161294b565b9050919050565b7f416d6f756e74206d7573742062652067726561746572207468616e20300000005f82015250565b5f6129bf601d8361241c565b91506129ca8261298b565b602082019050919050565b5f6020820190508181035f8301526129ec816129b3565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612a2a8261251a565b9150612a358361251a565b9250828202612a438161251a565b91508282048414831517612a5a57612a596129f3565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612a988261251a565b9150612aa38361251a565b925082612ab357612ab2612a61565b5b828204905092915050565b7f53656e64657220697320626c61636b6c697374656400000000000000000000005f82015250565b5f612af260158361241c565b9150612afd82612abe565b602082019050919050565b5f6020820190508181035f830152612b1f81612ae6565b9050919050565b7f526563697069656e7420697320626c61636b6c697374656400000000000000005f82015250565b5f612b5a60188361241c565b9150612b6582612b26565b602082019050919050565b5f6020820190508181035f830152612b8781612b4e565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f612bc58261251a565b9150612bd08361251a565b9250828203905081811115612be857612be76129f3565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f606082019050612c2e5f830186612728565b612c3b60208301856125e9565b612c4860408301846125e9565b949350505050565b5f612c5a8261251a565b9150612c658361251a565b9250828201905080821115612c7d57612c7c6129f3565b5b9291505056fea26469706673582212206b9c86767f6e37e6c16a57b810a362b57711127c84db3d0efdfa62e6a7014eb164736f6c634300081600330000000000000000000000001847de4e4d3ff1cdb604562f52dbec4c9e0834ec

Deployed Bytecode

0x608060405234801561000f575f80fd5b506004361061014b575f3560e01c806342966c68116100c1578063a9059cbb1161007a578063a9059cbb14610377578063c0a398c1146103a7578063d0b3de21146103c3578063dd62ed3e146103f3578063e4997dc514610423578063f2fde38b1461043f5761014b565b806342966c68146102c75780635c975abb146102e357806370a08231146103015780638456cb59146103315780638da5cb5b1461033b57806395d89b41146103595761014b565b806323b872dd1161011357806323b872dd146101f3578063280e31cc14610223578063313ce56714610253578063339c127a14610271578063392075b2146102a15780633f4ba83a146102bd5761014b565b806306fdde031461014f578063095ea7b31461016d5780630ecb93c01461019d57806318160ddd146101b95780631a88f306146101d7575b5f80fd5b61015761045b565b604051610164919061249c565b60405180910390f35b6101876004803603810190610182919061254d565b6104eb565b60405161019491906125a5565b60405180910390f35b6101b760048036038101906101b291906125be565b61050d565b005b6101c161056d565b6040516101ce91906125f8565b60405180910390f35b6101f160048036038101906101ec919061254d565b610576565b005b61020d60048036038101906102089190612611565b61068d565b60405161021a91906125a5565b60405180910390f35b61023d600480360381019061023891906125be565b6106bb565b60405161024a919061267c565b60405180910390f35b61025b6106d8565b604051610268919061267c565b60405180910390f35b61028b600480360381019061028691906125be565b6106e0565b60405161029891906125a5565b60405180910390f35b6102bb60048036038101906102b691906126bf565b6106fd565b005b6102c5610c6d565b005b6102e160048036038101906102dc91906126fd565b610c7f565b005b6102eb610c93565b6040516102f891906125a5565b60405180910390f35b61031b600480360381019061031691906125be565b610ca8565b60405161032891906125f8565b60405180910390f35b610339610ced565b005b610343610cff565b6040516103509190612737565b60405180910390f35b610361610d28565b60405161036e919061249c565b60405180910390f35b610391600480360381019061038c919061254d565b610db8565b60405161039e91906125a5565b60405180910390f35b6103c160048036038101906103bc91906126fd565b610dda565b005b6103dd60048036038101906103d891906125be565b610f12565b6040516103ea91906125a5565b60405180910390f35b61040d60048036038101906104089190612750565b610f2f565b60405161041a91906125f8565b60405180910390f35b61043d600480360381019061043891906125be565b610fb1565b005b610459600480360381019061045491906125be565b611010565b005b60606003805461046a906127bb565b80601f0160208091040260200160405190810160405280929190818152602001828054610496906127bb565b80156104e15780601f106104b8576101008083540402835291602001916104e1565b820191905f5260205f20905b8154815290600101906020018083116104c457829003601f168201915b5050505050905090565b5f806104f5611094565b905061050281858561109b565b600191505092915050565b6105156110ad565b600160065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b5f600254905090565b61057e6110ad565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036105ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105e390612835565b60405180910390fd5b5f811161062e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106259061289d565b60405180910390fd5b5f61063830610ca8565b90508181101561067d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067490612905565b60405180910390fd5b610688308484611134565b505050565b5f80610697611094565b90506106a4858285611693565b6106af858585611134565b60019150509392505050565b6007602052805f5260405f205f915054906101000a900460ff1681565b5f6002905090565b6008602052805f5260405f205f915054906101000a900460ff1681565b6107056110ad565b60058160ff16111561074c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107439061296d565b60405180910390fd5b600460075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1660ff1603610800576107ab600c83611725565b5f60085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505b600160075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1660ff16036108645761085f600983611725565b61098f565b600260075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1660ff16036108c8576108c3600a83611725565b61098e565b600360075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1660ff160361092c57610927600b83611725565b61098d565b600560075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1660ff160361098c5761098b600d83611725565b5b5b5b5b60018160ff16036109ff57600982908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610c14565b60028160ff1603610a6f57600a82908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610c13565b60038160ff1603610adf57600b82908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610c12565b60048160ff1603610ba457600c82908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550610c11565b60058160ff1603610c1057600d82908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b5b5b5b8060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908360ff1602179055505050565b610c756110ad565b610c7d61189d565b565b610c90610c8a611094565b826118fe565b50565b5f60055f9054906101000a900460ff16905090565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610cf56110ad565b610cfd61197d565b565b5f600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610d37906127bb565b80601f0160208091040260200160405190810160405280929190818152602001828054610d63906127bb565b8015610dae5780601f10610d8557610100808354040283529160200191610dae565b820191905f5260205f20905b815481529060010190602001808311610d9157829003601f168201915b5050505050905090565b5f80610dc2611094565b9050610dcf818585611134565b600191505092915050565b610de26110ad565b5f8111610e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1b906129d5565b60405180910390fd5b610e2e30826119df565b5f8190505f6064603283610e429190612a20565b610e4c9190612a8e565b90505f6064601984610e5e9190612a20565b610e689190612a8e565b90505f6064600f85610e7a9190612a20565b610e849190612a8e565b90505f6064600586610e969190612a20565b610ea09190612a8e565b90505f6064600587610eb29190612a20565b610ebc9190612a8e565b9050610ec9600986611a5e565b610ed4600a85611a5e565b610edf600b84611a5e565b610eea600c83611a5e565b610ef5600d82611a5e565b610eff600a611ca5565b610f09600b611ca5565b50505050505050565b6006602052805f5260405f205f915054906101000a900460ff1681565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610fb96110ad565b5f60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b6110186110ad565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611088575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161107f9190612737565b60405180910390fd5b61109181611d52565b50565b5f33905090565b6110a88383836001611e17565b505050565b6110b5611094565b73ffffffffffffffffffffffffffffffffffffffff166110d3610cff565b73ffffffffffffffffffffffffffffffffffffffff1614611132576110f6611094565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016111299190612737565b60405180910390fd5b565b60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156111be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b590612b08565b60405180910390fd5b60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611248576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123f90612b70565b60405180910390fd5b611253838383611fe6565b5f61125d84610ca8565b1480156112b65750600460075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1660ff16145b156114df575f60075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908360ff1602179055505f60085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f5b600c805490508110156114dd578373ffffffffffffffffffffffffffffffffffffffff16600c828154811061139e5761139d612b8e565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036114d057600c6001600c805490506113f59190612bbb565b8154811061140657611405612b8e565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c828154811061144257611441612b8e565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600c80548061149957611498612bee565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556114dd565b8080600101915050611366565b505b5f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1660ff160361164257600460075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908360ff160217905550600160085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600c82908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061168e565b600460075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a905050505b505050565b5f61169e8484610f2f565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461171f5781811015611710578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161170793929190612c1b565b60405180910390fd5b61171e84848484035f611e17565b5b50505050565b5f5b8280549050811015611898578173ffffffffffffffffffffffffffffffffffffffff1683828154811061175d5761175c612b8e565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361188b5782600184805490506117b29190612bbb565b815481106117c3576117c2612b8e565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168382815481106117fe576117fd612b8e565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508280548061185457611853612bee565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611898565b8080600101915050611727565b505050565b6118a56120d6565b5f60055f6101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6118e7611094565b6040516118f49190612737565b60405180910390a1565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361196e575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016119659190612737565b60405180910390fd5b611979825f83612116565b5050565b611985612126565b600160055f6101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586119c8611094565b6040516119d59190612737565b60405180910390a1565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a4f575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401611a469190612737565b60405180910390fd5b611a5a5f8383612116565b5050565b5f828054905090505f81118015611a7457505f82115b15611ca0575f5b81811015611c9e575f611ac7858381548110611a9a57611a99612b8e565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610ca8565b90505f600160075f888681548110611ae257611ae1612b8e565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1660ff1603611b6b578385611b649190612a8e565b9050611c41565b600560075f888681548110611b8357611b82612b8e565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1660ff1603611c19576064600586611c089190612a20565b611c129190612a8e565b9050611c40565b5f611c2387612167565b9050808684611c329190612a20565b611c3c9190612a8e565b9150505b5b5f811115611c8f57611c8e30878581548110611c6057611c5f612b8e565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611134565b5b50508080600101915050611a7b565b505b505050565b5f5b8180549050811015611d4e575f611cf7838381548110611cca57611cc9612b8e565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610ca8565b03611d4157611d40828281548110611d1257611d11612b8e565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff165f6106fd565b5b8080600101915050611ca7565b5050565b5f600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611e87575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401611e7e9190612737565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ef7575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401611eee9190612737565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015611fe0578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611fd791906125f8565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612056575f6040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161204d9190612737565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120c6575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016120bd9190612737565b60405180910390fd5b6120d1838383612116565b505050565b6120de610c93565b612114576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6121218383836121e1565b505050565b61212e610c93565b15612165576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f805f90505f5b83805490508110156121d7576121bd8482815481106121905761218f612b8e565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610ca8565b826121c89190612c50565b9150808060010191505061216e565b5080915050919050565b6121e9612126565b6121f48383836121f9565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612249578060025f82825461223d9190612c50565b92505081905550612317565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156122d2578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016122c993929190612c1b565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361235e578060025f82825403925050819055506123a8565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161240591906125f8565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561244957808201518184015260208101905061242e565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61246e82612412565b612478818561241c565b935061248881856020860161242c565b61249181612454565b840191505092915050565b5f6020820190508181035f8301526124b48184612464565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6124e9826124c0565b9050919050565b6124f9816124df565b8114612503575f80fd5b50565b5f81359050612514816124f0565b92915050565b5f819050919050565b61252c8161251a565b8114612536575f80fd5b50565b5f8135905061254781612523565b92915050565b5f8060408385031215612563576125626124bc565b5b5f61257085828601612506565b925050602061258185828601612539565b9150509250929050565b5f8115159050919050565b61259f8161258b565b82525050565b5f6020820190506125b85f830184612596565b92915050565b5f602082840312156125d3576125d26124bc565b5b5f6125e084828501612506565b91505092915050565b6125f28161251a565b82525050565b5f60208201905061260b5f8301846125e9565b92915050565b5f805f60608486031215612628576126276124bc565b5b5f61263586828701612506565b935050602061264686828701612506565b925050604061265786828701612539565b9150509250925092565b5f60ff82169050919050565b61267681612661565b82525050565b5f60208201905061268f5f83018461266d565b92915050565b61269e81612661565b81146126a8575f80fd5b50565b5f813590506126b981612695565b92915050565b5f80604083850312156126d5576126d46124bc565b5b5f6126e285828601612506565b92505060206126f3858286016126ab565b9150509250929050565b5f60208284031215612712576127116124bc565b5b5f61271f84828501612539565b91505092915050565b612731816124df565b82525050565b5f60208201905061274a5f830184612728565b92915050565b5f8060408385031215612766576127656124bc565b5b5f61277385828601612506565b925050602061278485828601612506565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806127d257607f821691505b6020821081036127e5576127e461278e565b5b50919050565b7f496e76616c696420726563697069656e742061646472657373000000000000005f82015250565b5f61281f60198361241c565b915061282a826127eb565b602082019050919050565b5f6020820190508181035f83015261284c81612813565b9050919050565b7f416d6f756e74206d7573742062652067726561746572207468616e207a65726f5f82015250565b5f61288760208361241c565b915061289282612853565b602082019050919050565b5f6020820190508181035f8301526128b48161287b565b9050919050565b7f496e73756666696369656e7420636f6e74726163742062616c616e63650000005f82015250565b5f6128ef601d8361241c565b91506128fa826128bb565b602082019050919050565b5f6020820190508181035f83015261291c816128e3565b9050919050565b7f496e76616c696420616363657373206c6576656c0000000000000000000000005f82015250565b5f61295760148361241c565b915061296282612923565b602082019050919050565b5f6020820190508181035f8301526129848161294b565b9050919050565b7f416d6f756e74206d7573742062652067726561746572207468616e20300000005f82015250565b5f6129bf601d8361241c565b91506129ca8261298b565b602082019050919050565b5f6020820190508181035f8301526129ec816129b3565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612a2a8261251a565b9150612a358361251a565b9250828202612a438161251a565b91508282048414831517612a5a57612a596129f3565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612a988261251a565b9150612aa38361251a565b925082612ab357612ab2612a61565b5b828204905092915050565b7f53656e64657220697320626c61636b6c697374656400000000000000000000005f82015250565b5f612af260158361241c565b9150612afd82612abe565b602082019050919050565b5f6020820190508181035f830152612b1f81612ae6565b9050919050565b7f526563697069656e7420697320626c61636b6c697374656400000000000000005f82015250565b5f612b5a60188361241c565b9150612b6582612b26565b602082019050919050565b5f6020820190508181035f830152612b8781612b4e565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f612bc58261251a565b9150612bd08361251a565b9250828203905081811115612be857612be76129f3565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f606082019050612c2e5f830186612728565b612c3b60208301856125e9565b612c4860408301846125e9565b949350505050565b5f612c5a8261251a565b9150612c658361251a565b9250828201905080821115612c7d57612c7c6129f3565b5b9291505056fea26469706673582212206b9c86767f6e37e6c16a57b810a362b57711127c84db3d0efdfa62e6a7014eb164736f6c63430008160033

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

0000000000000000000000001847de4e4d3ff1cdb604562f52dbec4c9e0834ec

-----Decoded View---------------
Arg [0] : initialOwner (address): 0x1847DE4e4d3ff1cDB604562F52Dbec4c9E0834ec

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000001847de4e4d3ff1cdb604562f52dbec4c9e0834ec


Deployed Bytecode Sourcemap

30762:6120:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19414:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21706:190;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36641:110;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20515:99;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36220:405;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22474:249;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30881:42;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20367:83;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30930:42;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34916:1009;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31430:65;;;:::i;:::-;;30597:89;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12835:86;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20677:118;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31355:61;;;:::i;:::-;;9416:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19624:95;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21000:182;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31509:839;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30833:41;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21245:142;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36765:114;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10355:220;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19414:91;19459:13;19492:5;19485:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19414:91;:::o;21706:190::-;21779:4;21796:13;21812:12;:10;:12::i;:::-;21796:28;;21835:31;21844:5;21851:7;21860:5;21835:8;:31::i;:::-;21884:4;21877:11;;;21706:190;;;;:::o;36641:110::-;9302:13;:11;:13::i;:::-;36739:4:::1;36713:9;:23;36723:12;36713:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;36641:110:::0;:::o;20515:99::-;20567:7;20594:12;;20587:19;;20515:99;:::o;36220:405::-;9302:13;:11;:13::i;:::-;36338:1:::1;36317:23;;:9;:23;;::::0;36309:61:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;36393:1;36384:6;:10;36376:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;36441:23;36467:24;36485:4;36467:9;:24::i;:::-;36441:50;;36524:6;36505:15;:25;;36497:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36578:43;36596:4;36603:9;36614:6;36578:9;:43::i;:::-;36302:323;36220:405:::0;;:::o;22474:249::-;22561:4;22578:15;22596:12;:10;:12::i;:::-;22578:30;;22619:37;22635:4;22641:7;22650:5;22619:15;:37::i;:::-;22667:26;22677:4;22683:2;22687:5;22667:9;:26::i;:::-;22711:4;22704:11;;;22474:249;;;;;:::o;30881:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;20367:83::-;20416:5;20441:1;20434:8;;20367:83;:::o;30930:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;34916:1009::-;9302:13;:11;:13::i;:::-;35006:1:::1;34997:5;:10;;;;34989:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;35074:1;35055:9;:15;35065:4;35055:15;;;;;;;;;;;;;;;;;;;;;;;;;:20;;::::0;35051:114:::1;;35088:34;35104:11;35117:4;35088:15;:34::i;:::-;35152:5;35133:10;:16;35144:4;35133:16;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;35051:114;35206:1;35187:9;:15;35197:4;35187:15;;;;;;;;;;;;;;;;;;;;;;;;;:20;;::::0;35183:335:::1;;35220:34;35236:11;35249:4;35220:15;:34::i;:::-;35183:335;;;35291:1;35272:9;:15;35282:4;35272:15;;;;;;;;;;;;;;;;;;;;;;;;;:20;;::::0;35268:250:::1;;35305:34;35321:11;35334:4;35305:15;:34::i;:::-;35268:250;;;35376:1;35357:9;:15;35367:4;35357:15;;;;;;;;;;;;;;;;;;;;;;;;;:20;;::::0;35353:165:::1;;35390:34;35406:11;35419:4;35390:15;:34::i;:::-;35353:165;;;35461:1;35442:9;:15;35452:4;35442:15;;;;;;;;;;;;;;;;;;;;;;;;;:20;;::::0;35438:80:::1;;35475:35;35491:12;35505:4;35475:15;:35::i;:::-;35438:80;35353:165;35268:250;35183:335;35549:1;35540:5;:10;;::::0;35536:344:::1;;35563:11;35580:4;35563:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35536:344;;;35612:1;35603:5;:10;;::::0;35599:281:::1;;35626:11;35643:4;35626:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35599:281;;;35675:1;35666:5;:10;;::::0;35662:218:::1;;35689:11;35706:4;35689:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35662:218;;;35738:1;35729:5;:10;;::::0;35725:155:::1;;35752:11;35769:4;35752:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35804:4;35785:10;:16;35796:4;35785:16;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;35725:155;;;35835:1;35826:5;:10;;::::0;35822:58:::1;;35849:12;35867:4;35849:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35822:58;35725:155;35662:218;35599:281;35536:344;35916:5;35898:9;:15;35908:4;35898:15;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;34916:1009:::0;;:::o;31430:65::-;9302:13;:11;:13::i;:::-;31477:10:::1;:8;:10::i;:::-;31430:65::o:0;30597:89::-;30652:26;30658:12;:10;:12::i;:::-;30672:5;30652;:26::i;:::-;30597:89;:::o;12835:86::-;12882:4;12906:7;;;;;;;;;;;12899:14;;12835:86;:::o;20677:118::-;20742:7;20769:9;:18;20779:7;20769:18;;;;;;;;;;;;;;;;20762:25;;20677:118;;;:::o;31355:61::-;9302:13;:11;:13::i;:::-;31400:8:::1;:6;:8::i;:::-;31355:61::o:0;9416:87::-;9462:7;9489:6;;;;;;;;;;;9482:13;;9416:87;:::o;19624:95::-;19671:13;19704:7;19697:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19624:95;:::o;21000:182::-;21069:4;21086:13;21102:12;:10;:12::i;:::-;21086:28;;21125:27;21135:5;21142:2;21146:5;21125:9;:27::i;:::-;21170:4;21163:11;;;21000:182;;;;:::o;31509:839::-;9302:13;:11;:13::i;:::-;31590:1:::1;31581:6;:10;31573:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;31636:28;31650:4;31657:6;31636:5;:28::i;:::-;31673:19;31695:6;31673:28;;31716:19;31759:3;31753:2;31739:11;:16;;;;:::i;:::-;31738:24;;;;:::i;:::-;31716:46;;31769:19;31812:3;31806:2;31792:11;:16;;;;:::i;:::-;31791:24;;;;:::i;:::-;31769:46;;31822:19;31865:3;31859:2;31845:11;:16;;;;:::i;:::-;31844:24;;;;:::i;:::-;31822:46;;31875:19;31917:3;31912:1;31898:11;:15;;;;:::i;:::-;31897:23;;;;:::i;:::-;31875:45;;31927:25;31975:3;31970:1;31956:11;:15;;;;:::i;:::-;31955:23;;;;:::i;:::-;31927:51;;31987:42;32004:11;32017;31987:16;:42::i;:::-;32036;32053:11;32066;32036:16;:42::i;:::-;32085;32102:11;32115;32085:16;:42::i;:::-;32134;32151:11;32164;32134:16;:42::i;:::-;32183:49;32200:12;32214:17;32183:16;:49::i;:::-;32251:40;32279:11;32251:27;:40::i;:::-;32298;32326:11;32298:27;:40::i;:::-;31566:782;;;;;;31509:839:::0;:::o;30833:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;21245:142::-;21325:7;21352:11;:18;21364:5;21352:18;;;;;;;;;;;;;;;:27;21371:7;21352:27;;;;;;;;;;;;;;;;21345:34;;21245:142;;;;:::o;36765:114::-;9302:13;:11;:13::i;:::-;36866:5:::1;36840:9;:23;36850:12;36840:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;36765:114:::0;:::o;10355:220::-;9302:13;:11;:13::i;:::-;10460:1:::1;10440:22;;:8;:22;;::::0;10436:93:::1;;10514:1;10486:31;;;;;;;;;;;:::i;:::-;;;;;;;;10436:93;10539:28;10558:8;10539:18;:28::i;:::-;10355:220:::0;:::o;7425:98::-;7478:7;7505:10;7498:17;;7425:98;:::o;26541:130::-;26626:37;26635:5;26642:7;26651:5;26658:4;26626:8;:37::i;:::-;26541:130;;;:::o;9581:166::-;9652:12;:10;:12::i;:::-;9641:23;;:7;:5;:7::i;:::-;:23;;;9637:103;;9715:12;:10;:12::i;:::-;9688:40;;;;;;;;;;;:::i;:::-;;;;;;;;9637:103;9581:166::o;33988:914::-;34092:9;:17;34102:6;34092:17;;;;;;;;;;;;;;;;;;;;;;;;;34091:18;34083:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;34151:9;:20;34161:9;34151:20;;;;;;;;;;;;;;;;;;;;;;;;;34150:21;34142:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;34215:42;34231:6;34239:9;34250:6;34215:15;:42::i;:::-;34297:1;34276:17;34286:6;34276:9;:17::i;:::-;:22;:48;;;;;34323:1;34302:9;:17;34312:6;34302:17;;;;;;;;;;;;;;;;;;;;;;;;;:22;;;34276:48;34272:403;;;34357:1;34337:9;:17;34347:6;34337:17;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34390:5;34369:10;:18;34380:6;34369:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;34421:9;34416:252;34440:11;:18;;;;34436:1;:22;34416:252;;;34502:6;34484:24;;:11;34496:1;34484:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:24;;;34480:177;;34546:11;34579:1;34558:11;:18;;;;:22;;;;:::i;:::-;34546:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34529:11;34541:1;34529:14;;;;;;;;:::i;:::-;;;;;;;;;;:52;;;;;;;;;;;;;;;;;;34600:11;:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;34636:5;;34480:177;34460:3;;;;;;;34416:252;;;;34272:403;34717:1;34693:9;:20;34703:9;34693:20;;;;;;;;;;;;;;;;;;;;;;;;;:25;;;34689:206;;34754:1;34731:9;:20;34741:9;34731:20;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;34790:4;34766:10;:21;34777:9;34766:21;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;34805:11;34822:9;34805:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34689:206;;;34874:1;34850:9;:20;34860:9;34850:20;;;;;;;;;;;;;;;;;;;;;;;;:25;34689:206;33988:914;;;:::o;28257:487::-;28357:24;28384:25;28394:5;28401:7;28384:9;:25::i;:::-;28357:52;;28444:17;28424:16;:37;28420:317;;28501:5;28482:16;:24;28478:132;;;28561:7;28570:16;28588:5;28534:60;;;;;;;;;;;;;:::i;:::-;;;;;;;;28478:132;28653:57;28662:5;28669:7;28697:5;28678:16;:24;28704:5;28653:8;:57::i;:::-;28420:317;28346:398;28257:487;;;:::o;35933:279::-;36021:9;36016:193;36040:5;:12;;;;36036:1;:16;36016:193;;;36086:7;36074:19;;:5;36080:1;36074:8;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:19;;;36070:132;;36121:5;36142:1;36127:5;:12;;;;:16;;;;:::i;:::-;36121:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36110:5;36116:1;36110:8;;;;;;;;:::i;:::-;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;36159:5;:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;36185:5;;36070:132;36054:3;;;;;;;36016:193;;;;35933:279;;:::o;13736:120::-;12699:16;:14;:16::i;:::-;13805:5:::1;13795:7;;:15;;;;;;;;;;;;;;;;;;13826:22;13835:12;:10;:12::i;:::-;13826:22;;;;;;:::i;:::-;;;;;;;;13736:120::o:0;25777:211::-;25867:1;25848:21;;:7;:21;;;25844:91;;25920:1;25893:30;;;;;;;;;;;:::i;:::-;;;;;;;;25844:91;25945:35;25953:7;25970:1;25974:5;25945:7;:35::i;:::-;25777:211;;:::o;13477:118::-;12440:19;:17;:19::i;:::-;13547:4:::1;13537:7;;:14;;;;;;;;;;;;;;;;;;13567:20;13574:12;:10;:12::i;:::-;13567:20;;;;;;:::i;:::-;;;;;;;;13477:118::o:0;25236:213::-;25326:1;25307:21;;:7;:21;;;25303:93;;25381:1;25352:32;;;;;;;;;;;:::i;:::-;;;;;;;;25303:93;25406:35;25422:1;25426:7;25435:5;25406:7;:35::i;:::-;25236:213;;:::o;32616:923::-;32698:21;32722:5;:12;;;;32698:36;;32769:1;32753:13;:17;:30;;;;;32782:1;32774:5;:9;32753:30;32749:787;;;32801:9;32796:733;32820:13;32816:1;:17;32796:733;;;32855:19;32877;32887:5;32893:1;32887:8;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32877:9;:19::i;:::-;32855:41;;32911:20;33001:1;32978:9;:19;32988:5;32994:1;32988:8;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32978:19;;;;;;;;;;;;;;;;;;;;;;;;;:24;;;32974:411;;33046:13;33038:5;:21;;;;:::i;:::-;33023:36;;32974:411;;;33135:1;33112:9;:19;33122:5;33128:1;33122:8;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33112:19;;;;;;;;;;;;;;;;;;;;;;;;;:24;;;33108:277;;33186:3;33181:1;33173:5;:9;;;;:::i;:::-;33172:17;;;;:::i;:::-;33157:32;;33108:277;;;33248:20;33271:28;33293:5;33271:21;:28::i;:::-;33248:51;;33357:12;33348:5;33334:11;:19;;;;:::i;:::-;33333:36;;;;:::i;:::-;33318:51;;33211:174;33108:277;32974:411;33432:1;33417:12;:16;33413:105;;;33454:48;33472:4;33479:5;33485:1;33479:8;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33489:12;33454:9;:48::i;:::-;33413:105;32840:689;;32835:3;;;;;;;32796:733;;;;32749:787;32691:848;32616:923;;:::o;32358:248::-;32445:9;32440:159;32464:5;:12;;;;32460:1;:16;32440:159;;;32525:1;32502:19;32512:5;32518:1;32512:8;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32502:9;:19::i;:::-;:24;32498:90;;32547:25;32560:5;32566:1;32560:8;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32570:1;32547:12;:25::i;:::-;32498:90;32478:3;;;;;;;32440:159;;;;32358:248;:::o;10735:191::-;10809:16;10828:6;;;;;;;;;;;10809:25;;10854:8;10845:6;;:17;;;;;;;;;;;;;;;;;;10909:8;10878:40;;10899:8;10878:40;;;;;;;;;;;;10798:128;10735:191;:::o;27522:443::-;27652:1;27635:19;;:5;:19;;;27631:91;;27707:1;27678:32;;;;;;;;;;;:::i;:::-;;;;;;;;27631:91;27755:1;27736:21;;:7;:21;;;27732:92;;27809:1;27781:31;;;;;;;;;;;:::i;:::-;;;;;;;;27732:92;27864:5;27834:11;:18;27846:5;27834:18;;;;;;;;;;;;;;;:27;27853:7;27834:27;;;;;;;;;;;;;;;:35;;;;27884:9;27880:78;;;27931:7;27915:31;;27924:5;27915:31;;;27940:5;27915:31;;;;;;:::i;:::-;;;;;;;;27880:78;27522:443;;;;:::o;23108:316::-;23216:1;23200:18;;:4;:18;;;23196:88;;23269:1;23242:30;;;;;;;;;;;:::i;:::-;;;;;;;;23196:88;23312:1;23298:16;;:2;:16;;;23294:88;;23367:1;23338:32;;;;;;;;;;;:::i;:::-;;;;;;;;23294:88;23392:24;23400:4;23406:2;23410:5;23392:7;:24::i;:::-;23108:316;;;:::o;13203:130::-;13267:8;:6;:8::i;:::-;13262:64;;13299:15;;;;;;;;;;;;;;13262:64;13203:130::o;33827:147::-;33936:30;33950:4;33956:2;33960:5;33936:13;:30::i;:::-;33827:147;;;:::o;12994:132::-;13060:8;:6;:8::i;:::-;13056:63;;;13092:15;;;;;;;;;;;;;;13056:63;12994:132::o;33553:256::-;33632:7;33648:20;33671:1;33648:24;;33684:9;33679:97;33703:5;:12;;;;33699:1;:16;33679:97;;;33749:19;33759:5;33765:1;33759:8;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33749:9;:19::i;:::-;33733:35;;;;;:::i;:::-;;;33717:3;;;;;;;33679:97;;;;33789:12;33782:19;;;33553:256;;;:::o;29848:147::-;12440:19;:17;:19::i;:::-;29957:30:::1;29971:4;29977:2;29981:5;29957:13;:30::i;:::-;29848:147:::0;;;:::o;23748:1135::-;23854:1;23838:18;;:4;:18;;;23834:552;;23992:5;23976:12;;:21;;;;;;;:::i;:::-;;;;;;;;23834:552;;;24030:19;24052:9;:15;24062:4;24052:15;;;;;;;;;;;;;;;;24030:37;;24100:5;24086:11;:19;24082:117;;;24158:4;24164:11;24177:5;24133:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;24082:117;24354:5;24340:11;:19;24322:9;:15;24332:4;24322:15;;;;;;;;;;;;;;;:37;;;;24015:371;23834:552;24416:1;24402:16;;:2;:16;;;24398:435;;24584:5;24568:12;;:21;;;;;;;;;;;24398:435;;;24801:5;24784:9;:13;24794:2;24784:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;24398:435;24865:2;24850:25;;24859:4;24850:25;;;24869:5;24850:25;;;;;;:::i;:::-;;;;;;;;23748:1135;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:118::-;3868:24;3886:5;3868:24;:::i;:::-;3863:3;3856:37;3781:118;;:::o;3905:222::-;3998:4;4036:2;4025:9;4021:18;4013:26;;4049:71;4117:1;4106:9;4102:17;4093:6;4049:71;:::i;:::-;3905:222;;;;:::o;4133:619::-;4210:6;4218;4226;4275:2;4263:9;4254:7;4250:23;4246:32;4243:119;;;4281:79;;:::i;:::-;4243:119;4401:1;4426:53;4471:7;4462:6;4451:9;4447:22;4426:53;:::i;:::-;4416:63;;4372:117;4528:2;4554:53;4599:7;4590:6;4579:9;4575:22;4554:53;:::i;:::-;4544:63;;4499:118;4656:2;4682:53;4727:7;4718:6;4707:9;4703:22;4682:53;:::i;:::-;4672:63;;4627:118;4133:619;;;;;:::o;4758:86::-;4793:7;4833:4;4826:5;4822:16;4811:27;;4758:86;;;:::o;4850:112::-;4933:22;4949:5;4933:22;:::i;:::-;4928:3;4921:35;4850:112;;:::o;4968:214::-;5057:4;5095:2;5084:9;5080:18;5072:26;;5108:67;5172:1;5161:9;5157:17;5148:6;5108:67;:::i;:::-;4968:214;;;;:::o;5188:118::-;5259:22;5275:5;5259:22;:::i;:::-;5252:5;5249:33;5239:61;;5296:1;5293;5286:12;5239:61;5188:118;:::o;5312:135::-;5356:5;5394:6;5381:20;5372:29;;5410:31;5435:5;5410:31;:::i;:::-;5312:135;;;;:::o;5453:470::-;5519:6;5527;5576:2;5564:9;5555:7;5551:23;5547:32;5544:119;;;5582:79;;:::i;:::-;5544:119;5702:1;5727:53;5772:7;5763:6;5752:9;5748:22;5727:53;:::i;:::-;5717:63;;5673:117;5829:2;5855:51;5898:7;5889:6;5878:9;5874:22;5855:51;:::i;:::-;5845:61;;5800:116;5453:470;;;;;:::o;5929:329::-;5988:6;6037:2;6025:9;6016:7;6012:23;6008:32;6005:119;;;6043:79;;:::i;:::-;6005:119;6163:1;6188:53;6233:7;6224:6;6213:9;6209:22;6188:53;:::i;:::-;6178:63;;6134:117;5929:329;;;;:::o;6264:118::-;6351:24;6369:5;6351:24;:::i;:::-;6346:3;6339:37;6264:118;;:::o;6388:222::-;6481:4;6519:2;6508:9;6504:18;6496:26;;6532:71;6600:1;6589:9;6585:17;6576:6;6532:71;:::i;:::-;6388:222;;;;:::o;6616:474::-;6684:6;6692;6741:2;6729:9;6720:7;6716:23;6712:32;6709:119;;;6747:79;;:::i;:::-;6709:119;6867:1;6892:53;6937:7;6928:6;6917:9;6913:22;6892:53;:::i;:::-;6882:63;;6838:117;6994:2;7020:53;7065:7;7056:6;7045:9;7041:22;7020:53;:::i;:::-;7010:63;;6965:118;6616:474;;;;;:::o;7096:180::-;7144:77;7141:1;7134:88;7241:4;7238:1;7231:15;7265:4;7262:1;7255:15;7282:320;7326:6;7363:1;7357:4;7353:12;7343:22;;7410:1;7404:4;7400:12;7431:18;7421:81;;7487:4;7479:6;7475:17;7465:27;;7421:81;7549:2;7541:6;7538:14;7518:18;7515:38;7512:84;;7568:18;;:::i;:::-;7512:84;7333:269;7282:320;;;:::o;7608:175::-;7748:27;7744:1;7736:6;7732:14;7725:51;7608:175;:::o;7789:366::-;7931:3;7952:67;8016:2;8011:3;7952:67;:::i;:::-;7945:74;;8028:93;8117:3;8028:93;:::i;:::-;8146:2;8141:3;8137:12;8130:19;;7789:366;;;:::o;8161:419::-;8327:4;8365:2;8354:9;8350:18;8342:26;;8414:9;8408:4;8404:20;8400:1;8389:9;8385:17;8378:47;8442:131;8568:4;8442:131;:::i;:::-;8434:139;;8161:419;;;:::o;8586:182::-;8726:34;8722:1;8714:6;8710:14;8703:58;8586:182;:::o;8774:366::-;8916:3;8937:67;9001:2;8996:3;8937:67;:::i;:::-;8930:74;;9013:93;9102:3;9013:93;:::i;:::-;9131:2;9126:3;9122:12;9115:19;;8774:366;;;:::o;9146:419::-;9312:4;9350:2;9339:9;9335:18;9327:26;;9399:9;9393:4;9389:20;9385:1;9374:9;9370:17;9363:47;9427:131;9553:4;9427:131;:::i;:::-;9419:139;;9146:419;;;:::o;9571:179::-;9711:31;9707:1;9699:6;9695:14;9688:55;9571:179;:::o;9756:366::-;9898:3;9919:67;9983:2;9978:3;9919:67;:::i;:::-;9912:74;;9995:93;10084:3;9995:93;:::i;:::-;10113:2;10108:3;10104:12;10097:19;;9756:366;;;:::o;10128:419::-;10294:4;10332:2;10321:9;10317:18;10309:26;;10381:9;10375:4;10371:20;10367:1;10356:9;10352:17;10345:47;10409:131;10535:4;10409:131;:::i;:::-;10401:139;;10128:419;;;:::o;10553:170::-;10693:22;10689:1;10681:6;10677:14;10670:46;10553:170;:::o;10729:366::-;10871:3;10892:67;10956:2;10951:3;10892:67;:::i;:::-;10885:74;;10968:93;11057:3;10968:93;:::i;:::-;11086:2;11081:3;11077:12;11070:19;;10729:366;;;:::o;11101:419::-;11267:4;11305:2;11294:9;11290:18;11282:26;;11354:9;11348:4;11344:20;11340:1;11329:9;11325:17;11318:47;11382:131;11508:4;11382:131;:::i;:::-;11374:139;;11101:419;;;:::o;11526:179::-;11666:31;11662:1;11654:6;11650:14;11643:55;11526:179;:::o;11711:366::-;11853:3;11874:67;11938:2;11933:3;11874:67;:::i;:::-;11867:74;;11950:93;12039:3;11950:93;:::i;:::-;12068:2;12063:3;12059:12;12052:19;;11711:366;;;:::o;12083:419::-;12249:4;12287:2;12276:9;12272:18;12264:26;;12336:9;12330:4;12326:20;12322:1;12311:9;12307:17;12300:47;12364:131;12490:4;12364:131;:::i;:::-;12356:139;;12083:419;;;:::o;12508:180::-;12556:77;12553:1;12546:88;12653:4;12650:1;12643:15;12677:4;12674:1;12667:15;12694:410;12734:7;12757:20;12775:1;12757:20;:::i;:::-;12752:25;;12791:20;12809:1;12791:20;:::i;:::-;12786:25;;12846:1;12843;12839:9;12868:30;12886:11;12868:30;:::i;:::-;12857:41;;13047:1;13038:7;13034:15;13031:1;13028:22;13008:1;13001:9;12981:83;12958:139;;13077:18;;:::i;:::-;12958:139;12742:362;12694:410;;;;:::o;13110:180::-;13158:77;13155:1;13148:88;13255:4;13252:1;13245:15;13279:4;13276:1;13269:15;13296:185;13336:1;13353:20;13371:1;13353:20;:::i;:::-;13348:25;;13387:20;13405:1;13387:20;:::i;:::-;13382:25;;13426:1;13416:35;;13431:18;;:::i;:::-;13416:35;13473:1;13470;13466:9;13461:14;;13296:185;;;;:::o;13487:171::-;13627:23;13623:1;13615:6;13611:14;13604:47;13487:171;:::o;13664:366::-;13806:3;13827:67;13891:2;13886:3;13827:67;:::i;:::-;13820:74;;13903:93;13992:3;13903:93;:::i;:::-;14021:2;14016:3;14012:12;14005:19;;13664:366;;;:::o;14036:419::-;14202:4;14240:2;14229:9;14225:18;14217:26;;14289:9;14283:4;14279:20;14275:1;14264:9;14260:17;14253:47;14317:131;14443:4;14317:131;:::i;:::-;14309:139;;14036:419;;;:::o;14461:174::-;14601:26;14597:1;14589:6;14585:14;14578:50;14461:174;:::o;14641:366::-;14783:3;14804:67;14868:2;14863:3;14804:67;:::i;:::-;14797:74;;14880:93;14969:3;14880:93;:::i;:::-;14998:2;14993:3;14989:12;14982:19;;14641:366;;;:::o;15013:419::-;15179:4;15217:2;15206:9;15202:18;15194:26;;15266:9;15260:4;15256:20;15252:1;15241:9;15237:17;15230:47;15294:131;15420:4;15294:131;:::i;:::-;15286:139;;15013:419;;;:::o;15438:180::-;15486:77;15483:1;15476:88;15583:4;15580:1;15573:15;15607:4;15604:1;15597:15;15624:194;15664:4;15684:20;15702:1;15684:20;:::i;:::-;15679:25;;15718:20;15736:1;15718:20;:::i;:::-;15713:25;;15762:1;15759;15755:9;15747:17;;15786:1;15780:4;15777:11;15774:37;;;15791:18;;:::i;:::-;15774:37;15624:194;;;;:::o;15824:180::-;15872:77;15869:1;15862:88;15969:4;15966:1;15959:15;15993:4;15990:1;15983:15;16010:442;16159:4;16197:2;16186:9;16182:18;16174:26;;16210:71;16278:1;16267:9;16263:17;16254:6;16210:71;:::i;:::-;16291:72;16359:2;16348:9;16344:18;16335:6;16291:72;:::i;:::-;16373;16441:2;16430:9;16426:18;16417:6;16373:72;:::i;:::-;16010:442;;;;;;:::o;16458:191::-;16498:3;16517:20;16535:1;16517:20;:::i;:::-;16512:25;;16551:20;16569:1;16551:20;:::i;:::-;16546:25;;16594:1;16591;16587:9;16580:16;;16615:3;16612:1;16609:10;16606:36;;;16622:18;;:::i;:::-;16606:36;16458:191;;;;:::o

Swarm Source

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