ETH Price: $3,361.08 (-0.63%)
Gas: 9 Gwei

Token

Mirror Editions V2 (EDITIONS_V2)
 

Overview

Max Total Supply

0 EDITIONS_V2

Holders

2,448

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
dadababa.eth
Balance
1 EDITIONS_V2
0x1ccb144b700ec726d37db38c617e154de6d9c0d0
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:
Editions

Compiler Version
v0.8.5+commit.a4f2e591

Optimization Enabled:
Yes with 2000 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-07-26
*/

// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.5;

interface IERC721 {
    event Transfer(
        address indexed from,
        address indexed to,
        uint256 indexed tokenId
    );
    event Approval(
        address indexed owner,
        address indexed approved,
        uint256 indexed tokenId
    );
    event ApprovalForAll(
        address indexed owner,
        address indexed operator,
        bool approved
    );

    function balanceOf(address owner) external view returns (uint256 balance);

    function ownerOf(uint256 tokenId) external view returns (address owner);

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    function approve(address to, uint256 tokenId) external;

    function getApproved(uint256 tokenId)
        external
        view
        returns (address operator);

    function setApprovalForAll(address operator, bool _approved) external;

    function isApprovedForAll(address owner, address operator)
        external
        view
        returns (bool);

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

interface IERC721Metadata {
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function tokenURI(uint256 tokenId) external view returns (string memory);
}

interface IERC721Receiver {
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

abstract contract ERC165 is IERC165 {
    function supportsInterface(bytes4 interfaceId)
        public
        view
        virtual
        override
        returns (bool)
    {
        return interfaceId == type(IERC165).interfaceId;
    }
}

/**
 * Based on: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/ERC721.sol
 */
contract ERC721 is ERC165, IERC721 {
    mapping(uint256 => address) private _owners;
    mapping(address => uint256) private _balances;
    mapping(uint256 => address) private _tokenApprovals;
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    function supportsInterface(bytes4 interfaceId)
        public
        view
        virtual
        override
        returns (bool)
    {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            super.supportsInterface(interfaceId);
    }

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

    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;
    }

