ETH Price: $3,450.43 (-1.06%)
Gas: 2 Gwei

Token

inBetweeners x Dolce&Gabbana Drip (Redeemed) (DGINBR)
 

Overview

Max Total Supply

0 DGINBR

Holders

175

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
29 DGINBR
0x9dcf2c97d88bb1e69ff6adcac15f2a2acc7c9070
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:
DGinBetweenersRedeemed

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-03-30
*/

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



pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

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



pragma solidity ^0.8.0;

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

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

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



pragma solidity ^0.8.0;


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

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

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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



pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol



pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

// File: @openzeppelin/contracts/utils/introspection/IERC165.sol



pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

// File: @openzeppelin/contracts/utils/introspection/ERC165.sol



pragma solidity ^0.8.0;


/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

// File: @openzeppelin/contracts/token/ERC721/IERC721.sol



pragma solidity ^0.8.0;


/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol



pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

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

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

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



pragma solidity ^0.8.0;








/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;

    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
    }

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overriden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(operator != _msgSender(), "ERC721: approve to caller");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId);

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

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

// File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Burnable.sol



pragma solidity ^0.8.0;



/**
 * @title ERC721 Burnable Token
 * @dev ERC721 Token that can be irreversibly burned (destroyed).
 */
abstract contract ERC721Burnable is Context, ERC721 {
    /**
     * @dev Burns `tokenId`. See {ERC721-_burn}.
     *
     * Requirements:
     *
     * - The caller must own `tokenId` or be an approved operator.
     */
    function burn(uint256 tokenId) public virtual {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721Burnable: caller is not owner nor approved");
        _burn(tokenId);
    }
}

// File: contracts/InbetDG/DGinBetweenersMirror.sol


pragma solidity ^0.8.10;




