ETH Price: $3,414.60 (+1.70%)

Token

BlueprintedNFT (BP)
 

Overview

Max Total Supply

888 BP

Holders

333

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
ikonic.eth
Balance
3 BP
0xf81ca0c17423ef1e918daee6035eeabb99401a89
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:
BlueprintedNFT

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 2 of 13: BlueprintedNFT.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.7;

import "./Ownable.sol";
import "./ERC721Enumerable.sol";

contract BlueprintedNFT is ERC721Enumerable, Ownable {
    string  public              baseURI;
    
    address public              proxyRegistryAddress;
    address public              payee1;
    address public              payee2;

    bool    public              saleStatus;
    uint256 public constant     MAX_SUPPLY          = 7000;
    uint256 public              MAX_GIVEAWAY        = 350;

    uint256 public constant     MAX_PER_TX          = 20;
    uint256 public              priceInWei          = 0.02 ether;

    mapping(address => bool) public projectProxy;

    constructor(
        string memory _baseURI, 
        address _proxyRegistryAddress, 
        address _payee1,
        address _payee2
    )
        ERC721("BlueprintedNFT", "BP")
    {
        baseURI = _baseURI;
        proxyRegistryAddress = _proxyRegistryAddress;
        payee1 = _payee1;
        payee2 = _payee2;
    }

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

    function setPrice(uint256 _priceInWei) public onlyOwner {
        priceInWei = _priceInWei;
    }

    function tokenURI(uint256 _tokenId) public view override returns (string memory) {
        require(_exists(_tokenId), "Token does not exist.");
        return string(abi.encodePacked(baseURI, Strings.toString(_tokenId), ".json"));
    }

    function setProxyRegistryAddress(address _proxyRegistryAddress) external onlyOwner {
        proxyRegistryAddress = _proxyRegistryAddress;
    }

    function toggleSaleStatus() external onlyOwner {
        saleStatus = !saleStatus;
    }

    function mint(uint256 count) public payable {
        require(saleStatus, "Sale is not open");
        require(count * priceInWei == msg.value, "Invalid funds provided.");
        require(count < MAX_PER_TX, "Exceeds max per transaction.");
        uint256 totalSupply = _owners.length;
        require(totalSupply + count < MAX_SUPPLY, "Excedes max supply.");
         
        for(uint i; i < count; i++) { 
            _mint(_msgSender(), totalSupply + i);
        }
    }

    function promoMint(uint _qty, address _to) public onlyOwner {
        require(MAX_GIVEAWAY - _qty >= 0, "Exceeds max giveaway.");
        uint256 totalSupply = _owners.length;
        require(totalSupply + _qty < MAX_SUPPLY, "Excedes max supply.");
        for (uint i = 0; i < _qty; i++) {
            _mint(_to, totalSupply + i);
        }
        MAX_GIVEAWAY -= _qty;
    }

    function burn(uint256 tokenId) public { 
        require(_isApprovedOrOwner(_msgSender(), tokenId), "Not approved to burn.");
        _burn(tokenId);
    }

    function withdraw() public  {
        (bool success, ) = payee1.call{value: address(this).balance * 10 / 100}("");
        require(success, "Failed to send to payee1.");
        (bool success2, ) = payee2.call{value: address(this).balance}("");
        require(success2, "Failed to send to payee2.");
    }

    function walletOfOwner(address _owner) public view returns (uint256[] memory) {
        uint256 tokenCount = balanceOf(_owner);
        if (tokenCount == 0) return new uint256[](0);

        uint256[] memory tokensId = new uint256[](tokenCount);
        for (uint256 i; i < tokenCount; i++) {
            tokensId[i] = tokenOfOwnerByIndex(_owner, i);
        }
        return tokensId;
    }

    function batchTransferFrom(address _from, address _to, uint256[] memory _tokenIds) public {
        for (uint256 i = 0; i < _tokenIds.length; i++) {
            transferFrom(_from, _to, _tokenIds[i]);
        }
    }

    function batchSafeTransferFrom(address _from, address _to, uint256[] memory _tokenIds, bytes memory data_) public {
        for (uint256 i = 0; i < _tokenIds.length; i++) {
            safeTransferFrom(_from, _to, _tokenIds[i], data_);
        }
    }

    function isOwnerOf(address account, uint256[] calldata _tokenIds) external view returns (bool){
        for(uint256 i; i < _tokenIds.length; ++i ){
            if(_owners[_tokenIds[i]] != account)
                return false;
        }

        return true;
    }

    function isApprovedForAll(address _owner, address operator) public view override returns (bool) {
        OpenSeaProxyRegistry proxyRegistry = OpenSeaProxyRegistry(proxyRegistryAddress);
        if (address(proxyRegistry.proxies(_owner)) == operator || projectProxy[operator]) return true;
        return super.isApprovedForAll(_owner, operator);
    }

    function _mint(address to, uint256 tokenId) internal virtual override {
        _owners.push(to);
        emit Transfer(address(0), to, tokenId);
    }
}

contract OwnableDelegateProxy { }
contract OpenSeaProxyRegistry {
    mapping(address => OwnableDelegateProxy) public proxies;
}

