ETH Price: $3,468.21 (+2.18%)
Gas: 12 Gwei

Token

bitcoin (btc)
 

Overview

Max Total Supply

10,591,292.21766596 btc

Holders

1,383 ( 0.362%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 8 Decimals)

Balance
2,220.2388115 btc

Value
$0.00
0x65e7dfa1265ee1cf9c81a90937448bc006e977bf
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Bitcoin on Ethereum. A meme coin almost as old as Ethereum itself. Deployed November 2015.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
wrappedbitcoin

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 1 of 7: bitcoin.sol
/*
This contract facilitates the wrapping/unwrapping of the first ERC20 meme coin from 2015. Address: 0x1130547436810DB920FA73681c946feA15E9b758
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

import "ERC20.sol";
import "Ownable.sol";

interface btcToken {
    function balanceOf(address owner) external returns (uint256);
    function transfer(address to, uint256 value) external;
}

contract DropBox is Ownable(msg.sender) {
    function collect(uint256 value, btcToken btcInt) public onlyOwner {
        btcInt.transfer(owner(), value);
    }
}

contract wrappedbitcoin is ERC20 {

    event DropBoxCreated(address indexed owner);
    event Wrapped(uint256 indexed value, address indexed owner);
    event Unwrapped(uint256 indexed value, address indexed owner);

    btcToken btcInt = btcToken(0x1130547436810DB920FA73681c946feA15E9b758);

    mapping(address => address) public dropBoxes;

    constructor() ERC20("bitcoin", "btc") {}

    function createDropBox() public {
        require(dropBoxes[msg.sender] == address(0), "Drop box already exists.");

        dropBoxes[msg.sender] = address(new DropBox());
        
        emit DropBoxCreated(msg.sender);
    }
    function wrap(uint256 value) public {
        address dropBox = dropBoxes[msg.sender];

        require(dropBox != address(0), "You must create a drop box first."); 
        require(btcInt.balanceOf(dropBox) >= value, "Not enough btc in drop box.");

        DropBox(dropBox).collect(value, btcInt);
        _mint(msg.sender, value);
        
        emit Wrapped(value, msg.sender);
    }

    function unwrap(uint256 value) public {
        require(balanceOf(msg.sender) >= value, "Not enough tokens to unwrap.");

        btcInt.transfer(msg.sender, value);
        _burn(msg.sender, value);

        emit Unwrapped(value, msg.sender);
    }

    function decimals() public pure override returns (uint8) {
        return 8;
    }

}

/*
ABI to interact with the original btc token: 0x1130547436810DB920FA73681c946feA15E9b758

[
    {
        "constant": false,
        "inputs": [
            {
                "name": "_to",
                "type": "address"
            },
            {
                "name": "_value",
                "type": "uint256"
            }
        ],
        "name": "transfer",
        "outputs": [
            {
                "name": "",
                "type": "bool"
            }
        ],
        "payable": false,
        "stateMutability": "nonpayable",
        "type": "function"
    },

{
        "constant": true,
        "inputs": [
            {
                "name": "_owner",
                "type": "address"
            }
        ],
        "name": "balanceOf",
        "outputs": [
            {
                "name": "balance",
                "type": "uint256"
            }
        ],
        "payable": false,
        "stateMutability": "view",
        "type": "function"
    }

]
*/

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

pragma solidity ^0.8.20;

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

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

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