contract DGinBetweenersRedeemed is Ownable, ERC721Burnable {
    using Strings for uint256;

    string public baseURI;

    mapping(address => bool) public operators;

    constructor() ERC721("inBetweeners x Dolce&Gabbana Drip (Redeemed)", "DGINBR")  {
        baseURI = "https://europa-assets-list.s3.amazonaws.com/ipfs/redeemed/Qme8jdn8SGaCdTRGXPQbkf2FyyzJUjMnd6Vv7V131PVP72/";
        operators[msg.sender] = true;
    }

    function setBaseURI(string memory __baseURI) public onlyOwner {
        baseURI = __baseURI;
    }

    function changeOperator(address _operator, bool _status) public onlyOwner {
        operators[_operator] = _status;
    }

    function tokenURI(uint256 tokenId) public view override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
    }

    function mint(address to, uint tokenId) external {
        require(operators[msg.sender], "operator only");
        _mint(to, tokenId);
    }

    function supportsInterface(bytes4 interfaceId)
    public
    pure
    override(ERC721)
    returns(bool)
    {
        return
        interfaceId == 0x01ffc9a7 || // ERC165 Interface ID for ERC165
        interfaceId == 0x80ac58cd || // ERC165 Interface ID for ERC721
        interfaceId == 0x5b5e139f;  // ERC165 Interface ID for ERC721Metadata
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"changeOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"operators","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"__baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b506040518060600160405280602c815260200162003918602c91396040518060400160405280600681526020017f4447494e4252000000000000000000000000000000000000000000000000000081525062000082620000766200013160201b60201c565b6200013960201b60201c565b816001908162000093919062000477565b508060029081620000a5919062000477565b5050506040518060a0016040528060698152602001620038af6069913960079081620000d2919062000477565b506001600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200055e565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200027f57607f821691505b60208210810362000295576200029462000237565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620002ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620002c0565b6200030b8683620002c0565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000358620003526200034c8462000323565b6200032d565b62000323565b9050919050565b6000819050919050565b620003748362000337565b6200038c62000383826200035f565b848454620002cd565b825550505050565b600090565b620003a362000394565b620003b081848462000369565b505050565b5b81811015620003d857620003cc60008262000399565b600181019050620003b6565b5050565b601f8211156200042757620003f1816200029b565b620003fc84620002b0565b810160208510156200040c578190505b620004246200041b85620002b0565b830182620003b5565b50505b505050565b600082821c905092915050565b60006200044c600019846008026200042c565b1980831691505092915050565b600062000467838362000439565b9150826002028217905092915050565b6200048282620001fd565b67ffffffffffffffff8111156200049e576200049d62000208565b5b620004aa825462000266565b620004b7828285620003dc565b600060209050601f831160018114620004ef5760008415620004da578287015190505b620004e6858262000459565b86555062000556565b601f198416620004ff866200029b565b60005b82811015620005295784890151825560018201915060208501945060208101905062000502565b8683101562000549578489015162000545601f89168262000439565b8355505b6001600288020188555050505b505050505050565b613341806200056e6000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c80636c0360eb116100b857806395d89b411161007c57806395d89b411461035f578063a22cb4651461037d578063b88d4fde14610399578063c87b56dd146103b5578063e985e9c5146103e5578063f2fde38b1461041557610142565b80636c0360eb146102cd57806370a08231146102eb578063715018a61461031b578063860639ec146103255780638da5cb5b1461034157610142565b806323b872dd1161010a57806323b872dd1461021157806340c10f191461022d57806342842e0e1461024957806342966c681461026557806355f804b3146102815780636352211e1461029d57610142565b806301ffc9a71461014757806306fdde0314610177578063081812fc14610195578063095ea7b3146101c557806313e7c9d8146101e1575b600080fd5b610161600480360381019061015c9190611d0a565b610431565b60405161016e9190611d52565b60405180910390f35b61017f6104c3565b60405161018c9190611dfd565b60405180910390f35b6101af60048036038101906101aa9190611e55565b610555565b6040516101bc9190611ec3565b60405180910390f35b6101df60048036038101906101da9190611f0a565b6105da565b005b6101fb60048036038101906101f69190611f4a565b6106f1565b6040516102089190611d52565b60405180910390f35b61022b60048036038101906102269190611f77565b610711565b005b61024760048036038101906102429190611f0a565b610771565b005b610263600480360381019061025e9190611f77565b61080b565b005b61027f600480360381019061027a9190611e55565b61082b565b005b61029b600480360381019061029691906120ff565b610887565b005b6102b760048036038101906102b29190611e55565b610916565b6040516102c49190611ec3565b60405180910390f35b6102d56109c7565b6040516102e29190611dfd565b60405180910390f35b61030560048036038101906103009190611f4a565b610a55565b6040516103129190612157565b60405180910390f35b610323610b0c565b005b61033f600480360381019061033a919061219e565b610b94565b005b610349610c6b565b6040516103569190611ec3565b60405180910390f35b610367610c94565b6040516103749190611dfd565b60405180910390f35b6103976004803603810190610392919061219e565b610d26565b005b6103b360048036038101906103ae919061227f565b610ea6565b005b6103cf60048036038101906103ca9190611e55565b610f08565b6040516103dc9190611dfd565b60405180910390f35b6103ff60048036038101906103fa9190612302565b610fb0565b60405161040c9190611d52565b60405180910390f35b61042f600480360381019061042a9190611f4a565b611044565b005b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061048c57506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806104bc5750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6060600180546104d290612371565b80601f01602080910402602001604051908101604052809291908181526020018280546104fe90612371565b801561054b5780601f106105205761010080835404028352916020019161054b565b820191906000526020600020905b81548152906001019060200180831161052e57829003601f168201915b5050505050905090565b60006105608261113b565b61059f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161059690612414565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006105e582610916565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610655576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064c906124a6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166106746111a7565b73ffffffffffffffffffffffffffffffffffffffff1614806106a357506106a28161069d6111a7565b610fb0565b5b6106e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d990612538565b60405180910390fd5b6106ec83836111af565b505050565b60086020528060005260406000206000915054906101000a900460ff1681565b61072261071c6111a7565b82611268565b610761576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610758906125ca565b60405180910390fd5b61076c838383611346565b505050565b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166107fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f490612636565b60405180910390fd5b61080782826115a1565b5050565b61082683838360405180602001604052806000815250610ea6565b505050565b61083c6108366111a7565b82611268565b61087b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610872906126c8565b60405180910390fd5b6108848161176e565b50565b61088f6111a7565b73ffffffffffffffffffffffffffffffffffffffff166108ad610c6b565b73ffffffffffffffffffffffffffffffffffffffff1614610903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108fa90612734565b60405180910390fd5b80600790816109129190612900565b5050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036109be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b590612a44565b60405180910390fd5b80915050919050565b600780546109d490612371565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0090612371565b8015610a4d5780601f10610a2257610100808354040283529160200191610a4d565b820191906000526020600020905b815481529060010190602001808311610a3057829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ac5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abc90612ad6565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b146111a7565b73ffffffffffffffffffffffffffffffffffffffff16610b32610c6b565b73ffffffffffffffffffffffffffffffffffffffff1614610b88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7f90612734565b60405180910390fd5b610b92600061187f565b565b610b9c6111a7565b73ffffffffffffffffffffffffffffffffffffffff16610bba610c6b565b73ffffffffffffffffffffffffffffffffffffffff1614610c10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0790612734565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054610ca390612371565b80601f0160208091040260200160405190810160405280929190818152602001828054610ccf90612371565b8015610d1c5780601f10610cf157610100808354040283529160200191610d1c565b820191906000526020600020905b815481529060010190602001808311610cff57829003601f168201915b5050505050905090565b610d2e6111a7565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9290612b42565b60405180910390fd5b8060066000610da86111a7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610e556111a7565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610e9a9190611d52565b60405180910390a35050565b610eb7610eb16111a7565b83611268565b610ef6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eed906125ca565b60405180910390fd5b610f0284848484611943565b50505050565b6060610f138261113b565b610f52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4990612bd4565b60405180910390fd5b600060078054610f6190612371565b905011610f7d5760405180602001604052806000815250610fa9565b6007610f888361199f565b604051602001610f99929190612cb3565b6040516020818303038152906040525b9050919050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61104c6111a7565b73ffffffffffffffffffffffffffffffffffffffff1661106a610c6b565b73ffffffffffffffffffffffffffffffffffffffff16146110c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b790612734565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361112f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112690612d49565b60405180910390fd5b6111388161187f565b50565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661122283610916565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006112738261113b565b6112b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a990612ddb565b60405180910390fd5b60006112bd83610916565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061132c57508373ffffffffffffffffffffffffffffffffffffffff1661131484610555565b73ffffffffffffffffffffffffffffffffffffffff16145b8061133d575061133c8185610fb0565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661136682610916565b73ffffffffffffffffffffffffffffffffffffffff16146113bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b390612e6d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361142b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142290612eff565b60405180910390fd5b611436838383611aff565b6114416000826111af565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114919190612f4e565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114e89190612f82565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611610576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160790613002565b60405180910390fd5b6116198161113b565b15611659576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116509061306e565b60405180910390fd5b61166560008383611aff565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116b59190612f82565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600061177982610916565b905061178781600084611aff565b6117926000836111af565b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117e29190612f4e565b925050819055506003600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61194e848484611346565b61195a84848484611b04565b611999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199090613100565b60405180910390fd5b50505050565b6060600082036119e6576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611afa565b600082905060005b60008214611a18578080611a0190613120565b915050600a82611a119190613197565b91506119ee565b60008167ffffffffffffffff811115611a3457611a33611fd4565b5b6040519080825280601f01601f191660200182016040528015611a665781602001600182028036833780820191505090505b5090505b60008514611af357600182611a7f9190612f4e565b9150600a85611a8e91906131c8565b6030611a9a9190612f82565b60f81b818381518110611ab057611aaf6131f9565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611aec9190613197565b9450611a6a565b8093505050505b919050565b505050565b6000611b258473ffffffffffffffffffffffffffffffffffffffff16611c8b565b15611c7e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611b4e6111a7565b8786866040518563ffffffff1660e01b8152600401611b70949392919061327d565b6020604051808303816000875af1925050508015611bac57506040513d601f19601f82011682018060405250810190611ba991906132de565b60015b611c2e573d8060008114611bdc576040519150601f19603f3d011682016040523d82523d6000602084013e611be1565b606091505b506000815103611c26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1d90613100565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611c83565b600190505b949350505050565b600080823b905060008111915050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611ce781611cb2565b8114611cf257600080fd5b50565b600081359050611d0481611cde565b92915050565b600060208284031215611d2057611d1f611ca8565b5b6000611d2e84828501611cf5565b91505092915050565b60008115159050919050565b611d4c81611d37565b82525050565b6000602082019050611d676000830184611d43565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611da7578082015181840152602081019050611d8c565b60008484015250505050565b6000601f19601f8301169050919050565b6000611dcf82611d6d565b611dd98185611d78565b9350611de9818560208601611d89565b611df281611db3565b840191505092915050565b60006020820190508181036000830152611e178184611dc4565b905092915050565b6000819050919050565b611e3281611e1f565b8114611e3d57600080fd5b50565b600081359050611e4f81611e29565b92915050565b600060208284031215611e6b57611e6a611ca8565b5b6000611e7984828501611e40565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611ead82611e82565b9050919050565b611ebd81611ea2565b82525050565b6000602082019050611ed86000830184611eb4565b92915050565b611ee781611ea2565b8114611ef257600080fd5b50565b600081359050611f0481611ede565b92915050565b60008060408385031215611f2157611f20611ca8565b5b6000611f2f85828601611ef5565b9250506020611f4085828601611e40565b9150509250929050565b600060208284031215611f6057611f5f611ca8565b5b6000611f6e84828501611ef5565b91505092915050565b600080600060608486031215611f9057611f8f611ca8565b5b6000611f9e86828701611ef5565b9350506020611faf86828701611ef5565b9250506040611fc086828701611e40565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61200c82611db3565b810181811067ffffffffffffffff8211171561202b5761202a611fd4565b5b80604052505050565b600061203e611c9e565b905061204a8282612003565b919050565b600067ffffffffffffffff82111561206a57612069611fd4565b5b61207382611db3565b9050602081019050919050565b82818337600083830152505050565b60006120a261209d8461204f565b612034565b9050828152602081018484840111156120be576120bd611fcf565b5b6120c9848285612080565b509392505050565b600082601f8301126120e6576120e5611fca565b5b81356120f684826020860161208f565b91505092915050565b60006020828403121561211557612114611ca8565b5b600082013567ffffffffffffffff81111561213357612132611cad565b5b61213f848285016120d1565b91505092915050565b61215181611e1f565b82525050565b600060208201905061216c6000830184612148565b92915050565b61217b81611d37565b811461218657600080fd5b50565b60008135905061219881612172565b92915050565b600080604083850312156121b5576121b4611ca8565b5b60006121c385828601611ef5565b92505060206121d485828601612189565b9150509250929050565b600067ffffffffffffffff8211156121f9576121f8611fd4565b5b61220282611db3565b9050602081019050919050565b600061222261221d846121de565b612034565b90508281526020810184848401111561223e5761223d611fcf565b5b612249848285612080565b509392505050565b600082601f83011261226657612265611fca565b5b813561227684826020860161220f565b91505092915050565b6000806000806080858703121561229957612298611ca8565b5b60006122a787828801611ef5565b94505060206122b887828801611ef5565b93505060406122c987828801611e40565b925050606085013567ffffffffffffffff8111156122ea576122e9611cad565b5b6122f687828801612251565b91505092959194509250565b6000806040838503121561231957612318611ca8565b5b600061232785828601611ef5565b925050602061233885828601611ef5565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061238957607f821691505b60208210810361239c5761239b612342565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006123fe602c83611d78565b9150612409826123a2565b604082019050919050565b6000602082019050818103600083015261242d816123f1565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000612490602183611d78565b915061249b82612434565b604082019050919050565b600060208201905081810360008301526124bf81612483565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000612522603883611d78565b915061252d826124c6565b604082019050919050565b6000602082019050818103600083015261255181612515565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b60006125b4603183611d78565b91506125bf82612558565b604082019050919050565b600060208201905081810360008301526125e3816125a7565b9050919050565b7f6f70657261746f72206f6e6c7900000000000000000000000000000000000000600082015250565b6000612620600d83611d78565b915061262b826125ea565b602082019050919050565b6000602082019050818103600083015261264f81612613565b9050919050565b7f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656400000000000000000000000000000000602082015250565b60006126b2603083611d78565b91506126bd82612656565b604082019050919050565b600060208201905081810360008301526126e1816126a5565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061271e602083611d78565b9150612729826126e8565b602082019050919050565b6000602082019050818103600083015261274d81612711565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026127b67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612779565b6127c08683612779565b95508019841693508086168417925050509392505050565b6000819050919050565b60006127fd6127f86127f384611e1f565b6127d8565b611e1f565b9050919050565b6000819050919050565b612817836127e2565b61282b61282382612804565b848454612786565b825550505050565b600090565b612840612833565b61284b81848461280e565b505050565b5b8181101561286f57612864600082612838565b600181019050612851565b5050565b601f8211156128b45761288581612754565b61288e84612769565b8101602085101561289d578190505b6128b16128a985612769565b830182612850565b50505b505050565b600082821c905092915050565b60006128d7600019846008026128b9565b1980831691505092915050565b60006128f083836128c6565b9150826002028217905092915050565b61290982611d6d565b67ffffffffffffffff81111561292257612921611fd4565b5b61292c8254612371565b612937828285612873565b600060209050601f83116001811461296a5760008415612958578287015190505b61296285826128e4565b8655506129ca565b601f19841661297886612754565b60005b828110156129a05784890151825560018201915060208501945060208101905061297b565b868310156129bd57848901516129b9601f8916826128c6565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000612a2e602983611d78565b9150612a39826129d2565b604082019050919050565b60006020820190508181036000830152612a5d81612a21565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000612ac0602a83611d78565b9150612acb82612a64565b604082019050919050565b60006020820190508181036000830152612aef81612ab3565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000612b2c601983611d78565b9150612b3782612af6565b602082019050919050565b60006020820190508181036000830152612b5b81612b1f565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000612bbe602f83611d78565b9150612bc982612b62565b604082019050919050565b60006020820190508181036000830152612bed81612bb1565b9050919050565b600081905092915050565b60008154612c0c81612371565b612c168186612bf4565b94506001821660008114612c315760018114612c4657612c79565b60ff1983168652811515820286019350612c79565b612c4f85612754565b60005b83811015612c7157815481890152600182019150602081019050612c52565b838801955050505b50505092915050565b6000612c8d82611d6d565b612c978185612bf4565b9350612ca7818560208601611d89565b80840191505092915050565b6000612cbf8285612bff565b9150612ccb8284612c82565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612d33602683611d78565b9150612d3e82612cd7565b604082019050919050565b60006020820190508181036000830152612d6281612d26565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000612dc5602c83611d78565b9150612dd082612d69565b604082019050919050565b60006020820190508181036000830152612df481612db8565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000612e57602983611d78565b9150612e6282612dfb565b604082019050919050565b60006020820190508181036000830152612e8681612e4a565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612ee9602483611d78565b9150612ef482612e8d565b604082019050919050565b60006020820190508181036000830152612f1881612edc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612f5982611e1f565b9150612f6483611e1f565b9250828203905081811115612f7c57612f7b612f1f565b5b92915050565b6000612f8d82611e1f565b9150612f9883611e1f565b9250828201905080821115612fb057612faf612f1f565b5b92915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000612fec602083611d78565b9150612ff782612fb6565b602082019050919050565b6000602082019050818103600083015261301b81612fdf565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000613058601c83611d78565b915061306382613022565b602082019050919050565b600060208201905081810360008301526130878161304b565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006130ea603283611d78565b91506130f58261308e565b604082019050919050565b60006020820190508181036000830152613119816130dd565b9050919050565b600061312b82611e1f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361315d5761315c612f1f565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006131a282611e1f565b91506131ad83611e1f565b9250826131bd576131bc613168565b5b828204905092915050565b60006131d382611e1f565b91506131de83611e1f565b9250826131ee576131ed613168565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b600061324f82613228565b6132598185613233565b9350613269818560208601611d89565b61327281611db3565b840191505092915050565b60006080820190506132926000830187611eb4565b61329f6020830186611eb4565b6132ac6040830185612148565b81810360608301526132be8184613244565b905095945050505050565b6000815190506132d881611cde565b92915050565b6000602082840312156132f4576132f3611ca8565b5b6000613302848285016132c9565b9150509291505056fea26469706673582212208d8812242b768c6efa99c944c7886b47459eea510c29ff6734251787e1438e9c64736f6c6343000812003368747470733a2f2f6575726f70612d6173736574732d6c6973742e73332e616d617a6f6e6177732e636f6d2f697066732f72656465656d65642f516d65386a646e385347614364545247585051626b66324679797a4a556a4d6e64365676375631333150565037322f696e4265747765656e657273207820446f6c63652647616262616e612044726970202852656465656d656429

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101425760003560e01c80636c0360eb116100b857806395d89b411161007c57806395d89b411461035f578063a22cb4651461037d578063b88d4fde14610399578063c87b56dd146103b5578063e985e9c5146103e5578063f2fde38b1461041557610142565b80636c0360eb146102cd57806370a08231146102eb578063715018a61461031b578063860639ec146103255780638da5cb5b1461034157610142565b806323b872dd1161010a57806323b872dd1461021157806340c10f191461022d57806342842e0e1461024957806342966c681461026557806355f804b3146102815780636352211e1461029d57610142565b806301ffc9a71461014757806306fdde0314610177578063081812fc14610195578063095ea7b3146101c557806313e7c9d8146101e1575b600080fd5b610161600480360381019061015c9190611d0a565b610431565b60405161016e9190611d52565b60405180910390f35b61017f6104c3565b60405161018c9190611dfd565b60405180910390f35b6101af60048036038101906101aa9190611e55565b610555565b6040516101bc9190611ec3565b60405180910390f35b6101df60048036038101906101da9190611f0a565b6105da565b005b6101fb60048036038101906101f69190611f4a565b6106f1565b6040516102089190611d52565b60405180910390f35b61022b60048036038101906102269190611f77565b610711565b005b61024760048036038101906102429190611f0a565b610771565b005b610263600480360381019061025e9190611f77565b61080b565b005b61027f600480360381019061027a9190611e55565b61082b565b005b61029b600480360381019061029691906120ff565b610887565b005b6102b760048036038101906102b29190611e55565b610916565b6040516102c49190611ec3565b60405180910390f35b6102d56109c7565b6040516102e29190611dfd565b60405180910390f35b61030560048036038101906103009190611f4a565b610a55565b6040516103129190612157565b60405180910390f35b610323610b0c565b005b61033f600480360381019061033a919061219e565b610b94565b005b610349610c6b565b6040516103569190611ec3565b60405180910390f35b610367610c94565b6040516103749190611dfd565b60405180910390f35b6103976004803603810190610392919061219e565b610d26565b005b6103b360048036038101906103ae919061227f565b610ea6565b005b6103cf60048036038101906103ca9190611e55565b610f08565b6040516103dc9190611dfd565b60405180910390f35b6103ff60048036038101906103fa9190612302565b610fb0565b60405161040c9190611d52565b60405180910390f35b61042f600480360381019061042a9190611f4a565b611044565b005b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061048c57506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806104bc5750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6060600180546104d290612371565b80601f01602080910402602001604051908101604052809291908181526020018280546104fe90612371565b801561054b5780601f106105205761010080835404028352916020019161054b565b820191906000526020600020905b81548152906001019060200180831161052e57829003601f168201915b5050505050905090565b60006105608261113b565b61059f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161059690612414565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006105e582610916565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610655576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064c906124a6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166106746111a7565b73ffffffffffffffffffffffffffffffffffffffff1614806106a357506106a28161069d6111a7565b610fb0565b5b6106e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d990612538565b60405180910390fd5b6106ec83836111af565b505050565b60086020528060005260406000206000915054906101000a900460ff1681565b61072261071c6111a7565b82611268565b610761576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610758906125ca565b60405180910390fd5b61076c838383611346565b505050565b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166107fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f490612636565b60405180910390fd5b61080782826115a1565b5050565b61082683838360405180602001604052806000815250610ea6565b505050565b61083c6108366111a7565b82611268565b61087b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610872906126c8565b60405180910390fd5b6108848161176e565b50565b61088f6111a7565b73ffffffffffffffffffffffffffffffffffffffff166108ad610c6b565b73ffffffffffffffffffffffffffffffffffffffff1614610903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108fa90612734565b60405180910390fd5b80600790816109129190612900565b5050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036109be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b590612a44565b60405180910390fd5b80915050919050565b600780546109d490612371565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0090612371565b8015610a4d5780601f10610a2257610100808354040283529160200191610a4d565b820191906000526020600020905b815481529060010190602001808311610a3057829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ac5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abc90612ad6565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b146111a7565b73ffffffffffffffffffffffffffffffffffffffff16610b32610c6b565b73ffffffffffffffffffffffffffffffffffffffff1614610b88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7f90612734565b60405180910390fd5b610b92600061187f565b565b610b9c6111a7565b73ffffffffffffffffffffffffffffffffffffffff16610bba610c6b565b73ffffffffffffffffffffffffffffffffffffffff1614610c10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0790612734565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054610ca390612371565b80601f0160208091040260200160405190810160405280929190818152602001828054610ccf90612371565b8015610d1c5780601f10610cf157610100808354040283529160200191610d1c565b820191906000526020600020905b815481529060010190602001808311610cff57829003601f168201915b5050505050905090565b610d2e6111a7565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9290612b42565b60405180910390fd5b8060066000610da86111a7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610e556111a7565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610e9a9190611d52565b60405180910390a35050565b610eb7610eb16111a7565b83611268565b610ef6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eed906125ca565b60405180910390fd5b610f0284848484611943565b50505050565b6060610f138261113b565b610f52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4990612bd4565b60405180910390fd5b600060078054610f6190612371565b905011610f7d5760405180602001604052806000815250610fa9565b6007610f888361199f565b604051602001610f99929190612cb3565b6040516020818303038152906040525b9050919050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61104c6111a7565b73ffffffffffffffffffffffffffffffffffffffff1661106a610c6b565b73ffffffffffffffffffffffffffffffffffffffff16146110c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b790612734565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361112f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112690612d49565b60405180910390fd5b6111388161187f565b50565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661122283610916565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006112738261113b565b6112b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a990612ddb565b60405180910390fd5b60006112bd83610916565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061132c57508373ffffffffffffffffffffffffffffffffffffffff1661131484610555565b73ffffffffffffffffffffffffffffffffffffffff16145b8061133d575061133c8185610fb0565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661136682610916565b73ffffffffffffffffffffffffffffffffffffffff16146113bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b390612e6d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361142b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142290612eff565b60405180910390fd5b611436838383611aff565b6114416000826111af565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114919190612f4e565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114e89190612f82565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611610576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160790613002565b60405180910390fd5b6116198161113b565b15611659576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116509061306e565b60405180910390fd5b61166560008383611aff565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116b59190612f82565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600061177982610916565b905061178781600084611aff565b6117926000836111af565b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117e29190612f4e565b925050819055506003600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61194e848484611346565b61195a84848484611b04565b611999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199090613100565b60405180910390fd5b50505050565b6060600082036119e6576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611afa565b600082905060005b60008214611a18578080611a0190613120565b915050600a82611a119190613197565b91506119ee565b60008167ffffffffffffffff811115611a3457611a33611fd4565b5b6040519080825280601f01601f191660200182016040528015611a665781602001600182028036833780820191505090505b5090505b60008514611af357600182611a7f9190612f4e565b9150600a85611a8e91906131c8565b6030611a9a9190612f82565b60f81b818381518110611ab057611aaf6131f9565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611aec9190613197565b9450611a6a565b8093505050505b919050565b505050565b6000611b258473ffffffffffffffffffffffffffffffffffffffff16611c8b565b15611c7e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611b4e6111a7565b8786866040518563ffffffff1660e01b8152600401611b70949392919061327d565b6020604051808303816000875af1925050508015611bac57506040513d601f19601f82011682018060405250810190611ba991906132de565b60015b611c2e573d8060008114611bdc576040519150601f19603f3d011682016040523d82523d6000602084013e611be1565b606091505b506000815103611c26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1d90613100565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611c83565b600190505b949350505050565b600080823b905060008111915050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611ce781611cb2565b8114611cf257600080fd5b50565b600081359050611d0481611cde565b92915050565b600060208284031215611d2057611d1f611ca8565b5b6000611d2e84828501611cf5565b91505092915050565b60008115159050919050565b611d4c81611d37565b82525050565b6000602082019050611d676000830184611d43565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611da7578082015181840152602081019050611d8c565b60008484015250505050565b6000601f19601f8301169050919050565b6000611dcf82611d6d565b611dd98185611d78565b9350611de9818560208601611d89565b611df281611db3565b840191505092915050565b60006020820190508181036000830152611e178184611dc4565b905092915050565b6000819050919050565b611e3281611e1f565b8114611e3d57600080fd5b50565b600081359050611e4f81611e29565b92915050565b600060208284031215611e6b57611e6a611ca8565b5b6000611e7984828501611e40565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611ead82611e82565b9050919050565b611ebd81611ea2565b82525050565b6000602082019050611ed86000830184611eb4565b92915050565b611ee781611ea2565b8114611ef257600080fd5b50565b600081359050611f0481611ede565b92915050565b60008060408385031215611f2157611f20611ca8565b5b6000611f2f85828601611ef5565b9250506020611f4085828601611e40565b9150509250929050565b600060208284031215611f6057611f5f611ca8565b5b6000611f6e84828501611ef5565b91505092915050565b600080600060608486031215611f9057611f8f611ca8565b5b6000611f9e86828701611ef5565b9350506020611faf86828701611ef5565b9250506040611fc086828701611e40565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61200c82611db3565b810181811067ffffffffffffffff8211171561202b5761202a611fd4565b5b80604052505050565b600061203e611c9e565b905061204a8282612003565b919050565b600067ffffffffffffffff82111561206a57612069611fd4565b5b61207382611db3565b9050602081019050919050565b82818337600083830152505050565b60006120a261209d8461204f565b612034565b9050828152602081018484840111156120be576120bd611fcf565b5b6120c9848285612080565b509392505050565b600082601f8301126120e6576120e5611fca565b5b81356120f684826020860161208f565b91505092915050565b60006020828403121561211557612114611ca8565b5b600082013567ffffffffffffffff81111561213357612132611cad565b5b61213f848285016120d1565b91505092915050565b61215181611e1f565b82525050565b600060208201905061216c6000830184612148565b92915050565b61217b81611d37565b811461218657600080fd5b50565b60008135905061219881612172565b92915050565b600080604083850312156121b5576121b4611ca8565b5b60006121c385828601611ef5565b92505060206121d485828601612189565b9150509250929050565b600067ffffffffffffffff8211156121f9576121f8611fd4565b5b61220282611db3565b9050602081019050919050565b600061222261221d846121de565b612034565b90508281526020810184848401111561223e5761223d611fcf565b5b612249848285612080565b509392505050565b600082601f83011261226657612265611fca565b5b813561227684826020860161220f565b91505092915050565b6000806000806080858703121561229957612298611ca8565b5b60006122a787828801611ef5565b94505060206122b887828801611ef5565b93505060406122c987828801611e40565b925050606085013567ffffffffffffffff8111156122ea576122e9611cad565b5b6122f687828801612251565b91505092959194509250565b6000806040838503121561231957612318611ca8565b5b600061232785828601611ef5565b925050602061233885828601611ef5565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061238957607f821691505b60208210810361239c5761239b612342565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006123fe602c83611d78565b9150612409826123a2565b604082019050919050565b6000602082019050818103600083015261242d816123f1565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000612490602183611d78565b915061249b82612434565b604082019050919050565b600060208201905081810360008301526124bf81612483565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000612522603883611d78565b915061252d826124c6565b604082019050919050565b6000602082019050818103600083015261255181612515565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b60006125b4603183611d78565b91506125bf82612558565b604082019050919050565b600060208201905081810360008301526125e3816125a7565b9050919050565b7f6f70657261746f72206f6e6c7900000000000000000000000000000000000000600082015250565b6000612620600d83611d78565b915061262b826125ea565b602082019050919050565b6000602082019050818103600083015261264f81612613565b9050919050565b7f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656400000000000000000000000000000000602082015250565b60006126b2603083611d78565b91506126bd82612656565b604082019050919050565b600060208201905081810360008301526126e1816126a5565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061271e602083611d78565b9150612729826126e8565b602082019050919050565b6000602082019050818103600083015261274d81612711565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026127b67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612779565b6127c08683612779565b95508019841693508086168417925050509392505050565b6000819050919050565b60006127fd6127f86127f384611e1f565b6127d8565b611e1f565b9050919050565b6000819050919050565b612817836127e2565b61282b61282382612804565b848454612786565b825550505050565b600090565b612840612833565b61284b81848461280e565b505050565b5b8181101561286f57612864600082612838565b600181019050612851565b5050565b601f8211156128b45761288581612754565b61288e84612769565b8101602085101561289d578190505b6128b16128a985612769565b830182612850565b50505b505050565b600082821c905092915050565b60006128d7600019846008026128b9565b1980831691505092915050565b60006128f083836128c6565b9150826002028217905092915050565b61290982611d6d565b67ffffffffffffffff81111561292257612921611fd4565b5b61292c8254612371565b612937828285612873565b600060209050601f83116001811461296a5760008415612958578287015190505b61296285826128e4565b8655506129ca565b601f19841661297886612754565b60005b828110156129a05784890151825560018201915060208501945060208101905061297b565b868310156129bd57848901516129b9601f8916826128c6565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000612a2e602983611d78565b9150612a39826129d2565b604082019050919050565b60006020820190508181036000830152612a5d81612a21565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000612ac0602a83611d78565b9150612acb82612a64565b604082019050919050565b60006020820190508181036000830152612aef81612ab3565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000612b2c601983611d78565b9150612b3782612af6565b602082019050919050565b60006020820190508181036000830152612b5b81612b1f565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000612bbe602f83611d78565b9150612bc982612b62565b604082019050919050565b60006020820190508181036000830152612bed81612bb1565b9050919050565b600081905092915050565b60008154612c0c81612371565b612c168186612bf4565b94506001821660008114612c315760018114612c4657612c79565b60ff1983168652811515820286019350612c79565b612c4f85612754565b60005b83811015612c7157815481890152600182019150602081019050612c52565b838801955050505b50505092915050565b6000612c8d82611d6d565b612c978185612bf4565b9350612ca7818560208601611d89565b80840191505092915050565b6000612cbf8285612bff565b9150612ccb8284612c82565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612d33602683611d78565b9150612d3e82612cd7565b604082019050919050565b60006020820190508181036000830152612d6281612d26565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000612dc5602c83611d78565b9150612dd082612d69565b604082019050919050565b60006020820190508181036000830152612df481612db8565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000612e57602983611d78565b9150612e6282612dfb565b604082019050919050565b60006020820190508181036000830152612e8681612e4a565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612ee9602483611d78565b9150612ef482612e8d565b604082019050919050565b60006020820190508181036000830152612f1881612edc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612f5982611e1f565b9150612f6483611e1f565b9250828203905081811115612f7c57612f7b612f1f565b5b92915050565b6000612f8d82611e1f565b9150612f9883611e1f565b9250828201905080821115612fb057612faf612f1f565b5b92915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000612fec602083611d78565b9150612ff782612fb6565b602082019050919050565b6000602082019050818103600083015261301b81612fdf565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000613058601c83611d78565b915061306382613022565b602082019050919050565b600060208201905081810360008301526130878161304b565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006130ea603283611d78565b91506130f58261308e565b604082019050919050565b60006020820190508181036000830152613119816130dd565b9050919050565b600061312b82611e1f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361315d5761315c612f1f565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006131a282611e1f565b91506131ad83611e1f565b9250826131bd576131bc613168565b5b828204905092915050565b60006131d382611e1f565b91506131de83611e1f565b9250826131ee576131ed613168565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b600061324f82613228565b6132598185613233565b9350613269818560208601611d89565b61327281611db3565b840191505092915050565b60006080820190506132926000830187611eb4565b61329f6020830186611eb4565b6132ac6040830185612148565b81810360608301526132be8184613244565b905095945050505050565b6000815190506132d881611cde565b92915050565b6000602082840312156132f4576132f3611ca8565b5b6000613302848285016132c9565b9150509291505056fea26469706673582212208d8812242b768c6efa99c944c7886b47459eea510c29ff6734251787e1438e9c64736f6c63430008120033

Deployed Bytecode Sourcemap

35846:1486:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36967:362;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23868:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25427:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24950:411;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35976:41;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26317:339;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36815:144;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26727:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35503:245;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36289:100;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23562:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35946:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23292:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4558:94;;;:::i;:::-;;36397:123;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3907:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24037:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25720:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26983:328;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36528:279;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26086:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4807:192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36967:362;37071:4;37124:10;37109:25;;:11;:25;;;;:97;;;;37196:10;37181:25;;:11;:25;;;;37109:97;:169;;;;37268:10;37253:25;;:11;:25;;;;37109:169;37093:185;;36967:362;;;:::o;23868:100::-;23922:13;23955:5;23948:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23868:100;:::o;25427:221::-;25503:7;25531:16;25539:7;25531;:16::i;:::-;25523:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25616:15;:24;25632:7;25616:24;;;;;;;;;;;;;;;;;;;;;25609:31;;25427:221;;;:::o;24950:411::-;25031:13;25047:23;25062:7;25047:14;:23::i;:::-;25031:39;;25095:5;25089:11;;:2;:11;;;25081:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;25189:5;25173:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;25198:37;25215:5;25222:12;:10;:12::i;:::-;25198:16;:37::i;:::-;25173:62;25151:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;25332:21;25341:2;25345:7;25332:8;:21::i;:::-;25020:341;24950:411;;:::o;35976:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;26317:339::-;26512:41;26531:12;:10;:12::i;:::-;26545:7;26512:18;:41::i;:::-;26504:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26620:28;26630:4;26636:2;26640:7;26620:9;:28::i;:::-;26317:339;;;:::o;36815:144::-;36883:9;:21;36893:10;36883:21;;;;;;;;;;;;;;;;;;;;;;;;;36875:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;36933:18;36939:2;36943:7;36933:5;:18::i;:::-;36815:144;;:::o;26727:185::-;26865:39;26882:4;26888:2;26892:7;26865:39;;;;;;;;;;;;:16;:39::i;:::-;26727:185;;;:::o;35503:245::-;35621:41;35640:12;:10;:12::i;:::-;35654:7;35621:18;:41::i;:::-;35613:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;35726:14;35732:7;35726:5;:14::i;:::-;35503:245;:::o;36289:100::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36372:9:::1;36362:7;:19;;;;;;:::i;:::-;;36289:100:::0;:::o;23562:239::-;23634:7;23654:13;23670:7;:16;23678:7;23670:16;;;;;;;;;;;;;;;;;;;;;23654:32;;23722:1;23705:19;;:5;:19;;;23697:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23788:5;23781:12;;;23562:239;;;:::o;35946:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23292:208::-;23364:7;23409:1;23392:19;;:5;:19;;;23384:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;23476:9;:16;23486:5;23476:16;;;;;;;;;;;;;;;;23469:23;;23292:208;;;:::o;4558:94::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4623:21:::1;4641:1;4623:9;:21::i;:::-;4558:94::o:0;36397:123::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36505:7:::1;36482:9;:20;36492:9;36482:20;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;36397:123:::0;;:::o;3907:87::-;3953:7;3980:6;;;;;;;;;;;3973:13;;3907:87;:::o;24037:104::-;24093:13;24126:7;24119:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24037:104;:::o;25720:295::-;25835:12;:10;:12::i;:::-;25823:24;;:8;:24;;;25815:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;25935:8;25890:18;:32;25909:12;:10;:12::i;:::-;25890:32;;;;;;;;;;;;;;;:42;25923:8;25890:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;25988:8;25959:48;;25974:12;:10;:12::i;:::-;25959:48;;;25998:8;25959:48;;;;;;:::i;:::-;;;;;;;;25720:295;;:::o;26983:328::-;27158:41;27177:12;:10;:12::i;:::-;27191:7;27158:18;:41::i;:::-;27150:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;27264:39;27278:4;27284:2;27288:7;27297:5;27264:13;:39::i;:::-;26983:328;;;;:::o;36528:279::-;36593:13;36627:16;36635:7;36627;:16::i;:::-;36619:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;36737:1;36719:7;36713:21;;;;;:::i;:::-;;;:25;:86;;;;;;;;;;;;;;;;;36765:7;36774:18;:7;:16;:18::i;:::-;36748:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;36713:86;36706:93;;36528:279;;;:::o;26086:164::-;26183:4;26207:18;:25;26226:5;26207:25;;;;;;;;;;;;;;;:35;26233:8;26207:35;;;;;;;;;;;;;;;;;;;;;;;;;26200:42;;26086:164;;;;:::o;4807:192::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4916:1:::1;4896:22;;:8;:22;;::::0;4888:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;4972:19;4982:8;4972:9;:19::i;:::-;4807:192:::0;:::o;28821:127::-;28886:4;28938:1;28910:30;;:7;:16;28918:7;28910:16;;;;;;;;;;;;;;;;;;;;;:30;;;;28903:37;;28821:127;;;:::o;2695:98::-;2748:7;2775:10;2768:17;;2695:98;:::o;32803:174::-;32905:2;32878:15;:24;32894:7;32878:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;32961:7;32957:2;32923:46;;32932:23;32947:7;32932:14;:23::i;:::-;32923:46;;;;;;;;;;;;32803:174;;:::o;29115:348::-;29208:4;29233:16;29241:7;29233;:16::i;:::-;29225:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29309:13;29325:23;29340:7;29325:14;:23::i;:::-;29309:39;;29378:5;29367:16;;:7;:16;;;:51;;;;29411:7;29387:31;;:20;29399:7;29387:11;:20::i;:::-;:31;;;29367:51;:87;;;;29422:32;29439:5;29446:7;29422:16;:32::i;:::-;29367:87;29359:96;;;29115:348;;;;:::o;32107:578::-;32266:4;32239:31;;:23;32254:7;32239:14;:23::i;:::-;:31;;;32231:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;32349:1;32335:16;;:2;:16;;;32327:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;32405:39;32426:4;32432:2;32436:7;32405:20;:39::i;:::-;32509:29;32526:1;32530:7;32509:8;:29::i;:::-;32570:1;32551:9;:15;32561:4;32551:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;32599:1;32582:9;:13;32592:2;32582:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32630:2;32611:7;:16;32619:7;32611:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32669:7;32665:2;32650:27;;32659:4;32650:27;;;;;;;;;;;;32107:578;;;:::o;30799:382::-;30893:1;30879:16;;:2;:16;;;30871:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30952:16;30960:7;30952;:16::i;:::-;30951:17;30943:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;31014:45;31043:1;31047:2;31051:7;31014:20;:45::i;:::-;31089:1;31072:9;:13;31082:2;31072:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31120:2;31101:7;:16;31109:7;31101:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31165:7;31161:2;31140:33;;31157:1;31140:33;;;;;;;;;;;;30799:382;;:::o;31410:360::-;31470:13;31486:23;31501:7;31486:14;:23::i;:::-;31470:39;;31522:48;31543:5;31558:1;31562:7;31522:20;:48::i;:::-;31611:29;31628:1;31632:7;31611:8;:29::i;:::-;31673:1;31653:9;:16;31663:5;31653:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;31692:7;:16;31700:7;31692:16;;;;;;;;;;;;31685:23;;;;;;;;;;;31754:7;31750:1;31726:36;;31735:5;31726:36;;;;;;;;;;;;31459:311;31410:360;:::o;5007:173::-;5063:16;5082:6;;;;;;;;;;;5063:25;;5108:8;5099:6;;:17;;;;;;;;;;;;;;;;;;5163:8;5132:40;;5153:8;5132:40;;;;;;;;;;;;5052:128;5007:173;:::o;28193:315::-;28350:28;28360:4;28366:2;28370:7;28350:9;:28::i;:::-;28397:48;28420:4;28426:2;28430:7;28439:5;28397:22;:48::i;:::-;28389:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;28193:315;;;;:::o;311:723::-;367:13;597:1;588:5;:10;584:53;;615:10;;;;;;;;;;;;;;;;;;;;;584:53;647:12;662:5;647:20;;678:14;703:78;718:1;710:4;:9;703:78;;736:8;;;;;:::i;:::-;;;;767:2;759:10;;;;;:::i;:::-;;;703:78;;;791:19;823:6;813:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;791:39;;841:154;857:1;848:5;:10;841:154;;885:1;875:11;;;;;:::i;:::-;;;952:2;944:5;:10;;;;:::i;:::-;931:2;:24;;;;:::i;:::-;918:39;;901:6;908;901:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;981:2;972:11;;;;;:::i;:::-;;;841:154;;;1019:6;1005:21;;;;;311:723;;;;:::o;34913:126::-;;;;:::o;33542:799::-;33697:4;33718:15;:2;:13;;;:15::i;:::-;33714:620;;;33770:2;33754:36;;;33791:12;:10;:12::i;:::-;33805:4;33811:7;33820:5;33754:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33750:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34013:1;33996:6;:13;:18;33992:272;;34039:60;;;;;;;;;;:::i;:::-;;;;;;;;33992:272;34214:6;34208:13;34199:6;34195:2;34191:15;34184:38;33750:529;33887:41;;;33877:51;;;:6;:51;;;;33870:58;;;;;33714:620;34318:4;34311:11;;33542:799;;;;;;;:::o;5953:387::-;6013:4;6221:12;6288:7;6276:20;6268:28;;6331:1;6324:4;:8;6317:15;;;5953:387;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:246::-;1879:1;1889:113;1903:6;1900:1;1897:13;1889:113;;;1988:1;1983:3;1979:11;1973:18;1969:1;1964:3;1960:11;1953:39;1925:2;1922:1;1918:10;1913:15;;1889:113;;;2036:1;2027:6;2022:3;2018:16;2011:27;1860:184;1798:246;;;:::o;2050:102::-;2091:6;2142:2;2138:7;2133:2;2126:5;2122:14;2118:28;2108:38;;2050:102;;;:::o;2158:377::-;2246:3;2274:39;2307:5;2274:39;:::i;:::-;2329:71;2393:6;2388:3;2329:71;:::i;:::-;2322:78;;2409:65;2467:6;2462:3;2455:4;2448:5;2444:16;2409:65;:::i;:::-;2499:29;2521:6;2499:29;:::i;:::-;2494:3;2490:39;2483:46;;2250:285;2158:377;;;;:::o;2541:313::-;2654:4;2692:2;2681:9;2677:18;2669:26;;2741:9;2735:4;2731:20;2727:1;2716:9;2712:17;2705:47;2769:78;2842:4;2833:6;2769:78;:::i;:::-;2761:86;;2541:313;;;;:::o;2860:77::-;2897:7;2926:5;2915:16;;2860:77;;;:::o;2943:122::-;3016:24;3034:5;3016:24;:::i;:::-;3009:5;3006:35;2996:63;;3055:1;3052;3045:12;2996:63;2943:122;:::o;3071:139::-;3117:5;3155:6;3142:20;3133:29;;3171:33;3198:5;3171:33;:::i;:::-;3071:139;;;;:::o;3216:329::-;3275:6;3324:2;3312:9;3303:7;3299:23;3295:32;3292:119;;;3330:79;;:::i;:::-;3292:119;3450:1;3475:53;3520:7;3511:6;3500:9;3496:22;3475:53;:::i;:::-;3465:63;;3421:117;3216:329;;;;:::o;3551:126::-;3588:7;3628:42;3621:5;3617:54;3606:65;;3551:126;;;:::o;3683:96::-;3720:7;3749:24;3767:5;3749:24;:::i;:::-;3738:35;;3683:96;;;:::o;3785:118::-;3872:24;3890:5;3872:24;:::i;:::-;3867:3;3860:37;3785:118;;:::o;3909:222::-;4002:4;4040:2;4029:9;4025:18;4017:26;;4053:71;4121:1;4110:9;4106:17;4097:6;4053:71;:::i;:::-;3909:222;;;;:::o;4137:122::-;4210:24;4228:5;4210:24;:::i;:::-;4203:5;4200:35;4190:63;;4249:1;4246;4239:12;4190:63;4137:122;:::o;4265:139::-;4311:5;4349:6;4336:20;4327:29;;4365:33;4392:5;4365:33;:::i;:::-;4265:139;;;;:::o;4410:474::-;4478:6;4486;4535:2;4523:9;4514:7;4510:23;4506:32;4503:119;;;4541:79;;:::i;:::-;4503:119;4661:1;4686:53;4731:7;4722:6;4711:9;4707:22;4686:53;:::i;:::-;4676:63;;4632:117;4788:2;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4759:118;4410:474;;;;;:::o;4890:329::-;4949:6;4998:2;4986:9;4977:7;4973:23;4969:32;4966:119;;;5004:79;;:::i;:::-;4966:119;5124:1;5149:53;5194:7;5185:6;5174:9;5170:22;5149:53;:::i;:::-;5139:63;;5095:117;4890:329;;;;:::o;5225:619::-;5302:6;5310;5318;5367:2;5355:9;5346:7;5342:23;5338:32;5335:119;;;5373:79;;:::i;:::-;5335:119;5493:1;5518:53;5563:7;5554:6;5543:9;5539:22;5518:53;:::i;:::-;5508:63;;5464:117;5620:2;5646:53;5691:7;5682:6;5671:9;5667:22;5646:53;:::i;:::-;5636:63;;5591:118;5748:2;5774:53;5819:7;5810:6;5799:9;5795:22;5774:53;:::i;:::-;5764:63;;5719:118;5225:619;;;;;:::o;5850:117::-;5959:1;5956;5949:12;5973:117;6082:1;6079;6072:12;6096:180;6144:77;6141:1;6134:88;6241:4;6238:1;6231:15;6265:4;6262:1;6255:15;6282:281;6365:27;6387:4;6365:27;:::i;:::-;6357:6;6353:40;6495:6;6483:10;6480:22;6459:18;6447:10;6444:34;6441:62;6438:88;;;6506:18;;:::i;:::-;6438:88;6546:10;6542:2;6535:22;6325:238;6282:281;;:::o;6569:129::-;6603:6;6630:20;;:::i;:::-;6620:30;;6659:33;6687:4;6679:6;6659:33;:::i;:::-;6569:129;;;:::o;6704:308::-;6766:4;6856:18;6848:6;6845:30;6842:56;;;6878:18;;:::i;:::-;6842:56;6916:29;6938:6;6916:29;:::i;:::-;6908:37;;7000:4;6994;6990:15;6982:23;;6704:308;;;:::o;7018:146::-;7115:6;7110:3;7105;7092:30;7156:1;7147:6;7142:3;7138:16;7131:27;7018:146;;;:::o;7170:425::-;7248:5;7273:66;7289:49;7331:6;7289:49;:::i;:::-;7273:66;:::i;:::-;7264:75;;7362:6;7355:5;7348:21;7400:4;7393:5;7389:16;7438:3;7429:6;7424:3;7420:16;7417:25;7414:112;;;7445:79;;:::i;:::-;7414:112;7535:54;7582:6;7577:3;7572;7535:54;:::i;:::-;7254:341;7170:425;;;;;:::o;7615:340::-;7671:5;7720:3;7713:4;7705:6;7701:17;7697:27;7687:122;;7728:79;;:::i;:::-;7687:122;7845:6;7832:20;7870:79;7945:3;7937:6;7930:4;7922:6;7918:17;7870:79;:::i;:::-;7861:88;;7677:278;7615:340;;;;:::o;7961:509::-;8030:6;8079:2;8067:9;8058:7;8054:23;8050:32;8047:119;;;8085:79;;:::i;:::-;8047:119;8233:1;8222:9;8218:17;8205:31;8263:18;8255:6;8252:30;8249:117;;;8285:79;;:::i;:::-;8249:117;8390:63;8445:7;8436:6;8425:9;8421:22;8390:63;:::i;:::-;8380:73;;8176:287;7961:509;;;;:::o;8476:118::-;8563:24;8581:5;8563:24;:::i;:::-;8558:3;8551:37;8476:118;;:::o;8600:222::-;8693:4;8731:2;8720:9;8716:18;8708:26;;8744:71;8812:1;8801:9;8797:17;8788:6;8744:71;:::i;:::-;8600:222;;;;:::o;8828:116::-;8898:21;8913:5;8898:21;:::i;:::-;8891:5;8888:32;8878:60;;8934:1;8931;8924:12;8878:60;8828:116;:::o;8950:133::-;8993:5;9031:6;9018:20;9009:29;;9047:30;9071:5;9047:30;:::i;:::-;8950:133;;;;:::o;9089:468::-;9154:6;9162;9211:2;9199:9;9190:7;9186:23;9182:32;9179:119;;;9217:79;;:::i;:::-;9179:119;9337:1;9362:53;9407:7;9398:6;9387:9;9383:22;9362:53;:::i;:::-;9352:63;;9308:117;9464:2;9490:50;9532:7;9523:6;9512:9;9508:22;9490:50;:::i;:::-;9480:60;;9435:115;9089:468;;;;;:::o;9563:307::-;9624:4;9714:18;9706:6;9703:30;9700:56;;;9736:18;;:::i;:::-;9700:56;9774:29;9796:6;9774:29;:::i;:::-;9766:37;;9858:4;9852;9848:15;9840:23;;9563:307;;;:::o;9876:423::-;9953:5;9978:65;9994:48;10035:6;9994:48;:::i;:::-;9978:65;:::i;:::-;9969:74;;10066:6;10059:5;10052:21;10104:4;10097:5;10093:16;10142:3;10133:6;10128:3;10124:16;10121:25;10118:112;;;10149:79;;:::i;:::-;10118:112;10239:54;10286:6;10281:3;10276;10239:54;:::i;:::-;9959:340;9876:423;;;;;:::o;10318:338::-;10373:5;10422:3;10415:4;10407:6;10403:17;10399:27;10389:122;;10430:79;;:::i;:::-;10389:122;10547:6;10534:20;10572:78;10646:3;10638:6;10631:4;10623:6;10619:17;10572:78;:::i;:::-;10563:87;;10379:277;10318:338;;;;:::o;10662:943::-;10757:6;10765;10773;10781;10830:3;10818:9;10809:7;10805:23;10801:33;10798:120;;;10837:79;;:::i;:::-;10798:120;10957:1;10982:53;11027:7;11018:6;11007:9;11003:22;10982:53;:::i;:::-;10972:63;;10928:117;11084:2;11110:53;11155:7;11146:6;11135:9;11131:22;11110:53;:::i;:::-;11100:63;;11055:118;11212:2;11238:53;11283:7;11274:6;11263:9;11259:22;11238:53;:::i;:::-;11228:63;;11183:118;11368:2;11357:9;11353:18;11340:32;11399:18;11391:6;11388:30;11385:117;;;11421:79;;:::i;:::-;11385:117;11526:62;11580:7;11571:6;11560:9;11556:22;11526:62;:::i;:::-;11516:72;;11311:287;10662:943;;;;;;;:::o;11611:474::-;11679:6;11687;11736:2;11724:9;11715:7;11711:23;11707:32;11704:119;;;11742:79;;:::i;:::-;11704:119;11862:1;11887:53;11932:7;11923:6;11912:9;11908:22;11887:53;:::i;:::-;11877:63;;11833:117;11989:2;12015:53;12060:7;12051:6;12040:9;12036:22;12015:53;:::i;:::-;12005:63;;11960:118;11611:474;;;;;:::o;12091:180::-;12139:77;12136:1;12129:88;12236:4;12233:1;12226:15;12260:4;12257:1;12250:15;12277:320;12321:6;12358:1;12352:4;12348:12;12338:22;;12405:1;12399:4;12395:12;12426:18;12416:81;;12482:4;12474:6;12470:17;12460:27;;12416:81;12544:2;12536:6;12533:14;12513:18;12510:38;12507:84;;12563:18;;:::i;:::-;12507:84;12328:269;12277:320;;;:::o;12603:231::-;12743:34;12739:1;12731:6;12727:14;12720:58;12812:14;12807:2;12799:6;12795:15;12788:39;12603:231;:::o;12840:366::-;12982:3;13003:67;13067:2;13062:3;13003:67;:::i;:::-;12996:74;;13079:93;13168:3;13079:93;:::i;:::-;13197:2;13192:3;13188:12;13181:19;;12840:366;;;:::o;13212:419::-;13378:4;13416:2;13405:9;13401:18;13393:26;;13465:9;13459:4;13455:20;13451:1;13440:9;13436:17;13429:47;13493:131;13619:4;13493:131;:::i;:::-;13485:139;;13212:419;;;:::o;13637:220::-;13777:34;13773:1;13765:6;13761:14;13754:58;13846:3;13841:2;13833:6;13829:15;13822:28;13637:220;:::o;13863:366::-;14005:3;14026:67;14090:2;14085:3;14026:67;:::i;:::-;14019:74;;14102:93;14191:3;14102:93;:::i;:::-;14220:2;14215:3;14211:12;14204:19;;13863:366;;;:::o;14235:419::-;14401:4;14439:2;14428:9;14424:18;14416:26;;14488:9;14482:4;14478:20;14474:1;14463:9;14459:17;14452:47;14516:131;14642:4;14516:131;:::i;:::-;14508:139;;14235:419;;;:::o;14660:243::-;14800:34;14796:1;14788:6;14784:14;14777:58;14869:26;14864:2;14856:6;14852:15;14845:51;14660:243;:::o;14909:366::-;15051:3;15072:67;15136:2;15131:3;15072:67;:::i;:::-;15065:74;;15148:93;15237:3;15148:93;:::i;:::-;15266:2;15261:3;15257:12;15250:19;;14909:366;;;:::o;15281:419::-;15447:4;15485:2;15474:9;15470:18;15462:26;;15534:9;15528:4;15524:20;15520:1;15509:9;15505:17;15498:47;15562:131;15688:4;15562:131;:::i;:::-;15554:139;;15281:419;;;:::o;15706:236::-;15846:34;15842:1;15834:6;15830:14;15823:58;15915:19;15910:2;15902:6;15898:15;15891:44;15706:236;:::o;15948:366::-;16090:3;16111:67;16175:2;16170:3;16111:67;:::i;:::-;16104:74;;16187:93;16276:3;16187:93;:::i;:::-;16305:2;16300:3;16296:12;16289:19;;15948:366;;;:::o;16320:419::-;16486:4;16524:2;16513:9;16509:18;16501:26;;16573:9;16567:4;16563:20;16559:1;16548:9;16544:17;16537:47;16601:131;16727:4;16601:131;:::i;:::-;16593:139;;16320:419;;;:::o;16745:163::-;16885:15;16881:1;16873:6;16869:14;16862:39;16745:163;:::o;16914:366::-;17056:3;17077:67;17141:2;17136:3;17077:67;:::i;:::-;17070:74;;17153:93;17242:3;17153:93;:::i;:::-;17271:2;17266:3;17262:12;17255:19;;16914:366;;;:::o;17286:419::-;17452:4;17490:2;17479:9;17475:18;17467:26;;17539:9;17533:4;17529:20;17525:1;17514:9;17510:17;17503:47;17567:131;17693:4;17567:131;:::i;:::-;17559:139;;17286:419;;;:::o;17711:235::-;17851:34;17847:1;17839:6;17835:14;17828:58;17920:18;17915:2;17907:6;17903:15;17896:43;17711:235;:::o;17952:366::-;18094:3;18115:67;18179:2;18174:3;18115:67;:::i;:::-;18108:74;;18191:93;18280:3;18191:93;:::i;:::-;18309:2;18304:3;18300:12;18293:19;;17952:366;;;:::o;18324:419::-;18490:4;18528:2;18517:9;18513:18;18505:26;;18577:9;18571:4;18567:20;18563:1;18552:9;18548:17;18541:47;18605:131;18731:4;18605:131;:::i;:::-;18597:139;;18324:419;;;:::o;18749:182::-;18889:34;18885:1;18877:6;18873:14;18866:58;18749:182;:::o;18937:366::-;19079:3;19100:67;19164:2;19159:3;19100:67;:::i;:::-;19093:74;;19176:93;19265:3;19176:93;:::i;:::-;19294:2;19289:3;19285:12;19278:19;;18937:366;;;:::o;19309:419::-;19475:4;19513:2;19502:9;19498:18;19490:26;;19562:9;19556:4;19552:20;19548:1;19537:9;19533:17;19526:47;19590:131;19716:4;19590:131;:::i;:::-;19582:139;;19309:419;;;:::o;19734:141::-;19783:4;19806:3;19798:11;;19829:3;19826:1;19819:14;19863:4;19860:1;19850:18;19842:26;;19734:141;;;:::o;19881:93::-;19918:6;19965:2;19960;19953:5;19949:14;19945:23;19935:33;;19881:93;;;:::o;19980:107::-;20024:8;20074:5;20068:4;20064:16;20043:37;;19980:107;;;;:::o;20093:393::-;20162:6;20212:1;20200:10;20196:18;20235:97;20265:66;20254:9;20235:97;:::i;:::-;20353:39;20383:8;20372:9;20353:39;:::i;:::-;20341:51;;20425:4;20421:9;20414:5;20410:21;20401:30;;20474:4;20464:8;20460:19;20453:5;20450:30;20440:40;;20169:317;;20093:393;;;;;:::o;20492:60::-;20520:3;20541:5;20534:12;;20492:60;;;:::o;20558:142::-;20608:9;20641:53;20659:34;20668:24;20686:5;20668:24;:::i;:::-;20659:34;:::i;:::-;20641:53;:::i;:::-;20628:66;;20558:142;;;:::o;20706:75::-;20749:3;20770:5;20763:12;;20706:75;;;:::o;20787:269::-;20897:39;20928:7;20897:39;:::i;:::-;20958:91;21007:41;21031:16;21007:41;:::i;:::-;20999:6;20992:4;20986:11;20958:91;:::i;:::-;20952:4;20945:105;20863:193;20787:269;;;:::o;21062:73::-;21107:3;21062:73;:::o;21141:189::-;21218:32;;:::i;:::-;21259:65;21317:6;21309;21303:4;21259:65;:::i;:::-;21194:136;21141:189;;:::o;21336:186::-;21396:120;21413:3;21406:5;21403:14;21396:120;;;21467:39;21504:1;21497:5;21467:39;:::i;:::-;21440:1;21433:5;21429:13;21420:22;;21396:120;;;21336:186;;:::o;21528:543::-;21629:2;21624:3;21621:11;21618:446;;;21663:38;21695:5;21663:38;:::i;:::-;21747:29;21765:10;21747:29;:::i;:::-;21737:8;21733:44;21930:2;21918:10;21915:18;21912:49;;;21951:8;21936:23;;21912:49;21974:80;22030:22;22048:3;22030:22;:::i;:::-;22020:8;22016:37;22003:11;21974:80;:::i;:::-;21633:431;;21618:446;21528:543;;;:::o;22077:117::-;22131:8;22181:5;22175:4;22171:16;22150:37;;22077:117;;;;:::o;22200:169::-;22244:6;22277:51;22325:1;22321:6;22313:5;22310:1;22306:13;22277:51;:::i;:::-;22273:56;22358:4;22352;22348:15;22338:25;;22251:118;22200:169;;;;:::o;22374:295::-;22450:4;22596:29;22621:3;22615:4;22596:29;:::i;:::-;22588:37;;22658:3;22655:1;22651:11;22645:4;22642:21;22634:29;;22374:295;;;;:::o;22674:1395::-;22791:37;22824:3;22791:37;:::i;:::-;22893:18;22885:6;22882:30;22879:56;;;22915:18;;:::i;:::-;22879:56;22959:38;22991:4;22985:11;22959:38;:::i;:::-;23044:67;23104:6;23096;23090:4;23044:67;:::i;:::-;23138:1;23162:4;23149:17;;23194:2;23186:6;23183:14;23211:1;23206:618;;;;23868:1;23885:6;23882:77;;;23934:9;23929:3;23925:19;23919:26;23910:35;;23882:77;23985:67;24045:6;24038:5;23985:67;:::i;:::-;23979:4;23972:81;23841:222;23176:887;;23206:618;23258:4;23254:9;23246:6;23242:22;23292:37;23324:4;23292:37;:::i;:::-;23351:1;23365:208;23379:7;23376:1;23373:14;23365:208;;;23458:9;23453:3;23449:19;23443:26;23435:6;23428:42;23509:1;23501:6;23497:14;23487:24;;23556:2;23545:9;23541:18;23528:31;;23402:4;23399:1;23395:12;23390:17;;23365:208;;;23601:6;23592:7;23589:19;23586:179;;;23659:9;23654:3;23650:19;23644:26;23702:48;23744:4;23736:6;23732:17;23721:9;23702:48;:::i;:::-;23694:6;23687:64;23609:156;23586:179;23811:1;23807;23799:6;23795:14;23791:22;23785:4;23778:36;23213:611;;;23176:887;;22766:1303;;;22674:1395;;:::o;24075:228::-;24215:34;24211:1;24203:6;24199:14;24192:58;24284:11;24279:2;24271:6;24267:15;24260:36;24075:228;:::o;24309:366::-;24451:3;24472:67;24536:2;24531:3;24472:67;:::i;:::-;24465:74;;24548:93;24637:3;24548:93;:::i;:::-;24666:2;24661:3;24657:12;24650:19;;24309:366;;;:::o;24681:419::-;24847:4;24885:2;24874:9;24870:18;24862:26;;24934:9;24928:4;24924:20;24920:1;24909:9;24905:17;24898:47;24962:131;25088:4;24962:131;:::i;:::-;24954:139;;24681:419;;;:::o;25106:229::-;25246:34;25242:1;25234:6;25230:14;25223:58;25315:12;25310:2;25302:6;25298:15;25291:37;25106:229;:::o;25341:366::-;25483:3;25504:67;25568:2;25563:3;25504:67;:::i;:::-;25497:74;;25580:93;25669:3;25580:93;:::i;:::-;25698:2;25693:3;25689:12;25682:19;;25341:366;;;:::o;25713:419::-;25879:4;25917:2;25906:9;25902:18;25894:26;;25966:9;25960:4;25956:20;25952:1;25941:9;25937:17;25930:47;25994:131;26120:4;25994:131;:::i;:::-;25986:139;;25713:419;;;:::o;26138:175::-;26278:27;26274:1;26266:6;26262:14;26255:51;26138:175;:::o;26319:366::-;26461:3;26482:67;26546:2;26541:3;26482:67;:::i;:::-;26475:74;;26558:93;26647:3;26558:93;:::i;:::-;26676:2;26671:3;26667:12;26660:19;;26319:366;;;:::o;26691:419::-;26857:4;26895:2;26884:9;26880:18;26872:26;;26944:9;26938:4;26934:20;26930:1;26919:9;26915:17;26908:47;26972:131;27098:4;26972:131;:::i;:::-;26964:139;;26691:419;;;:::o;27116:234::-;27256:34;27252:1;27244:6;27240:14;27233:58;27325:17;27320:2;27312:6;27308:15;27301:42;27116:234;:::o;27356:366::-;27498:3;27519:67;27583:2;27578:3;27519:67;:::i;:::-;27512:74;;27595:93;27684:3;27595:93;:::i;:::-;27713:2;27708:3;27704:12;27697:19;;27356:366;;;:::o;27728:419::-;27894:4;27932:2;27921:9;27917:18;27909:26;;27981:9;27975:4;27971:20;27967:1;27956:9;27952:17;27945:47;28009:131;28135:4;28009:131;:::i;:::-;28001:139;;27728:419;;;:::o;28153:148::-;28255:11;28292:3;28277:18;;28153:148;;;;:::o;28331:874::-;28434:3;28471:5;28465:12;28500:36;28526:9;28500:36;:::i;:::-;28552:89;28634:6;28629:3;28552:89;:::i;:::-;28545:96;;28672:1;28661:9;28657:17;28688:1;28683:166;;;;28863:1;28858:341;;;;28650:549;;28683:166;28767:4;28763:9;28752;28748:25;28743:3;28736:38;28829:6;28822:14;28815:22;28807:6;28803:35;28798:3;28794:45;28787:52;;28683:166;;28858:341;28925:38;28957:5;28925:38;:::i;:::-;28985:1;28999:154;29013:6;29010:1;29007:13;28999:154;;;29087:7;29081:14;29077:1;29072:3;29068:11;29061:35;29137:1;29128:7;29124:15;29113:26;;29035:4;29032:1;29028:12;29023:17;;28999:154;;;29182:6;29177:3;29173:16;29166:23;;28865:334;;28650:549;;28438:767;;28331:874;;;;:::o;29211:390::-;29317:3;29345:39;29378:5;29345:39;:::i;:::-;29400:89;29482:6;29477:3;29400:89;:::i;:::-;29393:96;;29498:65;29556:6;29551:3;29544:4;29537:5;29533:16;29498:65;:::i;:::-;29588:6;29583:3;29579:16;29572:23;;29321:280;29211:390;;;;:::o;29607:429::-;29784:3;29806:92;29894:3;29885:6;29806:92;:::i;:::-;29799:99;;29915:95;30006:3;29997:6;29915:95;:::i;:::-;29908:102;;30027:3;30020:10;;29607:429;;;;;:::o;30042:225::-;30182:34;30178:1;30170:6;30166:14;30159:58;30251:8;30246:2;30238:6;30234:15;30227:33;30042:225;:::o;30273:366::-;30415:3;30436:67;30500:2;30495:3;30436:67;:::i;:::-;30429:74;;30512:93;30601:3;30512:93;:::i;:::-;30630:2;30625:3;30621:12;30614:19;;30273:366;;;:::o;30645:419::-;30811:4;30849:2;30838:9;30834:18;30826:26;;30898:9;30892:4;30888:20;30884:1;30873:9;30869:17;30862:47;30926:131;31052:4;30926:131;:::i;:::-;30918:139;;30645:419;;;:::o;31070:231::-;31210:34;31206:1;31198:6;31194:14;31187:58;31279:14;31274:2;31266:6;31262:15;31255:39;31070:231;:::o;31307:366::-;31449:3;31470:67;31534:2;31529:3;31470:67;:::i;:::-;31463:74;;31546:93;31635:3;31546:93;:::i;:::-;31664:2;31659:3;31655:12;31648:19;;31307:366;;;:::o;31679:419::-;31845:4;31883:2;31872:9;31868:18;31860:26;;31932:9;31926:4;31922:20;31918:1;31907:9;31903:17;31896:47;31960:131;32086:4;31960:131;:::i;:::-;31952:139;;31679:419;;;:::o;32104:228::-;32244:34;32240:1;32232:6;32228:14;32221:58;32313:11;32308:2;32300:6;32296:15;32289:36;32104:228;:::o;32338:366::-;32480:3;32501:67;32565:2;32560:3;32501:67;:::i;:::-;32494:74;;32577:93;32666:3;32577:93;:::i;:::-;32695:2;32690:3;32686:12;32679:19;;32338:366;;;:::o;32710:419::-;32876:4;32914:2;32903:9;32899:18;32891:26;;32963:9;32957:4;32953:20;32949:1;32938:9;32934:17;32927:47;32991:131;33117:4;32991:131;:::i;:::-;32983:139;;32710:419;;;:::o;33135:223::-;33275:34;33271:1;33263:6;33259:14;33252:58;33344:6;33339:2;33331:6;33327:15;33320:31;33135:223;:::o;33364:366::-;33506:3;33527:67;33591:2;33586:3;33527:67;:::i;:::-;33520:74;;33603:93;33692:3;33603:93;:::i;:::-;33721:2;33716:3;33712:12;33705:19;;33364:366;;;:::o;33736:419::-;33902:4;33940:2;33929:9;33925:18;33917:26;;33989:9;33983:4;33979:20;33975:1;33964:9;33960:17;33953:47;34017:131;34143:4;34017:131;:::i;:::-;34009:139;;33736:419;;;:::o;34161:180::-;34209:77;34206:1;34199:88;34306:4;34303:1;34296:15;34330:4;34327:1;34320:15;34347:194;34387:4;34407:20;34425:1;34407:20;:::i;:::-;34402:25;;34441:20;34459:1;34441:20;:::i;:::-;34436:25;;34485:1;34482;34478:9;34470:17;;34509:1;34503:4;34500:11;34497:37;;;34514:18;;:::i;:::-;34497:37;34347:194;;;;:::o;34547:191::-;34587:3;34606:20;34624:1;34606:20;:::i;:::-;34601:25;;34640:20;34658:1;34640:20;:::i;:::-;34635:25;;34683:1;34680;34676:9;34669:16;;34704:3;34701:1;34698:10;34695:36;;;34711:18;;:::i;:::-;34695:36;34547:191;;;;:::o;34744:182::-;34884:34;34880:1;34872:6;34868:14;34861:58;34744:182;:::o;34932:366::-;35074:3;35095:67;35159:2;35154:3;35095:67;:::i;:::-;35088:74;;35171:93;35260:3;35171:93;:::i;:::-;35289:2;35284:3;35280:12;35273:19;;34932:366;;;:::o;35304:419::-;35470:4;35508:2;35497:9;35493:18;35485:26;;35557:9;35551:4;35547:20;35543:1;35532:9;35528:17;35521:47;35585:131;35711:4;35585:131;:::i;:::-;35577:139;;35304:419;;;:::o;35729:178::-;35869:30;35865:1;35857:6;35853:14;35846:54;35729:178;:::o;35913:366::-;36055:3;36076:67;36140:2;36135:3;36076:67;:::i;:::-;36069:74;;36152:93;36241:3;36152:93;:::i;:::-;36270:2;36265:3;36261:12;36254:19;;35913:366;;;:::o;36285:419::-;36451:4;36489:2;36478:9;36474:18;36466:26;;36538:9;36532:4;36528:20;36524:1;36513:9;36509:17;36502:47;36566:131;36692:4;36566:131;:::i;:::-;36558:139;;36285:419;;;:::o;36710:237::-;36850:34;36846:1;36838:6;36834:14;36827:58;36919:20;36914:2;36906:6;36902:15;36895:45;36710:237;:::o;36953:366::-;37095:3;37116:67;37180:2;37175:3;37116:67;:::i;:::-;37109:74;;37192:93;37281:3;37192:93;:::i;:::-;37310:2;37305:3;37301:12;37294:19;;36953:366;;;:::o;37325:419::-;37491:4;37529:2;37518:9;37514:18;37506:26;;37578:9;37572:4;37568:20;37564:1;37553:9;37549:17;37542:47;37606:131;37732:4;37606:131;:::i;:::-;37598:139;;37325:419;;;:::o;37750:233::-;37789:3;37812:24;37830:5;37812:24;:::i;:::-;37803:33;;37858:66;37851:5;37848:77;37845:103;;37928:18;;:::i;:::-;37845:103;37975:1;37968:5;37964:13;37957:20;;37750:233;;;:::o;37989:180::-;38037:77;38034:1;38027:88;38134:4;38131:1;38124:15;38158:4;38155:1;38148:15;38175:185;38215:1;38232:20;38250:1;38232:20;:::i;:::-;38227:25;;38266:20;38284:1;38266:20;:::i;:::-;38261:25;;38305:1;38295:35;;38310:18;;:::i;:::-;38295:35;38352:1;38349;38345:9;38340:14;;38175:185;;;;:::o;38366:176::-;38398:1;38415:20;38433:1;38415:20;:::i;:::-;38410:25;;38449:20;38467:1;38449:20;:::i;:::-;38444:25;;38488:1;38478:35;;38493:18;;:::i;:::-;38478:35;38534:1;38531;38527:9;38522:14;;38366:176;;;;:::o;38548:180::-;38596:77;38593:1;38586:88;38693:4;38690:1;38683:15;38717:4;38714:1;38707:15;38734:98;38785:6;38819:5;38813:12;38803:22;;38734:98;;;:::o;38838:168::-;38921:11;38955:6;38950:3;38943:19;38995:4;38990:3;38986:14;38971:29;;38838:168;;;;:::o;39012:373::-;39098:3;39126:38;39158:5;39126:38;:::i;:::-;39180:70;39243:6;39238:3;39180:70;:::i;:::-;39173:77;;39259:65;39317:6;39312:3;39305:4;39298:5;39294:16;39259:65;:::i;:::-;39349:29;39371:6;39349:29;:::i;:::-;39344:3;39340:39;39333:46;;39102:283;39012:373;;;;:::o;39391:640::-;39586:4;39624:3;39613:9;39609:19;39601:27;;39638:71;39706:1;39695:9;39691:17;39682:6;39638:71;:::i;:::-;39719:72;39787:2;39776:9;39772:18;39763:6;39719:72;:::i;:::-;39801;39869:2;39858:9;39854:18;39845:6;39801:72;:::i;:::-;39920:9;39914:4;39910:20;39905:2;39894:9;39890:18;39883:48;39948:76;40019:4;40010:6;39948:76;:::i;:::-;39940:84;;39391:640;;;;;;;:::o;40037:141::-;40093:5;40124:6;40118:13;40109:22;;40140:32;40166:5;40140:32;:::i;:::-;40037:141;;;;:::o;40184:349::-;40253:6;40302:2;40290:9;40281:7;40277:23;40273:32;40270:119;;;40308:79;;:::i;:::-;40270:119;40428:1;40453:63;40508:7;40499:6;40488:9;40484:22;40453:63;:::i;:::-;40443:73;;40399:127;40184:349;;;;:::o

Swarm Source

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