File 1 of 13: Address.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.3.2 (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 3 of 13: Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.3.2 (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 4 of 13: ERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @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 5 of 13: ERC721.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.7;

import "./IERC721.sol";
import "./IERC721Receiver.sol";
import "./IERC721Metadata.sol";
import "./Context.sol";
import "./Strings.sol";
import "./ERC165.sol";
import "./Address.sol";

abstract contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;
    
    string private _name;
    string private _symbol;

    // Mapping from token ID to owner address
    address[] internal _owners;

    mapping(uint256 => address) private _tokenApprovals;
    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 (uint) 
    {
        require(owner != address(0), "ERC721: balance query for the zero address");

        uint count;
        for( uint i; i < _owners.length; ++i ){
          if( owner == _owners[i] )
            ++count;
        }
        return count;
    }

    /**
     * @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 {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 tokenId < _owners.length && _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);
        _owners.push(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);
        _owners[tokenId] = address(0);

        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);
        _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 6 of 13: ERC721Enumerable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.7;

import "./ERC721.sol";
import "./IERC721Enumerable.sol"; 

/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account but rips out the core of the gas-wasting processing that comes from OpenZeppelin.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) {
        return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId);
    }

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

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < _owners.length, "ERC721Enumerable: global index out of bounds");
        return index;
    }

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256 tokenId) {
        require(index < balanceOf(owner), "ERC721Enumerable: owner index out of bounds");

        uint count;
        for(uint i; i < _owners.length; i++){
            if(owner == _owners[i]){
                if(count == index) return i;
                else count++;
            }
        }

        revert("ERC721Enumerable: owner index out of bounds");
    }
}

File 7 of 13: IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.3.2 (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 8 of 13: IERC721.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @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 9 of 13: IERC721Enumerable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/IERC721Enumerable.sol)

pragma solidity ^0.8.0;

import "./IERC721.sol";

/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}

File 10 of 13: IERC721Metadata.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;

import "./IERC721.sol";

/**
 * @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 11 of 13: IERC721Receiver.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (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 12 of 13: Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.3.2 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "./Context.sol";

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

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

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

    /**
     * @dev 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 {
        _transferOwnership(address(0));
    }

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

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

File 13 of 13: Strings.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.3.2 (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);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_baseURI","type":"string"},{"internalType":"address","name":"_proxyRegistryAddress","type":"address"},{"internalType":"address","name":"_payee1","type":"address"},{"internalType":"address","name":"_payee2","type":"address"}],"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":[],"name":"MAX_GIVEAWAY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PER_TX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"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":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"},{"internalType":"bytes","name":"data_","type":"bytes"}],"name":"batchSafeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"}],"name":"batchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","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":"account","type":"address"},{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"}],"name":"isOwnerOf","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payee1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payee2","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceInWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"projectProxy","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_qty","type":"uint256"},{"internalType":"address","name":"_to","type":"address"}],"name":"promoMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proxyRegistryAddress","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":[],"name":"saleStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"uint256","name":"_priceInWei","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_proxyRegistryAddress","type":"address"}],"name":"setProxyRegistryAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleSaleStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405261015e600a5566470de4df820000600b553480156200002257600080fd5b5060405162002b9c38038062002b9c83398101604081905262000045916200023b565b604080518082018252600e81526d109b1d595c1c9a5b9d195913919560921b602080830191825283518085019094526002845261042560f41b908401528151919291620000959160009162000178565b508051620000ab90600190602084019062000178565b505050620000c8620000c26200012260201b60201c565b62000126565b8351620000dd90600690602087019062000178565b50600780546001600160a01b039485166001600160a01b03199182161790915560088054938516938216939093179092556009805491909316911617905550620003a4565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620001869062000351565b90600052602060002090601f016020900481019282620001aa5760008555620001f5565b82601f10620001c557805160ff1916838001178555620001f5565b82800160010185558215620001f5579182015b82811115620001f5578251825591602001919060010190620001d8565b506200020392915062000207565b5090565b5b8082111562000203576000815560010162000208565b80516001600160a01b03811681146200023657600080fd5b919050565b600080600080608085870312156200025257600080fd5b84516001600160401b03808211156200026a57600080fd5b818701915087601f8301126200027f57600080fd5b8151818111156200029457620002946200038e565b604051601f8201601f19908116603f01168101908382118183101715620002bf57620002bf6200038e565b81604052828152602093508a84848701011115620002dc57600080fd5b600091505b82821015620003005784820184015181830185015290830190620002e1565b82821115620003125760008484830101525b9750620003249150508782016200021e565b9450505062000336604086016200021e565b915062000346606086016200021e565b905092959194509250565b600181811c908216806200036657607f821691505b602082108114156200038857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6127e880620003b46000396000f3fe6080604052600436106102465760003560e01c80636352211e11610139578063c79b25cf116100b6578063eaa607421161007a578063eaa6074214610694578063f2fde38b146106b4578063f3993d11146106d4578063f43a22dc146106f4578063f9020e3314610709578063ffd69c0e1461072a57600080fd5b8063c79b25cf146105f4578063c87b56dd14610614578063cd7c032614610634578063d26ea6c014610654578063e985e9c51461067457600080fd5b806391b7f5ed116100fd57806391b7f5ed1461056c57806395d89b411461058c578063a0712d68146105a1578063a22cb465146105b4578063b88d4fde146105d457600080fd5b80636352211e146104e45780636c0360eb1461050457806370a0823114610519578063715018a6146105395780638da5cb5b1461054e57600080fd5b80633ccfd60b116101c75780634d44660c1161018b5780634d44660c146104345780634f6ccce71461045457806355f804b3146104745780635a4fee30146104945780635bab26e2146104b457600080fd5b80633ccfd60b1461039c57806342842e0e146103b157806342966c68146103d1578063438b6300146103f15780634c5b7a291461041e57600080fd5b806318160ddd1161020e57806318160ddd1461031157806323b872dd146103305780632f745c591461035057806332cb6b0c146103705780633c8da5881461038657600080fd5b806301ffc9a71461024b578063049c5c491461028057806306fdde0314610297578063081812fc146102b9578063095ea7b3146102f1575b600080fd5b34801561025757600080fd5b5061026b61026636600461226e565b61074a565b60405190151581526020015b60405180910390f35b34801561028c57600080fd5b50610295610775565b005b3480156102a357600080fd5b506102ac6107c9565b60405161027791906124d0565b3480156102c557600080fd5b506102d96102d436600461230e565b61085b565b6040516001600160a01b039091168152602001610277565b3480156102fd57600080fd5b5061029561030c366004612242565b6108e3565b34801561031d57600080fd5b506002545b604051908152602001610277565b34801561033c57600080fd5b5061029561034b3660046120e6565b6109f9565b34801561035c57600080fd5b5061032261036b366004612242565b610a2b565b34801561037c57600080fd5b50610322611b5881565b34801561039257600080fd5b50610322600b5481565b3480156103a857600080fd5b50610295610ade565b3480156103bd57600080fd5b506102956103cc3660046120e6565b610c3d565b3480156103dd57600080fd5b506102956103ec36600461230e565b610c58565b3480156103fd57600080fd5b5061041161040c366004611fa5565b610cb1565b604051610277919061248c565b34801561042a57600080fd5b50610322600a5481565b34801561044057600080fd5b5061026b61044f366004612187565b610d6a565b34801561046057600080fd5b5061032261046f36600461230e565b610dec565b34801561048057600080fd5b5061029561048f3660046122c5565b610e59565b3480156104a057600080fd5b506102956104af36600461205d565b610e96565b3480156104c057600080fd5b5061026b6104cf366004611fa5565b600c6020526000908152604090205460ff1681565b3480156104f057600080fd5b506102d96104ff36600461230e565b610ee0565b34801561051057600080fd5b506102ac610f6c565b34801561052557600080fd5b50610322610534366004611fa5565b610ffa565b34801561054557600080fd5b506102956110c8565b34801561055a57600080fd5b506005546001600160a01b03166102d9565b34801561057857600080fd5b5061029561058736600461230e565b6110fe565b34801561059857600080fd5b506102ac61112d565b6102956105af36600461230e565b61113c565b3480156105c057600080fd5b506102956105cf36600461220f565b6112b7565b3480156105e057600080fd5b506102956105ef366004612127565b61137c565b34801561060057600080fd5b5061029561060f366004612327565b6113b4565b34801561062057600080fd5b506102ac61062f36600461230e565b6114cf565b34801561064057600080fd5b506007546102d9906001600160a01b031681565b34801561066057600080fd5b5061029561066f366004611fa5565b611550565b34801561068057600080fd5b5061026b61068f366004611fc2565b61159c565b3480156106a057600080fd5b506009546102d9906001600160a01b031681565b3480156106c057600080fd5b506102956106cf366004611fa5565b61168f565b3480156106e057600080fd5b506102956106ef366004611ffb565b611727565b34801561070057600080fd5b50610322601481565b34801561071557600080fd5b5060095461026b90600160a01b900460ff1681565b34801561073657600080fd5b506008546102d9906001600160a01b031681565b60006001600160e01b0319821663780e9d6360e01b148061076f575061076f82611769565b92915050565b6005546001600160a01b031633146107a85760405162461bcd60e51b815260040161079f90612580565b60405180910390fd5b6009805460ff60a01b198116600160a01b9182900460ff1615909102179055565b6060600080546107d8906126c5565b80601f0160208091040260200160405190810160405280929190818152602001828054610804906126c5565b80156108515780601f1061082657610100808354040283529160200191610851565b820191906000526020600020905b81548152906001019060200180831161083457829003601f168201915b5050505050905090565b6000610866826117b9565b6108c75760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161079f565b506000908152600360205260409020546001600160a01b031690565b60006108ee82610ee0565b9050806001600160a01b0316836001600160a01b0316141561095c5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161079f565b336001600160a01b03821614806109785750610978813361159c565b6109ea5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161079f565b6109f48383611803565b505050565b610a04335b82611871565b610a205760405162461bcd60e51b815260040161079f906125b5565b6109f4838383611933565b6000610a3683610ffa565b8210610a545760405162461bcd60e51b815260040161079f906124e3565b6000805b600254811015610ac55760028181548110610a7557610a7561275b565b6000918252602090912001546001600160a01b0386811691161415610ab35783821415610aa557915061076f9050565b81610aaf81612700565b9250505b80610abd81612700565b915050610a58565b5060405162461bcd60e51b815260040161079f906124e3565b6008546000906001600160a01b03166064610afa47600a612663565b610b04919061264f565b604051600081818185875af1925050503d8060008114610b40576040519150601f19603f3d011682016040523d82523d6000602084013e610b45565b606091505b5050905080610b965760405162461bcd60e51b815260206004820152601960248201527f4661696c656420746f2073656e6420746f207061796565312e00000000000000604482015260640161079f565b6009546040516000916001600160a01b03169047908381818185875af1925050503d8060008114610be3576040519150601f19603f3d011682016040523d82523d6000602084013e610be8565b606091505b5050905080610c395760405162461bcd60e51b815260206004820152601960248201527f4661696c656420746f2073656e6420746f207061796565322e00000000000000604482015260640161079f565b5050565b6109f48383836040518060200160405280600081525061137c565b610c61336109fe565b610ca55760405162461bcd60e51b81526020600482015260156024820152742737ba1030b8383937bb32b2103a3790313ab9371760591b604482015260640161079f565b610cae81611a89565b50565b60606000610cbe83610ffa565b905080610cdf5760408051600080825260208201909252905b509392505050565b60008167ffffffffffffffff811115610cfa57610cfa612771565b604051908082528060200260200182016040528015610d23578160200160208202803683370190505b50905060005b82811015610cd757610d3b8582610a2b565b828281518110610d4d57610d4d61275b565b602090810291909101015280610d6281612700565b915050610d29565b6000805b82811015610ddf57846001600160a01b03166002858584818110610d9457610d9461275b565b9050602002013581548110610dab57610dab61275b565b6000918252602090912001546001600160a01b031614610dcf576000915050610de5565b610dd881612700565b9050610d6e565b50600190505b9392505050565b6002546000908210610e555760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b606482015260840161079f565b5090565b6005546001600160a01b03163314610e835760405162461bcd60e51b815260040161079f90612580565b8051610c39906006906020840190611e17565b60005b8251811015610ed957610ec78585858481518110610eb957610eb961275b565b60200260200101518561137c565b80610ed181612700565b915050610e99565b5050505050565b60008060028381548110610ef657610ef661275b565b6000918252602090912001546001600160a01b031690508061076f5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b606482015260840161079f565b60068054610f79906126c5565b80601f0160208091040260200160405190810160405280929190818152602001828054610fa5906126c5565b8015610ff25780601f10610fc757610100808354040283529160200191610ff2565b820191906000526020600020905b815481529060010190602001808311610fd557829003601f168201915b505050505081565b60006001600160a01b0382166110655760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b606482015260840161079f565b6000805b6002548110156110c157600281815481106110865761108661275b565b6000918252602090912001546001600160a01b03858116911614156110b1576110ae82612700565b91505b6110ba81612700565b9050611069565b5092915050565b6005546001600160a01b031633146110f25760405162461bcd60e51b815260040161079f90612580565b6110fc6000611b0b565b565b6005546001600160a01b031633146111285760405162461bcd60e51b815260040161079f90612580565b600b55565b6060600180546107d8906126c5565b600954600160a01b900460ff166111885760405162461bcd60e51b815260206004820152601060248201526f29b0b6329034b9903737ba1037b832b760811b604482015260640161079f565b34600b54826111979190612663565b146111e45760405162461bcd60e51b815260206004820152601760248201527f496e76616c69642066756e64732070726f76696465642e000000000000000000604482015260640161079f565b601481106112345760405162461bcd60e51b815260206004820152601c60248201527f45786365656473206d617820706572207472616e73616374696f6e2e00000000604482015260640161079f565b600254611b586112448383612637565b106112875760405162461bcd60e51b815260206004820152601360248201527222bc31b2b232b99036b0bc1039bab838363c9760691b604482015260640161079f565b60005b828110156109f4576112a5336112a08385612637565b611b5d565b806112af81612700565b91505061128a565b6001600160a01b0382163314156113105760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161079f565b3360008181526004602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6113863383611871565b6113a25760405162461bcd60e51b815260040161079f906125b5565b6113ae84848484611bd9565b50505050565b6005546001600160a01b031633146113de5760405162461bcd60e51b815260040161079f90612580565b600082600a546113ee9190612682565b10156114345760405162461bcd60e51b815260206004820152601560248201527422bc31b2b2b2399036b0bc1033b4bb32b0bbb0bc9760591b604482015260640161079f565b600254611b586114448483612637565b106114875760405162461bcd60e51b815260206004820152601360248201527222bc31b2b232b99036b0bc1039bab838363c9760691b604482015260640161079f565b60005b838110156114b2576114a0836112a08385612637565b806114aa81612700565b91505061148a565b5082600a60008282546114c59190612682565b9091555050505050565b60606114da826117b9565b61151e5760405162461bcd60e51b81526020600482015260156024820152742a37b5b2b7103237b2b9903737ba1032bc34b9ba1760591b604482015260640161079f565b600661152983611c0c565b60405160200161153a929190612394565b6040516020818303038152906040529050919050565b6005546001600160a01b0316331461157a5760405162461bcd60e51b815260040161079f90612580565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b60075460405163c455279160e01b81526001600160a01b03848116600483015260009281169190841690829063c45527919060240160206040518083038186803b1580156115e957600080fd5b505afa1580156115fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061162191906122a8565b6001600160a01b0316148061164e57506001600160a01b0383166000908152600c602052604090205460ff165b1561165d57600191505061076f565b6001600160a01b0380851660009081526004602090815260408083209387168352929052205460ff165b949350505050565b6005546001600160a01b031633146116b95760405162461bcd60e51b815260040161079f90612580565b6001600160a01b03811661171e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161079f565b610cae81611b0b565b60005b81518110156113ae57611757848484848151811061174a5761174a61275b565b60200260200101516109f9565b8061176181612700565b91505061172a565b60006001600160e01b031982166380ac58cd60e01b148061179a57506001600160e01b03198216635b5e139f60e01b145b8061076f57506301ffc9a760e01b6001600160e01b031983161461076f565b6002546000908210801561076f575060006001600160a01b0316600283815481106117e6576117e661275b565b6000918252602090912001546001600160a01b0316141592915050565b600081815260036020526040902080546001600160a01b0319166001600160a01b038416908117909155819061183882610ee0565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061187c826117b9565b6118dd5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161079f565b60006118e883610ee0565b9050806001600160a01b0316846001600160a01b031614806119235750836001600160a01b03166119188461085b565b6001600160a01b0316145b806116875750611687818561159c565b826001600160a01b031661194682610ee0565b6001600160a01b0316146119ae5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b606482015260840161079f565b6001600160a01b038216611a105760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161079f565b611a1b600082611803565b8160028281548110611a2f57611a2f61275b565b6000918252602082200180546001600160a01b0319166001600160a01b03938416179055604051839285811692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a4505050565b6000611a9482610ee0565b9050611aa1600083611803565b600060028381548110611ab657611ab661275b565b6000918252602082200180546001600160a01b0319166001600160a01b0393841617905560405184928416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6002805460018101825560009182527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0385169081179091556040518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b611be4848484611933565b611bf084848484611d0a565b6113ae5760405162461bcd60e51b815260040161079f9061252e565b606081611c305750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611c5a5780611c4481612700565b9150611c539050600a8361264f565b9150611c34565b60008167ffffffffffffffff811115611c7557611c75612771565b6040519080825280601f01601f191660200182016040528015611c9f576020820181803683370190505b5090505b841561168757611cb4600183612682565b9150611cc1600a8661271b565b611ccc906030612637565b60f81b818381518110611ce157611ce161275b565b60200101906001600160f81b031916908160001a905350611d03600a8661264f565b9450611ca3565b60006001600160a01b0384163b15611e0c57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611d4e90339089908890889060040161244f565b602060405180830381600087803b158015611d6857600080fd5b505af1925050508015611d98575060408051601f3d908101601f19168201909252611d959181019061228b565b60015b611df2573d808015611dc6576040519150601f19603f3d011682016040523d82523d6000602084013e611dcb565b606091505b508051611dea5760405162461bcd60e51b815260040161079f9061252e565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611687565b506001949350505050565b828054611e23906126c5565b90600052602060002090601f016020900481019282611e455760008555611e8b565b82601f10611e5e57805160ff1916838001178555611e8b565b82800160010185558215611e8b579182015b82811115611e8b578251825591602001919060010190611e70565b50610e559291505b80821115610e555760008155600101611e93565b600067ffffffffffffffff831115611ec157611ec1612771565b611ed4601f8401601f1916602001612606565b9050828152838383011115611ee857600080fd5b828260208301376000602084830101529392505050565b600082601f830112611f1057600080fd5b8135602067ffffffffffffffff821115611f2c57611f2c612771565b8160051b611f3b828201612606565b838152828101908684018388018501891015611f5657600080fd5b600093505b85841015611f79578035835260019390930192918401918401611f5b565b50979650505050505050565b600082601f830112611f9657600080fd5b610de583833560208501611ea7565b600060208284031215611fb757600080fd5b8135610de581612787565b60008060408385031215611fd557600080fd5b8235611fe081612787565b91506020830135611ff081612787565b809150509250929050565b60008060006060848603121561201057600080fd5b833561201b81612787565b9250602084013561202b81612787565b9150604084013567ffffffffffffffff81111561204757600080fd5b61205386828701611eff565b9150509250925092565b6000806000806080858703121561207357600080fd5b843561207e81612787565b9350602085013561208e81612787565b9250604085013567ffffffffffffffff808211156120ab57600080fd5b6120b788838901611eff565b935060608701359150808211156120cd57600080fd5b506120da87828801611f85565b91505092959194509250565b6000806000606084860312156120fb57600080fd5b833561210681612787565b9250602084013561211681612787565b929592945050506040919091013590565b6000806000806080858703121561213d57600080fd5b843561214881612787565b9350602085013561215881612787565b925060408501359150606085013567ffffffffffffffff81111561217b57600080fd5b6120da87828801611f85565b60008060006040848603121561219c57600080fd5b83356121a781612787565b9250602084013567ffffffffffffffff808211156121c457600080fd5b818601915086601f8301126121d857600080fd5b8135818111156121e757600080fd5b8760208260051b85010111156121fc57600080fd5b6020830194508093505050509250925092565b6000806040838503121561222257600080fd5b823561222d81612787565b915060208301358015158114611ff057600080fd5b6000806040838503121561225557600080fd5b823561226081612787565b946020939093013593505050565b60006020828403121561228057600080fd5b8135610de58161279c565b60006020828403121561229d57600080fd5b8151610de58161279c565b6000602082840312156122ba57600080fd5b8151610de581612787565b6000602082840312156122d757600080fd5b813567ffffffffffffffff8111156122ee57600080fd5b8201601f810184136122ff57600080fd5b61168784823560208401611ea7565b60006020828403121561232057600080fd5b5035919050565b6000806040838503121561233a57600080fd5b823591506020830135611ff081612787565b60008151808452612364816020860160208601612699565b601f01601f19169290920160200192915050565b6000815161238a818560208601612699565b9290920192915050565b600080845481600182811c9150808316806123b057607f831692505b60208084108214156123d057634e487b7160e01b86526022600452602486fd5b8180156123e457600181146123f557612422565b60ff19861689528489019650612422565b60008b81526020902060005b8681101561241a5781548b820152908501908301612401565b505084890196505b5050505050506124466124358286612378565b64173539b7b760d91b815260050190565b95945050505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906124829083018461234c565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156124c4578351835292840192918401916001016124a8565b50909695505050505050565b602081526000610de5602083018461234c565b6020808252602b908201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560408201526a74206f6620626f756e647360a81b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff8111828210171561262f5761262f612771565b604052919050565b6000821982111561264a5761264a61272f565b500190565b60008261265e5761265e612745565b500490565b600081600019048311821515161561267d5761267d61272f565b500290565b6000828210156126945761269461272f565b500390565b60005b838110156126b457818101518382015260200161269c565b838111156113ae5750506000910152565b600181811c908216806126d957607f821691505b602082108114156126fa57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156127145761271461272f565b5060010190565b60008261272a5761272a612745565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610cae57600080fd5b6001600160e01b031981168114610cae57600080fdfea264697066735822122014852b0ae30f577517135ea00434b0977849c33525535d30ea571e11a6f5c3c964736f6c634300080700330000000000000000000000000000000000000000000000000000000000000080000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c100000000000000000000000099dccfb625e61fa3980bdda32b55284ad2aa9af5000000000000000000000000fd041d4ee464ba0fad5d627f599702bec3cb3d920000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d645947784c6e744474763467616e5163446e7a66535056544b456d6973473378333541754450666e786974562f00000000000000000000

Deployed Bytecode

0x6080604052600436106102465760003560e01c80636352211e11610139578063c79b25cf116100b6578063eaa607421161007a578063eaa6074214610694578063f2fde38b146106b4578063f3993d11146106d4578063f43a22dc146106f4578063f9020e3314610709578063ffd69c0e1461072a57600080fd5b8063c79b25cf146105f4578063c87b56dd14610614578063cd7c032614610634578063d26ea6c014610654578063e985e9c51461067457600080fd5b806391b7f5ed116100fd57806391b7f5ed1461056c57806395d89b411461058c578063a0712d68146105a1578063a22cb465146105b4578063b88d4fde146105d457600080fd5b80636352211e146104e45780636c0360eb1461050457806370a0823114610519578063715018a6146105395780638da5cb5b1461054e57600080fd5b80633ccfd60b116101c75780634d44660c1161018b5780634d44660c146104345780634f6ccce71461045457806355f804b3146104745780635a4fee30146104945780635bab26e2146104b457600080fd5b80633ccfd60b1461039c57806342842e0e146103b157806342966c68146103d1578063438b6300146103f15780634c5b7a291461041e57600080fd5b806318160ddd1161020e57806318160ddd1461031157806323b872dd146103305780632f745c591461035057806332cb6b0c146103705780633c8da5881461038657600080fd5b806301ffc9a71461024b578063049c5c491461028057806306fdde0314610297578063081812fc146102b9578063095ea7b3146102f1575b600080fd5b34801561025757600080fd5b5061026b61026636600461226e565b61074a565b60405190151581526020015b60405180910390f35b34801561028c57600080fd5b50610295610775565b005b3480156102a357600080fd5b506102ac6107c9565b60405161027791906124d0565b3480156102c557600080fd5b506102d96102d436600461230e565b61085b565b6040516001600160a01b039091168152602001610277565b3480156102fd57600080fd5b5061029561030c366004612242565b6108e3565b34801561031d57600080fd5b506002545b604051908152602001610277565b34801561033c57600080fd5b5061029561034b3660046120e6565b6109f9565b34801561035c57600080fd5b5061032261036b366004612242565b610a2b565b34801561037c57600080fd5b50610322611b5881565b34801561039257600080fd5b50610322600b5481565b3480156103a857600080fd5b50610295610ade565b3480156103bd57600080fd5b506102956103cc3660046120e6565b610c3d565b3480156103dd57600080fd5b506102956103ec36600461230e565b610c58565b3480156103fd57600080fd5b5061041161040c366004611fa5565b610cb1565b604051610277919061248c565b34801561042a57600080fd5b50610322600a5481565b34801561044057600080fd5b5061026b61044f366004612187565b610d6a565b34801561046057600080fd5b5061032261046f36600461230e565b610dec565b34801561048057600080fd5b5061029561048f3660046122c5565b610e59565b3480156104a057600080fd5b506102956104af36600461205d565b610e96565b3480156104c057600080fd5b5061026b6104cf366004611fa5565b600c6020526000908152604090205460ff1681565b3480156104f057600080fd5b506102d96104ff36600461230e565b610ee0565b34801561051057600080fd5b506102ac610f6c565b34801561052557600080fd5b50610322610534366004611fa5565b610ffa565b34801561054557600080fd5b506102956110c8565b34801561055a57600080fd5b506005546001600160a01b03166102d9565b34801561057857600080fd5b5061029561058736600461230e565b6110fe565b34801561059857600080fd5b506102ac61112d565b6102956105af36600461230e565b61113c565b3480156105c057600080fd5b506102956105cf36600461220f565b6112b7565b3480156105e057600080fd5b506102956105ef366004612127565b61137c565b34801561060057600080fd5b5061029561060f366004612327565b6113b4565b34801561062057600080fd5b506102ac61062f36600461230e565b6114cf565b34801561064057600080fd5b506007546102d9906001600160a01b031681565b34801561066057600080fd5b5061029561066f366004611fa5565b611550565b34801561068057600080fd5b5061026b61068f366004611fc2565b61159c565b3480156106a057600080fd5b506009546102d9906001600160a01b031681565b3480156106c057600080fd5b506102956106cf366004611fa5565b61168f565b3480156106e057600080fd5b506102956106ef366004611ffb565b611727565b34801561070057600080fd5b50610322601481565b34801561071557600080fd5b5060095461026b90600160a01b900460ff1681565b34801561073657600080fd5b506008546102d9906001600160a01b031681565b60006001600160e01b0319821663780e9d6360e01b148061076f575061076f82611769565b92915050565b6005546001600160a01b031633146107a85760405162461bcd60e51b815260040161079f90612580565b60405180910390fd5b6009805460ff60a01b198116600160a01b9182900460ff1615909102179055565b6060600080546107d8906126c5565b80601f0160208091040260200160405190810160405280929190818152602001828054610804906126c5565b80156108515780601f1061082657610100808354040283529160200191610851565b820191906000526020600020905b81548152906001019060200180831161083457829003601f168201915b5050505050905090565b6000610866826117b9565b6108c75760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161079f565b506000908152600360205260409020546001600160a01b031690565b60006108ee82610ee0565b9050806001600160a01b0316836001600160a01b0316141561095c5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161079f565b336001600160a01b03821614806109785750610978813361159c565b6109ea5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161079f565b6109f48383611803565b505050565b610a04335b82611871565b610a205760405162461bcd60e51b815260040161079f906125b5565b6109f4838383611933565b6000610a3683610ffa565b8210610a545760405162461bcd60e51b815260040161079f906124e3565b6000805b600254811015610ac55760028181548110610a7557610a7561275b565b6000918252602090912001546001600160a01b0386811691161415610ab35783821415610aa557915061076f9050565b81610aaf81612700565b9250505b80610abd81612700565b915050610a58565b5060405162461bcd60e51b815260040161079f906124e3565b6008546000906001600160a01b03166064610afa47600a612663565b610b04919061264f565b604051600081818185875af1925050503d8060008114610b40576040519150601f19603f3d011682016040523d82523d6000602084013e610b45565b606091505b5050905080610b965760405162461bcd60e51b815260206004820152601960248201527f4661696c656420746f2073656e6420746f207061796565312e00000000000000604482015260640161079f565b6009546040516000916001600160a01b03169047908381818185875af1925050503d8060008114610be3576040519150601f19603f3d011682016040523d82523d6000602084013e610be8565b606091505b5050905080610c395760405162461bcd60e51b815260206004820152601960248201527f4661696c656420746f2073656e6420746f207061796565322e00000000000000604482015260640161079f565b5050565b6109f48383836040518060200160405280600081525061137c565b610c61336109fe565b610ca55760405162461bcd60e51b81526020600482015260156024820152742737ba1030b8383937bb32b2103a3790313ab9371760591b604482015260640161079f565b610cae81611a89565b50565b60606000610cbe83610ffa565b905080610cdf5760408051600080825260208201909252905b509392505050565b60008167ffffffffffffffff811115610cfa57610cfa612771565b604051908082528060200260200182016040528015610d23578160200160208202803683370190505b50905060005b82811015610cd757610d3b8582610a2b565b828281518110610d4d57610d4d61275b565b602090810291909101015280610d6281612700565b915050610d29565b6000805b82811015610ddf57846001600160a01b03166002858584818110610d9457610d9461275b565b9050602002013581548110610dab57610dab61275b565b6000918252602090912001546001600160a01b031614610dcf576000915050610de5565b610dd881612700565b9050610d6e565b50600190505b9392505050565b6002546000908210610e555760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b606482015260840161079f565b5090565b6005546001600160a01b03163314610e835760405162461bcd60e51b815260040161079f90612580565b8051610c39906006906020840190611e17565b60005b8251811015610ed957610ec78585858481518110610eb957610eb961275b565b60200260200101518561137c565b80610ed181612700565b915050610e99565b5050505050565b60008060028381548110610ef657610ef661275b565b6000918252602090912001546001600160a01b031690508061076f5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b606482015260840161079f565b60068054610f79906126c5565b80601f0160208091040260200160405190810160405280929190818152602001828054610fa5906126c5565b8015610ff25780601f10610fc757610100808354040283529160200191610ff2565b820191906000526020600020905b815481529060010190602001808311610fd557829003601f168201915b505050505081565b60006001600160a01b0382166110655760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b606482015260840161079f565b6000805b6002548110156110c157600281815481106110865761108661275b565b6000918252602090912001546001600160a01b03858116911614156110b1576110ae82612700565b91505b6110ba81612700565b9050611069565b5092915050565b6005546001600160a01b031633146110f25760405162461bcd60e51b815260040161079f90612580565b6110fc6000611b0b565b565b6005546001600160a01b031633146111285760405162461bcd60e51b815260040161079f90612580565b600b55565b6060600180546107d8906126c5565b600954600160a01b900460ff166111885760405162461bcd60e51b815260206004820152601060248201526f29b0b6329034b9903737ba1037b832b760811b604482015260640161079f565b34600b54826111979190612663565b146111e45760405162461bcd60e51b815260206004820152601760248201527f496e76616c69642066756e64732070726f76696465642e000000000000000000604482015260640161079f565b601481106112345760405162461bcd60e51b815260206004820152601c60248201527f45786365656473206d617820706572207472616e73616374696f6e2e00000000604482015260640161079f565b600254611b586112448383612637565b106112875760405162461bcd60e51b815260206004820152601360248201527222bc31b2b232b99036b0bc1039bab838363c9760691b604482015260640161079f565b60005b828110156109f4576112a5336112a08385612637565b611b5d565b806112af81612700565b91505061128a565b6001600160a01b0382163314156113105760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161079f565b3360008181526004602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6113863383611871565b6113a25760405162461bcd60e51b815260040161079f906125b5565b6113ae84848484611bd9565b50505050565b6005546001600160a01b031633146113de5760405162461bcd60e51b815260040161079f90612580565b600082600a546113ee9190612682565b10156114345760405162461bcd60e51b815260206004820152601560248201527422bc31b2b2b2399036b0bc1033b4bb32b0bbb0bc9760591b604482015260640161079f565b600254611b586114448483612637565b106114875760405162461bcd60e51b815260206004820152601360248201527222bc31b2b232b99036b0bc1039bab838363c9760691b604482015260640161079f565b60005b838110156114b2576114a0836112a08385612637565b806114aa81612700565b91505061148a565b5082600a60008282546114c59190612682565b9091555050505050565b60606114da826117b9565b61151e5760405162461bcd60e51b81526020600482015260156024820152742a37b5b2b7103237b2b9903737ba1032bc34b9ba1760591b604482015260640161079f565b600661152983611c0c565b60405160200161153a929190612394565b6040516020818303038152906040529050919050565b6005546001600160a01b0316331461157a5760405162461bcd60e51b815260040161079f90612580565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b60075460405163c455279160e01b81526001600160a01b03848116600483015260009281169190841690829063c45527919060240160206040518083038186803b1580156115e957600080fd5b505afa1580156115fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061162191906122a8565b6001600160a01b0316148061164e57506001600160a01b0383166000908152600c602052604090205460ff165b1561165d57600191505061076f565b6001600160a01b0380851660009081526004602090815260408083209387168352929052205460ff165b949350505050565b6005546001600160a01b031633146116b95760405162461bcd60e51b815260040161079f90612580565b6001600160a01b03811661171e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161079f565b610cae81611b0b565b60005b81518110156113ae57611757848484848151811061174a5761174a61275b565b60200260200101516109f9565b8061176181612700565b91505061172a565b60006001600160e01b031982166380ac58cd60e01b148061179a57506001600160e01b03198216635b5e139f60e01b145b8061076f57506301ffc9a760e01b6001600160e01b031983161461076f565b6002546000908210801561076f575060006001600160a01b0316600283815481106117e6576117e661275b565b6000918252602090912001546001600160a01b0316141592915050565b600081815260036020526040902080546001600160a01b0319166001600160a01b038416908117909155819061183882610ee0565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061187c826117b9565b6118dd5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161079f565b60006118e883610ee0565b9050806001600160a01b0316846001600160a01b031614806119235750836001600160a01b03166119188461085b565b6001600160a01b0316145b806116875750611687818561159c565b826001600160a01b031661194682610ee0565b6001600160a01b0316146119ae5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b606482015260840161079f565b6001600160a01b038216611a105760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161079f565b611a1b600082611803565b8160028281548110611a2f57611a2f61275b565b6000918252602082200180546001600160a01b0319166001600160a01b03938416179055604051839285811692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a4505050565b6000611a9482610ee0565b9050611aa1600083611803565b600060028381548110611ab657611ab661275b565b6000918252602082200180546001600160a01b0319166001600160a01b0393841617905560405184928416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6002805460018101825560009182527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0385169081179091556040518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b611be4848484611933565b611bf084848484611d0a565b6113ae5760405162461bcd60e51b815260040161079f9061252e565b606081611c305750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611c5a5780611c4481612700565b9150611c539050600a8361264f565b9150611c34565b60008167ffffffffffffffff811115611c7557611c75612771565b6040519080825280601f01601f191660200182016040528015611c9f576020820181803683370190505b5090505b841561168757611cb4600183612682565b9150611cc1600a8661271b565b611ccc906030612637565b60f81b818381518110611ce157611ce161275b565b60200101906001600160f81b031916908160001a905350611d03600a8661264f565b9450611ca3565b60006001600160a01b0384163b15611e0c57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611d4e90339089908890889060040161244f565b602060405180830381600087803b158015611d6857600080fd5b505af1925050508015611d98575060408051601f3d908101601f19168201909252611d959181019061228b565b60015b611df2573d808015611dc6576040519150601f19603f3d011682016040523d82523d6000602084013e611dcb565b606091505b508051611dea5760405162461bcd60e51b815260040161079f9061252e565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611687565b506001949350505050565b828054611e23906126c5565b90600052602060002090601f016020900481019282611e455760008555611e8b565b82601f10611e5e57805160ff1916838001178555611e8b565b82800160010185558215611e8b579182015b82811115611e8b578251825591602001919060010190611e70565b50610e559291505b80821115610e555760008155600101611e93565b600067ffffffffffffffff831115611ec157611ec1612771565b611ed4601f8401601f1916602001612606565b9050828152838383011115611ee857600080fd5b828260208301376000602084830101529392505050565b600082601f830112611f1057600080fd5b8135602067ffffffffffffffff821115611f2c57611f2c612771565b8160051b611f3b828201612606565b838152828101908684018388018501891015611f5657600080fd5b600093505b85841015611f79578035835260019390930192918401918401611f5b565b50979650505050505050565b600082601f830112611f9657600080fd5b610de583833560208501611ea7565b600060208284031215611fb757600080fd5b8135610de581612787565b60008060408385031215611fd557600080fd5b8235611fe081612787565b91506020830135611ff081612787565b809150509250929050565b60008060006060848603121561201057600080fd5b833561201b81612787565b9250602084013561202b81612787565b9150604084013567ffffffffffffffff81111561204757600080fd5b61205386828701611eff565b9150509250925092565b6000806000806080858703121561207357600080fd5b843561207e81612787565b9350602085013561208e81612787565b9250604085013567ffffffffffffffff808211156120ab57600080fd5b6120b788838901611eff565b935060608701359150808211156120cd57600080fd5b506120da87828801611f85565b91505092959194509250565b6000806000606084860312156120fb57600080fd5b833561210681612787565b9250602084013561211681612787565b929592945050506040919091013590565b6000806000806080858703121561213d57600080fd5b843561214881612787565b9350602085013561215881612787565b925060408501359150606085013567ffffffffffffffff81111561217b57600080fd5b6120da87828801611f85565b60008060006040848603121561219c57600080fd5b83356121a781612787565b9250602084013567ffffffffffffffff808211156121c457600080fd5b818601915086601f8301126121d857600080fd5b8135818111156121e757600080fd5b8760208260051b85010111156121fc57600080fd5b6020830194508093505050509250925092565b6000806040838503121561222257600080fd5b823561222d81612787565b915060208301358015158114611ff057600080fd5b6000806040838503121561225557600080fd5b823561226081612787565b946020939093013593505050565b60006020828403121561228057600080fd5b8135610de58161279c565b60006020828403121561229d57600080fd5b8151610de58161279c565b6000602082840312156122ba57600080fd5b8151610de581612787565b6000602082840312156122d757600080fd5b813567ffffffffffffffff8111156122ee57600080fd5b8201601f810184136122ff57600080fd5b61168784823560208401611ea7565b60006020828403121561232057600080fd5b5035919050565b6000806040838503121561233a57600080fd5b823591506020830135611ff081612787565b60008151808452612364816020860160208601612699565b601f01601f19169290920160200192915050565b6000815161238a818560208601612699565b9290920192915050565b600080845481600182811c9150808316806123b057607f831692505b60208084108214156123d057634e487b7160e01b86526022600452602486fd5b8180156123e457600181146123f557612422565b60ff19861689528489019650612422565b60008b81526020902060005b8681101561241a5781548b820152908501908301612401565b505084890196505b5050505050506124466124358286612378565b64173539b7b760d91b815260050190565b95945050505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906124829083018461234c565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156124c4578351835292840192918401916001016124a8565b50909695505050505050565b602081526000610de5602083018461234c565b6020808252602b908201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560408201526a74206f6620626f756e647360a81b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff8111828210171561262f5761262f612771565b604052919050565b6000821982111561264a5761264a61272f565b500190565b60008261265e5761265e612745565b500490565b600081600019048311821515161561267d5761267d61272f565b500290565b6000828210156126945761269461272f565b500390565b60005b838110156126b457818101518382015260200161269c565b838111156113ae5750506000910152565b600181811c908216806126d957607f821691505b602082108114156126fa57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156127145761271461272f565b5060010190565b60008261272a5761272a612745565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610cae57600080fd5b6001600160e01b031981168114610cae57600080fdfea264697066735822122014852b0ae30f577517135ea00434b0977849c33525535d30ea571e11a6f5c3c964736f6c63430008070033

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

0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c100000000000000000000000099dccfb625e61fa3980bdda32b55284ad2aa9af5000000000000000000000000fd041d4ee464ba0fad5d627f599702bec3cb3d920000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d645947784c6e744474763467616e5163446e7a66535056544b456d6973473378333541754450666e786974562f00000000000000000000

-----Decoded View---------------
Arg [0] : _baseURI (string): ipfs://QmdYGxLntDtv4ganQcDnzfSPVTKEmisG3x35AuDPfnxitV/
Arg [1] : _proxyRegistryAddress (address): 0xa5409ec958C83C3f309868babACA7c86DCB077c1
Arg [2] : _payee1 (address): 0x99DCCFb625e61FA3980BDda32B55284aD2aa9aF5
Arg [3] : _payee2 (address): 0xfd041d4Ee464bA0FaD5D627f599702BEC3CB3d92

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1
Arg [2] : 00000000000000000000000099dccfb625e61fa3980bdda32b55284ad2aa9af5
Arg [3] : 000000000000000000000000fd041d4ee464ba0fad5d627f599702bec3cb3d92
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [5] : 697066733a2f2f516d645947784c6e744474763467616e5163446e7a66535056
Arg [6] : 544b456d6973473378333541754450666e786974562f00000000000000000000


Deployed Bytecode Sourcemap

116:4596:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;529:222:5;;;;;;;;;;-1:-1:-1;529:222:5;;;;;:::i;:::-;;:::i;:::-;;;11465:14:13;;11458:22;11440:41;;11428:2;11413:18;529:222:5;;;;;;;;1624:88:1;;;;;;;;;;;;;:::i;:::-;;2159:98:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;2942:295::-;;;;;;;;;;-1:-1:-1;2942:295:4;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;10126:32:13;;;10108:51;;10096:2;10081:18;2942:295:4;9962:203:13;2480:401:4;;;;;;;;;;-1:-1:-1;2480:401:4;;;;;:::i;:::-;;:::i;822:108:5:-;;;;;;;;;;-1:-1:-1;909:7:5;:14;822:108;;;21095:25:13;;;21083:2;21068:18;822:108:5;20949:177:13;3956:364:4;;;;;;;;;;-1:-1:-1;3956:364:4;;;;;:::i;:::-;;:::i;1283:478:5:-;;;;;;;;;;-1:-1:-1;1283:478:5;;;;;:::i;:::-;;:::i;400:54:1:-;;;;;;;;;;;;450:4;400:54;;578:60;;;;;;;;;;;;;;;;2743:306;;;;;;;;;;;;;:::i;4386:179:4:-;;;;;;;;;;-1:-1:-1;4386:179:4;;;;;:::i;:::-;;:::i;2582:155:1:-;;;;;;;;;;-1:-1:-1;2582:155:1;;;;;:::i;:::-;;:::i;3055:391::-;;;;;;;;;;-1:-1:-1;3055:391:1;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;460:53::-;;;;;;;;;;;;;;;;3931:264;;;;;;;;;;-1:-1:-1;3931:264:1;;;;;:::i;:::-;;:::i;1002:202:5:-;;;;;;;;;;-1:-1:-1;1002:202:5;;;;;:::i;:::-;;:::i;1027:96:1:-;;;;;;;;;;-1:-1:-1;1027:96:1;;;;;:::i;:::-;;:::i;3674:251::-;;;;;;;;;;-1:-1:-1;3674:251:1;;;;;:::i;:::-;;:::i;645:44::-;;;;;;;;;;-1:-1:-1;645:44:1;;;;;:::i;:::-;;;;;;;;;;;;;;;;1784:313:4;;;;;;;;;;-1:-1:-1;1784:313:4;;;;;:::i;:::-;;:::i;175:35:1:-;;;;;;;;;;;;;:::i;1350:377:4:-;;;;;;;;;;-1:-1:-1;1350:377:4;;;;;:::i;:::-;;:::i;1661:101:11:-;;;;;;;;;;;;;:::i;1029:85::-;;;;;;;;;;-1:-1:-1;1101:6:11;;-1:-1:-1;;;;;1101:6:11;1029:85;;1129:97:1;;;;;;;;;;-1:-1:-1;1129:97:1;;;;;:::i;:::-;;:::i;2321:102:4:-;;;;;;;;;;;;;:::i;1718:475:1:-;;;;;;:::i;:::-;;:::i;3304:318:4:-;;;;;;;;;;-1:-1:-1;3304:318:4;;;;;:::i;:::-;;:::i;4631:354::-;;;;;;;;;;-1:-1:-1;4631:354:4;;;;;:::i;:::-;;:::i;2199:377:1:-;;;;;;;;;;-1:-1:-1;2199:377:1;;;;;:::i;:::-;;:::i;1232:236::-;;;;;;;;;;-1:-1:-1;1232:236:1;;;;;:::i;:::-;;:::i;221:48::-;;;;;;;;;;-1:-1:-1;221:48:1;;;;-1:-1:-1;;;;;221:48:1;;;1474:144;;;;;;;;;;-1:-1:-1;1474:144:1;;;;;:::i;:::-;;:::i;4201:352::-;;;;;;;;;;-1:-1:-1;4201:352:1;;;;;:::i;:::-;;:::i;315:34::-;;;;;;;;;;-1:-1:-1;315:34:1;;;;-1:-1:-1;;;;;315:34:1;;;1911:198:11;;;;;;;;;;-1:-1:-1;1911:198:11;;;;;:::i;:::-;;:::i;3452:216:1:-;;;;;;;;;;-1:-1:-1;3452:216:1;;;;;:::i;:::-;;:::i;520:52::-;;;;;;;;;;;;570:2;520:52;;356:38;;;;;;;;;;-1:-1:-1;356:38:1;;;;-1:-1:-1;;;356:38:1;;;;;;275:34;;;;;;;;;;-1:-1:-1;275:34:1;;;;-1:-1:-1;;;;;275:34:1;;;529:222:5;631:4;-1:-1:-1;;;;;;654:50:5;;-1:-1:-1;;;654:50:5;;:90;;;708:36;732:11;708:23;:36::i;:::-;647:97;529:222;-1:-1:-1;;529:222:5:o;1624:88:1:-;1101:6:11;;-1:-1:-1;;;;;1101:6:11;719:10:2;1241:23:11;1233:68;;;;-1:-1:-1;;;1233:68:11;;;;;;;:::i;:::-;;;;;;;;;1695:10:1::1;::::0;;-1:-1:-1;;;;1681:24:1;::::1;-1:-1:-1::0;;;1695:10:1;;;::::1;;;1694:11;1681:24:::0;;::::1;;::::0;;1624:88::o;2159:98:4:-;2213:13;2245:5;2238:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2159:98;:::o;2942:295::-;3058:7;3102:16;3110:7;3102;:16::i;:::-;3081:107;;;;-1:-1:-1;;;3081:107:4;;17332:2:13;3081:107:4;;;17314:21:13;17371:2;17351:18;;;17344:30;17410:34;17390:18;;;17383:62;-1:-1:-1;;;17461:18:13;;;17454:42;17513:19;;3081:107:4;17130:408:13;3081:107:4;-1:-1:-1;3206:24:4;;;;:15;:24;;;;;;-1:-1:-1;;;;;3206:24:4;;2942:295::o;2480:401::-;2560:13;2576:23;2591:7;2576:14;:23::i;:::-;2560:39;;2623:5;-1:-1:-1;;;;;2617:11:4;:2;-1:-1:-1;;;;;2617:11:4;;;2609:57;;;;-1:-1:-1;;;2609:57:4;;18866:2:13;2609:57:4;;;18848:21:13;18905:2;18885:18;;;18878:30;18944:34;18924:18;;;18917:62;-1:-1:-1;;;18995:18:13;;;18988:31;19036:19;;2609:57:4;18664:397:13;2609:57:4;719:10:2;-1:-1:-1;;;;;2698:21:4;;;;:62;;-1:-1:-1;2723:37:4;2740:5;719:10:2;4201:352:1;:::i;2723:37:4:-;2677:165;;;;-1:-1:-1;;;2677:165:4;;15384:2:13;2677:165:4;;;15366:21:13;15423:2;15403:18;;;15396:30;15462:34;15442:18;;;15435:62;15533:26;15513:18;;;15506:54;15577:19;;2677:165:4;15182:420:13;2677:165:4;2853:21;2862:2;2866:7;2853:8;:21::i;:::-;2550:331;2480:401;;:::o;3956:364::-;4158:41;719:10:2;4177:12:4;4191:7;4158:18;:41::i;:::-;4137:137;;;;-1:-1:-1;;;4137:137:4;;;;;;;:::i;:::-;4285:28;4295:4;4301:2;4305:7;4285:9;:28::i;1283:478:5:-;1380:15;1423:16;1433:5;1423:9;:16::i;:::-;1415:5;:24;1407:80;;;;-1:-1:-1;;;1407:80:5;;;;;;;:::i;:::-;1498:10;1522:6;1518:173;1534:7;:14;1530:18;;1518:173;;;1580:7;1588:1;1580:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;1571:19:5;;;1580:10;;1571:19;1568:113;;;1621:5;1612;:14;1609:57;;;1635:1;-1:-1:-1;1628:8:5;;-1:-1:-1;1628:8:5;1609:57;1659:7;;;;:::i;:::-;;;;1609:57;1550:3;;;;:::i;:::-;;;;1518:173;;;;1701:53;;-1:-1:-1;;;1701:53:5;;;;;;;:::i;2743:306:1:-;2800:6;;2782:12;;-1:-1:-1;;;;;2800:6:1;2848:3;2819:26;:21;2843:2;2819:26;:::i;:::-;:32;;;;:::i;:::-;2800:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2781:75;;;2874:7;2866:45;;;;-1:-1:-1;;;2866:45:1;;15030:2:13;2866:45:1;;;15012:21:13;15069:2;15049:18;;;15042:30;15108:27;15088:18;;;15081:55;15153:18;;2866:45:1;14828:349:13;2866:45:1;2941:6;;:45;;2922:13;;-1:-1:-1;;;;;2941:6:1;;2960:21;;2922:13;2941:45;2922:13;2941:45;2960:21;2941:6;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2921:65;;;3004:8;2996:46;;;;-1:-1:-1;;;2996:46:1;;13504:2:13;2996:46:1;;;13486:21:13;13543:2;13523:18;;;13516:30;13582:27;13562:18;;;13555:55;13627:18;;2996:46:1;13302:349:13;2996:46:1;2771:278;;2743:306::o;4386:179:4:-;4519:39;4536:4;4542:2;4546:7;4519:39;;;;;;;;;;;;:16;:39::i;2582:155:1:-;2639:41;719:10:2;2658:12:1;640:96:2;2639:41:1;2631:75;;;;-1:-1:-1;;;2631:75:1;;18516:2:13;2631:75:1;;;18498:21:13;18555:2;18535:18;;;18528:30;-1:-1:-1;;;18574:18:13;;;18567:51;18635:18;;2631:75:1;18314:345:13;2631:75:1;2716:14;2722:7;2716:5;:14::i;:::-;2582:155;:::o;3055:391::-;3115:16;3143:18;3164:17;3174:6;3164:9;:17::i;:::-;3143:38;-1:-1:-1;3195:15:1;3191:44;;3219:16;;;3233:1;3219:16;;;;;;;;;;;-1:-1:-1;3212:23:1;3055:391;-1:-1:-1;;;3055:391:1:o;3191:44::-;3246:25;3288:10;3274:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3274:25:1;;3246:53;;3314:9;3309:106;3329:10;3325:1;:14;3309:106;;;3374:30;3394:6;3402:1;3374:19;:30::i;:::-;3360:8;3369:1;3360:11;;;;;;;;:::i;:::-;;;;;;;;;;:44;3341:3;;;;:::i;:::-;;;;3309:106;;3931:264;4020:4;4039:9;4035:132;4050:20;;;4035:132;;;4119:7;-1:-1:-1;;;;;4094:32:1;:7;4102:9;;4112:1;4102:12;;;;;;;:::i;:::-;;;;;;;4094:21;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;4094:21:1;:32;4091:65;;4151:5;4144:12;;;;;4091:65;4072:3;;;:::i;:::-;;;4035:132;;;;4184:4;4177:11;;3931:264;;;;;;:::o;1002:202:5:-;1112:7;:14;1077:7;;1104:22;;1096:79;;;;-1:-1:-1;;;1096:79:5;;20738:2:13;1096:79:5;;;20720:21:13;20777:2;20757:18;;;20750:30;20816:34;20796:18;;;20789:62;-1:-1:-1;;;20867:18:13;;;20860:42;20919:19;;1096:79:5;20536:408:13;1096:79:5;-1:-1:-1;1192:5:5;1002:202::o;1027:96:1:-;1101:6:11;;-1:-1:-1;;;;;1101:6:11;719:10:2;1241:23:11;1233:68;;;;-1:-1:-1;;;1233:68:11;;;;;;;:::i;:::-;1098:18:1;;::::1;::::0;:7:::1;::::0;:18:::1;::::0;::::1;::::0;::::1;:::i;3674:251::-:0;3803:9;3798:121;3822:9;:16;3818:1;:20;3798:121;;;3859:49;3876:5;3883:3;3888:9;3898:1;3888:12;;;;;;;;:::i;:::-;;;;;;;3902:5;3859:16;:49::i;:::-;3840:3;;;;:::i;:::-;;;;3798:121;;;;3674:251;;;;:::o;1784:313:4:-;1896:7;1919:13;1935:7;1943;1935:16;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;1935:16:4;;-1:-1:-1;1982:19:4;1961:107;;;;-1:-1:-1;;;1961:107:4;;16220:2:13;1961:107:4;;;16202:21:13;16259:2;16239:18;;;16232:30;16298:34;16278:18;;;16271:62;-1:-1:-1;;;16349:18:13;;;16342:39;16398:19;;1961:107:4;16018:405:13;175:35:1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1350:377:4:-;1467:4;-1:-1:-1;;;;;1496:19:4;;1488:74;;;;-1:-1:-1;;;1488:74:4;;15809:2:13;1488:74:4;;;15791:21:13;15848:2;15828:18;;;15821:30;15887:34;15867:18;;;15860:62;-1:-1:-1;;;15938:18:13;;;15931:40;15988:19;;1488:74:4;15607:406:13;1488:74:4;1573:10;1598:6;1593:106;1610:7;:14;1606:18;;1593:106;;;1656:7;1664:1;1656:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;1647:19:4;;;1656:10;;1647:19;1643:45;;;1681:7;;;:::i;:::-;;;1643:45;1626:3;;;:::i;:::-;;;1593:106;;;-1:-1:-1;1715:5:4;1350:377;-1:-1:-1;;1350:377:4:o;1661:101:11:-;1101:6;;-1:-1:-1;;;;;1101:6:11;719:10:2;1241:23:11;1233:68;;;;-1:-1:-1;;;1233:68:11;;;;;;;:::i;:::-;1725:30:::1;1752:1;1725:18;:30::i;:::-;1661:101::o:0;1129:97:1:-;1101:6:11;;-1:-1:-1;;;;;1101:6:11;719:10:2;1241:23:11;1233:68;;;;-1:-1:-1;;;1233:68:11;;;;;;;:::i;:::-;1195:10:1::1;:24:::0;1129:97::o;2321:102:4:-;2377:13;2409:7;2402:14;;;;;:::i;1718:475:1:-;1780:10;;-1:-1:-1;;;1780:10:1;;;;1772:39;;;;-1:-1:-1;;;1772:39:1;;19268:2:13;1772:39:1;;;19250:21:13;19307:2;19287:18;;;19280:30;-1:-1:-1;;;19326:18:13;;;19319:46;19382:18;;1772:39:1;19066:340:13;1772:39:1;1851:9;1837:10;;1829:5;:18;;;;:::i;:::-;:31;1821:67;;;;-1:-1:-1;;;1821:67:1;;16630:2:13;1821:67:1;;;16612:21:13;16669:2;16649:18;;;16642:30;16708:25;16688:18;;;16681:53;16751:18;;1821:67:1;16428:347:13;1821:67:1;570:2;1906:5;:18;1898:59;;;;-1:-1:-1;;;1898:59:1;;20381:2:13;1898:59:1;;;20363:21:13;20420:2;20400:18;;;20393:30;20459;20439:18;;;20432:58;20507:18;;1898:59:1;20179:352:13;1898:59:1;1989:7;:14;450:4;2021:19;2035:5;1989:14;2021:19;:::i;:::-;:32;2013:64;;;;-1:-1:-1;;;2013:64:1;;11918:2:13;2013:64:1;;;11900:21:13;11957:2;11937:18;;;11930:30;-1:-1:-1;;;11976:18:13;;;11969:49;12035:18;;2013:64:1;11716:343:13;2013:64:1;2101:6;2097:90;2113:5;2109:1;:9;2097:90;;;2140:36;719:10:2;2160:15:1;2174:1;2160:11;:15;:::i;:::-;2140:5;:36::i;:::-;2120:3;;;;:::i;:::-;;;;2097:90;;3304:318:4;-1:-1:-1;;;;;3434:24:4;;719:10:2;3434:24:4;;3426:62;;;;-1:-1:-1;;;3426:62:4;;14263:2:13;3426:62:4;;;14245:21:13;14302:2;14282:18;;;14275:30;14341:27;14321:18;;;14314:55;14386:18;;3426:62:4;14061:349:13;3426:62:4;719:10:2;3499:32:4;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;3499:42:4;;;;;;;;;;;;:53;;-1:-1:-1;;3499:53:4;;;;;;;;;;3567:48;;11440:41:13;;;3499:42:4;;719:10:2;3567:48:4;;11413:18:13;3567:48:4;;;;;;;3304:318;;:::o;4631:354::-;4813:41;719:10:2;4846:7:4;4813:18;:41::i;:::-;4792:137;;;;-1:-1:-1;;;4792:137:4;;;;;;;:::i;:::-;4939:39;4953:4;4959:2;4963:7;4972:5;4939:13;:39::i;:::-;4631:354;;;;:::o;2199:377:1:-;1101:6:11;;-1:-1:-1;;;;;1101:6:11;719:10:2;1241:23:11;1233:68;;;;-1:-1:-1;;;1233:68:11;;;;;;;:::i;:::-;2300:1:1::1;2292:4;2277:12;;:19;;;;:::i;:::-;:24;;2269:58;;;::::0;-1:-1:-1;;;2269:58:1;;20031:2:13;2269:58:1::1;::::0;::::1;20013:21:13::0;20070:2;20050:18;;;20043:30;-1:-1:-1;;;20089:18:13;;;20082:51;20150:18;;2269:58:1::1;19829:345:13::0;2269:58:1::1;2359:7;:14:::0;450:4:::1;2391:18;2405:4:::0;2359:14;2391:18:::1;:::i;:::-;:31;2383:63;;;::::0;-1:-1:-1;;;2383:63:1;;11918:2:13;2383:63:1::1;::::0;::::1;11900:21:13::0;11957:2;11937:18;;;11930:30;-1:-1:-1;;;11976:18:13;;;11969:49;12035:18;;2383:63:1::1;11716:343:13::0;2383:63:1::1;2461:6;2456:84;2477:4;2473:1;:8;2456:84;;;2502:27;2508:3:::0;2513:15:::1;2527:1:::0;2513:11;:15:::1;:::i;2502:27::-;2483:3:::0;::::1;::::0;::::1;:::i;:::-;;;;2456:84;;;;2565:4;2549:12;;:20;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;;;2199:377:1:o;1232:236::-;1298:13;1331:17;1339:8;1331:7;:17::i;:::-;1323:51;;;;-1:-1:-1;;;1323:51:1;;16982:2:13;1323:51:1;;;16964:21:13;17021:2;17001:18;;;16994:30;-1:-1:-1;;;17040:18:13;;;17033:51;17101:18;;1323:51:1;16780:345:13;1323:51:1;1415:7;1424:26;1441:8;1424:16;:26::i;:::-;1398:62;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1384:77;;1232:236;;;:::o;1474:144::-;1101:6:11;;-1:-1:-1;;;;;1101:6:11;719:10:2;1241:23:11;1233:68;;;;-1:-1:-1;;;1233:68:11;;;;;;;:::i;:::-;1567:20:1::1;:44:::0;;-1:-1:-1;;;;;;1567:44:1::1;-1:-1:-1::0;;;;;1567:44:1;;;::::1;::::0;;;::::1;::::0;;1474:144::o;4201:352::-;4365:20;;4408:29;;-1:-1:-1;;;4408:29:1;;-1:-1:-1;;;;;10126:32:13;;;4408:29:1;;;10108:51:13;4291:4:1;;4365:20;;;4400:50;;;;4365:20;;4408:21;;10081:18:13;;4408:29:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;4400:50:1;;:76;;;-1:-1:-1;;;;;;4454:22:1;;;;;;:12;:22;;;;;;;;4400:76;4396:93;;;4485:4;4478:11;;;;;4396:93;-1:-1:-1;;;;;3852:25:4;;;3825:4;3852:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;4506:40:1;4499:47;4201:352;-1:-1:-1;;;;4201:352:1:o;1911:198:11:-;1101:6;;-1:-1:-1;;;;;1101:6:11;719:10:2;1241:23:11;1233:68;;;;-1:-1:-1;;;1233:68:11;;;;;;;:::i;:::-;-1:-1:-1;;;;;1999:22:11;::::1;1991:73;;;::::0;-1:-1:-1;;;1991:73:11;;13097:2:13;1991:73:11::1;::::0;::::1;13079:21:13::0;13136:2;13116:18;;;13109:30;13175:34;13155:18;;;13148:62;-1:-1:-1;;;13226:18:13;;;13219:36;13272:19;;1991:73:11::1;12895:402:13::0;1991:73:11::1;2074:28;2093:8;2074:18;:28::i;3452:216:1:-:0;3557:9;3552:110;3576:9;:16;3572:1;:20;3552:110;;;3613:38;3626:5;3633:3;3638:9;3648:1;3638:12;;;;;;;;:::i;:::-;;;;;;;3613;:38::i;:::-;3594:3;;;;:::i;:::-;;;;3552:110;;947:344:4;1089:4;-1:-1:-1;;;;;;1128:40:4;;-1:-1:-1;;;1128:40:4;;:104;;-1:-1:-1;;;;;;;1184:48:4;;-1:-1:-1;;;1184:48:4;1128:104;:156;;;-1:-1:-1;;;;;;;;;;937:40:3;;;1248:36:4;829:155:3;6491:153:4;6589:7;:14;6556:4;;6579:24;;:58;;;;;6635:1;-1:-1:-1;;;;;6607:30:4;:7;6615;6607:16;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;6607:16:4;:30;;6572:65;6491:153;-1:-1:-1;;6491:153:4:o;10379:171::-;10453:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;10453:29:4;-1:-1:-1;;;;;10453:29:4;;;;;;;;:24;;10506:23;10453:24;10506:14;:23::i;:::-;-1:-1:-1;;;;;10497:46:4;;;;;;;;;;;10379:171;;:::o;6802:438::-;6927:4;6968:16;6976:7;6968;:16::i;:::-;6947:107;;;;-1:-1:-1;;;6947:107:4;;14617:2:13;6947:107:4;;;14599:21:13;14656:2;14636:18;;;14629:30;14695:34;14675:18;;;14668:62;-1:-1:-1;;;14746:18:13;;;14739:42;14798:19;;6947:107:4;14415:408:13;6947:107:4;7064:13;7080:23;7095:7;7080:14;:23::i;:::-;7064:39;;7132:5;-1:-1:-1;;;;;7121:16:4;:7;-1:-1:-1;;;;;7121:16:4;;:63;;;;7177:7;-1:-1:-1;;;;;7153:31:4;:20;7165:7;7153:11;:20::i;:::-;-1:-1:-1;;;;;7153:31:4;;7121:63;:111;;;;7200:32;7217:5;7224:7;7200:16;:32::i;9733:535::-;9900:4;-1:-1:-1;;;;;9873:31:4;:23;9888:7;9873:14;:23::i;:::-;-1:-1:-1;;;;;9873:31:4;;9852:119;;;;-1:-1:-1;;;9852:119:4;;18106:2:13;9852:119:4;;;18088:21:13;18145:2;18125:18;;;18118:30;18184:34;18164:18;;;18157:62;-1:-1:-1;;;18235:18:13;;;18228:39;18284:19;;9852:119:4;17904:405:13;9852:119:4;-1:-1:-1;;;;;9989:16:4;;9981:65;;;;-1:-1:-1;;;9981:65:4;;13858:2:13;9981:65:4;;;13840:21:13;13897:2;13877:18;;;13870:30;13936:34;13916:18;;;13909:62;-1:-1:-1;;;13987:18:13;;;13980:34;14031:19;;9981:65:4;13656:400:13;9981:65:4;10158:29;10175:1;10179:7;10158:8;:29::i;:::-;10216:2;10197:7;10205;10197:16;;;;;;;;:::i;:::-;;;;;;;;;:21;;-1:-1:-1;;;;;;10197:21:4;-1:-1:-1;;;;;10197:21:4;;;;;;10234:27;;10253:7;;10234:27;;;;;;;;;;10197:16;10234:27;9733:535;;;:::o;9087:322::-;9146:13;9162:23;9177:7;9162:14;:23::i;:::-;9146:39;;9282:29;9299:1;9303:7;9282:8;:29::i;:::-;9348:1;9321:7;9329;9321:16;;;;;;;;:::i;:::-;;;;;;;;;:29;;-1:-1:-1;;;;;;9321:29:4;-1:-1:-1;;;;;9321:29:4;;;;;;9366:36;;9394:7;;9366:36;;;;;9321:16;;9366:36;9136:273;9087:322;:::o;2263:187:11:-;2355:6;;;-1:-1:-1;;;;;2371:17:11;;;-1:-1:-1;;;;;;2371:17:11;;;;;;;2403:40;;2355:6;;;2371:17;2355:6;;2403:40;;2336:16;;2403:40;2326:124;2263:187;:::o;4559:151:1:-;4639:7;:16;;;;;;;-1:-1:-1;4639:16:1;;;;;;;-1:-1:-1;;;;;;4639:16:1;-1:-1:-1;;;;;4639:16:1;;;;;;;;4670:33;;4695:7;;-1:-1:-1;4670:33:1;;-1:-1:-1;;4670:33:1;4559:151;;:::o;5847:341:4:-;5998:28;6008:4;6014:2;6018:7;5998:9;:28::i;:::-;6057:48;6080:4;6086:2;6090:7;6099:5;6057:22;:48::i;:::-;6036:145;;;;-1:-1:-1;;;6036:145:4;;;;;;;:::i;328:703:12:-;384:13;601:10;597:51;;-1:-1:-1;;627:10:12;;;;;;;;;;;;-1:-1:-1;;;627:10:12;;;;;328:703::o;597:51::-;672:5;657:12;711:75;718:9;;711:75;;743:8;;;;:::i;:::-;;-1:-1:-1;765:10:12;;-1:-1:-1;773:2:12;765:10;;:::i;:::-;;;711:75;;;795:19;827:6;817:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;817:17:12;;795:39;;844:150;851:10;;844:150;;877:11;887:1;877:11;;:::i;:::-;;-1:-1:-1;945:10:12;953:2;945:5;:10;:::i;:::-;932:24;;:2;:24;:::i;:::-;919:39;;902:6;909;902:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;902:56:12;;;;;;;;-1:-1:-1;972:11:12;981:2;972:11;;:::i;:::-;;;844:150;;11103:950:4;11253:4;-1:-1:-1;;;;;11273:13:4;;1087:20:0;1133:8;11269:778:4;;11324:170;;-1:-1:-1;;;11324:170:4;;-1:-1:-1;;;;;11324:36:4;;;;;:170;;719:10:2;;11416:4:4;;11442:7;;11471:5;;11324:170;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11324:170:4;;;;;;;;-1:-1:-1;;11324:170:4;;;;;;;;;;;;:::i;:::-;;;11304:691;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11673:13:4;;11669:312;;11715:106;;-1:-1:-1;;;11715:106:4;;;;;;;:::i;11669:312::-;11933:6;11927:13;11918:6;11914:2;11910:15;11903:38;11304:691;-1:-1:-1;;;;;;11556:51:4;-1:-1:-1;;;11556:51:4;;-1:-1:-1;11549:58:4;;11269:778;-1:-1:-1;12032:4:4;11103:950;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:406:13;78:5;112:18;104:6;101:30;98:56;;;134:18;;:::i;:::-;172:57;217:2;196:15;;-1:-1:-1;;192:29:13;223:4;188:40;172:57;:::i;:::-;163:66;;252:6;245:5;238:21;292:3;283:6;278:3;274:16;271:25;268:45;;;309:1;306;299:12;268:45;358:6;353:3;346:4;339:5;335:16;322:43;412:1;405:4;396:6;389:5;385:18;381:29;374:40;14:406;;;;;:::o;425:723::-;479:5;532:3;525:4;517:6;513:17;509:27;499:55;;550:1;547;540:12;499:55;586:6;573:20;612:4;635:18;631:2;628:26;625:52;;;657:18;;:::i;:::-;703:2;700:1;696:10;726:28;750:2;746;742:11;726:28;:::i;:::-;788:15;;;819:12;;;;851:15;;;885;;;881:24;;878:33;-1:-1:-1;875:53:13;;;924:1;921;914:12;875:53;946:1;937:10;;956:163;970:2;967:1;964:9;956:163;;;1027:17;;1015:30;;988:1;981:9;;;;;1065:12;;;;1097;;956:163;;;-1:-1:-1;1137:5:13;425:723;-1:-1:-1;;;;;;;425:723:13:o;1153:220::-;1195:5;1248:3;1241:4;1233:6;1229:17;1225:27;1215:55;;1266:1;1263;1256:12;1215:55;1288:79;1363:3;1354:6;1341:20;1334:4;1326:6;1322:17;1288:79;:::i;1378:247::-;1437:6;1490:2;1478:9;1469:7;1465:23;1461:32;1458:52;;;1506:1;1503;1496:12;1458:52;1545:9;1532:23;1564:31;1589:5;1564:31;:::i;1630:388::-;1698:6;1706;1759:2;1747:9;1738:7;1734:23;1730:32;1727:52;;;1775:1;1772;1765:12;1727:52;1814:9;1801:23;1833:31;1858:5;1833:31;:::i;:::-;1883:5;-1:-1:-1;1940:2:13;1925:18;;1912:32;1953:33;1912:32;1953:33;:::i;:::-;2005:7;1995:17;;;1630:388;;;;;:::o;2023:624::-;2125:6;2133;2141;2194:2;2182:9;2173:7;2169:23;2165:32;2162:52;;;2210:1;2207;2200:12;2162:52;2249:9;2236:23;2268:31;2293:5;2268:31;:::i;:::-;2318:5;-1:-1:-1;2375:2:13;2360:18;;2347:32;2388:33;2347:32;2388:33;:::i;:::-;2440:7;-1:-1:-1;2498:2:13;2483:18;;2470:32;2525:18;2514:30;;2511:50;;;2557:1;2554;2547:12;2511:50;2580:61;2633:7;2624:6;2613:9;2609:22;2580:61;:::i;:::-;2570:71;;;2023:624;;;;;:::o;2652:844::-;2772:6;2780;2788;2796;2849:3;2837:9;2828:7;2824:23;2820:33;2817:53;;;2866:1;2863;2856:12;2817:53;2905:9;2892:23;2924:31;2949:5;2924:31;:::i;:::-;2974:5;-1:-1:-1;3031:2:13;3016:18;;3003:32;3044:33;3003:32;3044:33;:::i;:::-;3096:7;-1:-1:-1;3154:2:13;3139:18;;3126:32;3177:18;3207:14;;;3204:34;;;3234:1;3231;3224:12;3204:34;3257:61;3310:7;3301:6;3290:9;3286:22;3257:61;:::i;:::-;3247:71;;3371:2;3360:9;3356:18;3343:32;3327:48;;3400:2;3390:8;3387:16;3384:36;;;3416:1;3413;3406:12;3384:36;;3439:51;3482:7;3471:8;3460:9;3456:24;3439:51;:::i;:::-;3429:61;;;2652:844;;;;;;;:::o;3501:456::-;3578:6;3586;3594;3647:2;3635:9;3626:7;3622:23;3618:32;3615:52;;;3663:1;3660;3653:12;3615:52;3702:9;3689:23;3721:31;3746:5;3721:31;:::i;:::-;3771:5;-1:-1:-1;3828:2:13;3813:18;;3800:32;3841:33;3800:32;3841:33;:::i;:::-;3501:456;;3893:7;;-1:-1:-1;;;3947:2:13;3932:18;;;;3919:32;;3501:456::o;3962:665::-;4057:6;4065;4073;4081;4134:3;4122:9;4113:7;4109:23;4105:33;4102:53;;;4151:1;4148;4141:12;4102:53;4190:9;4177:23;4209:31;4234:5;4209:31;:::i;:::-;4259:5;-1:-1:-1;4316:2:13;4301:18;;4288:32;4329:33;4288:32;4329:33;:::i;:::-;4381:7;-1:-1:-1;4435:2:13;4420:18;;4407:32;;-1:-1:-1;4490:2:13;4475:18;;4462:32;4517:18;4506:30;;4503:50;;;4549:1;4546;4539:12;4503:50;4572:49;4613:7;4604:6;4593:9;4589:22;4572:49;:::i;4632:750::-;4727:6;4735;4743;4796:2;4784:9;4775:7;4771:23;4767:32;4764:52;;;4812:1;4809;4802:12;4764:52;4851:9;4838:23;4870:31;4895:5;4870:31;:::i;:::-;4920:5;-1:-1:-1;4976:2:13;4961:18;;4948:32;4999:18;5029:14;;;5026:34;;;5056:1;5053;5046:12;5026:34;5094:6;5083:9;5079:22;5069:32;;5139:7;5132:4;5128:2;5124:13;5120:27;5110:55;;5161:1;5158;5151:12;5110:55;5201:2;5188:16;5227:2;5219:6;5216:14;5213:34;;;5243:1;5240;5233:12;5213:34;5296:7;5291:2;5281:6;5278:1;5274:14;5270:2;5266:23;5262:32;5259:45;5256:65;;;5317:1;5314;5307:12;5256:65;5348:2;5344;5340:11;5330:21;;5370:6;5360:16;;;;;4632:750;;;;;:::o;5387:416::-;5452:6;5460;5513:2;5501:9;5492:7;5488:23;5484:32;5481:52;;;5529:1;5526;5519:12;5481:52;5568:9;5555:23;5587:31;5612:5;5587:31;:::i;:::-;5637:5;-1:-1:-1;5694:2:13;5679:18;;5666:32;5736:15;;5729:23;5717:36;;5707:64;;5767:1;5764;5757:12;5808:315;5876:6;5884;5937:2;5925:9;5916:7;5912:23;5908:32;5905:52;;;5953:1;5950;5943:12;5905:52;5992:9;5979:23;6011:31;6036:5;6011:31;:::i;:::-;6061:5;6113:2;6098:18;;;;6085:32;;-1:-1:-1;;;5808:315:13:o;6128:245::-;6186:6;6239:2;6227:9;6218:7;6214:23;6210:32;6207:52;;;6255:1;6252;6245:12;6207:52;6294:9;6281:23;6313:30;6337:5;6313:30;:::i;6378:249::-;6447:6;6500:2;6488:9;6479:7;6475:23;6471:32;6468:52;;;6516:1;6513;6506:12;6468:52;6548:9;6542:16;6567:30;6591:5;6567:30;:::i;6632:279::-;6730:6;6783:2;6771:9;6762:7;6758:23;6754:32;6751:52;;;6799:1;6796;6789:12;6751:52;6831:9;6825:16;6850:31;6875:5;6850:31;:::i;6916:450::-;6985:6;7038:2;7026:9;7017:7;7013:23;7009:32;7006:52;;;7054:1;7051;7044:12;7006:52;7094:9;7081:23;7127:18;7119:6;7116:30;7113:50;;;7159:1;7156;7149:12;7113:50;7182:22;;7235:4;7227:13;;7223:27;-1:-1:-1;7213:55:13;;7264:1;7261;7254:12;7213:55;7287:73;7352:7;7347:2;7334:16;7329:2;7325;7321:11;7287:73;:::i;7371:180::-;7430:6;7483:2;7471:9;7462:7;7458:23;7454:32;7451:52;;;7499:1;7496;7489:12;7451:52;-1:-1:-1;7522:23:13;;7371:180;-1:-1:-1;7371:180:13:o;7556:315::-;7624:6;7632;7685:2;7673:9;7664:7;7660:23;7656:32;7653:52;;;7701:1;7698;7691:12;7653:52;7737:9;7724:23;7714:33;;7797:2;7786:9;7782:18;7769:32;7810:31;7835:5;7810:31;:::i;7876:257::-;7917:3;7955:5;7949:12;7982:6;7977:3;7970:19;7998:63;8054:6;8047:4;8042:3;8038:14;8031:4;8024:5;8020:16;7998:63;:::i;:::-;8115:2;8094:15;-1:-1:-1;;8090:29:13;8081:39;;;;8122:4;8077:50;;7876:257;-1:-1:-1;;7876:257:13:o;8138:185::-;8180:3;8218:5;8212:12;8233:52;8278:6;8273:3;8266:4;8259:5;8255:16;8233:52;:::i;:::-;8301:16;;;;;8138:185;-1:-1:-1;;8138:185:13:o;8446:1301::-;8723:3;8752:1;8785:6;8779:13;8815:3;8837:1;8865:9;8861:2;8857:18;8847:28;;8925:2;8914:9;8910:18;8947;8937:61;;8991:4;8983:6;8979:17;8969:27;;8937:61;9017:2;9065;9057:6;9054:14;9034:18;9031:38;9028:165;;;-1:-1:-1;;;9092:33:13;;9148:4;9145:1;9138:15;9178:4;9099:3;9166:17;9028:165;9209:18;9236:104;;;;9354:1;9349:320;;;;9202:467;;9236:104;-1:-1:-1;;9269:24:13;;9257:37;;9314:16;;;;-1:-1:-1;9236:104:13;;9349:320;21484:1;21477:14;;;21521:4;21508:18;;9444:1;9458:165;9472:6;9469:1;9466:13;9458:165;;;9550:14;;9537:11;;;9530:35;9593:16;;;;9487:10;;9458:165;;;9462:3;;9652:6;9647:3;9643:16;9636:23;;9202:467;;;;;;;9685:56;9710:30;9736:3;9728:6;9710:30;:::i;:::-;-1:-1:-1;;;8388:20:13;;8433:1;8424:11;;8328:113;9685:56;9678:63;8446:1301;-1:-1:-1;;;;;8446:1301:13:o;10170:488::-;-1:-1:-1;;;;;10439:15:13;;;10421:34;;10491:15;;10486:2;10471:18;;10464:43;10538:2;10523:18;;10516:34;;;10586:3;10581:2;10566:18;;10559:31;;;10364:4;;10607:45;;10632:19;;10624:6;10607:45;:::i;:::-;10599:53;10170:488;-1:-1:-1;;;;;;10170:488:13:o;10663:632::-;10834:2;10886:21;;;10956:13;;10859:18;;;10978:22;;;10805:4;;10834:2;11057:15;;;;11031:2;11016:18;;;10805:4;11100:169;11114:6;11111:1;11108:13;11100:169;;;11175:13;;11163:26;;11244:15;;;;11209:12;;;;11136:1;11129:9;11100:169;;;-1:-1:-1;11286:3:13;;10663:632;-1:-1:-1;;;;;;10663:632:13:o;11492:219::-;11641:2;11630:9;11623:21;11604:4;11661:44;11701:2;11690:9;11686:18;11678:6;11661:44;:::i;12064:407::-;12266:2;12248:21;;;12305:2;12285:18;;;12278:30;12344:34;12339:2;12324:18;;12317:62;-1:-1:-1;;;12410:2:13;12395:18;;12388:41;12461:3;12446:19;;12064:407::o;12476:414::-;12678:2;12660:21;;;12717:2;12697:18;;;12690:30;12756:34;12751:2;12736:18;;12729:62;-1:-1:-1;;;12822:2:13;12807:18;;12800:48;12880:3;12865:19;;12476:414::o;17543:356::-;17745:2;17727:21;;;17764:18;;;17757:30;17823:34;17818:2;17803:18;;17796:62;17890:2;17875:18;;17543:356::o;19411:413::-;19613:2;19595:21;;;19652:2;19632:18;;;19625:30;19691:34;19686:2;19671:18;;19664:62;-1:-1:-1;;;19757:2:13;19742:18;;19735:47;19814:3;19799:19;;19411:413::o;21131:275::-;21202:2;21196:9;21267:2;21248:13;;-1:-1:-1;;21244:27:13;21232:40;;21302:18;21287:34;;21323:22;;;21284:62;21281:88;;;21349:18;;:::i;:::-;21385:2;21378:22;21131:275;;-1:-1:-1;21131:275:13:o;21537:128::-;21577:3;21608:1;21604:6;21601:1;21598:13;21595:39;;;21614:18;;:::i;:::-;-1:-1:-1;21650:9:13;;21537:128::o;21670:120::-;21710:1;21736;21726:35;;21741:18;;:::i;:::-;-1:-1:-1;21775:9:13;;21670:120::o;21795:168::-;21835:7;21901:1;21897;21893:6;21889:14;21886:1;21883:21;21878:1;21871:9;21864:17;21860:45;21857:71;;;21908:18;;:::i;:::-;-1:-1:-1;21948:9:13;;21795:168::o;21968:125::-;22008:4;22036:1;22033;22030:8;22027:34;;;22041:18;;:::i;:::-;-1:-1:-1;22078:9:13;;21968:125::o;22098:258::-;22170:1;22180:113;22194:6;22191:1;22188:13;22180:113;;;22270:11;;;22264:18;22251:11;;;22244:39;22216:2;22209:10;22180:113;;;22311:6;22308:1;22305:13;22302:48;;;-1:-1:-1;;22346:1:13;22328:16;;22321:27;22098:258::o;22361:380::-;22440:1;22436:12;;;;22483;;;22504:61;;22558:4;22550:6;22546:17;22536:27;;22504:61;22611:2;22603:6;22600:14;22580:18;22577:38;22574:161;;;22657:10;22652:3;22648:20;22645:1;22638:31;22692:4;22689:1;22682:15;22720:4;22717:1;22710:15;22574:161;;22361:380;;;:::o;22746:135::-;22785:3;-1:-1:-1;;22806:17:13;;22803:43;;;22826:18;;:::i;:::-;-1:-1:-1;22873:1:13;22862:13;;22746:135::o;22886:112::-;22918:1;22944;22934:35;;22949:18;;:::i;:::-;-1:-1:-1;22983:9:13;;22886:112::o;23003:127::-;23064:10;23059:3;23055:20;23052:1;23045:31;23095:4;23092:1;23085:15;23119:4;23116:1;23109:15;23135:127;23196:10;23191:3;23187:20;23184:1;23177:31;23227:4;23224:1;23217:15;23251:4;23248:1;23241:15;23267:127;23328:10;23323:3;23319:20;23316:1;23309:31;23359:4;23356:1;23349:15;23383:4;23380:1;23373:15;23399:127;23460:10;23455:3;23451:20;23448:1;23441:31;23491:4;23488:1;23481:15;23515:4;23512:1;23505:15;23531:131;-1:-1:-1;;;;;23606:31:13;;23596:42;;23586:70;;23652:1;23649;23642:12;23667:131;-1:-1:-1;;;;;;23741:32:13;;23731:43;;23721:71;;23788:1;23785;23778:12

Swarm Source

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