    function tokenURI(uint256 tokenId)
        public
        view
        virtual
        returns (string memory)
    {
        require(
            _exists(tokenId),
            "ERC721Metadata: URI query for nonexistent token"
        );

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

    /**
     * @dev Base URI for computing {tokenURI}. Empty by default, can be overriden
     * in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

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

        _approve(to, tokenId);
    }

    function getApproved(uint256 tokenId)
        public
        view
        virtual
        override
        returns (address)
    {
        require(
            _exists(tokenId),
            "ERC721: approved query for nonexistent token"
        );

        return _tokenApprovals[tokenId];
    }

    function setApprovalForAll(address operator, bool approved)
        public
        virtual
        override
    {
        require(operator != msg.sender, "ERC721: approve to caller");

        _operatorApprovals[msg.sender][operator] = approved;
        emit ApprovalForAll(msg.sender, operator, approved);
    }

    function isApprovedForAll(address owner, address operator)
        public
        view
        virtual
        override
        returns (bool)
    {
        return _operatorApprovals[owner][operator];
    }

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

        _transfer(from, to, tokenId);
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(
            _isApprovedOrOwner(msg.sender, tokenId),
            "ERC721: transfer caller is not owner nor approved"
        );
        _safeTransfer(from, to, tokenId, _data);
    }

    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"
        );
    }

    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    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));
    }

    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    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"
        );
    }

    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");

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

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

    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

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

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

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

    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");

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

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

        emit Transfer(from, to, tokenId);
    }

    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (isContract(to)) {
            try
                IERC721Receiver(to).onERC721Received(
                    msg.sender,
                    from,
                    tokenId,
                    _data
                )
            returns (bytes4 retval) {
                return retval == IERC721Receiver(to).onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert(
                        "ERC721: transfer to non ERC721Receiver implementer"
                    );
                } else {
                    // solhint-disable-next-line no-inline-assembly
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    // https://github.com/OpenZeppelin/openzeppelin-contracts/blob/7f6a1666fac8ecff5dd467d0938069bc221ea9e0/contracts/utils/Address.sol
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }
}


// File contracts/Editions.sol


/**
 * @title Editions
 * @author MirrorXYZ
 */
contract Editions is ERC721 {
    // ============ Constants ============

    string public constant name = "Mirror Editions V2";
    string public constant symbol = "EDITIONS_V2";

    uint256 internal constant REENTRANCY_NOT_ENTERED = 1;
    uint256 internal constant REENTRANCY_ENTERED = 2;

    // ============ Structs ============

    struct Edition {
        // The maximum number of tokens that can be sold.
        uint256 quantity;
        // The price at which each token will be sold, in ETH.
        uint256 price;
        // The account that will receive sales revenue.
        address payable fundingRecipient;
        // The number of tokens sold so far.
        uint256 numSold;
        // The content hash of the image being presented.
        bytes32 contentHash;
    }

    // A subset of Edition, for efficient production of multiple editions.
    struct EditionTier {
        // The maximum number of tokens that can be sold.
        uint256 quantity;
        // The price at which each token will be sold, in ETH.
        uint256 price;
        bytes32 contentHash;
    }

    mapping(address => uint256) public fundingBalance;

    // ============ Immutable Storage ============

    // Fee updates take 2 days to take place, giving creators time to withdraw.
    uint256 public immutable feeUpdateTimelock;

    // ============ Mutable Storage ============

    string internal baseURI;
    // Mapping of edition id to descriptive data.
    mapping(uint256 => Edition) public editions;
    // Mapping of token id to edition id.
    mapping(uint256 => uint256) public tokenToEdition;
    // The amount of funds that have already been withdrawn for a given edition.
    mapping(uint256 => uint256) public withdrawnForEdition;
    // `nextTokenId` increments with each token purchased, globally across all editions.
    uint256 private nextTokenId;
    // Editions start at 1, in order that unsold tokens don't map to the first edition.
    uint256 private nextEditionId = 1;
    // Withdrawals include a fee, specified as a percentage.
    uint16 public feePercent;
    // The address that holds fees.
    address payable public treasury;
    uint256 public feesAccrued;
    // Timelock information.
    uint256 public nextFeeUpdateTime;
    uint16 public nextFeePercent;
    // Reentrancy
    uint256 internal reentrancyStatus;

    address public owner;
    address public nextOwner;

    // ============ Events ============

    event EditionCreated(
        uint256 quantity,
        uint256 price,
        address fundingRecipient,
        uint256 indexed editionId,
        bytes32 contentHash
    );

    event EditionPurchased(
        uint256 indexed editionId,
        uint256 indexed tokenId,
        // `numSold` at time of purchase represents the "serial number" of the NFT.
        uint256 numSold,
        uint256 amountPaid,
        // The account that paid for and received the NFT.
        address indexed buyer
    );

    event FundsWithdrawn(
        address fundingRecipient,
        uint256 amountWithdrawn,
        uint256 feeAmount
    );

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

    event FeesWithdrawn(uint256 feesAccrued, address sender);

    event FeeUpdateQueued(uint256 newFee, address sender);

    event FeeUpdated(uint256 feePercent, address sender);

    // ============ Modifiers ============

    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(reentrancyStatus != REENTRANCY_ENTERED, "Reentrant call");

        // Any calls to nonReentrant after this point will fail
        reentrancyStatus = REENTRANCY_ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        reentrancyStatus = REENTRANCY_NOT_ENTERED;
    }

    modifier onlyOwner() {
        require(isOwner(), "caller is not the owner.");
        _;
    }

    modifier onlyNextOwner() {
        require(isNextOwner(), "current owner must set caller as next owner.");
        _;
    }

    // ============ Constructor ============

    constructor(
        string memory baseURI_,
        address payable treasury_,
        uint16 initialFee,
        uint256 feeUpdateTimelock_,
        address owner_
    ) {
        baseURI = baseURI_;
        treasury = treasury_;
        feePercent = initialFee;
        feeUpdateTimelock = feeUpdateTimelock_;
        owner = owner_;
    }

    // ============ Edition Methods ============

    function createEditionTiers(
        EditionTier[] memory tiers,
        address payable fundingRecipient
    ) external nonReentrant {
        // Execute a loop that creates editions.
        for (uint8 i = 0; i < tiers.length; i++) {
            uint256 quantity = tiers[i].quantity;
            uint256 price = tiers[i].price;
            bytes32 contentHash = tiers[i].contentHash;

            editions[nextEditionId] = Edition({
                quantity: quantity,
                price: price,
                fundingRecipient: fundingRecipient,
                numSold: 0,
                contentHash: contentHash
            });

            emit EditionCreated(
                quantity,
                price,
                fundingRecipient,
                nextEditionId,
                contentHash
            );

            nextEditionId++;
        }
    }

    function createEdition(
        // The number of tokens that can be minted and sold.
        uint256 quantity,
        // The price to purchase a token.
        uint256 price,
        // The account that should receive the revenue.
        address payable fundingRecipient,
        // Content hash is emitted in the event, for UI convenience.
        bytes32 contentHash
    ) external nonReentrant {
        editions[nextEditionId] = Edition({
            quantity: quantity,
            price: price,
            fundingRecipient: fundingRecipient,
            numSold: 0,
            contentHash: contentHash
        });

        emit EditionCreated(
            quantity,
            price,
            fundingRecipient,
            nextEditionId,
            contentHash
        );

        nextEditionId++;
    }

    function buyEdition(uint256 editionId) external payable nonReentrant {
        // Check that the edition exists. Note: this is redundant
        // with the next check, but it is useful for clearer error messaging.
        require(editions[editionId].quantity > 0, "Edition does not exist");
        // Check that there are still tokens available to purchase.
        require(
            editions[editionId].numSold < editions[editionId].quantity,
            "This edition is already sold out."
        );
        // Check that the sender is paying the correct amount.
        require(
            msg.value >= editions[editionId].price,
            "Must send enough to purchase the edition."
        );
        // Increment the number of tokens sold for this edition.
        editions[editionId].numSold++;
        fundingBalance[editions[editionId].fundingRecipient] += msg.value;
        // Mint a new token for the sender, using the `nextTokenId`.
        _mint(msg.sender, nextTokenId);
        // Store the mapping of token id to the edition being purchased.
        tokenToEdition[nextTokenId] = editionId;

        emit EditionPurchased(
            editionId,
            nextTokenId,
            editions[editionId].numSold,
            msg.value,
            msg.sender
        );

        nextTokenId++;
    }

    // ============ Operational Methods ============

    function withdrawFunds(address payable fundingRecipient)
        external
        nonReentrant
    {
        uint256 remaining = fundingBalance[fundingRecipient];
        fundingBalance[fundingRecipient] = 0;

        if (feePercent > 0) {
            // Send the amount that was remaining for the edition, to the funding recipient.
            uint256 fee = computeFee(remaining);
            // Allocate fee to the treasury.
            feesAccrued += fee;
            // Send the remainder to the funding recipient.
            _sendFunds(fundingRecipient, remaining - fee);
            emit FundsWithdrawn(fundingRecipient, remaining - fee, fee);
        } else {
            _sendFunds(fundingRecipient, remaining);
            emit FundsWithdrawn(fundingRecipient, remaining, 0);
        }
    }

    function computeFee(uint256 _amount) public view returns (uint256) {
        return (_amount * feePercent) / 100;
    }

    // ============ Admin Methods ============

    function withdrawFees() public {
        _sendFunds(treasury, feesAccrued);
        emit FeesWithdrawn(feesAccrued, msg.sender);
        feesAccrued = 0;
    }

    function updateTreasury(address payable newTreasury) public {
        require(msg.sender == treasury, "Only available to current treasury");
        treasury = newTreasury;
    }

    function queueFeeUpdate(uint16 newFee) public {
        require(msg.sender == treasury, "Only available to treasury");
        nextFeeUpdateTime = block.timestamp + feeUpdateTimelock;
        nextFeePercent = newFee;
        emit FeeUpdateQueued(newFee, msg.sender);
    }

    function executeFeeUpdate() public {
        require(msg.sender == treasury, "Only available to current treasury");
        require(
            block.timestamp >= nextFeeUpdateTime,
            "Timelock hasn't elapsed"
        );
        feePercent = nextFeePercent;
        nextFeePercent = 0;
        nextFeeUpdateTime = 0;
        emit FeeUpdated(feePercent, msg.sender);
    }

    function changeBaseURI(string memory baseURI_) public onlyOwner {
        baseURI = baseURI_;
    }

    function isOwner() public view returns (bool) {
        return msg.sender == owner;
    }

    function isNextOwner() public view returns (bool) {
        return msg.sender == nextOwner;
    }

    function transferOwnership(address nextOwner_) external onlyOwner {
        require(nextOwner_ != address(0), "Next owner is the zero address.");

        nextOwner = nextOwner_;
    }

    function cancelOwnershipTransfer() external onlyOwner {
        delete nextOwner;
    }

    function acceptOwnership() external onlyNextOwner {
        delete nextOwner;

        emit OwnershipTransferred(owner, msg.sender);

        owner = msg.sender;
    }

    function renounceOwnership() external onlyOwner {
        emit OwnershipTransferred(owner, address(0));
        owner = address(0);
    }

    // ============ NFT Methods ============

    // Returns e.g. https://mirror-api.com/editions/[editionId]/[tokenId]
    function tokenURI(uint256 tokenId)
        public
        view
        override
        returns (string memory)
    {
        // If the token does not map to an edition, it'll be 0.
        require(tokenToEdition[tokenId] > 0, "Token has not been sold yet");
        // Concatenate the components, baseURI, editionId and tokenId, to create URI.
        return
            string(
                abi.encodePacked(
                    baseURI,
                    _toString(tokenToEdition[tokenId]),
                    "/",
                    _toString(tokenId)
                )
            );
    }

    // The hash of the given content for the NFT. Can be used
    // for IPFS storage, verifying authenticity, etc.
    function contentHash(uint256 tokenId) public view returns (bytes32) {
        // If the token does not map to an edition, it'll be 0.
        require(tokenToEdition[tokenId] > 0, "Token has not been sold yet");
        // Concatenate the components, baseURI, editionId and tokenId, to create URI.
        return editions[tokenToEdition[tokenId]].contentHash;
    }

    // Returns e.g. https://mirror-api.com/editions/metadata
    function contractURI() public view returns (string memory) {
        // Concatenate the components, baseURI, editionId and tokenId, to create URI.
        return string(abi.encodePacked(baseURI, "metadata"));
    }

    function getRoyaltyRecipient(uint256 tokenId)
        public
        view
        returns (address)
    {
        require(tokenToEdition[tokenId] > 0, "Token has not been minted yet");
        return editions[tokenToEdition[tokenId]].fundingRecipient;
    }

    function setRoyaltyRecipient(
        uint256 editionId,
        address payable newFundingRecipient
    ) public {
        require(
            editions[editionId].fundingRecipient == msg.sender,
            "Only current fundingRecipient can modify its value"
        );

        editions[editionId].fundingRecipient = newFundingRecipient;
    }

    // ============ Private Methods ============

    function _sendFunds(address payable recipient, uint256 amount) private {
        require(
            address(this).balance >= amount,
            "Insufficient balance for send"
        );

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

    // From https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Strings.sol
    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);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"},{"internalType":"address payable","name":"treasury_","type":"address"},{"internalType":"uint16","name":"initialFee","type":"uint16"},{"internalType":"uint256","name":"feeUpdateTimelock_","type":"uint256"},{"internalType":"address","name":"owner_","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":false,"internalType":"uint256","name":"quantity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"address","name":"fundingRecipient","type":"address"},{"indexed":true,"internalType":"uint256","name":"editionId","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"contentHash","type":"bytes32"}],"name":"EditionCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"editionId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"numSold","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountPaid","type":"uint256"},{"indexed":true,"internalType":"address","name":"buyer","type":"address"}],"name":"EditionPurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newFee","type":"uint256"},{"indexed":false,"internalType":"address","name":"sender","type":"address"}],"name":"FeeUpdateQueued","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"feePercent","type":"uint256"},{"indexed":false,"internalType":"address","name":"sender","type":"address"}],"name":"FeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"feesAccrued","type":"uint256"},{"indexed":false,"internalType":"address","name":"sender","type":"address"}],"name":"FeesWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"fundingRecipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountWithdrawn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"feeAmount","type":"uint256"}],"name":"FundsWithdrawn","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":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"uint256","name":"editionId","type":"uint256"}],"name":"buyEdition","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"cancelOwnershipTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"name":"changeBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"computeFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"contentHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"address payable","name":"fundingRecipient","type":"address"},{"internalType":"bytes32","name":"contentHash","type":"bytes32"}],"name":"createEdition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"bytes32","name":"contentHash","type":"bytes32"}],"internalType":"struct Editions.EditionTier[]","name":"tiers","type":"tuple[]"},{"internalType":"address payable","name":"fundingRecipient","type":"address"}],"name":"createEditionTiers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"editions","outputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"address payable","name":"fundingRecipient","type":"address"},{"internalType":"uint256","name":"numSold","type":"uint256"},{"internalType":"bytes32","name":"contentHash","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"executeFeeUpdate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feePercent","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeUpdateTimelock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feesAccrued","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"fundingBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getRoyaltyRecipient","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":[],"name":"isNextOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextFeePercent","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextFeeUpdateTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[{"internalType":"uint16","name":"newFee","type":"uint16"}],"name":"queueFeeUpdate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"editionId","type":"uint256"},{"internalType":"address payable","name":"newFundingRecipient","type":"address"}],"name":"setRoyaltyRecipient","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":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenToEdition","outputs":[{"internalType":"uint256","name":"","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":[{"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":"nextOwner_","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"newTreasury","type":"address"}],"name":"updateTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"fundingRecipient","type":"address"}],"name":"withdrawFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"withdrawnForEdition","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

60a06040526001600a553480156200001657600080fd5b506040516200348d3803806200348d833981016040819052620000399162000176565b84516200004e906005906020880190620000a0565b50600b80546001600160b01b031916620100006001600160a01b039687160261ffff19161761ffff9490941693909317909255608052601080546001600160a01b0319169190921617905550620002e9565b828054620000ae9062000296565b90600052602060002090601f016020900481019282620000d257600085556200011d565b82601f10620000ed57805160ff19168380011785556200011d565b828001600101855582156200011d579182015b828111156200011d57825182559160200191906001019062000100565b506200012b9291506200012f565b5090565b5b808211156200012b576000815560010162000130565b80516001600160a01b03811681146200015e57600080fd5b919050565b805161ffff811681146200015e57600080fd5b600080600080600060a086880312156200018f57600080fd5b85516001600160401b0380821115620001a757600080fd5b818801915088601f830112620001bc57600080fd5b815181811115620001d157620001d1620002d3565b604051601f8201601f19908116603f01168101908382118183101715620001fc57620001fc620002d3565b81604052828152602093508b848487010111156200021957600080fd5b600091505b828210156200023d57848201840151818301850152908301906200021e565b828211156200024f5760008484830101525b98506200026191505088820162000146565b95505050620002736040870162000163565b9250606086015191506200028a6080870162000146565b90509295509295909350565b600181811c90821680620002ab57607f821691505b60208210811415620002cd57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6080516131816200030c60003960008181610643015261134201526131816000f3fe6080604052600436106102f25760003560e01c80637f51bb1f1161018f578063b88d4fde116100e1578063e33a59341161008a578063ed459df211610064578063ed459df21461094d578063f2fde38b1461096d578063f3e0c2901461098d57600080fd5b8063e33a5934146108cf578063e8a3d485146108ef578063e985e9c51461090457600080fd5b8063c87b56dd116100bb578063c87b56dd14610862578063d3bb052814610882578063e1bf9c08146108af57600080fd5b8063b88d4fde1461080f578063bd8616ec1461082f578063c7c2ade91461084257600080fd5b806395d89b4111610143578063a22cb4651161011d578063a22cb465146107a7578063aa0ff680146107c7578063b86165c6146107f457600080fd5b806395d89b411461071e5780639e6d134d14610767578063a015a3d81461078757600080fd5b80638da5cb5b116101745780638da5cb5b146106c85780638f32d59b146106e857806394db05951461070857600080fd5b80637f51bb1f1461067a5780637fd6f15c1461069a57600080fd5b8063476343ee1161024857806369f3331d116101fc57806374995a17116101d657806374995a1714610611578063796a47c21461063157806379ba50971461066557600080fd5b806369f3331d146105bc57806370a08231146105dc578063715018a6146105fc57600080fd5b806361d027b31161022d57806361d027b3146105565780636352211e1461057c57806368742da61461059c57600080fd5b8063476343ee14610514578063602787ed1461052957600080fd5b806323b872dd116102aa57806339a0c6f91161028457806339a0c6f9146104bf57806342842e0e146104df5780634438cec9146104ff57600080fd5b806323b872dd146103f1578063279c806e146104115780633719bc261461049b57600080fd5b8063081812fc116102db578063081812fc14610382578063095ea7b3146103ba57806323452b9c146103dc57600080fd5b806301ffc9a7146102f757806306fdde031461032c575b600080fd5b34801561030357600080fd5b50610317610312366004612c67565b6109ad565b60405190151581526020015b60405180910390f35b34801561033857600080fd5b506103756040518060400160405280601281526020017f4d6972726f722045646974696f6e73205632000000000000000000000000000081525081565b6040516103239190612f28565b34801561038e57600080fd5b506103a261039d366004612d0e565b610a92565b6040516001600160a01b039091168152602001610323565b3480156103c657600080fd5b506103da6103d5366004612b4f565b610b3d565b005b3480156103e857600080fd5b506103da610c8d565b3480156103fd57600080fd5b506103da61040c366004612a5b565b610cf9565b34801561041d57600080fd5b5061046561042c366004612d0e565b60066020526000908152604090208054600182015460028301546003840154600490940154929391926001600160a01b03909116919085565b6040805195865260208601949094526001600160a01b03909216928401929092526060830191909152608082015260a001610323565b3480156104a757600080fd5b506104b1600d5481565b604051908152602001610323565b3480156104cb57600080fd5b506103da6104da366004612ca1565b610d80565b3480156104eb57600080fd5b506103da6104fa366004612a5b565b610df1565b34801561050b57600080fd5b506103da610e0c565b34801561052057600080fd5b506103da610f42565b34801561053557600080fd5b506104b1610544366004612d0e565b60076020526000908152604090205481565b34801561056257600080fd5b50600b546103a2906201000090046001600160a01b031681565b34801561058857600080fd5b506103a2610597366004612d0e565b610fa3565b3480156105a857600080fd5b506103da6105b73660046129fe565b61102e565b3480156105c857600080fd5b506011546103a2906001600160a01b031681565b3480156105e857600080fd5b506104b16105f73660046129fe565b61119f565b34801561060857600080fd5b506103da611239565b34801561061d57600080fd5b506103da61062c366004612cea565b6112dd565b34801561063d57600080fd5b506104b17f000000000000000000000000000000000000000000000000000000000000000081565b34801561067157600080fd5b506103da6113b9565b34801561068657600080fd5b506103da6106953660046129fe565b611495565b3480156106a657600080fd5b50600b546106b59061ffff1681565b60405161ffff9091168152602001610323565b3480156106d457600080fd5b506010546103a2906001600160a01b031681565b3480156106f457600080fd5b506010546001600160a01b03163314610317565b34801561071457600080fd5b506104b1600c5481565b34801561072a57600080fd5b506103756040518060400160405280600b81526020017f45444954494f4e535f563200000000000000000000000000000000000000000081525081565b34801561077357600080fd5b506103da610782366004612d27565b61155b565b34801561079357600080fd5b506103a26107a2366004612d0e565b61161b565b3480156107b357600080fd5b506103da6107c2366004612b1c565b6116a2565b3480156107d357600080fd5b506104b16107e23660046129fe565b60046020526000908152604090205481565b34801561080057600080fd5b50600e546106b59061ffff1681565b34801561081b57600080fd5b506103da61082a366004612a9c565b611767565b6103da61083d366004612d0e565b6117f5565b34801561084e57600080fd5b506103da61085d366004612b7b565b611aa6565b34801561086e57600080fd5b5061037561087d366004612d0e565b611c77565b34801561088e57600080fd5b506104b161089d366004612d0e565b60086020526000908152604090205481565b3480156108bb57600080fd5b506104b16108ca366004612d0e565b611d21565b3480156108db57600080fd5b506103da6108ea366004612d4c565b611d42565b3480156108fb57600080fd5b50610375611e82565b34801561091057600080fd5b5061031761091f366004612a22565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205460ff1690565b34801561095957600080fd5b506011546001600160a01b03163314610317565b34801561097957600080fd5b506103da6109883660046129fe565b611eaa565b34801561099957600080fd5b506104b16109a8366004612d0e565b611f7c565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd000000000000000000000000000000000000000000000000000000001480610a4057507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b80610a8c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000818152602081905260408120546001600160a01b0316610b215760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b506000908152600260205260409020546001600160a01b031690565b6000610b4882610fa3565b9050806001600160a01b0316836001600160a01b03161415610bd25760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152608401610b18565b336001600160a01b0382161480610c0c57506001600160a01b038116600090815260036020908152604080832033845290915290205460ff165b610c7e5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610b18565b610c888383611ffa565b505050565b6010546001600160a01b03163314610ce75760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420746865206f776e65722e00000000000000006044820152606401610b18565b601180546001600160a01b0319169055565b610d033382612068565b610d755760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610b18565b610c88838383612170565b6010546001600160a01b03163314610dda5760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420746865206f776e65722e00000000000000006044820152606401610b18565b8051610ded9060059060208401906128fd565b5050565b610c8883838360405180602001604052806000815250611767565b600b546201000090046001600160a01b03163314610e925760405162461bcd60e51b815260206004820152602260248201527f4f6e6c7920617661696c61626c6520746f2063757272656e742074726561737560448201527f72790000000000000000000000000000000000000000000000000000000000006064820152608401610b18565b600d54421015610ee45760405162461bcd60e51b815260206004820152601760248201527f54696d656c6f636b206861736e277420656c61707365640000000000000000006044820152606401610b18565b600e8054600b805461ffff831661ffff1991821681179092559091169091556000600d55604080519182523360208301527f7cfad8b150be9751a5386cc4e0f549618032ff63d14fab4f77cd4b0aaaedc242910160405180910390a1565b600b54600c54610f61916201000090046001600160a01b031690612341565b600c54604080519182523360208301527f812bcf6853ebc81dc0a1d2323893eedad6cd086a4398311a699e0a7acdf187b3910160405180910390a16000600c55565b6000818152602081905260408120546001600160a01b031680610a8c5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610b18565b6002600f5414156110815760405162461bcd60e51b815260206004820152600e60248201527f5265656e7472616e742063616c6c0000000000000000000000000000000000006044820152606401610b18565b6002600f556001600160a01b03811660009081526004602052604081208054919055600b5461ffff16156111425760006110ba82611d21565b905080600c60008282546110ce9190612f95565b909155506110e79050836110e28385612fe0565b612341565b7ffbc3a599b784fe88772fc5abcc07223f64ca0b13acc341f4fb1e46bef0510eb4836111138385612fe0565b604080516001600160a01b0390931683526020830191909152810183905260600160405180910390a150611196565b61114c8282612341565b604080516001600160a01b03841681526020810183905260008183015290517ffbc3a599b784fe88772fc5abcc07223f64ca0b13acc341f4fb1e46bef0510eb49181900360600190a15b50506001600f55565b60006001600160a01b03821661121d5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610b18565b506001600160a01b031660009081526001602052604090205490565b6010546001600160a01b031633146112935760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420746865206f776e65722e00000000000000006044820152606401610b18565b6010546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3601080546001600160a01b0319169055565b600b546201000090046001600160a01b0316331461133d5760405162461bcd60e51b815260206004820152601a60248201527f4f6e6c7920617661696c61626c6520746f2074726561737572790000000000006044820152606401610b18565b6113677f000000000000000000000000000000000000000000000000000000000000000042612f95565b600d55600e805461ffff191661ffff8316908117909155604080519182523360208301527fcf14d22494cb39d337e2e0d2bfe0bb93ae9ba42b873eb81834f7f3eff5c38c5c910160405180910390a150565b6011546001600160a01b031633146114395760405162461bcd60e51b815260206004820152602c60248201527f63757272656e74206f776e6572206d757374207365742063616c6c657220617360448201527f206e657874206f776e65722e00000000000000000000000000000000000000006064820152608401610b18565b601180546001600160a01b031916905560105460405133916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3601080546001600160a01b03191633179055565b600b546201000090046001600160a01b0316331461151b5760405162461bcd60e51b815260206004820152602260248201527f4f6e6c7920617661696c61626c6520746f2063757272656e742074726561737560448201527f72790000000000000000000000000000000000000000000000000000000000006064820152608401610b18565b600b80546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b6000828152600660205260409020600201546001600160a01b031633146115ea5760405162461bcd60e51b815260206004820152603260248201527f4f6e6c792063757272656e742066756e64696e67526563697069656e7420636160448201527f6e206d6f64696679206974732076616c756500000000000000000000000000006064820152608401610b18565b60009182526006602052604090912060020180546001600160a01b0319166001600160a01b03909216919091179055565b6000818152600760205260408120546116765760405162461bcd60e51b815260206004820152601d60248201527f546f6b656e20686173206e6f74206265656e206d696e746564207965740000006044820152606401610b18565b50600090815260076020908152604080832054835260069091529020600201546001600160a01b031690565b6001600160a01b0382163314156116fb5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610b18565b3360008181526003602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6117713383612068565b6117e35760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610b18565b6117ef8484848461245a565b50505050565b6002600f5414156118485760405162461bcd60e51b815260206004820152600e60248201527f5265656e7472616e742063616c6c0000000000000000000000000000000000006044820152606401610b18565b6002600f556000818152600660205260409020546118a85760405162461bcd60e51b815260206004820152601660248201527f45646974696f6e20646f6573206e6f74206578697374000000000000000000006044820152606401610b18565b60008181526006602052604090208054600390910154106119315760405162461bcd60e51b815260206004820152602160248201527f546869732065646974696f6e20697320616c726561647920736f6c64206f757460448201527f2e000000000000000000000000000000000000000000000000000000000000006064820152608401610b18565b6000818152600660205260409020600101543410156119b85760405162461bcd60e51b815260206004820152602960248201527f4d7573742073656e6420656e6f75676820746f2070757263686173652074686560448201527f2065646974696f6e2e00000000000000000000000000000000000000000000006064820152608401610b18565b60008181526006602052604081206003018054916119d58361305e565b90915550506000818152600660209081526040808320600201546001600160a01b03168352600490915281208054349290611a11908490612f95565b92505081905550611a24336009546124e3565b600980546000908152600760209081526040808320859055925484835260068252918390206003015483519081523491810191909152339284917f23e6d1a59ae9923eb7b39939b8259c796bc664751ba6b6f64f93027895e9994c910160405180910390a460098054906000611a998361305e565b90915550506001600f5550565b6002600f541415611af95760405162461bcd60e51b815260206004820152600e60248201527f5265656e7472616e742063616c6c0000000000000000000000000000000000006044820152606401610b18565b6002600f5560005b82518160ff161015611c6d576000838260ff1681518110611b2457611b246130d9565b60200260200101516000015190506000848360ff1681518110611b4957611b496130d9565b60200260200101516020015190506000858460ff1681518110611b6e57611b6e6130d9565b602090810291909101810151604090810151815160a0810183528681528084018681526001600160a01b038a81168386018181526000606080870182815260808089018a8152600a8054865260068e52948c902099518a55975160018a015593516002890180546001600160a01b0319169190971617909555935160038701559351600490950194909455915485518a815296870189905294860191909152840182905290935090917faf0358e6610affb68df2bc72a3c7cba9f34af8963e36ee890142b81bf3c8ba69910160405180910390a2600a8054906000611c528361305e565b91905055505050508080611c6590613079565b915050611b01565b50506001600f5550565b600081815260076020526040902054606090611cd55760405162461bcd60e51b815260206004820152601b60248201527f546f6b656e20686173206e6f74206265656e20736f6c642079657400000000006044820152606401610b18565b600082815260076020526040902054600590611cf090612627565b611cf984612627565b604051602001611d0b93929190612e51565b6040516020818303038152906040529050919050565b600b54600090606490611d389061ffff1684612fc1565b610a8c9190612fad565b6002600f541415611d955760405162461bcd60e51b815260206004820152600e60248201527f5265656e7472616e742063616c6c0000000000000000000000000000000000006044820152606401610b18565b6002600f8190556040805160a08101825286815260208082018781526001600160a01b03878116848601818152600060608088018281526080808a018d8152600a8054865260068b52948c90209a518b55975160018b015593519a890180546001600160a01b0319169b9096169a909a17909455975160038701559251600490950194909455945484518a81529283018990529382019290925292830184905290917faf0358e6610affb68df2bc72a3c7cba9f34af8963e36ee890142b81bf3c8ba69910160405180910390a2600a8054906000611e728361305e565b90915550506001600f5550505050565b60606005604051602001611e969190612eb3565b604051602081830303815290604052905090565b6010546001600160a01b03163314611f045760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420746865206f776e65722e00000000000000006044820152606401610b18565b6001600160a01b038116611f5a5760405162461bcd60e51b815260206004820152601f60248201527f4e657874206f776e657220697320746865207a65726f20616464726573732e006044820152606401610b18565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b600081815260076020526040812054611fd75760405162461bcd60e51b815260206004820152601b60248201527f546f6b656e20686173206e6f74206265656e20736f6c642079657400000000006044820152606401610b18565b506000908152600760209081526040808320548352600690915290206004015490565b600081815260026020526040902080546001600160a01b0319166001600160a01b038416908117909155819061202f82610fa3565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152602081905260408120546001600160a01b03166120f25760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e00000000000000000000000000000000000000006064820152608401610b18565b60006120fd83610fa3565b9050806001600160a01b0316846001600160a01b031614806121385750836001600160a01b031661212d84610a92565b6001600160a01b0316145b8061216857506001600160a01b0380821660009081526003602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661218382610fa3565b6001600160a01b0316146121ff5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201527f73206e6f74206f776e00000000000000000000000000000000000000000000006064820152608401610b18565b6001600160a01b03821661227a5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610b18565b612285600082611ffa565b6001600160a01b038316600090815260016020819052604082208054919290916122b0908490612fe0565b90915550506001600160a01b038216600090815260016020819052604082208054919290916122e0908490612f95565b909155505060008181526020819052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b804710156123915760405162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e742062616c616e636520666f722073656e640000006044820152606401610b18565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146123de576040519150601f19603f3d011682016040523d82523d6000602084013e6123e3565b606091505b5050905080610c885760405162461bcd60e51b815260206004820152603160248201527f556e61626c6520746f2073656e642076616c75653a20726563697069656e742060448201527f6d617920686176652072657665727465640000000000000000000000000000006064820152608401610b18565b612465848484612170565b61247184848484612759565b6117ef5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610b18565b6001600160a01b0382166125395760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610b18565b6000818152602081905260409020546001600160a01b03161561259e5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610b18565b6001600160a01b038216600090815260016020819052604082208054919290916125c9908490612f95565b909155505060008181526020819052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60608161266757505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115612691578061267b8161305e565b915061268a9050600a83612fad565b915061266b565b60008167ffffffffffffffff8111156126ac576126ac6130ef565b6040519080825280601f01601f1916602001820160405280156126d6576020820181803683370190505b5090505b8415612168576126eb600183612fe0565b91506126f8600a86613099565b612703906030612f95565b60f81b818381518110612718576127186130d9565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350612752600a86612fad565b94506126da565b6000833b156128f2576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063150b7a02906127ad903390899088908890600401612eec565b602060405180830381600087803b1580156127c757600080fd5b505af19250505080156127f7575060408051601f3d908101601f191682019092526127f491810190612c84565b60015b6128a7573d808015612825576040519150601f19603f3d011682016040523d82523d6000602084013e61282a565b606091505b50805161289f5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610b18565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050612168565b506001949350505050565b82805461290990613023565b90600052602060002090601f01602090048101928261292b5760008555612971565b82601f1061294457805160ff1916838001178555612971565b82800160010185558215612971579182015b82811115612971578251825591602001919060010190612956565b5061297d929150612981565b5090565b5b8082111561297d5760008155600101612982565b600067ffffffffffffffff8311156129b0576129b06130ef565b6129c36020601f19601f86011601612f64565b90508281528383830111156129d757600080fd5b828260208301376000602084830101529392505050565b80356129f981613105565b919050565b600060208284031215612a1057600080fd5b8135612a1b81613105565b9392505050565b60008060408385031215612a3557600080fd5b8235612a4081613105565b91506020830135612a5081613105565b809150509250929050565b600080600060608486031215612a7057600080fd5b8335612a7b81613105565b92506020840135612a8b81613105565b929592945050506040919091013590565b60008060008060808587031215612ab257600080fd5b8435612abd81613105565b93506020850135612acd81613105565b925060408501359150606085013567ffffffffffffffff811115612af057600080fd5b8501601f81018713612b0157600080fd5b612b1087823560208401612996565b91505092959194509250565b60008060408385031215612b2f57600080fd5b8235612b3a81613105565b915060208301358015158114612a5057600080fd5b60008060408385031215612b6257600080fd5b8235612b6d81613105565b946020939093013593505050565b6000806040808486031215612b8f57600080fd5b833567ffffffffffffffff80821115612ba757600080fd5b818601915086601f830112612bbb57600080fd5b8135602082821115612bcf57612bcf6130ef565b612bdd818360051b01612f64565b82815281810193508482016060808502870184018c1015612bfd57600080fd5b60009650865b85811015612c475781838e031215612c19578788fd5b612c21612f3b565b833581528584013586820152898401358a82015287529584019591810191600101612c03565b50505080975050612c598189016129ee565b955050505050509250929050565b600060208284031215612c7957600080fd5b8135612a1b8161311d565b600060208284031215612c9657600080fd5b8151612a1b8161311d565b600060208284031215612cb357600080fd5b813567ffffffffffffffff811115612cca57600080fd5b8201601f81018413612cdb57600080fd5b61216884823560208401612996565b600060208284031215612cfc57600080fd5b813561ffff81168114612a1b57600080fd5b600060208284031215612d2057600080fd5b5035919050565b60008060408385031215612d3a57600080fd5b823591506020830135612a5081613105565b60008060008060808587031215612d6257600080fd5b84359350602085013592506040850135612d7b81613105565b9396929550929360600135925050565b60008151808452612da3816020860160208601612ff7565b601f01601f19169290920160200192915050565b8054600090600181811c9080831680612dd157607f831692505b6020808410821415612df357634e487b7160e01b600052602260045260246000fd5b818015612e075760018114612e1857612e45565b60ff19861689528489019650612e45565b60008881526020902060005b86811015612e3d5781548b820152908501908301612e24565b505084890196505b50505050505092915050565b6000612e5d8286612db7565b8451612e6d818360208901612ff7565b7f2f0000000000000000000000000000000000000000000000000000000000000091019081528351612ea6816001840160208801612ff7565b0160010195945050505050565b6000612ebf8284612db7565b7f6d6574616461746100000000000000000000000000000000000000000000000081526008019392505050565b60006001600160a01b03808716835280861660208401525083604083015260806060830152612f1e6080830184612d8b565b9695505050505050565b602081526000612a1b6020830184612d8b565b6040516060810167ffffffffffffffff81118282101715612f5e57612f5e6130ef565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715612f8d57612f8d6130ef565b604052919050565b60008219821115612fa857612fa86130ad565b500190565b600082612fbc57612fbc6130c3565b500490565b6000816000190483118215151615612fdb57612fdb6130ad565b500290565b600082821015612ff257612ff26130ad565b500390565b60005b83811015613012578181015183820152602001612ffa565b838111156117ef5750506000910152565b600181811c9082168061303757607f821691505b6020821081141561305857634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415613072576130726130ad565b5060010190565b600060ff821660ff811415613090576130906130ad565b60010192915050565b6000826130a8576130a86130c3565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461311a57600080fd5b50565b7fffffffff000000000000000000000000000000000000000000000000000000008116811461311a57600080fdfea2646970667358221220d7c20a8f3da38ccd4c4b81eade51e3acaf64c837f6d7237e73b8883537cb16ee64736f6c6343000805003300000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000d5ca42b27f5b37da1b08dba71a53056b0c9392040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a3000000000000000000000000002330ee705ffd040bb0cba8cb7734dfe00e7c4b57000000000000000000000000000000000000000000000000000000000000002368747470733a2f2f6d6972726f722d6170692e636f6d2f65646974696f6e732f76322f0000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102f25760003560e01c80637f51bb1f1161018f578063b88d4fde116100e1578063e33a59341161008a578063ed459df211610064578063ed459df21461094d578063f2fde38b1461096d578063f3e0c2901461098d57600080fd5b8063e33a5934146108cf578063e8a3d485146108ef578063e985e9c51461090457600080fd5b8063c87b56dd116100bb578063c87b56dd14610862578063d3bb052814610882578063e1bf9c08146108af57600080fd5b8063b88d4fde1461080f578063bd8616ec1461082f578063c7c2ade91461084257600080fd5b806395d89b4111610143578063a22cb4651161011d578063a22cb465146107a7578063aa0ff680146107c7578063b86165c6146107f457600080fd5b806395d89b411461071e5780639e6d134d14610767578063a015a3d81461078757600080fd5b80638da5cb5b116101745780638da5cb5b146106c85780638f32d59b146106e857806394db05951461070857600080fd5b80637f51bb1f1461067a5780637fd6f15c1461069a57600080fd5b8063476343ee1161024857806369f3331d116101fc57806374995a17116101d657806374995a1714610611578063796a47c21461063157806379ba50971461066557600080fd5b806369f3331d146105bc57806370a08231146105dc578063715018a6146105fc57600080fd5b806361d027b31161022d57806361d027b3146105565780636352211e1461057c57806368742da61461059c57600080fd5b8063476343ee14610514578063602787ed1461052957600080fd5b806323b872dd116102aa57806339a0c6f91161028457806339a0c6f9146104bf57806342842e0e146104df5780634438cec9146104ff57600080fd5b806323b872dd146103f1578063279c806e146104115780633719bc261461049b57600080fd5b8063081812fc116102db578063081812fc14610382578063095ea7b3146103ba57806323452b9c146103dc57600080fd5b806301ffc9a7146102f757806306fdde031461032c575b600080fd5b34801561030357600080fd5b50610317610312366004612c67565b6109ad565b60405190151581526020015b60405180910390f35b34801561033857600080fd5b506103756040518060400160405280601281526020017f4d6972726f722045646974696f6e73205632000000000000000000000000000081525081565b6040516103239190612f28565b34801561038e57600080fd5b506103a261039d366004612d0e565b610a92565b6040516001600160a01b039091168152602001610323565b3480156103c657600080fd5b506103da6103d5366004612b4f565b610b3d565b005b3480156103e857600080fd5b506103da610c8d565b3480156103fd57600080fd5b506103da61040c366004612a5b565b610cf9565b34801561041d57600080fd5b5061046561042c366004612d0e565b60066020526000908152604090208054600182015460028301546003840154600490940154929391926001600160a01b03909116919085565b6040805195865260208601949094526001600160a01b03909216928401929092526060830191909152608082015260a001610323565b3480156104a757600080fd5b506104b1600d5481565b604051908152602001610323565b3480156104cb57600080fd5b506103da6104da366004612ca1565b610d80565b3480156104eb57600080fd5b506103da6104fa366004612a5b565b610df1565b34801561050b57600080fd5b506103da610e0c565b34801561052057600080fd5b506103da610f42565b34801561053557600080fd5b506104b1610544366004612d0e565b60076020526000908152604090205481565b34801561056257600080fd5b50600b546103a2906201000090046001600160a01b031681565b34801561058857600080fd5b506103a2610597366004612d0e565b610fa3565b3480156105a857600080fd5b506103da6105b73660046129fe565b61102e565b3480156105c857600080fd5b506011546103a2906001600160a01b031681565b3480156105e857600080fd5b506104b16105f73660046129fe565b61119f565b34801561060857600080fd5b506103da611239565b34801561061d57600080fd5b506103da61062c366004612cea565b6112dd565b34801561063d57600080fd5b506104b17f000000000000000000000000000000000000000000000000000000000002a30081565b34801561067157600080fd5b506103da6113b9565b34801561068657600080fd5b506103da6106953660046129fe565b611495565b3480156106a657600080fd5b50600b546106b59061ffff1681565b60405161ffff9091168152602001610323565b3480156106d457600080fd5b506010546103a2906001600160a01b031681565b3480156106f457600080fd5b506010546001600160a01b03163314610317565b34801561071457600080fd5b506104b1600c5481565b34801561072a57600080fd5b506103756040518060400160405280600b81526020017f45444954494f4e535f563200000000000000000000000000000000000000000081525081565b34801561077357600080fd5b506103da610782366004612d27565b61155b565b34801561079357600080fd5b506103a26107a2366004612d0e565b61161b565b3480156107b357600080fd5b506103da6107c2366004612b1c565b6116a2565b3480156107d357600080fd5b506104b16107e23660046129fe565b60046020526000908152604090205481565b34801561080057600080fd5b50600e546106b59061ffff1681565b34801561081b57600080fd5b506103da61082a366004612a9c565b611767565b6103da61083d366004612d0e565b6117f5565b34801561084e57600080fd5b506103da61085d366004612b7b565b611aa6565b34801561086e57600080fd5b5061037561087d366004612d0e565b611c77565b34801561088e57600080fd5b506104b161089d366004612d0e565b60086020526000908152604090205481565b3480156108bb57600080fd5b506104b16108ca366004612d0e565b611d21565b3480156108db57600080fd5b506103da6108ea366004612d4c565b611d42565b3480156108fb57600080fd5b50610375611e82565b34801561091057600080fd5b5061031761091f366004612a22565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205460ff1690565b34801561095957600080fd5b506011546001600160a01b03163314610317565b34801561097957600080fd5b506103da6109883660046129fe565b611eaa565b34801561099957600080fd5b506104b16109a8366004612d0e565b611f7c565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd000000000000000000000000000000000000000000000000000000001480610a4057507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b80610a8c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000818152602081905260408120546001600160a01b0316610b215760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b506000908152600260205260409020546001600160a01b031690565b6000610b4882610fa3565b9050806001600160a01b0316836001600160a01b03161415610bd25760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152608401610b18565b336001600160a01b0382161480610c0c57506001600160a01b038116600090815260036020908152604080832033845290915290205460ff165b610c7e5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610b18565b610c888383611ffa565b505050565b6010546001600160a01b03163314610ce75760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420746865206f776e65722e00000000000000006044820152606401610b18565b601180546001600160a01b0319169055565b610d033382612068565b610d755760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610b18565b610c88838383612170565b6010546001600160a01b03163314610dda5760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420746865206f776e65722e00000000000000006044820152606401610b18565b8051610ded9060059060208401906128fd565b5050565b610c8883838360405180602001604052806000815250611767565b600b546201000090046001600160a01b03163314610e925760405162461bcd60e51b815260206004820152602260248201527f4f6e6c7920617661696c61626c6520746f2063757272656e742074726561737560448201527f72790000000000000000000000000000000000000000000000000000000000006064820152608401610b18565b600d54421015610ee45760405162461bcd60e51b815260206004820152601760248201527f54696d656c6f636b206861736e277420656c61707365640000000000000000006044820152606401610b18565b600e8054600b805461ffff831661ffff1991821681179092559091169091556000600d55604080519182523360208301527f7cfad8b150be9751a5386cc4e0f549618032ff63d14fab4f77cd4b0aaaedc242910160405180910390a1565b600b54600c54610f61916201000090046001600160a01b031690612341565b600c54604080519182523360208301527f812bcf6853ebc81dc0a1d2323893eedad6cd086a4398311a699e0a7acdf187b3910160405180910390a16000600c55565b6000818152602081905260408120546001600160a01b031680610a8c5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610b18565b6002600f5414156110815760405162461bcd60e51b815260206004820152600e60248201527f5265656e7472616e742063616c6c0000000000000000000000000000000000006044820152606401610b18565b6002600f556001600160a01b03811660009081526004602052604081208054919055600b5461ffff16156111425760006110ba82611d21565b905080600c60008282546110ce9190612f95565b909155506110e79050836110e28385612fe0565b612341565b7ffbc3a599b784fe88772fc5abcc07223f64ca0b13acc341f4fb1e46bef0510eb4836111138385612fe0565b604080516001600160a01b0390931683526020830191909152810183905260600160405180910390a150611196565b61114c8282612341565b604080516001600160a01b03841681526020810183905260008183015290517ffbc3a599b784fe88772fc5abcc07223f64ca0b13acc341f4fb1e46bef0510eb49181900360600190a15b50506001600f55565b60006001600160a01b03821661121d5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610b18565b506001600160a01b031660009081526001602052604090205490565b6010546001600160a01b031633146112935760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420746865206f776e65722e00000000000000006044820152606401610b18565b6010546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3601080546001600160a01b0319169055565b600b546201000090046001600160a01b0316331461133d5760405162461bcd60e51b815260206004820152601a60248201527f4f6e6c7920617661696c61626c6520746f2074726561737572790000000000006044820152606401610b18565b6113677f000000000000000000000000000000000000000000000000000000000002a30042612f95565b600d55600e805461ffff191661ffff8316908117909155604080519182523360208301527fcf14d22494cb39d337e2e0d2bfe0bb93ae9ba42b873eb81834f7f3eff5c38c5c910160405180910390a150565b6011546001600160a01b031633146114395760405162461bcd60e51b815260206004820152602c60248201527f63757272656e74206f776e6572206d757374207365742063616c6c657220617360448201527f206e657874206f776e65722e00000000000000000000000000000000000000006064820152608401610b18565b601180546001600160a01b031916905560105460405133916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3601080546001600160a01b03191633179055565b600b546201000090046001600160a01b0316331461151b5760405162461bcd60e51b815260206004820152602260248201527f4f6e6c7920617661696c61626c6520746f2063757272656e742074726561737560448201527f72790000000000000000000000000000000000000000000000000000000000006064820152608401610b18565b600b80546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b6000828152600660205260409020600201546001600160a01b031633146115ea5760405162461bcd60e51b815260206004820152603260248201527f4f6e6c792063757272656e742066756e64696e67526563697069656e7420636160448201527f6e206d6f64696679206974732076616c756500000000000000000000000000006064820152608401610b18565b60009182526006602052604090912060020180546001600160a01b0319166001600160a01b03909216919091179055565b6000818152600760205260408120546116765760405162461bcd60e51b815260206004820152601d60248201527f546f6b656e20686173206e6f74206265656e206d696e746564207965740000006044820152606401610b18565b50600090815260076020908152604080832054835260069091529020600201546001600160a01b031690565b6001600160a01b0382163314156116fb5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610b18565b3360008181526003602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6117713383612068565b6117e35760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610b18565b6117ef8484848461245a565b50505050565b6002600f5414156118485760405162461bcd60e51b815260206004820152600e60248201527f5265656e7472616e742063616c6c0000000000000000000000000000000000006044820152606401610b18565b6002600f556000818152600660205260409020546118a85760405162461bcd60e51b815260206004820152601660248201527f45646974696f6e20646f6573206e6f74206578697374000000000000000000006044820152606401610b18565b60008181526006602052604090208054600390910154106119315760405162461bcd60e51b815260206004820152602160248201527f546869732065646974696f6e20697320616c726561647920736f6c64206f757460448201527f2e000000000000000000000000000000000000000000000000000000000000006064820152608401610b18565b6000818152600660205260409020600101543410156119b85760405162461bcd60e51b815260206004820152602960248201527f4d7573742073656e6420656e6f75676820746f2070757263686173652074686560448201527f2065646974696f6e2e00000000000000000000000000000000000000000000006064820152608401610b18565b60008181526006602052604081206003018054916119d58361305e565b90915550506000818152600660209081526040808320600201546001600160a01b03168352600490915281208054349290611a11908490612f95565b92505081905550611a24336009546124e3565b600980546000908152600760209081526040808320859055925484835260068252918390206003015483519081523491810191909152339284917f23e6d1a59ae9923eb7b39939b8259c796bc664751ba6b6f64f93027895e9994c910160405180910390a460098054906000611a998361305e565b90915550506001600f5550565b6002600f541415611af95760405162461bcd60e51b815260206004820152600e60248201527f5265656e7472616e742063616c6c0000000000000000000000000000000000006044820152606401610b18565b6002600f5560005b82518160ff161015611c6d576000838260ff1681518110611b2457611b246130d9565b60200260200101516000015190506000848360ff1681518110611b4957611b496130d9565b60200260200101516020015190506000858460ff1681518110611b6e57611b6e6130d9565b602090810291909101810151604090810151815160a0810183528681528084018681526001600160a01b038a81168386018181526000606080870182815260808089018a8152600a8054865260068e52948c902099518a55975160018a015593516002890180546001600160a01b0319169190971617909555935160038701559351600490950194909455915485518a815296870189905294860191909152840182905290935090917faf0358e6610affb68df2bc72a3c7cba9f34af8963e36ee890142b81bf3c8ba69910160405180910390a2600a8054906000611c528361305e565b91905055505050508080611c6590613079565b915050611b01565b50506001600f5550565b600081815260076020526040902054606090611cd55760405162461bcd60e51b815260206004820152601b60248201527f546f6b656e20686173206e6f74206265656e20736f6c642079657400000000006044820152606401610b18565b600082815260076020526040902054600590611cf090612627565b611cf984612627565b604051602001611d0b93929190612e51565b6040516020818303038152906040529050919050565b600b54600090606490611d389061ffff1684612fc1565b610a8c9190612fad565b6002600f541415611d955760405162461bcd60e51b815260206004820152600e60248201527f5265656e7472616e742063616c6c0000000000000000000000000000000000006044820152606401610b18565b6002600f8190556040805160a08101825286815260208082018781526001600160a01b03878116848601818152600060608088018281526080808a018d8152600a8054865260068b52948c90209a518b55975160018b015593519a890180546001600160a01b0319169b9096169a909a17909455975160038701559251600490950194909455945484518a81529283018990529382019290925292830184905290917faf0358e6610affb68df2bc72a3c7cba9f34af8963e36ee890142b81bf3c8ba69910160405180910390a2600a8054906000611e728361305e565b90915550506001600f5550505050565b60606005604051602001611e969190612eb3565b604051602081830303815290604052905090565b6010546001600160a01b03163314611f045760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420746865206f776e65722e00000000000000006044820152606401610b18565b6001600160a01b038116611f5a5760405162461bcd60e51b815260206004820152601f60248201527f4e657874206f776e657220697320746865207a65726f20616464726573732e006044820152606401610b18565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b600081815260076020526040812054611fd75760405162461bcd60e51b815260206004820152601b60248201527f546f6b656e20686173206e6f74206265656e20736f6c642079657400000000006044820152606401610b18565b506000908152600760209081526040808320548352600690915290206004015490565b600081815260026020526040902080546001600160a01b0319166001600160a01b038416908117909155819061202f82610fa3565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152602081905260408120546001600160a01b03166120f25760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e00000000000000000000000000000000000000006064820152608401610b18565b60006120fd83610fa3565b9050806001600160a01b0316846001600160a01b031614806121385750836001600160a01b031661212d84610a92565b6001600160a01b0316145b8061216857506001600160a01b0380821660009081526003602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661218382610fa3565b6001600160a01b0316146121ff5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201527f73206e6f74206f776e00000000000000000000000000000000000000000000006064820152608401610b18565b6001600160a01b03821661227a5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610b18565b612285600082611ffa565b6001600160a01b038316600090815260016020819052604082208054919290916122b0908490612fe0565b90915550506001600160a01b038216600090815260016020819052604082208054919290916122e0908490612f95565b909155505060008181526020819052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b804710156123915760405162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e742062616c616e636520666f722073656e640000006044820152606401610b18565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146123de576040519150601f19603f3d011682016040523d82523d6000602084013e6123e3565b606091505b5050905080610c885760405162461bcd60e51b815260206004820152603160248201527f556e61626c6520746f2073656e642076616c75653a20726563697069656e742060448201527f6d617920686176652072657665727465640000000000000000000000000000006064820152608401610b18565b612465848484612170565b61247184848484612759565b6117ef5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610b18565b6001600160a01b0382166125395760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610b18565b6000818152602081905260409020546001600160a01b03161561259e5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610b18565b6001600160a01b038216600090815260016020819052604082208054919290916125c9908490612f95565b909155505060008181526020819052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60608161266757505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115612691578061267b8161305e565b915061268a9050600a83612fad565b915061266b565b60008167ffffffffffffffff8111156126ac576126ac6130ef565b6040519080825280601f01601f1916602001820160405280156126d6576020820181803683370190505b5090505b8415612168576126eb600183612fe0565b91506126f8600a86613099565b612703906030612f95565b60f81b818381518110612718576127186130d9565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350612752600a86612fad565b94506126da565b6000833b156128f2576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063150b7a02906127ad903390899088908890600401612eec565b602060405180830381600087803b1580156127c757600080fd5b505af19250505080156127f7575060408051601f3d908101601f191682019092526127f491810190612c84565b60015b6128a7573d808015612825576040519150601f19603f3d011682016040523d82523d6000602084013e61282a565b606091505b50805161289f5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610b18565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050612168565b506001949350505050565b82805461290990613023565b90600052602060002090601f01602090048101928261292b5760008555612971565b82601f1061294457805160ff1916838001178555612971565b82800160010185558215612971579182015b82811115612971578251825591602001919060010190612956565b5061297d929150612981565b5090565b5b8082111561297d5760008155600101612982565b600067ffffffffffffffff8311156129b0576129b06130ef565b6129c36020601f19601f86011601612f64565b90508281528383830111156129d757600080fd5b828260208301376000602084830101529392505050565b80356129f981613105565b919050565b600060208284031215612a1057600080fd5b8135612a1b81613105565b9392505050565b60008060408385031215612a3557600080fd5b8235612a4081613105565b91506020830135612a5081613105565b809150509250929050565b600080600060608486031215612a7057600080fd5b8335612a7b81613105565b92506020840135612a8b81613105565b929592945050506040919091013590565b60008060008060808587031215612ab257600080fd5b8435612abd81613105565b93506020850135612acd81613105565b925060408501359150606085013567ffffffffffffffff811115612af057600080fd5b8501601f81018713612b0157600080fd5b612b1087823560208401612996565b91505092959194509250565b60008060408385031215612b2f57600080fd5b8235612b3a81613105565b915060208301358015158114612a5057600080fd5b60008060408385031215612b6257600080fd5b8235612b6d81613105565b946020939093013593505050565b6000806040808486031215612b8f57600080fd5b833567ffffffffffffffff80821115612ba757600080fd5b818601915086601f830112612bbb57600080fd5b8135602082821115612bcf57612bcf6130ef565b612bdd818360051b01612f64565b82815281810193508482016060808502870184018c1015612bfd57600080fd5b60009650865b85811015612c475781838e031215612c19578788fd5b612c21612f3b565b833581528584013586820152898401358a82015287529584019591810191600101612c03565b50505080975050612c598189016129ee565b955050505050509250929050565b600060208284031215612c7957600080fd5b8135612a1b8161311d565b600060208284031215612c9657600080fd5b8151612a1b8161311d565b600060208284031215612cb357600080fd5b813567ffffffffffffffff811115612cca57600080fd5b8201601f81018413612cdb57600080fd5b61216884823560208401612996565b600060208284031215612cfc57600080fd5b813561ffff81168114612a1b57600080fd5b600060208284031215612d2057600080fd5b5035919050565b60008060408385031215612d3a57600080fd5b823591506020830135612a5081613105565b60008060008060808587031215612d6257600080fd5b84359350602085013592506040850135612d7b81613105565b9396929550929360600135925050565b60008151808452612da3816020860160208601612ff7565b601f01601f19169290920160200192915050565b8054600090600181811c9080831680612dd157607f831692505b6020808410821415612df357634e487b7160e01b600052602260045260246000fd5b818015612e075760018114612e1857612e45565b60ff19861689528489019650612e45565b60008881526020902060005b86811015612e3d5781548b820152908501908301612e24565b505084890196505b50505050505092915050565b6000612e5d8286612db7565b8451612e6d818360208901612ff7565b7f2f0000000000000000000000000000000000000000000000000000000000000091019081528351612ea6816001840160208801612ff7565b0160010195945050505050565b6000612ebf8284612db7565b7f6d6574616461746100000000000000000000000000000000000000000000000081526008019392505050565b60006001600160a01b03808716835280861660208401525083604083015260806060830152612f1e6080830184612d8b565b9695505050505050565b602081526000612a1b6020830184612d8b565b6040516060810167ffffffffffffffff81118282101715612f5e57612f5e6130ef565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715612f8d57612f8d6130ef565b604052919050565b60008219821115612fa857612fa86130ad565b500190565b600082612fbc57612fbc6130c3565b500490565b6000816000190483118215151615612fdb57612fdb6130ad565b500290565b600082821015612ff257612ff26130ad565b500390565b60005b83811015613012578181015183820152602001612ffa565b838111156117ef5750506000910152565b600181811c9082168061303757607f821691505b6020821081141561305857634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415613072576130726130ad565b5060010190565b600060ff821660ff811415613090576130906130ad565b60010192915050565b6000826130a8576130a86130c3565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461311a57600080fd5b50565b7fffffffff000000000000000000000000000000000000000000000000000000008116811461311a57600080fdfea2646970667358221220d7c20a8f3da38ccd4c4b81eade51e3acaf64c837f6d7237e73b8883537cb16ee64736f6c63430008050033

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

00000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000d5ca42b27f5b37da1b08dba71a53056b0c9392040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a3000000000000000000000000002330ee705ffd040bb0cba8cb7734dfe00e7c4b57000000000000000000000000000000000000000000000000000000000000002368747470733a2f2f6d6972726f722d6170692e636f6d2f65646974696f6e732f76322f0000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : baseURI_ (string): https://mirror-api.com/editions/v2/
Arg [1] : treasury_ (address): 0xd5cA42B27F5b37dA1B08DbA71a53056B0C939204
Arg [2] : initialFee (uint16): 0
Arg [3] : feeUpdateTimelock_ (uint256): 172800
Arg [4] : owner_ (address): 0x2330ee705fFD040bB0cbA8CB7734Dfe00E7C4b57

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 000000000000000000000000d5ca42b27f5b37da1b08dba71a53056b0c939204
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [3] : 000000000000000000000000000000000000000000000000000000000002a300
Arg [4] : 0000000000000000000000002330ee705ffd040bb0cba8cb7734dfe00e7c4b57
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000023
Arg [6] : 68747470733a2f2f6d6972726f722d6170692e636f6d2f65646974696f6e732f
Arg [7] : 76322f0000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

10844:14323:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2616:338;;;;;;;;;;-1:-1:-1;2616:338:0;;;;;:::i;:::-;;:::i;:::-;;;11793:14:1;;11786:22;11768:41;;11756:2;11741:18;2616:338:0;;;;;;;;10925:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;4692:308::-;;;;;;;;;;-1:-1:-1;4692:308:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;10028:55:1;;;10010:74;;9998:2;9983:18;4692:308:0;9965:125:1;4277:407:0;;;;;;;;;;-1:-1:-1;4277:407:0;;;;;:::i;:::-;;:::i;:::-;;21332:89;;;;;;;;;;;;;:::i;5559:374::-;;;;;;;;;;-1:-1:-1;5559:374:0;;;;;:::i;:::-;;:::i;12354:43::-;;;;;;;;;;-1:-1:-1;12354:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12354:43:0;;;;;;;;;;;25047:25:1;;;25103:2;25088:18;;25081:34;;;;-1:-1:-1;;;;;25151:55:1;;;25131:18;;;25124:83;;;;25238:2;25223:18;;25216:34;;;;25281:3;25266:19;;25259:35;25034:3;25019:19;12354:43:0;25001:299:1;13130:32:0;;;;;;;;;;;;;;;;;;;11966:25:1;;;11954:2;11939:18;13130:32:0;11921:76:1;20821:101:0;;;;;;;;;;-1:-1:-1;20821:101:0;;;;;:::i;:::-;;:::i;5941:185::-;;;;;;;;;;-1:-1:-1;5941:185:0;;;;;:::i;:::-;;:::i;20421:392::-;;;;;;;;;;;;;:::i;19776:163::-;;;;;;;;;;;;;:::i;12447:49::-;;;;;;;;;;-1:-1:-1;12447:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;13029:31;;;;;;;;;;-1:-1:-1;13029:31:0;;;;;;;-1:-1:-1;;;;;13029:31:0;;;3265:326;;;;;;;;;;-1:-1:-1;3265:326:0;;;;;:::i;:::-;;:::i;18769:820::-;;;;;;;;;;-1:-1:-1;18769:820:0;;;;;:::i;:::-;;:::i;13292:24::-;;;;;;;;;;-1:-1:-1;13292:24:0;;;;-1:-1:-1;;;;;13292:24:0;;;2962:295;;;;;;;;;;-1:-1:-1;2962:295:0;;;;;:::i;:::-;;:::i;21610:140::-;;;;;;;;;;;;;:::i;20136:277::-;;;;;;;;;;-1:-1:-1;20136:277:0;;;;;:::i;:::-;;:::i;12170:42::-;;;;;;;;;;;;;;;21429:173;;;;;;;;;;;;;:::i;19947:181::-;;;;;;;;;;-1:-1:-1;19947:181:0;;;;;:::i;:::-;;:::i;12961:24::-;;;;;;;;;;-1:-1:-1;12961:24:0;;;;;;;;;;;23249:6:1;23237:19;;;23219:38;;23207:2;23192:18;12961:24:0;23174:89:1;13265:20:0;;;;;;;;;;-1:-1:-1;13265:20:0;;;;-1:-1:-1;;;;;13265:20:0;;;20930:91;;;;;;;;;;-1:-1:-1;21008:5:0;;-1:-1:-1;;;;;21008:5:0;20994:10;:19;20930:91;;13067:26;;;;;;;;;;;;;;;;10982:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23562:357;;;;;;;;;;-1:-1:-1;23562:357:0;;;;;:::i;:::-;;:::i;23290:264::-;;;;;;;;;;-1:-1:-1;23290:264:0;;;;;:::i;:::-;;:::i;5008:321::-;;;;;;;;;;-1:-1:-1;5008:321:0;;;;;:::i;:::-;;:::i;11977:49::-;;;;;;;;;;-1:-1:-1;11977:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;13169:28;;;;;;;;;;-1:-1:-1;13169:28:0;;;;;;;;6134:363;;;;;;;;;;-1:-1:-1;6134:363:0;;;;;:::i;:::-;;:::i;17350:1355::-;;;;;;:::i;:::-;;:::i;15587:902::-;;;;;;;;;;-1:-1:-1;15587:902:0;;;;;:::i;:::-;;:::i;21881:619::-;;;;;;;;;;-1:-1:-1;21881:619:0;;;;;:::i;:::-;;:::i;12585:54::-;;;;;;;;;;-1:-1:-1;12585:54:0;;;;;:::i;:::-;;;;;;;;;;;;;;19597:121;;;;;;;;;;-1:-1:-1;19597:121:0;;;;;:::i;:::-;;:::i;16497:845::-;;;;;;;;;;-1:-1:-1;16497:845:0;;;;;:::i;:::-;;:::i;23065:217::-;;;;;;;;;;;;;:::i;5337:214::-;;;;;;;;;;-1:-1:-1;5337:214:0;;;;;:::i;:::-;-1:-1:-1;;;;;5508:25:0;;;5479:4;5508:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;5337:214;21029:99;;;;;;;;;;-1:-1:-1;21111:9:0;;-1:-1:-1;;;;;21111:9:0;21097:10;:23;21029:99;;21136:188;;;;;;;;;;-1:-1:-1;21136:188:0;;;;;:::i;:::-;;:::i;22626:369::-;;;;;;;;;;-1:-1:-1;22626:369:0;;;;;:::i;:::-;;:::i;2616:338::-;2746:4;2788:40;;;2803:25;2788:40;;:105;;-1:-1:-1;2845:48:0;;;2860:33;2845:48;2788:105;:158;;;-1:-1:-1;2169:25:0;2154:40;;;;2910:36;2768:178;2616:338;-1:-1:-1;;2616:338:0:o;4692:308::-;4813:7;6954:16;;;;;;;;;;;-1:-1:-1;;;;;6954:16:0;4838:110;;;;-1:-1:-1;;;4838:110:0;;18997:2:1;4838:110:0;;;18979:21:1;19036:2;19016:18;;;19009:30;19075:34;19055:18;;;19048:62;19146:14;19126:18;;;19119:42;19178:19;;4838:110:0;;;;;;;;;-1:-1:-1;4968:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;4968:24:0;;4692:308::o;4277:407::-;4358:13;4374:23;4389:7;4374:14;:23::i;:::-;4358:39;;4422:5;-1:-1:-1;;;;;4416:11:0;:2;-1:-1:-1;;;;;4416:11:0;;;4408:57;;;;-1:-1:-1;;;4408:57:0;;20632:2:1;4408:57:0;;;20614:21:1;20671:2;20651:18;;;20644:30;20710:34;20690:18;;;20683:62;20781:3;20761:18;;;20754:31;20802:19;;4408:57:0;20604:223:1;4408:57:0;4500:10;-1:-1:-1;;;;;4500:19:0;;;;:58;;-1:-1:-1;;;;;;5508:25:0;;5479:4;5508:25;;;:18;:25;;;;;;;;4547:10;5508:35;;;;;;;;;;4523;4478:164;;;;-1:-1:-1;;;4478:164:0;;17034:2:1;4478:164:0;;;17016:21:1;17073:2;17053:18;;;17046:30;17112:34;17092:18;;;17085:62;17183:26;17163:18;;;17156:54;17227:19;;4478:164:0;17006:246:1;4478:164:0;4655:21;4664:2;4668:7;4655:8;:21::i;:::-;4347:337;4277:407;;:::o;21332:89::-;21008:5;;-1:-1:-1;;;;;21008:5:0;20994:10;:19;14917:46;;;;-1:-1:-1;;;14917:46:0;;13553:2:1;14917:46:0;;;13535:21:1;13592:2;13572:18;;;13565:30;13631:26;13611:18;;;13604:54;13675:18;;14917:46:0;13525:174:1;14917:46:0;21404:9:::1;21397:16:::0;;-1:-1:-1;;;;;;21397:16:0::1;::::0;;21332:89::o;5559:374::-;5768:39;5787:10;5799:7;5768:18;:39::i;:::-;5746:138;;;;-1:-1:-1;;;5746:138:0;;21735:2:1;5746:138:0;;;21717:21:1;21774:2;21754:18;;;21747:30;21813:34;21793:18;;;21786:62;21884:19;21864:18;;;21857:47;21921:19;;5746:138:0;21707:239:1;5746:138:0;5897:28;5907:4;5913:2;5917:7;5897:9;:28::i;20821:101::-;21008:5;;-1:-1:-1;;;;;21008:5:0;20994:10;:19;14917:46;;;;-1:-1:-1;;;14917:46:0;;13553:2:1;14917:46:0;;;13535:21:1;13592:2;13572:18;;;13565:30;13631:26;13611:18;;;13604:54;13675:18;;14917:46:0;13525:174:1;14917:46:0;20896:18;;::::1;::::0;:7:::1;::::0;:18:::1;::::0;::::1;::::0;::::1;:::i;:::-;;20821:101:::0;:::o;5941:185::-;6079:39;6096:4;6102:2;6106:7;6079:39;;;;;;;;;;;;:16;:39::i;20421:392::-;20489:8;;;;;-1:-1:-1;;;;;20489:8:0;20475:10;:22;20467:69;;;;-1:-1:-1;;;20467:69:0;;15799:2:1;20467:69:0;;;15781:21:1;15838:2;15818:18;;;15811:30;15877:34;15857:18;;;15850:62;15948:4;15928:18;;;15921:32;15970:19;;20467:69:0;15771:224:1;20467:69:0;20588:17;;20569:15;:36;;20547:109;;;;-1:-1:-1;;;20547:109:0;;13201:2:1;20547:109:0;;;13183:21:1;13240:2;13220:18;;;13213:30;13279:25;13259:18;;;13252:53;13322:18;;20547:109:0;13173:173:1;20547:109:0;20680:14;;;20667:10;:27;;20680:14;;;-1:-1:-1;;20667:27:0;;;;;;;;20705:18;;;;;;-1:-1:-1;20734:17:0;:21;20771:34;;;23441:38:1;;;20794:10:0;23510:2:1;23495:18;;23488:83;20771:34:0;;23414:18:1;20771:34:0;;;;;;;20421:392::o;19776:163::-;19829:8;;19839:11;;19818:33;;19829:8;;;-1:-1:-1;;;;;19829:8:0;;19818:10;:33::i;:::-;19881:11;;19867:38;;;23938:25:1;;;19894:10:0;23994:2:1;23979:18;;23972:83;19867:38:0;;23911:18:1;19867:38:0;;;;;;;19930:1;19916:11;:15;19776:163::o;3265:326::-;3382:7;3423:16;;;;;;;;;;;-1:-1:-1;;;;;3423:16:0;3472:19;3450:110;;;;-1:-1:-1;;;3450:110:0;;17870:2:1;3450:110:0;;;17852:21:1;17909:2;17889:18;;;17882:30;17948:34;17928:18;;;17921:62;18019:11;17999:18;;;17992:39;18048:19;;3450:110:0;17842:231:1;18769:820:0;11142:1;14495:16;;:38;;14487:65;;;;-1:-1:-1;;;14487:65:0;;21034:2:1;14487:65:0;;;21016:21:1;21073:2;21053:18;;;21046:30;21112:16;21092:18;;;21085:44;21146:18;;14487:65:0;21006:164:1;14487:65:0;11142:1;14630:16;:37;-1:-1:-1;;;;;18902:32:0;::::1;18882:17;18902:32:::0;;;:14:::1;:32;::::0;;;;;;18945:36;;;18998:10:::1;::::0;::::1;;:14:::0;18994:588:::1;;19123:11;19137:21;19148:9;19137:10;:21::i;:::-;19123:35;;19234:3;19219:11;;:18;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;19313:45:0::1;::::0;-1:-1:-1;19324:16:0;19342:15:::1;19354:3:::0;19342:9;:15:::1;:::i;:::-;19313:10;:45::i;:::-;19378:54;19393:16:::0;19411:15:::1;19423:3:::0;19411:9;:15:::1;:::i;:::-;19378:54;::::0;;-1:-1:-1;;;;;10578:55:1;;;10560:74;;10665:2;10650:18;;10643:34;;;;10693:18;;10686:34;;;10548:2;10533:18;19378:54:0::1;;;;;;;19014:430;18994:588;;;19465:39;19476:16;19494:9;19465:10;:39::i;:::-;19524:46;::::0;;-1:-1:-1;;;;;10578:55:1;;10560:74;;10665:2;10650:18;;10643:34;;;-1:-1:-1;10693:18:1;;;10686:34;19524:46:0;;::::1;::::0;;;;10548:2:1;19524:46:0;;::::1;18994:588;-1:-1:-1::0;;11087:1:0;14828:16;:41;18769:820::o;2962:295::-;3079:7;-1:-1:-1;;;;;3126:19:0;;3104:111;;;;-1:-1:-1;;;3104:111:0;;17459:2:1;3104:111:0;;;17441:21:1;17498:2;17478:18;;;17471:30;17537:34;17517:18;;;17510:62;17608:12;17588:18;;;17581:40;17638:19;;3104:111:0;17431:232:1;3104:111:0;-1:-1:-1;;;;;;3233:16:0;;;;;:9;:16;;;;;;;2962:295::o;21610:140::-;21008:5;;-1:-1:-1;;;;;21008:5:0;20994:10;:19;14917:46;;;;-1:-1:-1;;;14917:46:0;;13553:2:1;14917:46:0;;;13535:21:1;13592:2;13572:18;;;13565:30;13631:26;13611:18;;;13604:54;13675:18;;14917:46:0;13525:174:1;14917:46:0;21695:5:::1;::::0;21674:39:::1;::::0;21710:1:::1;::::0;-1:-1:-1;;;;;21695:5:0::1;::::0;21674:39:::1;::::0;21710:1;;21674:39:::1;21724:5;:18:::0;;-1:-1:-1;;;;;;21724:18:0::1;::::0;;21610:140::o;20136:277::-;20215:8;;;;;-1:-1:-1;;;;;20215:8:0;20201:10;:22;20193:61;;;;-1:-1:-1;;;20193:61:0;;22153:2:1;20193:61:0;;;22135:21:1;22192:2;22172:18;;;22165:30;22231:28;22211:18;;;22204:56;22277:18;;20193:61:0;22125:176:1;20193:61:0;20285:35;20303:17;20285:15;:35;:::i;:::-;20265:17;:55;20331:14;:23;;-1:-1:-1;;20331:23:0;;;;;;;;;;20370:35;;;23441:38:1;;;20394:10:0;23510:2:1;23495:18;;23488:83;20370:35:0;;23414:18:1;20370:35:0;;;;;;;20136:277;:::o;21429:173::-;21111:9;;-1:-1:-1;;;;;21111:9:0;21097:10;:23;15027:70;;;;-1:-1:-1;;;15027:70:0;;12428:2:1;15027:70:0;;;12410:21:1;12467:2;12447:18;;;12440:30;12506:34;12486:18;;;12479:62;12577:14;12557:18;;;12550:42;12609:19;;15027:70:0;12400:234:1;15027:70:0;21497:9:::1;21490:16:::0;;-1:-1:-1;;;;;;21490:16:0::1;::::0;;21545:5:::1;::::0;21524:39:::1;::::0;21552:10:::1;::::0;-1:-1:-1;;;;;21545:5:0::1;::::0;21524:39:::1;::::0;21497:9:::1;::::0;21524:39:::1;21576:5;:18:::0;;-1:-1:-1;;;;;;21576:18:0::1;21584:10;21576:18;::::0;;21429:173::o;19947:181::-;20040:8;;;;;-1:-1:-1;;;;;20040:8:0;20026:10;:22;20018:69;;;;-1:-1:-1;;;20018:69:0;;15799:2:1;20018:69:0;;;15781:21:1;15838:2;15818:18;;;15811:30;15877:34;15857:18;;;15850:62;15948:4;15928:18;;;15921:32;15970:19;;20018:69:0;15771:224:1;20018:69:0;20098:8;:22;;-1:-1:-1;;;;;20098:22:0;;;;;;;;;;;;;;;19947:181::o;23562:357::-;23712:19;;;;:8;:19;;;;;:36;;;-1:-1:-1;;;;;23712:36:0;23752:10;23712:50;23690:150;;;;-1:-1:-1;;;23690:150:0;;16615:2:1;23690:150:0;;;16597:21:1;16654:2;16634:18;;;16627:30;16693:34;16673:18;;;16666:62;16764:20;16744:18;;;16737:48;16802:19;;23690:150:0;16587:240:1;23690:150:0;23853:19;;;;:8;:19;;;;;;:36;;:58;;-1:-1:-1;;;;;;23853:58:0;-1:-1:-1;;;;;23853:58:0;;;;;;;;;23562:357::o;23290:264::-;23384:7;23417:23;;;:14;:23;;;;;;23409:69;;;;-1:-1:-1;;;23409:69:0;;21377:2:1;23409:69:0;;;21359:21:1;21416:2;21396:18;;;21389:30;21455:31;21435:18;;;21428:59;21504:18;;23409:69:0;21349:179:1;23409:69:0;-1:-1:-1;23496:33:0;23505:23;;;:14;:23;;;;;;;;;23496:33;;:8;:33;;;;;:50;;;-1:-1:-1;;;;;23496:50:0;;23290:264::o;5008:321::-;-1:-1:-1;;;;;5143:22:0;;5155:10;5143:22;;5135:60;;;;-1:-1:-1;;;5135:60:0;;15445:2:1;5135:60:0;;;15427:21:1;15484:2;15464:18;;;15457:30;15523:27;15503:18;;;15496:55;15568:18;;5135:60:0;15417:175:1;5135:60:0;5227:10;5208:30;;;;:18;:30;;;;;;;;-1:-1:-1;;;;;5208:40:0;;;;;;;;;;;;:51;;-1:-1:-1;;5208:51:0;;;;;;;;;;5275:46;;11768:41:1;;;5208:40:0;;5227:10;5275:46;;11741:18:1;5275:46:0;;;;;;;5008:321;;:::o;6134:363::-;6323:39;6342:10;6354:7;6323:18;:39::i;:::-;6301:138;;;;-1:-1:-1;;;6301:138:0;;21735:2:1;6301:138:0;;;21717:21:1;21774:2;21754:18;;;21747:30;21813:34;21793:18;;;21786:62;21884:19;21864:18;;;21857:47;21921:19;;6301:138:0;21707:239:1;6301:138:0;6450:39;6464:4;6470:2;6474:7;6483:5;6450:13;:39::i;:::-;6134:363;;;;:::o;17350:1355::-;11142:1;14495:16;;:38;;14487:65;;;;-1:-1:-1;;;14487:65:0;;21034:2:1;14487:65:0;;;21016:21:1;21073:2;21053:18;;;21046:30;21112:16;21092:18;;;21085:44;21146:18;;14487:65:0;21006:164:1;14487:65:0;11142:1;14630:16;:37;17615:1:::1;17584:19:::0;;;:8:::1;:19;::::0;;;;:28;17576:67:::1;;;::::0;-1:-1:-1;;;17576:67:0;;22926:2:1;17576:67:0::1;::::0;::::1;22908:21:1::0;22965:2;22945:18;;;22938:30;23004:24;22984:18;;;22977:52;23046:18;;17576:67:0::1;22898:172:1::0;17576:67:0::1;17775:19;::::0;;;:8:::1;:19;::::0;;;;:28;;17745:27:::1;::::0;;::::1;::::0;:58:::1;17723:141;;;::::0;-1:-1:-1;;;17723:141:0;;19410:2:1;17723:141:0::1;::::0;::::1;19392:21:1::0;19449:2;19429:18;;;19422:30;19488:34;19468:18;;;19461:62;19559:3;19539:18;;;19532:31;19580:19;;17723:141:0::1;19382:223:1::0;17723:141:0::1;17974:19;::::0;;;:8:::1;:19;::::0;;;;:25:::1;;::::0;17961:9:::1;:38;;17939:129;;;::::0;-1:-1:-1;;;17939:129:0;;20222:2:1;17939:129:0::1;::::0;::::1;20204:21:1::0;20261:2;20241:18;;;20234:30;20300:34;20280:18;;;20273:62;20371:11;20351:18;;;20344:39;20400:19;;17939:129:0::1;20194:231:1::0;17939:129:0::1;18145:19;::::0;;;:8:::1;:19;::::0;;;;:27:::1;;:29:::0;;;::::1;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;18185:52:0::1;18200:19:::0;;;:8:::1;:19;::::0;;;;;;;:36:::1;;::::0;-1:-1:-1;;;;;18200:36:0::1;18185:52:::0;;:14:::1;:52:::0;;;;;:65;;18241:9:::1;::::0;18185:52;:65:::1;::::0;18241:9;;18185:65:::1;:::i;:::-;;;;;;;;18331:30;18337:10;18349:11;;18331:5;:30::i;:::-;18461:11;::::0;;18446:27:::1;::::0;;;:14:::1;:27;::::0;;;;;;;:39;;;18558:11;;18584:19;;;:8:::1;:19:::0;;;;;;:27:::1;;::::0;18503:168;;24240:25:1;;;18626:9:0::1;24281:18:1::0;;;24274:34;;;;18650:10:0::1;::::0;18446:39;;18503:168:::1;::::0;24213:18:1;18503:168:0::1;;;;;;;18684:11;:13:::0;;;:11:::1;:13;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;11087:1:0;14828:16;:41;-1:-1:-1;17350:1355:0:o;15587:902::-;11142:1;14495:16;;:38;;14487:65;;;;-1:-1:-1;;;14487:65:0;;21034:2:1;14487:65:0;;;21016:21:1;21073:2;21053:18;;;21046:30;21112:16;21092:18;;;21085:44;21146:18;;14487:65:0;21006:164:1;14487:65:0;11142:1;14630:16;:37;15790:7:::1;15785:697;15807:5;:12;15803:1;:16;;;15785:697;;;15841:16;15860:5;15866:1;15860:8;;;;;;;;;;:::i;:::-;;;;;;;:17;;;15841:36;;15892:13;15908:5;15914:1;15908:8;;;;;;;;;;:::i;:::-;;;;;;;:14;;;15892:30;;15937:19;15959:5;15965:1;15959:8;;;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;:20:::1;::::0;;::::1;::::0;16022:217;;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;;;-1:-1:-1;;;;;16022:217:0;;::::1;::::0;;;;;;-1:-1:-1;16022:217:0;;;;;;;;;;;;;;16005:13:::1;::::0;;15996:23;;:8:::1;:23:::0;;;;;;:243;;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;;15996:243:0::1;::::0;;;::::1;;::::0;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;;;;16380:13;;16261:177;;24558:25:1;;;24599:18;;;24592:34;;;24642:18;;;24635:83;;;;24734:18;;24727:34;;;15959:20:0;;-1:-1:-1;16380:13:0;;16261:177:::1;::::0;24530:19:1;16261:177:0::1;;;;;;;16455:13;:15:::0;;;:13:::1;:15;::::0;::::1;:::i;:::-;;;;;;15826:656;;;15821:3;;;;;:::i;:::-;;;;15785:697;;;-1:-1:-1::0;;11087:1:0;14828:16;:41;-1:-1:-1;15587:902:0:o;21881:619::-;22112:1;22086:23;;;:14;:23;;;;;;21982:13;;22078:67;;;;-1:-1:-1;;;22078:67:0;;18641:2:1;22078:67:0;;;18623:21:1;18680:2;18660:18;;;18653:30;18719:29;18699:18;;;18692:57;18766:18;;22078:67:0;18613:177:1;22078:67:0;22367:23;;;;:14;:23;;;;;;22327:7;;22357:34;;:9;:34::i;:::-;22440:18;22450:7;22440:9;:18::i;:::-;22288:189;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22243:249;;21881:619;;;:::o;19597:121::-;19693:10;;19655:7;;19707:3;;19683:20;;19693:10;;19683:7;:20;:::i;:::-;19682:28;;;;:::i;16497:845::-;11142:1;14495:16;;:38;;14487:65;;;;-1:-1:-1;;;14487:65:0;;21034:2:1;14487:65:0;;;21016:21:1;21073:2;21053:18;;;21046:30;21112:16;21092:18;;;21085:44;21146:18;;14487:65:0;21006:164:1;14487:65:0;11142:1;14630:16;:37;;;16942:193:::1;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;;;;;16942:193:0;;::::1;::::0;;;;;;-1:-1:-1;16942:193:0;;;;;;;;;;;;;;16925:13:::1;::::0;;16916:23;;:8:::1;:23:::0;;;;;;:219;;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;-1:-1:-1;;;;;;16916:219:0::1;::::0;;;::::1;::::0;;;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;;;;17256:13;;17153:153;;24558:25:1;;;24599:18;;;24592:34;;;24642:18;;;24635:83;;;;24734:18;;;24727:34;;;17256:13:0;;17153:153:::1;::::0;24530:19:1;17153:153:0::1;;;;;;;17319:13;:15:::0;;;:13:::1;:15;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;11087:1:0;14828:16;:41;-1:-1:-1;;;;16497:845:0:o;23065:217::-;23109:13;23253:7;23236:37;;;;;;;;:::i;:::-;;;;;;;;;;;;;23222:52;;23065:217;:::o;21136:188::-;21008:5;;-1:-1:-1;;;;;21008:5:0;20994:10;:19;14917:46;;;;-1:-1:-1;;;14917:46:0;;13553:2:1;14917:46:0;;;13535:21:1;13592:2;13572:18;;;13565:30;13631:26;13611:18;;;13604:54;13675:18;;14917:46:0;13525:174:1;14917:46:0;-1:-1:-1;;;;;21221:24:0;::::1;21213:68;;;::::0;-1:-1:-1;;;21213:68:0;;12841:2:1;21213:68:0::1;::::0;::::1;12823:21:1::0;12880:2;12860:18;;;12853:30;12919:33;12899:18;;;12892:61;12970:18;;21213:68:0::1;12813:181:1::0;21213:68:0::1;21294:9;:22:::0;;-1:-1:-1;;;;;;21294:22:0::1;-1:-1:-1::0;;;;;21294:22:0;;;::::1;::::0;;;::::1;::::0;;21136:188::o;22626:369::-;22685:7;22778:23;;;:14;:23;;;;;;22770:67;;;;-1:-1:-1;;;22770:67:0;;18641:2:1;22770:67:0;;;18623:21:1;18680:2;18660:18;;;18653:30;18719:29;18699:18;;;18692:57;18766:18;;22770:67:0;18613:177:1;22770:67:0;-1:-1:-1;22942:33:0;22951:23;;;:14;:23;;;;;;;;;22942:33;;:8;:33;;;;;:45;;;;22626:369::o;9117:174::-;9192:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;9192:29:0;-1:-1:-1;;;;;9192:29:0;;;;;;;;:24;;9246:23;9192:24;9246:14;:23::i;:::-;-1:-1:-1;;;;;9237:46:0;;;;;;;;;;;9117:174;;:::o;7000:452::-;7129:4;6954:16;;;;;;;;;;;-1:-1:-1;;;;;6954:16:0;7151:110;;;;-1:-1:-1;;;7151:110:0;;16202:2:1;7151:110:0;;;16184:21:1;16241:2;16221:18;;;16214:30;16280:34;16260:18;;;16253:62;16351:14;16331:18;;;16324:42;16383:19;;7151:110:0;16174:234:1;7151:110:0;7272:13;7288:23;7303:7;7288:14;:23::i;:::-;7272:39;;7341:5;-1:-1:-1;;;;;7330:16:0;:7;-1:-1:-1;;;;;7330:16:0;;:64;;;;7387:7;-1:-1:-1;;;;;7363:31:0;:20;7375:7;7363:11;:20::i;:::-;-1:-1:-1;;;;;7363:31:0;;7330:64;:113;;;-1:-1:-1;;;;;;5508:25:0;;;5479:4;5508:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;7411:32;7322:122;7000:452;-1:-1:-1;;;;7000:452:0:o;8546:563::-;8719:4;-1:-1:-1;;;;;8692:31:0;:23;8707:7;8692:14;:23::i;:::-;-1:-1:-1;;;;;8692:31:0;;8670:122;;;;-1:-1:-1;;;8670:122:0;;19812:2:1;8670:122:0;;;19794:21:1;19851:2;19831:18;;;19824:30;19890:34;19870:18;;;19863:62;19961:11;19941:18;;;19934:39;19990:19;;8670:122:0;19784:231:1;8670:122:0;-1:-1:-1;;;;;8811:16:0;;8803:65;;;;-1:-1:-1;;;8803:65:0;;15040:2:1;8803:65:0;;;15022:21:1;15079:2;15059:18;;;15052:30;15118:34;15098:18;;;15091:62;15189:6;15169:18;;;15162:34;15213:19;;8803:65:0;15012:226:1;8803:65:0;8933:29;8950:1;8954:7;8933:8;:29::i;:::-;-1:-1:-1;;;;;8975:15:0;;;;;;8994:1;8975:15;;;;;;;:20;;8994:1;;8975:15;;:20;;8994:1;;8975:20;:::i;:::-;;;;-1:-1:-1;;;;;;;9006:13:0;;;;;;9023:1;9006:13;;;;;;;:18;;9023:1;;9006:13;;:18;;9023:1;;9006:18;:::i;:::-;;;;-1:-1:-1;;9035:7:0;:16;;;;;;;;;;;:21;;-1:-1:-1;;;;;;9035:21:0;-1:-1:-1;;;;;9035:21:0;;;;;;;;;9074:27;;9035:16;;9074:27;;;;;;;8546:563;;;:::o;23979:345::-;24108:6;24083:21;:31;;24061:110;;;;-1:-1:-1;;;24061:110:0;;14325:2:1;24061:110:0;;;14307:21:1;14364:2;14344:18;;;14337:30;14403:31;14383:18;;;14376:59;14452:18;;24061:110:0;14297:179:1;24061:110:0;24185:12;24203:9;-1:-1:-1;;;;;24203:14:0;24225:6;24203:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24184:52;;;24255:7;24247:69;;;;-1:-1:-1;;;24247:69:0;;22508:2:1;24247:69:0;;;22490:21:1;22547:2;22527:18;;;22520:30;22586:34;22566:18;;;22559:62;22657:19;22637:18;;;22630:47;22694:19;;24247:69:0;22480:239:1;6505:352:0;6662:28;6672:4;6678:2;6682:7;6662:9;:28::i;:::-;6723:48;6746:4;6752:2;6756:7;6765:5;6723:22;:48::i;:::-;6701:148;;;;-1:-1:-1;;;6701:148:0;;13906:2:1;6701:148:0;;;13888:21:1;13945:2;13925:18;;;13918:30;13984:34;13964:18;;;13957:62;14055:20;14035:18;;;14028:48;14093:19;;6701:148:0;13878:240:1;7907:324:0;-1:-1:-1;;;;;7987:16:0;;7979:61;;;;-1:-1:-1;;;7979:61:0;;18280:2:1;7979:61:0;;;18262:21:1;;;18299:18;;;18292:30;18358:34;18338:18;;;18331:62;18410:18;;7979:61:0;18252:182:1;7979:61:0;6930:4;6954:16;;;;;;;;;;;-1:-1:-1;;;;;6954:16:0;:30;8051:58;;;;-1:-1:-1;;;8051:58:0;;14683:2:1;8051:58:0;;;14665:21:1;14722:2;14702:18;;;14695:30;14761;14741:18;;;14734:58;14809:18;;8051:58:0;14655:178:1;8051:58:0;-1:-1:-1;;;;;8122:13:0;;;;;;8139:1;8122:13;;;;;;;:18;;8139:1;;8122:13;;:18;;8139:1;;8122:18;:::i;:::-;;;;-1:-1:-1;;8151:7:0;:16;;;;;;;;;;;:21;;-1:-1:-1;;;;;;8151:21:0;-1:-1:-1;;;;;8151:21:0;;;;;;;;8190:33;;8151:16;;:7;8190:33;;8151:7;;8190:33;7907:324;;:::o;24440:724::-;24497:13;24718:10;24714:53;;-1:-1:-1;;24745:10:0;;;;;;;;;;;;;;;;;;24440:724::o;24714:53::-;24792:5;24777:12;24833:78;24840:9;;24833:78;;24866:8;;;;:::i;:::-;;-1:-1:-1;24889:10:0;;-1:-1:-1;24897:2:0;24889:10;;:::i;:::-;;;24833:78;;;24921:19;24953:6;24943:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24943:17:0;;24921:39;;24971:154;24978:10;;24971:154;;25005:11;25015:1;25005:11;;:::i;:::-;;-1:-1:-1;25074:10:0;25082:2;25074:5;:10;:::i;:::-;25061:24;;:2;:24;:::i;:::-;25048:39;;25031:6;25038;25031:14;;;;;;;;:::i;:::-;;;;:56;;;;;;;;;;-1:-1:-1;25102:11:0;25111:2;25102:11;;:::i;:::-;;;24971:154;;9299:1050;9454:4;10683:20;;10731:8;9471:871;;9527:173;;;;;-1:-1:-1;;;;;9527:36:0;;;;;:173;;9586:10;;9619:4;;9646:7;;9676:5;;9527:173;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9527:173:0;;;;;;;;-1:-1:-1;;9527:173:0;;;;;;;;;;;;:::i;:::-;;;9506:781;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9887:13:0;;9883:389;;9930:108;;-1:-1:-1;;;9930:108:0;;13906:2:1;9930:108:0;;;13888:21:1;13945:2;13925:18;;;13918:30;13984:34;13964:18;;;13957:62;14055:20;14035:18;;;14028:48;14093:19;;9930:108:0;13878:240:1;9883:389:0;10222:6;10216:13;10207:6;10203:2;10199:15;10192:38;9506:781;9764:55;;9774:45;9764:55;;-1:-1:-1;9757:62:0;;9471:871;-1:-1:-1;10326:4:0;9299:1050;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:465:1;78:5;112:18;104:6;101:30;98:2;;;134:18;;:::i;:::-;172:116;282:4;-1:-1:-1;;208:2:1;200:6;196:15;192:88;188:99;172:116;:::i;:::-;163:125;;311:6;304:5;297:21;351:3;342:6;337:3;333:16;330:25;327:2;;;368:1;365;358:12;327:2;417:6;412:3;405:4;398:5;394:16;381:43;471:1;464:4;455:6;448:5;444:18;440:29;433:40;88:391;;;;;:::o;484:142::-;560:20;;589:31;560:20;589:31;:::i;:::-;541:85;;;:::o;631:247::-;690:6;743:2;731:9;722:7;718:23;714:32;711:2;;;759:1;756;749:12;711:2;798:9;785:23;817:31;842:5;817:31;:::i;:::-;867:5;701:177;-1:-1:-1;;;701:177:1:o;1143:388::-;1211:6;1219;1272:2;1260:9;1251:7;1247:23;1243:32;1240:2;;;1288:1;1285;1278:12;1240:2;1327:9;1314:23;1346:31;1371:5;1346:31;:::i;:::-;1396:5;-1:-1:-1;1453:2:1;1438:18;;1425:32;1466:33;1425:32;1466:33;:::i;:::-;1518:7;1508:17;;;1230:301;;;;;:::o;1536:456::-;1613:6;1621;1629;1682:2;1670:9;1661:7;1657:23;1653:32;1650:2;;;1698:1;1695;1688:12;1650:2;1737:9;1724:23;1756:31;1781:5;1756:31;:::i;:::-;1806:5;-1:-1:-1;1863:2:1;1848:18;;1835:32;1876:33;1835:32;1876:33;:::i;:::-;1640:352;;1928:7;;-1:-1:-1;;;1982:2:1;1967:18;;;;1954:32;;1640:352::o;1997:794::-;2092:6;2100;2108;2116;2169:3;2157:9;2148:7;2144:23;2140:33;2137:2;;;2186:1;2183;2176:12;2137:2;2225:9;2212:23;2244:31;2269:5;2244:31;:::i;:::-;2294:5;-1:-1:-1;2351:2:1;2336:18;;2323:32;2364:33;2323:32;2364:33;:::i;:::-;2416:7;-1:-1:-1;2470:2:1;2455:18;;2442:32;;-1:-1:-1;2525:2:1;2510:18;;2497:32;2552:18;2541:30;;2538:2;;;2584:1;2581;2574:12;2538:2;2607:22;;2660:4;2652:13;;2648:27;-1:-1:-1;2638:2:1;;2689:1;2686;2679:12;2638:2;2712:73;2777:7;2772:2;2759:16;2754:2;2750;2746:11;2712:73;:::i;:::-;2702:83;;;2127:664;;;;;;;:::o;2796:416::-;2861:6;2869;2922:2;2910:9;2901:7;2897:23;2893:32;2890:2;;;2938:1;2935;2928:12;2890:2;2977:9;2964:23;2996:31;3021:5;2996:31;:::i;:::-;3046:5;-1:-1:-1;3103:2:1;3088:18;;3075:32;3145:15;;3138:23;3126:36;;3116:2;;3176:1;3173;3166:12;3217:315;3285:6;3293;3346:2;3334:9;3325:7;3321:23;3317:32;3314:2;;;3362:1;3359;3352:12;3314:2;3401:9;3388:23;3420:31;3445:5;3420:31;:::i;:::-;3470:5;3522:2;3507:18;;;;3494:32;;-1:-1:-1;;;3304:228:1:o;3537:1402::-;3666:6;3674;3705:2;3748;3736:9;3727:7;3723:23;3719:32;3716:2;;;3764:1;3761;3754:12;3716:2;3804:9;3791:23;3833:18;3874:2;3866:6;3863:14;3860:2;;;3890:1;3887;3880:12;3860:2;3928:6;3917:9;3913:22;3903:32;;3973:7;3966:4;3962:2;3958:13;3954:27;3944:2;;3995:1;3992;3985:12;3944:2;4031;4018:16;4053:4;4076:2;4072;4069:10;4066:2;;;4082:18;;:::i;:::-;4122:36;4154:2;4149;4146:1;4142:10;4138:19;4122:36;:::i;:::-;4192:15;;;4223:12;;;;-1:-1:-1;4255:11:1;;;4285:4;4316:11;;;4308:20;;4304:29;;4301:42;-1:-1:-1;4298:2:1;;;4356:1;4353;4346:12;4298:2;4378:1;4369:10;;4399:1;4409:435;4425:2;4420:3;4417:11;4409:435;;;4500:2;4494:3;4485:7;4481:17;4477:26;4474:2;;;4516:1;4513;4506:12;4474:2;4546:22;;:::i;:::-;4595:17;;4581:32;;4662:12;;;4649:26;4633:14;;;4626:50;4725:12;;;4712:26;4696:14;;;4689:50;4752:18;;4790:12;;;;4822;;;;4447:1;4438:11;4409:435;;;4413:3;;;4863:5;4853:15;;;4887:46;4929:2;4918:9;4914:18;4887:46;:::i;:::-;4877:56;;;;;;;3685:1254;;;;;:::o;4944:245::-;5002:6;5055:2;5043:9;5034:7;5030:23;5026:32;5023:2;;;5071:1;5068;5061:12;5023:2;5110:9;5097:23;5129:30;5153:5;5129:30;:::i;5194:249::-;5263:6;5316:2;5304:9;5295:7;5291:23;5287:32;5284:2;;;5332:1;5329;5322:12;5284:2;5364:9;5358:16;5383:30;5407:5;5383:30;:::i;5448:450::-;5517:6;5570:2;5558:9;5549:7;5545:23;5541:32;5538:2;;;5586:1;5583;5576:12;5538:2;5626:9;5613:23;5659:18;5651:6;5648:30;5645:2;;;5691:1;5688;5681:12;5645:2;5714:22;;5767:4;5759:13;;5755:27;-1:-1:-1;5745:2:1;;5796:1;5793;5786:12;5745:2;5819:73;5884:7;5879:2;5866:16;5861:2;5857;5853:11;5819:73;:::i;5903:272::-;5961:6;6014:2;6002:9;5993:7;5989:23;5985:32;5982:2;;;6030:1;6027;6020:12;5982:2;6069:9;6056:23;6119:6;6112:5;6108:18;6101:5;6098:29;6088:2;;6141:1;6138;6131:12;6180:180;6239:6;6292:2;6280:9;6271:7;6267:23;6263:32;6260:2;;;6308:1;6305;6298:12;6260:2;-1:-1:-1;6331:23:1;;6250:110;-1:-1:-1;6250:110:1:o;6365:323::-;6441:6;6449;6502:2;6490:9;6481:7;6477:23;6473:32;6470:2;;;6518:1;6515;6508:12;6470:2;6554:9;6541:23;6531:33;;6614:2;6603:9;6599:18;6586:32;6627:31;6652:5;6627:31;:::i;6693:460::-;6787:6;6795;6803;6811;6864:3;6852:9;6843:7;6839:23;6835:33;6832:2;;;6881:1;6878;6871:12;6832:2;6917:9;6904:23;6894:33;;6974:2;6963:9;6959:18;6946:32;6936:42;;7028:2;7017:9;7013:18;7000:32;7041:31;7066:5;7041:31;:::i;:::-;6822:331;;;;-1:-1:-1;7091:5:1;;7143:2;7128:18;7115:32;;-1:-1:-1;;6822:331:1:o;7158:316::-;7199:3;7237:5;7231:12;7264:6;7259:3;7252:19;7280:63;7336:6;7329:4;7324:3;7320:14;7313:4;7306:5;7302:16;7280:63;:::i;:::-;7388:2;7376:15;-1:-1:-1;;7372:88:1;7363:98;;;;7463:4;7359:109;;7207:267;-1:-1:-1;;7207:267:1:o;7479:1088::-;7564:12;;7529:3;;7619:1;7639:18;;;;7692;;;;7719:2;;7773:4;7765:6;7761:17;7751:27;;7719:2;7799;7847;7839:6;7836:14;7816:18;7813:38;7810:2;;;-1:-1:-1;;;7881:1:1;7874:88;7985:4;7982:1;7975:15;8013:4;8010:1;8003:15;7810:2;8044:18;8071:162;;;;8247:1;8242:319;;;;8037:524;;8071:162;-1:-1:-1;;8108:9:1;8104:82;8099:3;8092:95;8216:6;8211:3;8207:16;8200:23;;8071:162;;8242:319;25975:1;25968:14;;;26012:4;25999:18;;8336:1;8350:165;8364:6;8361:1;8358:13;8350:165;;;8442:14;;8429:11;;;8422:35;8485:16;;;;8379:10;;8350:165;;;8354:3;;8544:6;8539:3;8535:16;8528:23;;8037:524;;;;;;;7537:1030;;;;:::o;8572:714::-;8897:3;8925:38;8959:3;8951:6;8925:38;:::i;:::-;8992:6;8986:13;9008:52;9053:6;9049:2;9042:4;9034:6;9030:17;9008:52;:::i;:::-;9120:3;9082:15;;9106:18;;;9149:13;;9171:65;9149:13;9223:1;9212:13;;9205:4;9193:17;;9171:65;:::i;:::-;9256:20;9278:1;9252:28;;8905:381;-1:-1:-1;;;;;8905:381:1:o;9291:358::-;9520:3;9548:38;9582:3;9574:6;9548:38;:::i;:::-;9606:10;9595:22;;9641:1;9633:10;;9528:121;-1:-1:-1;;;9528:121:1:o;11112:511::-;11306:4;-1:-1:-1;;;;;11416:2:1;11408:6;11404:15;11393:9;11386:34;11468:2;11460:6;11456:15;11451:2;11440:9;11436:18;11429:43;;11508:6;11503:2;11492:9;11488:18;11481:34;11551:3;11546:2;11535:9;11531:18;11524:31;11572:45;11612:3;11601:9;11597:19;11589:6;11572:45;:::i;:::-;11564:53;11315:308;-1:-1:-1;;;;;;11315:308:1:o;12002:219::-;12151:2;12140:9;12133:21;12114:4;12171:44;12211:2;12200:9;12196:18;12188:6;12171:44;:::i;25305:253::-;25377:2;25371:9;25419:4;25407:17;;25454:18;25439:34;;25475:22;;;25436:62;25433:2;;;25501:18;;:::i;:::-;25537:2;25530:22;25351:207;:::o;25563:334::-;25634:2;25628:9;25690:2;25680:13;;-1:-1:-1;;25676:86:1;25664:99;;25793:18;25778:34;;25814:22;;;25775:62;25772:2;;;25840:18;;:::i;:::-;25876:2;25869:22;25608:289;;-1:-1:-1;25608:289:1:o;26028:128::-;26068:3;26099:1;26095:6;26092:1;26089:13;26086:2;;;26105:18;;:::i;:::-;-1:-1:-1;26141:9:1;;26076:80::o;26161:120::-;26201:1;26227;26217:2;;26232:18;;:::i;:::-;-1:-1:-1;26266:9:1;;26207:74::o;26286:228::-;26326:7;26452:1;-1:-1:-1;;26380:74:1;26377:1;26374:81;26369:1;26362:9;26355:17;26351:105;26348:2;;;26459:18;;:::i;:::-;-1:-1:-1;26499:9:1;;26338:176::o;26519:125::-;26559:4;26587:1;26584;26581:8;26578:2;;;26592:18;;:::i;:::-;-1:-1:-1;26629:9:1;;26568:76::o;26649:258::-;26721:1;26731:113;26745:6;26742:1;26739:13;26731:113;;;26821:11;;;26815:18;26802:11;;;26795:39;26767:2;26760:10;26731:113;;;26862:6;26859:1;26856:13;26853:2;;;-1:-1:-1;;26897:1:1;26879:16;;26872:27;26702:205::o;26912:437::-;26991:1;26987:12;;;;27034;;;27055:2;;27109:4;27101:6;27097:17;27087:27;;27055:2;27162;27154:6;27151:14;27131:18;27128:38;27125:2;;;-1:-1:-1;;;27196:1:1;27189:88;27300:4;27297:1;27290:15;27328:4;27325:1;27318:15;27125:2;;26967:382;;;:::o;27354:195::-;27393:3;-1:-1:-1;;27417:5:1;27414:77;27411:2;;;27494:18;;:::i;:::-;-1:-1:-1;27541:1:1;27530:13;;27401:148::o;27554:175::-;27591:3;27635:4;27628:5;27624:16;27664:4;27655:7;27652:17;27649:2;;;27672:18;;:::i;:::-;27721:1;27708:15;;27599:130;-1:-1:-1;;27599:130:1:o;27734:112::-;27766:1;27792;27782:2;;27797:18;;:::i;:::-;-1:-1:-1;27831:9:1;;27772:74::o;27851:184::-;-1:-1:-1;;;27900:1:1;27893:88;28000:4;27997:1;27990:15;28024:4;28021:1;28014:15;28040:184;-1:-1:-1;;;28089:1:1;28082:88;28189:4;28186:1;28179:15;28213:4;28210:1;28203:15;28229:184;-1:-1:-1;;;28278:1:1;28271:88;28378:4;28375:1;28368:15;28402:4;28399:1;28392:15;28418:184;-1:-1:-1;;;28467:1:1;28460:88;28567:4;28564:1;28557:15;28591:4;28588:1;28581:15;28607:154;-1:-1:-1;;;;;28686:5:1;28682:54;28675:5;28672:65;28662:2;;28751:1;28748;28741:12;28662:2;28652:109;:::o;28766:177::-;28851:66;28844:5;28840:78;28833:5;28830:89;28820:2;;28933:1;28930;28923:12

Swarm Source

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