File 3 of 7: draft-IERC6093.sol
// SPDX-License-Identifier: MIT
// 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 4 of 7: ERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.20;

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

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

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

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

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

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

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

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * 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 {
        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 5 of 7: IERC20.sol
// SPDX-License-Identifier: MIT
// 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 6 of 7: IERC20Metadata.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.20;

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

/**
 * @dev Interface for the optional metadata functions from the 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 7 of 7: Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)

pragma solidity ^0.8.20;

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

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

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

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

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

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

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

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

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

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[],"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"},{"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":"owner","type":"address"}],"name":"DropBoxCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":true,"internalType":"address","name":"owner","type":"address"}],"name":"Unwrapped","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":true,"internalType":"address","name":"owner","type":"address"}],"name":"Wrapped","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"createDropBox","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"dropBoxes","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"uint256","name":"value","type":"uint256"}],"name":"unwrap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"wrap","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052731130547436810db920fa73681c946fea15e9b75860055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034801562000064575f80fd5b506040518060400160405280600781526020017f626974636f696e000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f62746300000000000000000000000000000000000000000000000000000000008152508160039081620000e2919062000361565b508060049081620000f4919062000361565b50505062000445565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200017957607f821691505b6020821081036200018f576200018e62000134565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620001f37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620001b6565b620001ff8683620001b6565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000249620002436200023d8462000217565b62000220565b62000217565b9050919050565b5f819050919050565b620002648362000229565b6200027c620002738262000250565b848454620001c2565b825550505050565b5f90565b6200029262000284565b6200029f81848462000259565b505050565b5b81811015620002c657620002ba5f8262000288565b600181019050620002a5565b5050565b601f8211156200031557620002df8162000195565b620002ea84620001a7565b81016020851015620002fa578190505b620003126200030985620001a7565b830182620002a4565b50505b505050565b5f82821c905092915050565b5f620003375f19846008026200031a565b1980831691505092915050565b5f62000351838362000326565b9150826002028217905092915050565b6200036c82620000fd565b67ffffffffffffffff81111562000388576200038762000107565b5b62000394825462000161565b620003a1828285620002ca565b5f60209050601f831160018114620003d7575f8415620003c2578287015190505b620003ce858262000344565b8655506200043d565b601f198416620003e78662000195565b5f5b828110156200041057848901518255600182019150602085019450602081019050620003e9565b868310156200043057848901516200042c601f89168262000326565b8355505b6001600288020188555050505b505050505050565b61202080620004535f395ff3fe608060405234801562000010575f80fd5b5060043610620000e0575f3560e01c806395d89b411162000097578063d6d2bb98116200006d578063d6d2bb981462000250578063dd62ed3e1462000286578063de0e9a3e14620002bc578063ea598cb014620002dc57620000e0565b806395d89b4114620001ec578063a9059cbb146200020e578063b8bdd4b2146200024457620000e0565b806306fdde0314620000e4578063095ea7b3146200010657806318160ddd146200013c57806323b872dd146200015e578063313ce567146200019457806370a0823114620001b6575b5f80fd5b620000ee620002fc565b604051620000fd919062001282565b60405180910390f35b6200012460048036038101906200011e919062001341565b62000394565b604051620001339190620013a2565b60405180910390f35b62000146620003ba565b604051620001559190620013ce565b60405180910390f35b6200017c6004803603810190620001769190620013e9565b620003c3565b6040516200018b9190620013a2565b60405180910390f35b6200019e620003f7565b604051620001ad91906200145f565b60405180910390f35b620001d46004803603810190620001ce91906200147a565b620003ff565b604051620001e39190620013ce565b60405180910390f35b620001f662000444565b60405162000205919062001282565b60405180910390f35b6200022c600480360381019062000226919062001341565b620004dc565b6040516200023b9190620013a2565b60405180910390f35b6200024e62000502565b005b6200026e60048036038101906200026891906200147a565b620006b7565b6040516200027d9190620014bb565b60405180910390f35b620002a460048036038101906200029e9190620014d6565b620006e7565b604051620002b39190620013ce565b60405180910390f35b620002da6004803603810190620002d491906200151b565b62000769565b005b620002fa6004803603810190620002f491906200151b565b62000899565b005b6060600380546200030d9062001578565b80601f01602080910402602001604051908101604052809291908181526020018280546200033b9062001578565b80156200038a5780601f1062000360576101008083540402835291602001916200038a565b820191905f5260205f20905b8154815290600101906020018083116200036c57829003601f168201915b5050505050905090565b5f80620003a062000b2f565b9050620003af81858562000b36565b600191505092915050565b5f600254905090565b5f80620003cf62000b2f565b9050620003de85828562000b4a565b620003eb85858562000be4565b60019150509392505050565b5f6008905090565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b606060048054620004559062001578565b80601f0160208091040260200160405190810160405280929190818152602001828054620004839062001578565b8015620004d25780601f10620004a857610100808354040283529160200191620004d2565b820191905f5260205f20905b815481529060010190602001808311620004b457829003601f168201915b5050505050905090565b5f80620004e862000b2f565b9050620004f781858562000be4565b600191505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff1660065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620005cf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005c690620015fa565b60405180910390fd5b604051620005dd90620011e0565b604051809103905ff080158015620005f7573d5f803e3d5ffd5b5060065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff167f2c601b1355d1a6cd1373df5a1e2460c77aedfbb5c16c66b47bb96b35462808e260405160405180910390a2565b6006602052805f5260405f205f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b806200077533620003ff565b1015620007b9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007b09062001668565b60405180910390fd5b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016200081792919062001688565b5f604051808303815f87803b1580156200082f575f80fd5b505af115801562000842573d5f803e3d5ffd5b5050505062000852338262000cdc565b3373ffffffffffffffffffffffffffffffffffffffff16817f1d27d1c62712f590d53fa9eb8bbf3a75d09503deae319bb9d99644339cb312e160405160405180910390a350565b5f60065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200096a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009619062001727565b60405180910390fd5b8160055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401620009c79190620014bb565b6020604051808303815f875af1158015620009e4573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000a0a91906200175d565b101562000a4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a4590620017db565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16638d3c100a8360055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b815260040162000aac92919062001862565b5f604051808303815f87803b15801562000ac4575f80fd5b505af115801562000ad7573d5f803e3d5ffd5b5050505062000ae7338362000d60565b3373ffffffffffffffffffffffffffffffffffffffff16827f9c307a39a47fdf1a019642a4e8a585ffe9894b5018226029887fe6d4241611bb60405160405180910390a35050565b5f33905090565b62000b45838383600162000de4565b505050565b5f62000b578484620006e7565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811462000bde578181101562000bcd578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040162000bc4939291906200188d565b60405180910390fd5b62000bdd84848484035f62000de4565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000c57575f6040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040162000c4e9190620014bb565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000cca575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040162000cc19190620014bb565b60405180910390fd5b62000cd783838362000fbc565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000d4f575f6040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040162000d469190620014bb565b60405180910390fd5b62000d5c825f8362000fbc565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000dd3575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040162000dca9190620014bb565b60405180910390fd5b62000de05f838362000fbc565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160362000e57575f6040517fe602df0500000000000000000000000000000000000000000000000000000000815260040162000e4e9190620014bb565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000eca575f6040517f94280d6200000000000000000000000000000000000000000000000000000000815260040162000ec19190620014bb565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550801562000fb6578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405162000fad9190620013ce565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362001010578060025f828254620010039190620018f5565b92505081905550620010e1565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156200109c578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040162001093939291906200188d565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200112a578060025f828254039250508190555062001174565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620011d39190620013ce565b60405180910390a3505050565b6106bb806200193083390190565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015620012275780820151818401526020810190506200120a565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6200124e82620011ee565b6200125a8185620011f8565b93506200126c81856020860162001208565b620012778162001232565b840191505092915050565b5f6020820190508181035f8301526200129c818462001242565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620012d382620012a8565b9050919050565b620012e581620012c7565b8114620012f0575f80fd5b50565b5f813590506200130381620012da565b92915050565b5f819050919050565b6200131d8162001309565b811462001328575f80fd5b50565b5f813590506200133b8162001312565b92915050565b5f80604083850312156200135a5762001359620012a4565b5b5f6200136985828601620012f3565b92505060206200137c858286016200132b565b9150509250929050565b5f8115159050919050565b6200139c8162001386565b82525050565b5f602082019050620013b75f83018462001391565b92915050565b620013c88162001309565b82525050565b5f602082019050620013e35f830184620013bd565b92915050565b5f805f60608486031215620014035762001402620012a4565b5b5f6200141286828701620012f3565b93505060206200142586828701620012f3565b925050604062001438868287016200132b565b9150509250925092565b5f60ff82169050919050565b620014598162001442565b82525050565b5f602082019050620014745f8301846200144e565b92915050565b5f60208284031215620014925762001491620012a4565b5b5f620014a184828501620012f3565b91505092915050565b620014b581620012c7565b82525050565b5f602082019050620014d05f830184620014aa565b92915050565b5f8060408385031215620014ef57620014ee620012a4565b5b5f620014fe85828601620012f3565b92505060206200151185828601620012f3565b9150509250929050565b5f60208284031215620015335762001532620012a4565b5b5f62001542848285016200132b565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200159057607f821691505b602082108103620015a657620015a56200154b565b5b50919050565b7f44726f7020626f7820616c7265616479206578697374732e00000000000000005f82015250565b5f620015e2601883620011f8565b9150620015ef82620015ac565b602082019050919050565b5f6020820190508181035f8301526200161381620015d4565b9050919050565b7f4e6f7420656e6f75676820746f6b656e7320746f20756e777261702e000000005f82015250565b5f62001650601c83620011f8565b91506200165d826200161a565b602082019050919050565b5f6020820190508181035f830152620016818162001642565b9050919050565b5f6040820190506200169d5f830185620014aa565b620016ac6020830184620013bd565b9392505050565b7f596f75206d7573742063726561746520612064726f7020626f782066697273745f8201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b5f6200170f602183620011f8565b91506200171c82620016b3565b604082019050919050565b5f6020820190508181035f830152620017408162001701565b9050919050565b5f81519050620017578162001312565b92915050565b5f60208284031215620017755762001774620012a4565b5b5f620017848482850162001747565b91505092915050565b7f4e6f7420656e6f7567682062746320696e2064726f7020626f782e00000000005f82015250565b5f620017c3601b83620011f8565b9150620017d0826200178d565b602082019050919050565b5f6020820190508181035f830152620017f481620017b5565b9050919050565b5f819050919050565b5f620018246200181e6200181884620012a8565b620017fb565b620012a8565b9050919050565b5f620018378262001804565b9050919050565b5f6200184a826200182b565b9050919050565b6200185c816200183e565b82525050565b5f604082019050620018775f830185620013bd565b62001886602083018462001851565b9392505050565b5f606082019050620018a25f830186620014aa565b620018b16020830185620013bd565b620018c06040830184620013bd565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f620019018262001309565b91506200190e8362001309565b9250828201905080821115620019295762001928620018c8565b5b9291505056fe608060405234801561000f575f80fd5b50335f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610081575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016100789190610196565b60405180910390fd5b6100908161009660201b60201c565b506101af565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61018082610157565b9050919050565b61019081610176565b82525050565b5f6020820190506101a95f830184610187565b92915050565b6104ff806101bc5f395ff3fe608060405234801561000f575f80fd5b506004361061004a575f3560e01c8063715018a61461004e5780638d3c100a146100585780638da5cb5b14610074578063f2fde38b14610092575b5f80fd5b6100566100ae565b005b610072600480360381019061006d91906103d8565b6100c1565b005b61007c61013c565b6040516100899190610425565b60405180910390f35b6100ac60048036038101906100a79190610468565b610163565b005b6100b66101e7565b6100bf5f61026e565b565b6100c96101e7565b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6100ed61013c565b846040518363ffffffff1660e01b815260040161010b9291906104a2565b5f604051808303815f87803b158015610122575f80fd5b505af1158015610134573d5f803e3d5ffd5b505050505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61016b6101e7565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036101db575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016101d29190610425565b60405180910390fd5b6101e48161026e565b50565b6101ef61032f565b73ffffffffffffffffffffffffffffffffffffffff1661020d61013c565b73ffffffffffffffffffffffffffffffffffffffff161461026c5761023061032f565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016102639190610425565b60405180910390fd5b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f33905090565b5f80fd5b5f819050919050565b61034c8161033a565b8114610356575f80fd5b50565b5f8135905061036781610343565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6103968261036d565b9050919050565b5f6103a78261038c565b9050919050565b6103b78161039d565b81146103c1575f80fd5b50565b5f813590506103d2816103ae565b92915050565b5f80604083850312156103ee576103ed610336565b5b5f6103fb85828601610359565b925050602061040c858286016103c4565b9150509250929050565b61041f8161038c565b82525050565b5f6020820190506104385f830184610416565b92915050565b6104478161038c565b8114610451575f80fd5b50565b5f813590506104628161043e565b92915050565b5f6020828403121561047d5761047c610336565b5b5f61048a84828501610454565b91505092915050565b61049c8161033a565b82525050565b5f6040820190506104b55f830185610416565b6104c26020830184610493565b939250505056fea264697066735822122077e38fbfd81d77235d23459ae20ef534b66dd71cc6e3c881b2d4ccc9a04f969564736f6c63430008140033a2646970667358221220495c6ad35bf0f12351fd9dce10709934086de8d16b94bc61b0f230bb88c0ad3b64736f6c63430008140033

Deployed Bytecode

0x608060405234801562000010575f80fd5b5060043610620000e0575f3560e01c806395d89b411162000097578063d6d2bb98116200006d578063d6d2bb981462000250578063dd62ed3e1462000286578063de0e9a3e14620002bc578063ea598cb014620002dc57620000e0565b806395d89b4114620001ec578063a9059cbb146200020e578063b8bdd4b2146200024457620000e0565b806306fdde0314620000e4578063095ea7b3146200010657806318160ddd146200013c57806323b872dd146200015e578063313ce567146200019457806370a0823114620001b6575b5f80fd5b620000ee620002fc565b604051620000fd919062001282565b60405180910390f35b6200012460048036038101906200011e919062001341565b62000394565b604051620001339190620013a2565b60405180910390f35b62000146620003ba565b604051620001559190620013ce565b60405180910390f35b6200017c6004803603810190620001769190620013e9565b620003c3565b6040516200018b9190620013a2565b60405180910390f35b6200019e620003f7565b604051620001ad91906200145f565b60405180910390f35b620001d46004803603810190620001ce91906200147a565b620003ff565b604051620001e39190620013ce565b60405180910390f35b620001f662000444565b60405162000205919062001282565b60405180910390f35b6200022c600480360381019062000226919062001341565b620004dc565b6040516200023b9190620013a2565b60405180910390f35b6200024e62000502565b005b6200026e60048036038101906200026891906200147a565b620006b7565b6040516200027d9190620014bb565b60405180910390f35b620002a460048036038101906200029e9190620014d6565b620006e7565b604051620002b39190620013ce565b60405180910390f35b620002da6004803603810190620002d491906200151b565b62000769565b005b620002fa6004803603810190620002f491906200151b565b62000899565b005b6060600380546200030d9062001578565b80601f01602080910402602001604051908101604052809291908181526020018280546200033b9062001578565b80156200038a5780601f1062000360576101008083540402835291602001916200038a565b820191905f5260205f20905b8154815290600101906020018083116200036c57829003601f168201915b5050505050905090565b5f80620003a062000b2f565b9050620003af81858562000b36565b600191505092915050565b5f600254905090565b5f80620003cf62000b2f565b9050620003de85828562000b4a565b620003eb85858562000be4565b60019150509392505050565b5f6008905090565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b606060048054620004559062001578565b80601f0160208091040260200160405190810160405280929190818152602001828054620004839062001578565b8015620004d25780601f10620004a857610100808354040283529160200191620004d2565b820191905f5260205f20905b815481529060010190602001808311620004b457829003601f168201915b5050505050905090565b5f80620004e862000b2f565b9050620004f781858562000be4565b600191505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff1660065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620005cf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005c690620015fa565b60405180910390fd5b604051620005dd90620011e0565b604051809103905ff080158015620005f7573d5f803e3d5ffd5b5060065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff167f2c601b1355d1a6cd1373df5a1e2460c77aedfbb5c16c66b47bb96b35462808e260405160405180910390a2565b6006602052805f5260405f205f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b806200077533620003ff565b1015620007b9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007b09062001668565b60405180910390fd5b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016200081792919062001688565b5f604051808303815f87803b1580156200082f575f80fd5b505af115801562000842573d5f803e3d5ffd5b5050505062000852338262000cdc565b3373ffffffffffffffffffffffffffffffffffffffff16817f1d27d1c62712f590d53fa9eb8bbf3a75d09503deae319bb9d99644339cb312e160405160405180910390a350565b5f60065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200096a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009619062001727565b60405180910390fd5b8160055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401620009c79190620014bb565b6020604051808303815f875af1158015620009e4573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000a0a91906200175d565b101562000a4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a4590620017db565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16638d3c100a8360055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b815260040162000aac92919062001862565b5f604051808303815f87803b15801562000ac4575f80fd5b505af115801562000ad7573d5f803e3d5ffd5b5050505062000ae7338362000d60565b3373ffffffffffffffffffffffffffffffffffffffff16827f9c307a39a47fdf1a019642a4e8a585ffe9894b5018226029887fe6d4241611bb60405160405180910390a35050565b5f33905090565b62000b45838383600162000de4565b505050565b5f62000b578484620006e7565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811462000bde578181101562000bcd578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040162000bc4939291906200188d565b60405180910390fd5b62000bdd84848484035f62000de4565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000c57575f6040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040162000c4e9190620014bb565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000cca575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040162000cc19190620014bb565b60405180910390fd5b62000cd783838362000fbc565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000d4f575f6040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040162000d469190620014bb565b60405180910390fd5b62000d5c825f8362000fbc565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000dd3575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040162000dca9190620014bb565b60405180910390fd5b62000de05f838362000fbc565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160362000e57575f6040517fe602df0500000000000000000000000000000000000000000000000000000000815260040162000e4e9190620014bb565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000eca575f6040517f94280d6200000000000000000000000000000000000000000000000000000000815260040162000ec19190620014bb565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550801562000fb6578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405162000fad9190620013ce565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362001010578060025f828254620010039190620018f5565b92505081905550620010e1565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156200109c578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040162001093939291906200188d565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200112a578060025f828254039250508190555062001174565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620011d39190620013ce565b60405180910390a3505050565b6106bb806200193083390190565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015620012275780820151818401526020810190506200120a565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6200124e82620011ee565b6200125a8185620011f8565b93506200126c81856020860162001208565b620012778162001232565b840191505092915050565b5f6020820190508181035f8301526200129c818462001242565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620012d382620012a8565b9050919050565b620012e581620012c7565b8114620012f0575f80fd5b50565b5f813590506200130381620012da565b92915050565b5f819050919050565b6200131d8162001309565b811462001328575f80fd5b50565b5f813590506200133b8162001312565b92915050565b5f80604083850312156200135a5762001359620012a4565b5b5f6200136985828601620012f3565b92505060206200137c858286016200132b565b9150509250929050565b5f8115159050919050565b6200139c8162001386565b82525050565b5f602082019050620013b75f83018462001391565b92915050565b620013c88162001309565b82525050565b5f602082019050620013e35f830184620013bd565b92915050565b5f805f60608486031215620014035762001402620012a4565b5b5f6200141286828701620012f3565b93505060206200142586828701620012f3565b925050604062001438868287016200132b565b9150509250925092565b5f60ff82169050919050565b620014598162001442565b82525050565b5f602082019050620014745f8301846200144e565b92915050565b5f60208284031215620014925762001491620012a4565b5b5f620014a184828501620012f3565b91505092915050565b620014b581620012c7565b82525050565b5f602082019050620014d05f830184620014aa565b92915050565b5f8060408385031215620014ef57620014ee620012a4565b5b5f620014fe85828601620012f3565b92505060206200151185828601620012f3565b9150509250929050565b5f60208284031215620015335762001532620012a4565b5b5f62001542848285016200132b565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200159057607f821691505b602082108103620015a657620015a56200154b565b5b50919050565b7f44726f7020626f7820616c7265616479206578697374732e00000000000000005f82015250565b5f620015e2601883620011f8565b9150620015ef82620015ac565b602082019050919050565b5f6020820190508181035f8301526200161381620015d4565b9050919050565b7f4e6f7420656e6f75676820746f6b656e7320746f20756e777261702e000000005f82015250565b5f62001650601c83620011f8565b91506200165d826200161a565b602082019050919050565b5f6020820190508181035f830152620016818162001642565b9050919050565b5f6040820190506200169d5f830185620014aa565b620016ac6020830184620013bd565b9392505050565b7f596f75206d7573742063726561746520612064726f7020626f782066697273745f8201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b5f6200170f602183620011f8565b91506200171c82620016b3565b604082019050919050565b5f6020820190508181035f830152620017408162001701565b9050919050565b5f81519050620017578162001312565b92915050565b5f60208284031215620017755762001774620012a4565b5b5f620017848482850162001747565b91505092915050565b7f4e6f7420656e6f7567682062746320696e2064726f7020626f782e00000000005f82015250565b5f620017c3601b83620011f8565b9150620017d0826200178d565b602082019050919050565b5f6020820190508181035f830152620017f481620017b5565b9050919050565b5f819050919050565b5f620018246200181e6200181884620012a8565b620017fb565b620012a8565b9050919050565b5f620018378262001804565b9050919050565b5f6200184a826200182b565b9050919050565b6200185c816200183e565b82525050565b5f604082019050620018775f830185620013bd565b62001886602083018462001851565b9392505050565b5f606082019050620018a25f830186620014aa565b620018b16020830185620013bd565b620018c06040830184620013bd565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f620019018262001309565b91506200190e8362001309565b9250828201905080821115620019295762001928620018c8565b5b9291505056fe608060405234801561000f575f80fd5b50335f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610081575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016100789190610196565b60405180910390fd5b6100908161009660201b60201c565b506101af565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61018082610157565b9050919050565b61019081610176565b82525050565b5f6020820190506101a95f830184610187565b92915050565b6104ff806101bc5f395ff3fe608060405234801561000f575f80fd5b506004361061004a575f3560e01c8063715018a61461004e5780638d3c100a146100585780638da5cb5b14610074578063f2fde38b14610092575b5f80fd5b6100566100ae565b005b610072600480360381019061006d91906103d8565b6100c1565b005b61007c61013c565b6040516100899190610425565b60405180910390f35b6100ac60048036038101906100a79190610468565b610163565b005b6100b66101e7565b6100bf5f61026e565b565b6100c96101e7565b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6100ed61013c565b846040518363ffffffff1660e01b815260040161010b9291906104a2565b5f604051808303815f87803b158015610122575f80fd5b505af1158015610134573d5f803e3d5ffd5b505050505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61016b6101e7565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036101db575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016101d29190610425565b60405180910390fd5b6101e48161026e565b50565b6101ef61032f565b73ffffffffffffffffffffffffffffffffffffffff1661020d61013c565b73ffffffffffffffffffffffffffffffffffffffff161461026c5761023061032f565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016102639190610425565b60405180910390fd5b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f33905090565b5f80fd5b5f819050919050565b61034c8161033a565b8114610356575f80fd5b50565b5f8135905061036781610343565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6103968261036d565b9050919050565b5f6103a78261038c565b9050919050565b6103b78161039d565b81146103c1575f80fd5b50565b5f813590506103d2816103ae565b92915050565b5f80604083850312156103ee576103ed610336565b5b5f6103fb85828601610359565b925050602061040c858286016103c4565b9150509250929050565b61041f8161038c565b82525050565b5f6020820190506104385f830184610416565b92915050565b6104478161038c565b8114610451575f80fd5b50565b5f813590506104628161043e565b92915050565b5f6020828403121561047d5761047c610336565b5b5f61048a84828501610454565b91505092915050565b61049c8161033a565b82525050565b5f6040820190506104b55f830185610416565b6104c26020830184610493565b939250505056fea264697066735822122077e38fbfd81d77235d23459ae20ef534b66dd71cc6e3c881b2d4ccc9a04f969564736f6c63430008140033a2646970667358221220495c6ad35bf0f12351fd9dce10709934086de8d16b94bc61b0f230bb88c0ad3b64736f6c63430008140033

Deployed Bytecode Sourcemap

584:1408:5:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2038:89:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4257:186;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3108:97;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5003:244;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1903:84:5;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3263:116:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2240:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3574:178;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;992:234:5;;;:::i;:::-;;891:44;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3810:140:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1639:256:5;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1232:399;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2038:89:1;2083:13;2115:5;2108:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2038:89;:::o;4257:186::-;4330:4;4346:13;4362:12;:10;:12::i;:::-;4346:28;;4384:31;4393:5;4400:7;4409:5;4384:8;:31::i;:::-;4432:4;4425:11;;;4257:186;;;;:::o;3108:97::-;3160:7;3186:12;;3179:19;;3108:97;:::o;5003:244::-;5090:4;5106:15;5124:12;:10;:12::i;:::-;5106:30;;5146:37;5162:4;5168:7;5177:5;5146:15;:37::i;:::-;5193:26;5203:4;5209:2;5213:5;5193:9;:26::i;:::-;5236:4;5229:11;;;5003:244;;;;;:::o;1903:84:5:-;1953:5;1978:1;1971:8;;1903:84;:::o;3263:116:1:-;3328:7;3354:9;:18;3364:7;3354:18;;;;;;;;;;;;;;;;3347:25;;3263:116;;;:::o;2240:93::-;2287:13;2319:7;2312:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2240:93;:::o;3574:178::-;3643:4;3659:13;3675:12;:10;:12::i;:::-;3659:28;;3697:27;3707:5;3714:2;3718:5;3697:9;:27::i;:::-;3741:4;3734:11;;;3574:178;;;;:::o;992:234:5:-;1076:1;1043:35;;:9;:21;1053:10;1043:21;;;;;;;;;;;;;;;;;;;;;;;;;:35;;;1035:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;1152:13;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;1120:9;:21;1130:10;1120:21;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;1207:10;1192:26;;;;;;;;;;;;992:234::o;891:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;3810:140:1:-;3890:7;3916:11;:18;3928:5;3916:18;;;;;;;;;;;;;;;:27;3935:7;3916:27;;;;;;;;;;;;;;;;3909:34;;3810:140;;;;:::o;1639:256:5:-;1721:5;1696:21;1706:10;1696:9;:21::i;:::-;:30;;1688:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;1772:6;;;;;;;;;;;:15;;;1788:10;1800:5;1772:34;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1817:24;1823:10;1835:5;1817;:24::i;:::-;1876:10;1859:28;;1869:5;1859:28;;;;;;;;;;1639:256;:::o;1232:399::-;1279:15;1297:9;:21;1307:10;1297:21;;;;;;;;;;;;;;;;;;;;;;;;;1279:39;;1358:1;1339:21;;:7;:21;;;1331:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;1447:5;1418:6;;;;;;;;;;;:16;;;1435:7;1418:25;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:34;;1410:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;1505:7;1497:24;;;1522:5;1529:6;;;;;;;;;;;1497:39;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1547:24;1553:10;1565:5;1547;:24::i;:::-;1612:10;1597:26;;1605:5;1597:26;;;;;;;;;;1268:363;1232:399;:::o;656:96:0:-;709:7;735:10;728:17;;656:96;:::o;8953:128:1:-;9037:37;9046:5;9053:7;9062:5;9069:4;9037:8;:37::i;:::-;8953:128;;;:::o;10627:477::-;10726:24;10753:25;10763:5;10770:7;10753:9;:25::i;:::-;10726:52;;10812:17;10792:16;:37;10788:310;;10868:5;10849:16;:24;10845:130;;;10927:7;10936:16;10954:5;10900:60;;;;;;;;;;;;;:::i;:::-;;;;;;;;10845:130;11016:57;11025:5;11032:7;11060:5;11041:16;:24;11067:5;11016:8;:57::i;:::-;10788:310;10716:388;10627:477;;;:::o;5620:300::-;5719:1;5703:18;;:4;:18;;;5699:86;;5771:1;5744:30;;;;;;;;;;;:::i;:::-;;;;;;;;5699:86;5812:1;5798:16;;:2;:16;;;5794:86;;5866:1;5837:32;;;;;;;;;;;:::i;:::-;;;;;;;;5794:86;5889:24;5897:4;5903:2;5907:5;5889:7;:24::i;:::-;5620:300;;;:::o;8211:206::-;8300:1;8281:21;;:7;:21;;;8277:89;;8352:1;8325:30;;;;;;;;;;;:::i;:::-;;;;;;;;8277:89;8375:35;8383:7;8400:1;8404:5;8375:7;:35::i;:::-;8211:206;;:::o;7685:208::-;7774:1;7755:21;;:7;:21;;;7751:91;;7828:1;7799:32;;;;;;;;;;;:::i;:::-;;;;;;;;7751:91;7851:35;7867:1;7871:7;7880:5;7851:7;:35::i;:::-;7685:208;;:::o;9913:432::-;10042:1;10025:19;;:5;:19;;;10021:89;;10096:1;10067:32;;;;;;;;;;;:::i;:::-;;;;;;;;10021:89;10142:1;10123:21;;:7;:21;;;10119:90;;10195:1;10167:31;;;;;;;;;;;:::i;:::-;;;;;;;;10119:90;10248:5;10218:11;:18;10230:5;10218:18;;;;;;;;;;;;;;;:27;10237:7;10218:27;;;;;;;;;;;;;;;:35;;;;10267:9;10263:76;;;10313:7;10297:31;;10306:5;10297:31;;;10322:5;10297:31;;;;;;:::i;:::-;;;;;;;;10263:76;9913:432;;;;:::o;6235:1107::-;6340:1;6324:18;;:4;:18;;;6320:540;;6476:5;6460:12;;:21;;;;;;;:::i;:::-;;;;;;;;6320:540;;;6512:19;6534:9;:15;6544:4;6534:15;;;;;;;;;;;;;;;;6512:37;;6581:5;6567:11;:19;6563:115;;;6638:4;6644:11;6657:5;6613:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;6563:115;6830:5;6816:11;:19;6798:9;:15;6808:4;6798:15;;;;;;;;;;;;;;;:37;;;;6498:362;6320:540;6888:1;6874:16;;:2;:16;;;6870:425;;7053:5;7037:12;;:21;;;;;;;;;;;6870:425;;;7265:5;7248:9;:13;7258:2;7248:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;6870:425;7325:2;7310:25;;7319:4;7310:25;;;7329:5;7310:25;;;;;;:::i;:::-;;;;;;;;6235:1107;;;:::o;-1:-1:-1:-;;;;;;;;:::o;7:99:7:-;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:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:619::-;3875:6;3883;3891;3940:2;3928:9;3919:7;3915:23;3911:32;3908:119;;;3946:79;;:::i;:::-;3908:119;4066:1;4091:53;4136:7;4127:6;4116:9;4112:22;4091:53;:::i;:::-;4081:63;;4037:117;4193:2;4219:53;4264:7;4255:6;4244:9;4240:22;4219:53;:::i;:::-;4209:63;;4164:118;4321:2;4347:53;4392:7;4383:6;4372:9;4368:22;4347:53;:::i;:::-;4337:63;;4292:118;3798:619;;;;;:::o;4423:86::-;4458:7;4498:4;4491:5;4487:16;4476:27;;4423:86;;;:::o;4515:112::-;4598:22;4614:5;4598:22;:::i;:::-;4593:3;4586:35;4515:112;;:::o;4633:214::-;4722:4;4760:2;4749:9;4745:18;4737:26;;4773:67;4837:1;4826:9;4822:17;4813:6;4773:67;:::i;:::-;4633:214;;;;:::o;4853:329::-;4912:6;4961:2;4949:9;4940:7;4936:23;4932:32;4929:119;;;4967:79;;:::i;:::-;4929:119;5087:1;5112:53;5157:7;5148:6;5137:9;5133:22;5112:53;:::i;:::-;5102:63;;5058:117;4853:329;;;;:::o;5188:118::-;5275:24;5293:5;5275:24;:::i;:::-;5270:3;5263:37;5188:118;;:::o;5312:222::-;5405:4;5443:2;5432:9;5428:18;5420:26;;5456:71;5524:1;5513:9;5509:17;5500:6;5456:71;:::i;:::-;5312:222;;;;:::o;5540:474::-;5608:6;5616;5665:2;5653:9;5644:7;5640:23;5636:32;5633:119;;;5671:79;;:::i;:::-;5633:119;5791:1;5816:53;5861:7;5852:6;5841:9;5837:22;5816:53;:::i;:::-;5806:63;;5762:117;5918:2;5944:53;5989:7;5980:6;5969:9;5965:22;5944:53;:::i;:::-;5934:63;;5889:118;5540:474;;;;;:::o;6020:329::-;6079:6;6128:2;6116:9;6107:7;6103:23;6099:32;6096:119;;;6134:79;;:::i;:::-;6096:119;6254:1;6279:53;6324:7;6315:6;6304:9;6300:22;6279:53;:::i;:::-;6269:63;;6225:117;6020:329;;;;:::o;6355:180::-;6403:77;6400:1;6393:88;6500:4;6497:1;6490:15;6524:4;6521:1;6514:15;6541:320;6585:6;6622:1;6616:4;6612:12;6602:22;;6669:1;6663:4;6659:12;6690:18;6680:81;;6746:4;6738:6;6734:17;6724:27;;6680:81;6808:2;6800:6;6797:14;6777:18;6774:38;6771:84;;6827:18;;:::i;:::-;6771:84;6592:269;6541:320;;;:::o;6867:174::-;7007:26;7003:1;6995:6;6991:14;6984:50;6867:174;:::o;7047:366::-;7189:3;7210:67;7274:2;7269:3;7210:67;:::i;:::-;7203:74;;7286:93;7375:3;7286:93;:::i;:::-;7404:2;7399:3;7395:12;7388:19;;7047:366;;;:::o;7419:419::-;7585:4;7623:2;7612:9;7608:18;7600:26;;7672:9;7666:4;7662:20;7658:1;7647:9;7643:17;7636:47;7700:131;7826:4;7700:131;:::i;:::-;7692:139;;7419:419;;;:::o;7844:178::-;7984:30;7980:1;7972:6;7968:14;7961:54;7844:178;:::o;8028:366::-;8170:3;8191:67;8255:2;8250:3;8191:67;:::i;:::-;8184:74;;8267:93;8356:3;8267:93;:::i;:::-;8385:2;8380:3;8376:12;8369:19;;8028:366;;;:::o;8400:419::-;8566:4;8604:2;8593:9;8589:18;8581:26;;8653:9;8647:4;8643:20;8639:1;8628:9;8624:17;8617:47;8681:131;8807:4;8681:131;:::i;:::-;8673:139;;8400:419;;;:::o;8825:332::-;8946:4;8984:2;8973:9;8969:18;8961:26;;8997:71;9065:1;9054:9;9050:17;9041:6;8997:71;:::i;:::-;9078:72;9146:2;9135:9;9131:18;9122:6;9078:72;:::i;:::-;8825:332;;;;;:::o;9163:220::-;9303:34;9299:1;9291:6;9287:14;9280:58;9372:3;9367:2;9359:6;9355:15;9348:28;9163:220;:::o;9389:366::-;9531:3;9552:67;9616:2;9611:3;9552:67;:::i;:::-;9545:74;;9628:93;9717:3;9628:93;:::i;:::-;9746:2;9741:3;9737:12;9730:19;;9389:366;;;:::o;9761:419::-;9927:4;9965:2;9954:9;9950:18;9942:26;;10014:9;10008:4;10004:20;10000:1;9989:9;9985:17;9978:47;10042:131;10168:4;10042:131;:::i;:::-;10034:139;;9761:419;;;:::o;10186:143::-;10243:5;10274:6;10268:13;10259:22;;10290:33;10317:5;10290:33;:::i;:::-;10186:143;;;;:::o;10335:351::-;10405:6;10454:2;10442:9;10433:7;10429:23;10425:32;10422:119;;;10460:79;;:::i;:::-;10422:119;10580:1;10605:64;10661:7;10652:6;10641:9;10637:22;10605:64;:::i;:::-;10595:74;;10551:128;10335:351;;;;:::o;10692:177::-;10832:29;10828:1;10820:6;10816:14;10809:53;10692:177;:::o;10875:366::-;11017:3;11038:67;11102:2;11097:3;11038:67;:::i;:::-;11031:74;;11114:93;11203:3;11114:93;:::i;:::-;11232:2;11227:3;11223:12;11216:19;;10875:366;;;:::o;11247:419::-;11413:4;11451:2;11440:9;11436:18;11428:26;;11500:9;11494:4;11490:20;11486:1;11475:9;11471:17;11464:47;11528:131;11654:4;11528:131;:::i;:::-;11520:139;;11247:419;;;:::o;11672:60::-;11700:3;11721:5;11714:12;;11672:60;;;:::o;11738:142::-;11788:9;11821:53;11839:34;11848:24;11866:5;11848:24;:::i;:::-;11839:34;:::i;:::-;11821:53;:::i;:::-;11808:66;;11738:142;;;:::o;11886:126::-;11936:9;11969:37;12000:5;11969:37;:::i;:::-;11956:50;;11886:126;;;:::o;12018:142::-;12084:9;12117:37;12148:5;12117:37;:::i;:::-;12104:50;;12018:142;;;:::o;12166:163::-;12269:53;12316:5;12269:53;:::i;:::-;12264:3;12257:66;12166:163;;:::o;12335:364::-;12472:4;12510:2;12499:9;12495:18;12487:26;;12523:71;12591:1;12580:9;12576:17;12567:6;12523:71;:::i;:::-;12604:88;12688:2;12677:9;12673:18;12664:6;12604:88;:::i;:::-;12335:364;;;;;:::o;12705:442::-;12854:4;12892:2;12881:9;12877:18;12869:26;;12905:71;12973:1;12962:9;12958:17;12949:6;12905:71;:::i;:::-;12986:72;13054:2;13043:9;13039:18;13030:6;12986:72;:::i;:::-;13068;13136:2;13125:9;13121:18;13112:6;13068:72;:::i;:::-;12705:442;;;;;;:::o;13153:180::-;13201:77;13198:1;13191:88;13298:4;13295:1;13288:15;13322:4;13319:1;13312:15;13339:191;13379:3;13398:20;13416:1;13398:20;:::i;:::-;13393:25;;13432:20;13450:1;13432:20;:::i;:::-;13427:25;;13475:1;13472;13468:9;13461:16;;13496:3;13493:1;13490:10;13487:36;;;13503:18;;:::i;:::-;13487:36;13339:191;;;;:::o

Swarm Source

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