ETH Price: $3,385.37 (-1.52%)
Gas: 2 Gwei

Token

Magical Ticket (WOM Magical Ticket)
 

Overview

Max Total Supply

1,000 WOM Magical Ticket

Holders

965

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
393938.eth
Balance
1 WOM Magical Ticket
0x8113C447daBDDD03BC693996e5325CB84c8Edc78
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:
s54nft_erc721_v4

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 1 of 13: 54nft_erc721_v4.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./basicERC20.sol";
import "./ERC721URIStorage.sol";
import "./verifySignature.sol";

contract s54nft_erc721_v4 is ERC721URIStorage, VerifySignature {
    
    using Strings for uint256;

    address creator;
    address moderator;

    bool    public onlyWhiteListed   = false;
    bool    public allowDirectMint   = false;

    uint256 public creRoyalties      = 200; //it's cuz has 2 decimal = 2.00
    uint256 public modFirstRoyalties = 200;
    uint256 public modRoyalties      = 200;
    
    uint256 public drop       = 0;
    uint256 public maxMint    = 0;
    uint256 public maxSupply  = 0;
    uint256 public supply     = 0;
    uint256 public cost       = 0.001 ether;

    uint256 public lastNonce  = 0;

    uint256 public modTime    = 7 days;

    uint8   public version    = 4;
    
    mapping(address => bool) public whiteList;
    
    mapping(uint256 => uint8) internal usedNonce;
    mapping(uint256 => uint256) internal lastTransact;

    event nftMinted(address to, uint256 count, address payToken, uint256 payAmount, uint256[] tokenIds);

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

    constructor(string memory name, string memory symbol, address setCreator, address setModerator,
                uint256 setModFirstRoyalties, uint256 setModRoyalties, uint256 setCreRoyalties ,
                uint256 setCost, uint256 setMaxSuplly, uint256 limitDrop, uint256 limitMint) ERC721(name, symbol) {
        
        creator             = setCreator;
        creRoyalties        = setCreRoyalties;
        moderator           = setModerator;
        modFirstRoyalties   = setModFirstRoyalties;
        modRoyalties        = setModRoyalties;

        drop                = limitDrop;
        maxMint             = limitMint;
        maxSupply           = setMaxSuplly;
        cost                = setCost;

    }
    
    function modifModRoyalties(uint256 royalties) public onlyModerator {
        modRoyalties = royalties;
    }
    
    function modifCreRoyalties(uint256 royalties) public onlyCreator {
        creRoyalties = royalties;
    }
    
    function modifCost(uint256 setCost) public onlyCreator {
        cost = setCost;
    }

    function setDirectMint(bool setDriect) public onlyModerator {
        allowDirectMint = setDriect;
    }

    function setOnlyWL(bool setWLonly) public onlyModerator {
        onlyWhiteListed = setWLonly;
    }

    function addToWl(address[] memory list) public onlyModerator {
        uint256 count = list.length;
        for (uint256 i = 0; i < count; i++) {
            if(whiteList[list[i]] == false){
                whiteList[list[i]] = true;
            }
        }
    }
    
    function _setBaseURI(string memory _uri) public onlyModerator {
        _baseURIstr = _uri;
    }

    function calcShares(address tokenOwner, uint256 amount) private view returns(uint256 [] memory) {
        
        uint256 svalue = amount;
        uint256[] memory shares = new uint256[](3);

        if(amount < 10000){
            svalue = svalue * 10000;
        }

        if(tokenOwner == creator){
           
            shares[0] = svalue / 10000 * (10000 - modFirstRoyalties); //creator share
           
            if(amount < 10000){
                shares[0] = shares[0] / 10000;
                shares[1] = amount - shares[0];
            } else {
                shares[1] = svalue - shares[0]; //moderator share
            }

            return shares;  

        } else {
            
            uint256 totShares = creRoyalties + modRoyalties;
            
            uint256 shareable =  svalue / 10000 * totShares;
            
            shares[0] = shareable / totShares * creRoyalties; //creator share
            shares[1] = shareable - shares[0]; //moderator share
            
            shares[2] = amount - shareable; // seller share

            if(amount < 10000){
                shares[0] = shares[0] / 10000;
                shares[1] = shares[1] / 10000;
                shares[2] = shares[2] / 10000;
            }

            return shares; 
            
        }
    }
    
    function distribShares(address tokenOwner, address payToken, uint256 amount) internal {
        //require(msg.value >= cost, "Amount send not enough");

        if(amount > 0){

            uint256[] memory _shares = calcShares(tokenOwner, amount);
            
            if(payToken == address(0)){
                
                if(tokenOwner != creator && _shares[2] > 0){
                    //payable(tokenOwner).transfer(shares[2]);
                    require(payable(tokenOwner).send(_shares[2]));
                }
                if(_shares[0] > 0){
                    //payable(creator).transfer( _shares[0]);
                    require(payable(creator).send(_shares[0]));
                }
                if(_shares[1] > 0){
                    //payable(moderator).transfer(_shares[1]);
                    require(payable(moderator).send(_shares[1]));
                }
                
            } else {

                ERC20 t = ERC20(payToken);
                
                require(t.transferFrom(msg.sender, address(this), amount));
                                
                if(tokenOwner != creator  && _shares[2] > 0){
                    require(t.transfer(tokenOwner, _shares[2]));
                }
                if(_shares[0] > 0){
                    require(t.transfer(creator, _shares[0]));
                }
                if(_shares[1] > 0){
                    require(t.transfer(moderator, _shares[1]));
                }
                
            }

        }

    }

    function directMint(uint256 amount) public payable returns (uint256[] memory){
        require(allowDirectMint == true,"No direct Mint");
        string[] memory a;
        uint256[] memory b;
        return mintToken(msg.sender,a,b,address(0),0,amount,"");
    }
    
    function mintToken(address reciver, string[] memory optionalURI, uint256[] memory optionalId, address payToken,
                        uint256 payAmount, uint256 nonce, bytes memory data)
        public
        payable
        returns (uint256[] memory)
    {
        
        uint256 count = 1;
        if(allowDirectMint == false){
            count = optionalURI.length;
        } else {
            count = nonce;
        }

        uint256[] memory tokenIds = new uint256[](count);

        if(maxSupply != 0){
            require(supply + (count - 1) < maxSupply, "Max supply reached");
        }

        if(msg.value > 0 && payToken == address(0)){
            payAmount = msg.value;
        }

        // if(allowDirectMint == false){
            if(msg.sender != moderator && msg.sender != creator && allowDirectMint == false){
                lognonce(nonce);
                require(verifyMint(moderator, reciver, payToken, payAmount, optionalURI, optionalId, nonce, data), "Not allowed");
            }
        // }

        if(drop > 0){
            require(supply + count <= drop, "Drop limit");
        }

        if(cost > 0 && msg.sender != moderator && msg.sender != creator ){
            require(payAmount >= cost,"Amount send underpriced");
        }

        if(onlyWhiteListed == true){
            require(whiteList[msg.sender] == true,"Not whitelisted");
        }

        if(maxMint > 0){
            require((balanceOf(msg.sender) + count) <= maxMint, "maxMint Limit");
        }

        distribShares(creator, payToken, payAmount);

        for (uint256 i = 0; i < count; i++) {
            
            supply += 1;

            uint256 tmpid = supply; // supply as item id

            if(allowDirectMint == false){
                if( optionalId[i] > 0 ){                
                    tmpid = optionalId[i];
                }
            }

            if(_exists(tmpid) == false){
                tokenIds[i] = tmpid;
                _mint(reciver, tmpid);
                if(allowDirectMint == false){                   
                    _setTokenURI(tmpid, optionalURI[i]);
                } else {
                    _setTokenURI(tmpid, tmpid.toString());
                }
                lastTransact[tmpid]=block.timestamp;
            } else {
                revert("TokenId Used");
            }

        }

        emit nftMinted(reciver, count, payToken, payAmount, tokenIds);
        return tokenIds;

    }

    function buy(
        address from,
        uint256 tokenid,
        address reciver,
        address payToken,
        uint256 payAmount,
        uint256 nonce,
        bytes memory data
    ) public payable {

        if(msg.value > 0 && payToken == address(0)){
            payAmount = msg.value;
        }

        if(msg.sender != moderator){
            lognonce(nonce);
            require(verifyBuy(moderator, from, tokenid, reciver, payToken, payAmount, nonce, data), "Not allowed");
        }

        distribShares(from, payToken, payAmount);

        _transfer(from, reciver, tokenid);

        lastTransact[tokenid]=block.timestamp;

    }
    
    function transferFrom(
        address from,
        address to,
        uint256 tokenid
    ) public payable virtual override {

        ifAllOk(tokenid);
        
        distribShares(ownerOf(tokenid), address(0), msg.value);
        
        _transfer(from, to, tokenid);

        lastTransact[tokenid] = block.timestamp;

    }
    
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public payable virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }
    
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenid,
        bytes memory _data
    ) public payable virtual override {

        ifAllOk(tokenid);
        
        distribShares(from, address(0), msg.value);

        _safeTransfer(from, to, tokenid, _data);

        lastTransact[tokenid]=block.timestamp;
        
    }

    function burn(uint256 tokenid) public virtual {
        ifAllOk(tokenid);
        _burn(tokenid);
    }

    function totalSupply() public view returns (uint256) {
        return maxSupply;
    }

    function approveSpendERC20(address token, address spender, uint256 value)
        public onlyModerator returns (bool)
    {
        ERC20 t = ERC20(token);
        return t.approve(spender, value);
    }
    
    function withdraw() public payable onlyModerator {
        require(payable(msg.sender).send(address(this).balance));
    }

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

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

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

    function setDrop(uint256 amount) public onlyModerator {
        require(amount >= supply && amount <= maxSupply,"Wrong Amount");
        drop = amount;
    }

    modifier onlyCreator {
        require(msg.sender == creator, "Only owner function");
        _;
    }
    
    modifier onlyModerator {
        require(msg.sender == moderator, "Only Moderator Function");
        _;
    }
    function ifAprovedOrOwner(uint256 tokenid) private view {
        require(_isApprovedOrOwner(_msgSender(), tokenid), "ERC721: caller is not owner nor approved");
    }

    function ifcanModerate(uint256 tokenid) private view {
        require(lastTransact[tokenid] + modTime > block.timestamp, "Moderation time over");
    }

    function ifAllOk(uint256 tokenid) internal view {
        if(msg.sender != moderator ){
            ifAprovedOrOwner(tokenid);
        } else {
            ifcanModerate(tokenid);
        }
    }

    function lognonce(uint256 nonce) internal {
        require(usedNonce[nonce] != 1, "Nonce already Used");
        if(nonce > lastNonce){
            lastNonce = nonce;
        }
        usedNonce[nonce] = 1;
    }
    
}

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

File 3 of 13: basicERC20.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

abstract contract ERC20Basic {
  function totalSupply() public virtual view returns (uint256);
  function balanceOf(address who) public virtual view returns (uint256);
  function transfer(address to, uint256 value) public virtual returns (bool);
  event Transfer(address indexed from, address indexed to, uint256 value);
}

abstract contract ERC20 is ERC20Basic {
  function allowance(address owner, address spender)
    public virtual view returns (uint256);

  function transferFrom(address from, address to, uint256 value)
    public virtual returns (bool);

  function approve(address spender, uint256 value) public virtual returns (bool);
  event Approval(
    address indexed owner,
    address indexed spender,
    uint256 value
  );
}

File 4 of 13: Context.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

File 5 of 13: ERC165.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC165.sol";

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

File 6 of 13: ERC721.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    string internal _baseURIstr = "https://ipfs.io/ipfs/";

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

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

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

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

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

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

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

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

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

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

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    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.toString())) : "";
    }

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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

File 7 of 13: ERC721URIStorage.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./ERC721.sol";

/**
 * @dev ERC721 token with storage based token URI management.
 */
abstract contract ERC721URIStorage is ERC721 {
    using Strings for uint256;

    // Optional mapping for token URIs
    mapping(uint256 => string) private _tokenURIs;

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

        string memory _tokenURI = _tokenURIs[tokenId];
        string memory base = _baseURI();

        // If there is no base URI, return the token URI.
        if (bytes(base).length == 0) {
            return _tokenURI;
        }
        // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).
        if (bytes(_tokenURI).length > 0) {
            return string(abi.encodePacked(base, _tokenURI));
        }

        return super.tokenURI(tokenId);
    }

    /**
     * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {
        require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token");
        _tokenURIs[tokenId] = _tokenURI;
    }

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

        if (bytes(_tokenURIs[tokenId]).length != 0) {
            delete _tokenURIs[tokenId];
        }
    }
}

File 8 of 13: IERC165.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

File 9 of 13: IERC721.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC165.sol";

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

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

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

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

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

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

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

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

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

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

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

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

File 10 of 13: IERC721Metadata.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC721.sol";

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

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

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

File 11 of 13: IERC721Receiver.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

File 12 of 13: Strings.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

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

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

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

File 13 of 13: verifySignature.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.3;

/* Signature Verification

How to Sign and Verify
# Signing
1. Create message to sign
2. Hash the message
3. Sign the hash (off chain, keep your private key secret)

# Verify
1. Recreate hash from the original message
2. Recover signer from signature and hash
3. Compare recovered signer to claimed signer
*/

contract VerifySignature {
    /* 1. Unlock MetaMask account
    ethereum.enable()
    */

    /* 2. Get message hash to sign
    getMessageHash(
        0x14723A09ACff6D2A60DcdF7aA4AFf308FDDC160C,
        123,
        "coffee and donuts",
        1
    )
    

    hash = "0xcf36ac4f97dc10d91fc2cbb20d718e94a8cbfe0f82eaedc6a4aa38946fb797cd"
    */
    
    function getBuyMessageHash(
        address from,
        uint256 tokenid,
        address reciver,
        address payToken,
        uint256 payAmount,
        uint256 _nonce
    ) internal pure returns (bytes32) {
        return keccak256(abi.encodePacked(from, tokenid, reciver, payToken, payAmount, _nonce));
    }
    
    function getMintMessageHash(
        address _reciver,
        address _payToken,
        uint256 _value,
        string[] memory _tokenURI,
        uint256[] memory optionalId,
        uint256 _nonce
    ) internal pure returns (bytes32) {
        return keccak256(abi.encodePacked(_reciver, _payToken, _value, abi.encode(_tokenURI), optionalId, _nonce));
    }

    /* 3. Sign message hash
    # using browser
    account = "copy paste account of signer here"
    ethereum.request({ method: "personal_sign", params: [account, hash]}).then(console.log)

    # using web3
    web3.personal.sign(hash, web3.eth.defaultAccount, console.log)

    Signature will be different for different accounts
    0x993dab3dd91f5c6dc28e17439be475478f5635c92a56e17e82349d3fb2f166196f466c0b4e0c146f285204f0dcb13e5ae67bc33f4b888ec32dfe0a063e8f3f781b
    */
    function getEthSignedMessageHash(bytes32 _messageHash)
        internal
        pure
        returns (bytes32)
    {
        /*
        Signature is produced by signing a keccak256 hash with the following format:
        "\x19Ethereum Signed Message\n" + len(msg) + msg
        */
        return
            keccak256(
                abi.encodePacked("\x19Ethereum Signed Message:\n32", _messageHash)
            );
    }

    /* 4. Verify signature
    signer = 0xB273216C05A8c0D4F0a4Dd0d7Bae1D2EfFE636dd
    to = 0x14723A09ACff6D2A60DcdF7aA4AFf308FDDC160C
    amount = 123
    message = "coffee and donuts"
    nonce = 1
    signature =
        0x993dab3dd91f5c6dc28e17439be475478f5635c92a56e17e82349d3fb2f166196f466c0b4e0c146f285204f0dcb13e5ae67bc33f4b888ec32dfe0a063e8f3f781b
    */
    function verifyBuy(
        address _signer,
        address from,
        uint256 tokenid,
        address reciver,
        address payToken,
        uint256 payAmount,
        uint256 _nonce,
        bytes memory signature
    ) internal pure returns (bool) {
        bytes32 messageHash = getBuyMessageHash(from, tokenid, reciver, payToken, payAmount, _nonce);
        bytes32 ethSignedMessageHash = getEthSignedMessageHash(messageHash);
        return recoverSigner(ethSignedMessageHash, signature) == _signer;
    }
    
    function verifyMint(
        address _signer,
        address _reciver,
        address _payToken,
        uint256 _value,
        string[] memory tokenURI,
        uint256[] memory optionalId,
        uint256 _nonce,
        bytes memory signature
    ) internal pure returns (bool) {
        bytes32 messageHash = getMintMessageHash(_reciver, _payToken, _value, tokenURI, optionalId, _nonce);
        bytes32 ethSignedMessageHash = getEthSignedMessageHash(messageHash);
        return recoverSigner(ethSignedMessageHash, signature) == _signer;
    }

    function recoverSigner(bytes32 _ethSignedMessageHash, bytes memory _signature)
        internal
        pure
        returns (address)
    {
        (bytes32 r, bytes32 s, uint8 v) = splitSignature(_signature);

        return ecrecover(_ethSignedMessageHash, v, r, s);
    }

    function splitSignature(bytes memory sig)
        internal
        pure
        returns (
            bytes32 r,
            bytes32 s,
            uint8 v
        )
    {
        require(sig.length == 65, "invalid signature length");

        assembly {
            /*
            First 32 bytes stores the length of the signature

            add(sig, 32) = pointer of sig + 32
            effectively, skips first 32 bytes of signature

            mload(p) loads next 32 bytes starting at the memory address p into memory
            */

            // first 32 bytes, after the length prefix
            r := mload(add(sig, 32))
            // second 32 bytes
            s := mload(add(sig, 64))
            // final byte (first byte of the next 32 bytes)
            v := byte(0, mload(add(sig, 96)))
        }

        // implicitly return (r, s, v)
    }
    
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"address","name":"setCreator","type":"address"},{"internalType":"address","name":"setModerator","type":"address"},{"internalType":"uint256","name":"setModFirstRoyalties","type":"uint256"},{"internalType":"uint256","name":"setModRoyalties","type":"uint256"},{"internalType":"uint256","name":"setCreRoyalties","type":"uint256"},{"internalType":"uint256","name":"setCost","type":"uint256"},{"internalType":"uint256","name":"setMaxSuplly","type":"uint256"},{"internalType":"uint256","name":"limitDrop","type":"uint256"},{"internalType":"uint256","name":"limitMint","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"count","type":"uint256"},{"indexed":false,"internalType":"address","name":"payToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"payAmount","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"nftMinted","type":"event"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"name":"_setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"list","type":"address[]"}],"name":"addToWl","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"allowDirectMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approveSpendERC20","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"tokenid","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"tokenid","type":"uint256"},{"internalType":"address","name":"reciver","type":"address"},{"internalType":"address","name":"payToken","type":"address"},{"internalType":"uint256","name":"payAmount","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"buy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"creRoyalties","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"directMint","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"drop","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":"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":"lastNonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"reciver","type":"address"},{"internalType":"string[]","name":"optionalURI","type":"string[]"},{"internalType":"uint256[]","name":"optionalId","type":"uint256[]"},{"internalType":"address","name":"payToken","type":"address"},{"internalType":"uint256","name":"payAmount","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"mintToken","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"modFirstRoyalties","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"modRoyalties","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"modTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"setCost","type":"uint256"}],"name":"modifCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"royalties","type":"uint256"}],"name":"modifCreRoyalties","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"royalties","type":"uint256"}],"name":"modifModRoyalties","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onlyWhiteListed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","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":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"setDriect","type":"bool"}],"name":"setDirectMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setDrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"setWLonly","type":"bool"}],"name":"setOnlyWL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"supply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenid","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whiteList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

60c0604052601560808190527f68747470733a2f2f697066732e696f2f697066732f000000000000000000000060a090815262000040916002919062000156565b506009805461ffff60a01b1916905560c8600a819055600b819055600c556000600d819055600e819055600f819055601081905566038d7ea4c6800060115560125562093a806013556014805460ff19166004179055348015620000a357600080fd5b5060405162003c0338038062003c03833981016040819052620000c691620002e6565b8a518b908b90620000df90600090602085019062000156565b508051620000f590600190602084019062000156565b5050600880546001600160a01b03199081166001600160a01b039c8d1617909155600a9690965550600980549095169790981696909617909255600b93909355600c91909155600d92909255600e92909255600f5560115550620003ff9050565b8280546200016490620003c2565b90600052602060002090601f016020900481019282620001885760008555620001d3565b82601f10620001a357805160ff1916838001178555620001d3565b82800160010185558215620001d3579182015b82811115620001d3578251825591602001919060010190620001b6565b50620001e1929150620001e5565b5090565b5b80821115620001e15760008155600101620001e6565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200022457600080fd5b81516001600160401b0380821115620002415762000241620001fc565b604051601f8301601f19908116603f011681019082821181831017156200026c576200026c620001fc565b816040528381526020925086838588010111156200028957600080fd5b600091505b83821015620002ad57858201830151818301840152908201906200028e565b83821115620002bf5760008385830101525b9695505050505050565b80516001600160a01b0381168114620002e157600080fd5b919050565b60008060008060008060008060008060006101608c8e0312156200030957600080fd5b8b516001600160401b038111156200032057600080fd5b6200032e8e828f0162000212565b60208e0151909c5090506001600160401b038111156200034d57600080fd5b6200035b8e828f0162000212565b9a50506200036c60408d01620002c9565b98506200037c60608d01620002c9565b975060808c0151965060a08c0151955060c08c0151945060e08c015193506101008c015192506101208c015191506101408c015190509295989b509295989b9093969950565b600181811c90821680620003d757607f821691505b60208210811415620003f957634e487b7160e01b600052602260045260246000fd5b50919050565b6137f4806200040f6000396000f3fe6080604052600436106102675760003560e01c80636352211e11610144578063b88d4fde116100b6578063e985e9c51161007a578063e985e9c5146106d4578063f0807749146106f4578063f2fde38b14610715578063f751cd8f14610735578063f8321b951461074b578063f98fc0c51461075e57600080fd5b8063b88d4fde1461064b578063c87b56dd1461065e578063ca889d801461067e578063ced59f3b1461069e578063d5abeb01146106be57600080fd5b80637e681223116101085780637e681223146105a15780638da5cb5b146105c157806395d89b41146105df5780639f379330146105f4578063a22cb4651461060a578063a47590741461062a57600080fd5b80636352211e146105155780636634bfe11461053557806366aca6381461055557806370a082311461056b5780637501f7411461058b57600080fd5b806331b5b907116101dd57806352631ab4116101a157806352631ab41461045d57806352cfc8c31461047357806353439aa21461048957806354fd4d50146104a957806358b2971a146104d55780635e61016b146104f557600080fd5b806331b5b907146103d2578063372c12b1146103f25780633ccfd60b1461042257806342842e0e1461042a57806342966c681461043d57600080fd5b8063095ea7b31161022f578063095ea7b31461033457806313faede61461035457806318160ddd1461036a57806323ad1dac1461037f57806323b872dd1461039f578063245eddd2146103b257600080fd5b806301ffc9a71461026c578063047fc9aa146102a1578063062e8e90146102c557806306fdde03146102da578063081812fc146102fc575b600080fd5b34801561027857600080fd5b5061028c610287366004612df1565b610774565b60405190151581526020015b60405180910390f35b3480156102ad57600080fd5b506102b760105481565b604051908152602001610298565b6102d86102d3366004612ee1565b6107c6565b005b3480156102e657600080fd5b506102ef61088b565b6040516102989190612fc5565b34801561030857600080fd5b5061031c610317366004612fd8565b61091d565b6040516001600160a01b039091168152602001610298565b34801561034057600080fd5b506102d861034f366004612ff1565b6109a5565b34801561036057600080fd5b506102b760115481565b34801561037657600080fd5b50600f546102b7565b34801561038b57600080fd5b506102d861039a366004612fd8565b610abb565b6102d86103ad36600461301b565b610b39565b3480156103be57600080fd5b506102d86103cd366004612fd8565b610b76565b3480156103de57600080fd5b506102d86103ed366004613057565b610ba5565b3480156103fe57600080fd5b5061028c61040d36600461308c565b60156020526000908152604090205460ff1681565b6102d8610be6565b6102d861043836600461301b565b610c36565b34801561044957600080fd5b506102d8610458366004612fd8565b610c51565b34801561046957600080fd5b506102b760125481565b34801561047f57600080fd5b506102b760135481565b34801561049557600080fd5b506102d86104a43660046130cb565b610c66565b3480156104b557600080fd5b506014546104c39060ff1681565b60405160ff9091168152602001610298565b3480156104e157600080fd5b506102d86104f0366004612fd8565b610d48565b610508610503366004612fd8565b610d77565b60405161029891906131a3565b34801561052157600080fd5b5061031c610530366004612fd8565b610df3565b34801561054157600080fd5b506102d86105503660046131c4565b610e6a565b34801561056157600080fd5b506102b7600a5481565b34801561057757600080fd5b506102b761058636600461308c565b610eb2565b34801561059757600080fd5b506102b7600e5481565b3480156105ad57600080fd5b5061028c6105bc36600461301b565b610f39565b3480156105cd57600080fd5b506008546001600160a01b031661031c565b3480156105eb57600080fd5b506102ef610fe5565b34801561060057600080fd5b506102b7600c5481565b34801561061657600080fd5b506102d86106253660046131e1565b610ff4565b34801561063657600080fd5b5060095461028c90600160a01b900460ff1681565b6102d8610659366004613218565b6110b9565b34801561066a57600080fd5b506102ef610679366004612fd8565b6110f0565b34801561068a57600080fd5b506102d8610699366004612fd8565b611252565b3480156106aa57600080fd5b506102d86106b93660046131c4565b611281565b3480156106ca57600080fd5b506102b7600f5481565b3480156106e057600080fd5b5061028c6106ef366004613280565b6112c9565b34801561070057600080fd5b5060095461028c90600160a81b900460ff1681565b34801561072157600080fd5b506102d861073036600461308c565b6112f7565b34801561074157600080fd5b506102b7600d5481565b610508610759366004613319565b61138f565b34801561076a57600080fd5b506102b7600b5481565b60006001600160e01b031982166380ac58cd60e01b14806107a557506001600160e01b03198216635b5e139f60e01b145b806107c057506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000341180156107dd57506001600160a01b038416155b156107e6573492505b6009546001600160a01b0316331461085c5761080182611883565b60095461081d906001600160a01b031688888888888888611905565b61085c5760405162461bcd60e51b815260206004820152600b60248201526a139bdd08185b1b1bddd95960aa1b60448201526064015b60405180910390fd5b6108678785856119a0565b610872878688611e50565b5050506000928352505060176020526040902042905550565b60606000805461089a9061343b565b80601f01602080910402602001604051908101604052809291908181526020018280546108c69061343b565b80156109135780601f106108e857610100808354040283529160200191610913565b820191906000526020600020905b8154815290600101906020018083116108f657829003601f168201915b5050505050905090565b600061092882611ff0565b6109895760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610853565b506000908152600560205260409020546001600160a01b031690565b60006109b082610df3565b9050806001600160a01b0316836001600160a01b03161415610a1e5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610853565b336001600160a01b0382161480610a3a5750610a3a81336112c9565b610aac5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610853565b610ab6838361200d565b505050565b6009546001600160a01b03163314610ae55760405162461bcd60e51b815260040161085390613476565b6010548110158015610af95750600f548111155b610b345760405162461bcd60e51b815260206004820152600c60248201526b15dc9bdb99c8105b5bdd5b9d60a21b6044820152606401610853565b600d55565b610b428161207b565b610b56610b4e82610df3565b6000346119a0565b610b61838383611e50565b60009081526017602052604090204290555050565b6008546001600160a01b03163314610ba05760405162461bcd60e51b8152600401610853906134ad565b600a55565b6009546001600160a01b03163314610bcf5760405162461bcd60e51b815260040161085390613476565b8051610be2906002906020840190612d0c565b5050565b6009546001600160a01b03163314610c105760405162461bcd60e51b815260040161085390613476565b60405133904780156108fc02916000818181858888f19350505050610c3457600080fd5b565b610ab6838383604051806020016040528060008152506110b9565b610c5a8161207b565b610c638161209f565b50565b6009546001600160a01b03163314610c905760405162461bcd60e51b815260040161085390613476565b805160005b81811015610ab65760156000848381518110610cb357610cb36134da565b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff16610d3657600160156000858481518110610cf657610cf66134da565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055505b80610d4081613506565b915050610c95565b6009546001600160a01b03163314610d725760405162461bcd60e51b815260040161085390613476565b600c55565b600954606090600160a81b900460ff161515600114610dc95760405162461bcd60e51b815260206004820152600e60248201526d139bc8191a5c9958dd08135a5b9d60921b6044820152606401610853565b606080610deb338383600080896040518060200160405280600081525061138f565b949350505050565b6000818152600360205260408120546001600160a01b0316806107c05760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610853565b6009546001600160a01b03163314610e945760405162461bcd60e51b815260040161085390613476565b60098054911515600160a81b0260ff60a81b19909216919091179055565b60006001600160a01b038216610f1d5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610853565b506001600160a01b031660009081526004602052604090205490565b6009546000906001600160a01b03163314610f665760405162461bcd60e51b815260040161085390613476565b60405163095ea7b360e01b81526001600160a01b0384811660048301526024820184905285919082169063095ea7b3906044016020604051808303816000875af1158015610fb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fdc9190613521565b95945050505050565b60606001805461089a9061343b565b6001600160a01b03821633141561104d5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610853565b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6110c28261207b565b6110ce846000346119a0565b6110da848484846120df565b5060009081526017602052604090204290555050565b60606110fb82611ff0565b6111615760405162461bcd60e51b815260206004820152603160248201527f45524337323155524953746f726167653a2055524920717565727920666f72206044820152703737b732bc34b9ba32b73a103a37b5b2b760791b6064820152608401610853565b6000828152600760205260408120805461117a9061343b565b80601f01602080910402602001604051908101604052809291908181526020018280546111a69061343b565b80156111f35780601f106111c8576101008083540402835291602001916111f3565b820191906000526020600020905b8154815290600101906020018083116111d657829003601f168201915b505050505090506000611204612112565b9050805160001415611217575092915050565b81511561124957808260405160200161123192919061353e565b60405160208183030381529060405292505050919050565b610deb84612121565b6008546001600160a01b0316331461127c5760405162461bcd60e51b8152600401610853906134ad565b601155565b6009546001600160a01b031633146112ab5760405162461bcd60e51b815260040161085390613476565b60098054911515600160a01b0260ff60a01b19909216919091179055565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b6008546001600160a01b031633146113215760405162461bcd60e51b8152600401610853906134ad565b6001600160a01b0381166113865760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610853565b610c63816121ec565b600954606090600190600160a81b900460ff166113ae575086516113b1565b50825b60008167ffffffffffffffff8111156113cc576113cc612e2a565b6040519080825280602002602001820160405280156113f5578160200160208202803683370190505b509050600f5460001461145f57600f5461141060018461356d565b60105461141d9190613584565b1061145f5760405162461bcd60e51b815260206004820152601260248201527113585e081cdd5c1c1b1e481c995858da195960721b6044820152606401610853565b60003411801561147657506001600160a01b038716155b1561147f573495505b6009546001600160a01b031633148015906114a557506008546001600160a01b03163314155b80156114bb5750600954600160a81b900460ff16155b1561151f576114c985611883565b6009546114e5906001600160a01b03168b89898d8d8b8b61223e565b61151f5760405162461bcd60e51b815260206004820152600b60248201526a139bdd08185b1b1bddd95960aa1b6044820152606401610853565b600d541561157357600d54826010546115389190613584565b11156115735760405162461bcd60e51b815260206004820152600a602482015269111c9bdc081b1a5b5a5d60b21b6044820152606401610853565b600060115411801561159057506009546001600160a01b03163314155b80156115a757506008546001600160a01b03163314155b156115fe576011548610156115fe5760405162461bcd60e51b815260206004820152601760248201527f416d6f756e742073656e6420756e6465727072696365640000000000000000006044820152606401610853565b600954600160a01b900460ff1615156001141561166b573360009081526015602052604090205460ff16151560011461166b5760405162461bcd60e51b815260206004820152600f60248201526e139bdd081dda1a5d195b1a5cdd1959608a1b6044820152606401610853565b600e54156116c857600e548261168033610eb2565b61168a9190613584565b11156116c85760405162461bcd60e51b815260206004820152600d60248201526c1b585e135a5b9d08131a5b5a5d609a1b6044820152606401610853565b6008546116df906001600160a01b031688886119a0565b60005b82811015611836576001601060008282546116fd9190613584565b9091555050601054600954600160a81b900460ff166117555760008a838151811061172a5761172a6134da565b602002602001015111156117555789828151811061174a5761174a6134da565b602002602001015190505b61175e81611ff0565b6117ec5780838381518110611775576117756134da565b60200260200101818152505061178b8c8261224f565b600954600160a81b900460ff166117c4576117bf818c84815181106117b2576117b26134da565b6020026020010151612382565b6117d6565b6117d6816117d18361240d565b612382565b6000818152601760205260409020429055611823565b60405162461bcd60e51b815260206004820152600c60248201526b151bdad95b925908155cd95960a21b6044820152606401610853565b508061182e81613506565b9150506116e2565b507f2ad7ca0d3c2e5ecc29a9466186263310753b53fbb5a0f710be5fb496c8e120828a8389898560405161186e95949392919061359c565b60405180910390a19998505050505050505050565b60008181526016602052604090205460ff16600114156118da5760405162461bcd60e51b8152602060048201526012602482015271139bdb98d948185b1c9958591e48155cd95960721b6044820152606401610853565b6012548111156118ea5760128190555b6000908152601660205260409020805460ff19166001179055565b60008061191689898989898961250b565b90506000611971826040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b90508a6001600160a01b03166119878286612579565b6001600160a01b0316149b9a5050505050505050505050565b8015610ab65760006119b284836125f8565b90506001600160a01b038316611b39576008546001600160a01b038581169116148015906119fa57506000816002815181106119f0576119f06134da565b6020026020010151115b15611a4a57836001600160a01b03166108fc82600281518110611a1f57611a1f6134da565b60200260200101519081150290604051600060405180830381858888f19350505050611a4a57600080fd5b600081600081518110611a5f57611a5f6134da565b60200260200101511115611abe5760085481516001600160a01b03909116906108fc908390600090611a9357611a936134da565b60200260200101519081150290604051600060405180830381858888f19350505050611abe57600080fd5b600081600181518110611ad357611ad36134da565b60200260200101511115611b345760095481516001600160a01b03909116906108fc9083906001908110611b0957611b096134da565b60200260200101519081150290604051600060405180830381858888f19350505050611b3457600080fd5b611e4a565b6040516323b872dd60e01b81523360048201523060248201526044810183905283906001600160a01b038216906323b872dd906064016020604051808303816000875af1158015611b8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb29190613521565b611bbb57600080fd5b6008546001600160a01b03868116911614801590611bf35750600082600281518110611be957611be96134da565b6020026020010151115b15611ca057806001600160a01b031663a9059cbb8684600281518110611c1b57611c1b6134da565b60200260200101516040518363ffffffff1660e01b8152600401611c549291906001600160a01b03929092168252602082015260400190565b6020604051808303816000875af1158015611c73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c979190613521565b611ca057600080fd5b600082600081518110611cb557611cb56134da565b60200260200101511115611d735760085482516001600160a01b038084169263a9059cbb929116908590600090611cee57611cee6134da565b60200260200101516040518363ffffffff1660e01b8152600401611d279291906001600160a01b03929092168252602082015260400190565b6020604051808303816000875af1158015611d46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d6a9190613521565b611d7357600080fd5b600082600181518110611d8857611d886134da565b60200260200101511115611e485760095482516001600160a01b038084169263a9059cbb9291169085906001908110611dc357611dc36134da565b60200260200101516040518363ffffffff1660e01b8152600401611dfc9291906001600160a01b03929092168252602082015260400190565b6020604051808303816000875af1158015611e1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e3f9190613521565b611e4857600080fd5b505b50505050565b826001600160a01b0316611e6382610df3565b6001600160a01b031614611ecb5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610853565b6001600160a01b038216611f2d5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610853565b611f3860008261200d565b6001600160a01b0383166000908152600460205260408120805460019290611f6190849061356d565b90915550506001600160a01b0382166000908152600460205260408120805460019290611f8f908490613584565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000908152600360205260409020546001600160a01b0316151590565b600081815260056020526040902080546001600160a01b0319166001600160a01b038416908117909155819061204282610df3565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6009546001600160a01b0316331461209657610c638161293b565b610c63816129a2565b6120a881612a03565b600081815260076020526040902080546120c19061343b565b159050610c63576000818152600760205260408120610c6391612d90565b6120ea848484611e50565b6120f684848484612a9e565b611e4a5760405162461bcd60e51b8152600401610853906135d6565b60606002805461089a9061343b565b606061212c82611ff0565b6121905760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610853565b600061219a612112565b905060008151116121ba57604051806020016040528060008152506121e5565b806121c48461240d565b6040516020016121d592919061353e565b6040516020818303038152906040525b9392505050565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080611916898989898989612b9c565b6001600160a01b0382166122a55760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610853565b6122ae81611ff0565b156122fb5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610853565b6001600160a01b0382166000908152600460205260408120805460019290612324908490613584565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b61238b82611ff0565b6123ee5760405162461bcd60e51b815260206004820152602e60248201527f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60448201526d32bc34b9ba32b73a103a37b5b2b760911b6064820152608401610853565b60008281526007602090815260409091208251610ab692840190612d0c565b6060816124315750506040805180820190915260018152600360fc1b602082015290565b8160005b811561245b578061244581613506565b91506124549050600a8361363e565b9150612435565b60008167ffffffffffffffff81111561247657612476612e2a565b6040519080825280601f01601f1916602001820160405280156124a0576020820181803683370190505b5090505b8415610deb576124b560018361356d565b91506124c2600a86613652565b6124cd906030613584565b60f81b8183815181106124e2576124e26134da565b60200101906001600160f81b031916908160001a905350612504600a8661363e565b94506124a4565b6040516bffffffffffffffffffffffff19606088811b821660208401526034830188905286811b8216605484015285901b166068820152607c8101839052609c810182905260009060bc015b6040516020818303038152906040528051906020012090509695505050505050565b60008060008061258885612bd6565b6040805160008152602081018083528b905260ff8316918101919091526060810184905260808101839052929550909350915060019060a0016020604051602081039080840390855afa1580156125e3573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b6040805160038082526080820190925260609183916000916020820185803683370190505090506127108410156126385761263582612710613666565b91505b6008546001600160a01b038681169116141561277c57600b5461265d9061271061356d565b6126696127108461363e565b6126739190613666565b81600081518110612686576126866134da565b60200260200101818152505061271084101561272d57612710816000815181106126b2576126b26134da565b60200260200101516126c4919061363e565b816000815181106126d7576126d76134da565b602002602001018181525050806000815181106126f6576126f66134da565b602002602001015184612709919061356d565b8160018151811061271c5761271c6134da565b602002602001018181525050612773565b80600081518110612740576127406134da565b602002602001015182612753919061356d565b81600181518110612766576127666134da565b6020026020010181815250505b91506107c09050565b6000600c54600a5461278e9190613584565b905060008161279f6127108661363e565b6127a99190613666565b600a549091506127b9838361363e565b6127c39190613666565b836000815181106127d6576127d66134da565b602002602001018181525050826000815181106127f5576127f56134da565b602002602001015181612808919061356d565b8360018151811061281b5761281b6134da565b6020908102919091010152612830818761356d565b83600281518110612843576128436134da565b60200260200101818152505061271086101561292f576127108360008151811061286f5761286f6134da565b6020026020010151612881919061363e565b83600081518110612894576128946134da565b602002602001018181525050612710836001815181106128b6576128b66134da565b60200260200101516128c8919061363e565b836001815181106128db576128db6134da565b602002602001018181525050612710836002815181106128fd576128fd6134da565b602002602001015161290f919061363e565b83600281518110612922576129226134da565b6020026020010181815250505b829450505050506107c0565b6129453382612c4a565b610c635760405162461bcd60e51b815260206004820152602860248201527f4552433732313a2063616c6c6572206973206e6f74206f776e6572206e6f7220604482015267185c1c1c9bdd995960c21b6064820152608401610853565b60135460008281526017602052604090205442916129bf91613584565b11610c635760405162461bcd60e51b815260206004820152601460248201527326b7b232b930ba34b7b7103a34b6b29037bb32b960611b6044820152606401610853565b6000612a0e82610df3565b9050612a1b60008361200d565b6001600160a01b0381166000908152600460205260408120805460019290612a4490849061356d565b909155505060008281526003602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b60006001600160a01b0384163b15612b9157604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612ae2903390899088908890600401613685565b6020604051808303816000875af1925050508015612b1d575060408051601f3d908101601f19168201909252612b1a918101906136c2565b60015b612b77573d808015612b4b576040519150601f19603f3d011682016040523d82523d6000602084013e612b50565b606091505b508051612b6f5760405162461bcd60e51b8152600401610853906135d6565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610deb565b506001949350505050565b600086868686604051602001612bb291906136df565b60408051601f19818403018152908290526125579493929188908890602001613741565b60008060008351604114612c2c5760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964207369676e6174757265206c656e67746800000000000000006044820152606401610853565b50505060208101516040820151606090920151909260009190911a90565b6000612c5582611ff0565b612cb65760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610853565b6000612cc183610df3565b9050806001600160a01b0316846001600160a01b03161480612cfc5750836001600160a01b0316612cf18461091d565b6001600160a01b0316145b80610deb5750610deb81856112c9565b828054612d189061343b565b90600052602060002090601f016020900481019282612d3a5760008555612d80565b82601f10612d5357805160ff1916838001178555612d80565b82800160010185558215612d80579182015b82811115612d80578251825591602001919060010190612d65565b50612d8c929150612dc6565b5090565b508054612d9c9061343b565b6000825580601f10612dac575050565b601f016020900490600052602060002090810190610c6391905b5b80821115612d8c5760008155600101612dc7565b6001600160e01b031981168114610c6357600080fd5b600060208284031215612e0357600080fd5b81356121e581612ddb565b80356001600160a01b0381168114612e2557600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612e6957612e69612e2a565b604052919050565b600082601f830112612e8257600080fd5b813567ffffffffffffffff811115612e9c57612e9c612e2a565b612eaf601f8201601f1916602001612e40565b818152846020838601011115612ec457600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080600060e0888a031215612efc57600080fd5b612f0588612e0e565b965060208801359550612f1a60408901612e0e565b9450612f2860608901612e0e565b93506080880135925060a0880135915060c088013567ffffffffffffffff811115612f5257600080fd5b612f5e8a828b01612e71565b91505092959891949750929550565b60005b83811015612f88578181015183820152602001612f70565b83811115611e4a5750506000910152565b60008151808452612fb1816020860160208601612f6d565b601f01601f19169290920160200192915050565b6020815260006121e56020830184612f99565b600060208284031215612fea57600080fd5b5035919050565b6000806040838503121561300457600080fd5b61300d83612e0e565b946020939093013593505050565b60008060006060848603121561303057600080fd5b61303984612e0e565b925061304760208501612e0e565b9150604084013590509250925092565b60006020828403121561306957600080fd5b813567ffffffffffffffff81111561308057600080fd5b610deb84828501612e71565b60006020828403121561309e57600080fd5b6121e582612e0e565b600067ffffffffffffffff8211156130c1576130c1612e2a565b5060051b60200190565b600060208083850312156130de57600080fd5b823567ffffffffffffffff8111156130f557600080fd5b8301601f8101851361310657600080fd5b8035613119613114826130a7565b612e40565b81815260059190911b8201830190838101908783111561313857600080fd5b928401925b8284101561315d5761314e84612e0e565b8252928401929084019061313d565b979650505050505050565b600081518084526020808501945080840160005b838110156131985781518752958201959082019060010161317c565b509495945050505050565b6020815260006121e56020830184613168565b8015158114610c6357600080fd5b6000602082840312156131d657600080fd5b81356121e5816131b6565b600080604083850312156131f457600080fd5b6131fd83612e0e565b9150602083013561320d816131b6565b809150509250929050565b6000806000806080858703121561322e57600080fd5b61323785612e0e565b935061324560208601612e0e565b925060408501359150606085013567ffffffffffffffff81111561326857600080fd5b61327487828801612e71565b91505092959194509250565b6000806040838503121561329357600080fd5b61329c83612e0e565b91506132aa60208401612e0e565b90509250929050565b600082601f8301126132c457600080fd5b813560206132d4613114836130a7565b82815260059290921b840181019181810190868411156132f357600080fd5b8286015b8481101561330e57803583529183019183016132f7565b509695505050505050565b600080600080600080600060e0888a03121561333457600080fd5b61333d88612e0e565b9650602088013567ffffffffffffffff8082111561335a57600080fd5b818a0191508a601f83011261336e57600080fd5b813561337c613114826130a7565b8082825260208201915060208360051b86010192508d83111561339e57600080fd5b602085015b838110156133d75784813511156133b957600080fd5b6133c98f60208335890101612e71565b8352602092830192016133a3565b509950505060408a01359150808211156133f057600080fd5b6133fc8b838c016132b3565b965061340a60608b01612e0e565b955060808a0135945060a08a0135935060c08a013591508082111561342e57600080fd5b50612f5e8a828b01612e71565b600181811c9082168061344f57607f821691505b6020821081141561347057634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526017908201527f4f6e6c79204d6f64657261746f722046756e6374696f6e000000000000000000604082015260600190565b60208082526013908201527227b7363c9037bbb732b910333ab731ba34b7b760691b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561351a5761351a6134f0565b5060010190565b60006020828403121561353357600080fd5b81516121e5816131b6565b60008351613550818460208801612f6d565b835190830190613564818360208801612f6d565b01949350505050565b60008282101561357f5761357f6134f0565b500390565b60008219821115613597576135976134f0565b500190565b6001600160a01b03868116825260208201869052841660408201526060810183905260a06080820181905260009061315d90830184613168565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b60008261364d5761364d613628565b500490565b60008261366157613661613628565b500690565b6000816000190483118215151615613680576136806134f0565b500290565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906136b890830184612f99565b9695505050505050565b6000602082840312156136d457600080fd5b81516121e581612ddb565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561373457603f19888603018452613722858351612f99565b94509285019290850190600101613706565b5092979650505050505050565b60006bffffffffffffffffffffffff19808960601b168352808860601b166014840152508560288301528451602061377f8260488601838a01612f6d565b85519184016048019181870160005b828110156137aa5781518552938301939083019060010161378e565b50505093815290920197965050505050505056fea2646970667358221220df961dcf0613ddfb55197674f294df4b29cfda1ff99ca24823ad11c5daedce1f64736f6c634300080a0033000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000001f7290c912b10eb2a4b958dadb5fe32e8e6d9f92000000000000000000000000355e175199064947ca73118f5969703d395c6d0600000000000000000000000000000000000000000000000000000000000000c800000000000000000000000000000000000000000000000000000000000000c800000000000000000000000000000000000000000000000000000000000001f4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000e4d61676963616c205469636b65740000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012574f4d204d61676963616c205469636b65740000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102675760003560e01c80636352211e11610144578063b88d4fde116100b6578063e985e9c51161007a578063e985e9c5146106d4578063f0807749146106f4578063f2fde38b14610715578063f751cd8f14610735578063f8321b951461074b578063f98fc0c51461075e57600080fd5b8063b88d4fde1461064b578063c87b56dd1461065e578063ca889d801461067e578063ced59f3b1461069e578063d5abeb01146106be57600080fd5b80637e681223116101085780637e681223146105a15780638da5cb5b146105c157806395d89b41146105df5780639f379330146105f4578063a22cb4651461060a578063a47590741461062a57600080fd5b80636352211e146105155780636634bfe11461053557806366aca6381461055557806370a082311461056b5780637501f7411461058b57600080fd5b806331b5b907116101dd57806352631ab4116101a157806352631ab41461045d57806352cfc8c31461047357806353439aa21461048957806354fd4d50146104a957806358b2971a146104d55780635e61016b146104f557600080fd5b806331b5b907146103d2578063372c12b1146103f25780633ccfd60b1461042257806342842e0e1461042a57806342966c681461043d57600080fd5b8063095ea7b31161022f578063095ea7b31461033457806313faede61461035457806318160ddd1461036a57806323ad1dac1461037f57806323b872dd1461039f578063245eddd2146103b257600080fd5b806301ffc9a71461026c578063047fc9aa146102a1578063062e8e90146102c557806306fdde03146102da578063081812fc146102fc575b600080fd5b34801561027857600080fd5b5061028c610287366004612df1565b610774565b60405190151581526020015b60405180910390f35b3480156102ad57600080fd5b506102b760105481565b604051908152602001610298565b6102d86102d3366004612ee1565b6107c6565b005b3480156102e657600080fd5b506102ef61088b565b6040516102989190612fc5565b34801561030857600080fd5b5061031c610317366004612fd8565b61091d565b6040516001600160a01b039091168152602001610298565b34801561034057600080fd5b506102d861034f366004612ff1565b6109a5565b34801561036057600080fd5b506102b760115481565b34801561037657600080fd5b50600f546102b7565b34801561038b57600080fd5b506102d861039a366004612fd8565b610abb565b6102d86103ad36600461301b565b610b39565b3480156103be57600080fd5b506102d86103cd366004612fd8565b610b76565b3480156103de57600080fd5b506102d86103ed366004613057565b610ba5565b3480156103fe57600080fd5b5061028c61040d36600461308c565b60156020526000908152604090205460ff1681565b6102d8610be6565b6102d861043836600461301b565b610c36565b34801561044957600080fd5b506102d8610458366004612fd8565b610c51565b34801561046957600080fd5b506102b760125481565b34801561047f57600080fd5b506102b760135481565b34801561049557600080fd5b506102d86104a43660046130cb565b610c66565b3480156104b557600080fd5b506014546104c39060ff1681565b60405160ff9091168152602001610298565b3480156104e157600080fd5b506102d86104f0366004612fd8565b610d48565b610508610503366004612fd8565b610d77565b60405161029891906131a3565b34801561052157600080fd5b5061031c610530366004612fd8565b610df3565b34801561054157600080fd5b506102d86105503660046131c4565b610e6a565b34801561056157600080fd5b506102b7600a5481565b34801561057757600080fd5b506102b761058636600461308c565b610eb2565b34801561059757600080fd5b506102b7600e5481565b3480156105ad57600080fd5b5061028c6105bc36600461301b565b610f39565b3480156105cd57600080fd5b506008546001600160a01b031661031c565b3480156105eb57600080fd5b506102ef610fe5565b34801561060057600080fd5b506102b7600c5481565b34801561061657600080fd5b506102d86106253660046131e1565b610ff4565b34801561063657600080fd5b5060095461028c90600160a01b900460ff1681565b6102d8610659366004613218565b6110b9565b34801561066a57600080fd5b506102ef610679366004612fd8565b6110f0565b34801561068a57600080fd5b506102d8610699366004612fd8565b611252565b3480156106aa57600080fd5b506102d86106b93660046131c4565b611281565b3480156106ca57600080fd5b506102b7600f5481565b3480156106e057600080fd5b5061028c6106ef366004613280565b6112c9565b34801561070057600080fd5b5060095461028c90600160a81b900460ff1681565b34801561072157600080fd5b506102d861073036600461308c565b6112f7565b34801561074157600080fd5b506102b7600d5481565b610508610759366004613319565b61138f565b34801561076a57600080fd5b506102b7600b5481565b60006001600160e01b031982166380ac58cd60e01b14806107a557506001600160e01b03198216635b5e139f60e01b145b806107c057506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000341180156107dd57506001600160a01b038416155b156107e6573492505b6009546001600160a01b0316331461085c5761080182611883565b60095461081d906001600160a01b031688888888888888611905565b61085c5760405162461bcd60e51b815260206004820152600b60248201526a139bdd08185b1b1bddd95960aa1b60448201526064015b60405180910390fd5b6108678785856119a0565b610872878688611e50565b5050506000928352505060176020526040902042905550565b60606000805461089a9061343b565b80601f01602080910402602001604051908101604052809291908181526020018280546108c69061343b565b80156109135780601f106108e857610100808354040283529160200191610913565b820191906000526020600020905b8154815290600101906020018083116108f657829003601f168201915b5050505050905090565b600061092882611ff0565b6109895760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610853565b506000908152600560205260409020546001600160a01b031690565b60006109b082610df3565b9050806001600160a01b0316836001600160a01b03161415610a1e5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610853565b336001600160a01b0382161480610a3a5750610a3a81336112c9565b610aac5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610853565b610ab6838361200d565b505050565b6009546001600160a01b03163314610ae55760405162461bcd60e51b815260040161085390613476565b6010548110158015610af95750600f548111155b610b345760405162461bcd60e51b815260206004820152600c60248201526b15dc9bdb99c8105b5bdd5b9d60a21b6044820152606401610853565b600d55565b610b428161207b565b610b56610b4e82610df3565b6000346119a0565b610b61838383611e50565b60009081526017602052604090204290555050565b6008546001600160a01b03163314610ba05760405162461bcd60e51b8152600401610853906134ad565b600a55565b6009546001600160a01b03163314610bcf5760405162461bcd60e51b815260040161085390613476565b8051610be2906002906020840190612d0c565b5050565b6009546001600160a01b03163314610c105760405162461bcd60e51b815260040161085390613476565b60405133904780156108fc02916000818181858888f19350505050610c3457600080fd5b565b610ab6838383604051806020016040528060008152506110b9565b610c5a8161207b565b610c638161209f565b50565b6009546001600160a01b03163314610c905760405162461bcd60e51b815260040161085390613476565b805160005b81811015610ab65760156000848381518110610cb357610cb36134da565b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff16610d3657600160156000858481518110610cf657610cf66134da565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055505b80610d4081613506565b915050610c95565b6009546001600160a01b03163314610d725760405162461bcd60e51b815260040161085390613476565b600c55565b600954606090600160a81b900460ff161515600114610dc95760405162461bcd60e51b815260206004820152600e60248201526d139bc8191a5c9958dd08135a5b9d60921b6044820152606401610853565b606080610deb338383600080896040518060200160405280600081525061138f565b949350505050565b6000818152600360205260408120546001600160a01b0316806107c05760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610853565b6009546001600160a01b03163314610e945760405162461bcd60e51b815260040161085390613476565b60098054911515600160a81b0260ff60a81b19909216919091179055565b60006001600160a01b038216610f1d5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610853565b506001600160a01b031660009081526004602052604090205490565b6009546000906001600160a01b03163314610f665760405162461bcd60e51b815260040161085390613476565b60405163095ea7b360e01b81526001600160a01b0384811660048301526024820184905285919082169063095ea7b3906044016020604051808303816000875af1158015610fb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fdc9190613521565b95945050505050565b60606001805461089a9061343b565b6001600160a01b03821633141561104d5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610853565b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6110c28261207b565b6110ce846000346119a0565b6110da848484846120df565b5060009081526017602052604090204290555050565b60606110fb82611ff0565b6111615760405162461bcd60e51b815260206004820152603160248201527f45524337323155524953746f726167653a2055524920717565727920666f72206044820152703737b732bc34b9ba32b73a103a37b5b2b760791b6064820152608401610853565b6000828152600760205260408120805461117a9061343b565b80601f01602080910402602001604051908101604052809291908181526020018280546111a69061343b565b80156111f35780601f106111c8576101008083540402835291602001916111f3565b820191906000526020600020905b8154815290600101906020018083116111d657829003601f168201915b505050505090506000611204612112565b9050805160001415611217575092915050565b81511561124957808260405160200161123192919061353e565b60405160208183030381529060405292505050919050565b610deb84612121565b6008546001600160a01b0316331461127c5760405162461bcd60e51b8152600401610853906134ad565b601155565b6009546001600160a01b031633146112ab5760405162461bcd60e51b815260040161085390613476565b60098054911515600160a01b0260ff60a01b19909216919091179055565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b6008546001600160a01b031633146113215760405162461bcd60e51b8152600401610853906134ad565b6001600160a01b0381166113865760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610853565b610c63816121ec565b600954606090600190600160a81b900460ff166113ae575086516113b1565b50825b60008167ffffffffffffffff8111156113cc576113cc612e2a565b6040519080825280602002602001820160405280156113f5578160200160208202803683370190505b509050600f5460001461145f57600f5461141060018461356d565b60105461141d9190613584565b1061145f5760405162461bcd60e51b815260206004820152601260248201527113585e081cdd5c1c1b1e481c995858da195960721b6044820152606401610853565b60003411801561147657506001600160a01b038716155b1561147f573495505b6009546001600160a01b031633148015906114a557506008546001600160a01b03163314155b80156114bb5750600954600160a81b900460ff16155b1561151f576114c985611883565b6009546114e5906001600160a01b03168b89898d8d8b8b61223e565b61151f5760405162461bcd60e51b815260206004820152600b60248201526a139bdd08185b1b1bddd95960aa1b6044820152606401610853565b600d541561157357600d54826010546115389190613584565b11156115735760405162461bcd60e51b815260206004820152600a602482015269111c9bdc081b1a5b5a5d60b21b6044820152606401610853565b600060115411801561159057506009546001600160a01b03163314155b80156115a757506008546001600160a01b03163314155b156115fe576011548610156115fe5760405162461bcd60e51b815260206004820152601760248201527f416d6f756e742073656e6420756e6465727072696365640000000000000000006044820152606401610853565b600954600160a01b900460ff1615156001141561166b573360009081526015602052604090205460ff16151560011461166b5760405162461bcd60e51b815260206004820152600f60248201526e139bdd081dda1a5d195b1a5cdd1959608a1b6044820152606401610853565b600e54156116c857600e548261168033610eb2565b61168a9190613584565b11156116c85760405162461bcd60e51b815260206004820152600d60248201526c1b585e135a5b9d08131a5b5a5d609a1b6044820152606401610853565b6008546116df906001600160a01b031688886119a0565b60005b82811015611836576001601060008282546116fd9190613584565b9091555050601054600954600160a81b900460ff166117555760008a838151811061172a5761172a6134da565b602002602001015111156117555789828151811061174a5761174a6134da565b602002602001015190505b61175e81611ff0565b6117ec5780838381518110611775576117756134da565b60200260200101818152505061178b8c8261224f565b600954600160a81b900460ff166117c4576117bf818c84815181106117b2576117b26134da565b6020026020010151612382565b6117d6565b6117d6816117d18361240d565b612382565b6000818152601760205260409020429055611823565b60405162461bcd60e51b815260206004820152600c60248201526b151bdad95b925908155cd95960a21b6044820152606401610853565b508061182e81613506565b9150506116e2565b507f2ad7ca0d3c2e5ecc29a9466186263310753b53fbb5a0f710be5fb496c8e120828a8389898560405161186e95949392919061359c565b60405180910390a19998505050505050505050565b60008181526016602052604090205460ff16600114156118da5760405162461bcd60e51b8152602060048201526012602482015271139bdb98d948185b1c9958591e48155cd95960721b6044820152606401610853565b6012548111156118ea5760128190555b6000908152601660205260409020805460ff19166001179055565b60008061191689898989898961250b565b90506000611971826040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b90508a6001600160a01b03166119878286612579565b6001600160a01b0316149b9a5050505050505050505050565b8015610ab65760006119b284836125f8565b90506001600160a01b038316611b39576008546001600160a01b038581169116148015906119fa57506000816002815181106119f0576119f06134da565b6020026020010151115b15611a4a57836001600160a01b03166108fc82600281518110611a1f57611a1f6134da565b60200260200101519081150290604051600060405180830381858888f19350505050611a4a57600080fd5b600081600081518110611a5f57611a5f6134da565b60200260200101511115611abe5760085481516001600160a01b03909116906108fc908390600090611a9357611a936134da565b60200260200101519081150290604051600060405180830381858888f19350505050611abe57600080fd5b600081600181518110611ad357611ad36134da565b60200260200101511115611b345760095481516001600160a01b03909116906108fc9083906001908110611b0957611b096134da565b60200260200101519081150290604051600060405180830381858888f19350505050611b3457600080fd5b611e4a565b6040516323b872dd60e01b81523360048201523060248201526044810183905283906001600160a01b038216906323b872dd906064016020604051808303816000875af1158015611b8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb29190613521565b611bbb57600080fd5b6008546001600160a01b03868116911614801590611bf35750600082600281518110611be957611be96134da565b6020026020010151115b15611ca057806001600160a01b031663a9059cbb8684600281518110611c1b57611c1b6134da565b60200260200101516040518363ffffffff1660e01b8152600401611c549291906001600160a01b03929092168252602082015260400190565b6020604051808303816000875af1158015611c73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c979190613521565b611ca057600080fd5b600082600081518110611cb557611cb56134da565b60200260200101511115611d735760085482516001600160a01b038084169263a9059cbb929116908590600090611cee57611cee6134da565b60200260200101516040518363ffffffff1660e01b8152600401611d279291906001600160a01b03929092168252602082015260400190565b6020604051808303816000875af1158015611d46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d6a9190613521565b611d7357600080fd5b600082600181518110611d8857611d886134da565b60200260200101511115611e485760095482516001600160a01b038084169263a9059cbb9291169085906001908110611dc357611dc36134da565b60200260200101516040518363ffffffff1660e01b8152600401611dfc9291906001600160a01b03929092168252602082015260400190565b6020604051808303816000875af1158015611e1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e3f9190613521565b611e4857600080fd5b505b50505050565b826001600160a01b0316611e6382610df3565b6001600160a01b031614611ecb5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610853565b6001600160a01b038216611f2d5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610853565b611f3860008261200d565b6001600160a01b0383166000908152600460205260408120805460019290611f6190849061356d565b90915550506001600160a01b0382166000908152600460205260408120805460019290611f8f908490613584565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000908152600360205260409020546001600160a01b0316151590565b600081815260056020526040902080546001600160a01b0319166001600160a01b038416908117909155819061204282610df3565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6009546001600160a01b0316331461209657610c638161293b565b610c63816129a2565b6120a881612a03565b600081815260076020526040902080546120c19061343b565b159050610c63576000818152600760205260408120610c6391612d90565b6120ea848484611e50565b6120f684848484612a9e565b611e4a5760405162461bcd60e51b8152600401610853906135d6565b60606002805461089a9061343b565b606061212c82611ff0565b6121905760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610853565b600061219a612112565b905060008151116121ba57604051806020016040528060008152506121e5565b806121c48461240d565b6040516020016121d592919061353e565b6040516020818303038152906040525b9392505050565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080611916898989898989612b9c565b6001600160a01b0382166122a55760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610853565b6122ae81611ff0565b156122fb5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610853565b6001600160a01b0382166000908152600460205260408120805460019290612324908490613584565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b61238b82611ff0565b6123ee5760405162461bcd60e51b815260206004820152602e60248201527f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60448201526d32bc34b9ba32b73a103a37b5b2b760911b6064820152608401610853565b60008281526007602090815260409091208251610ab692840190612d0c565b6060816124315750506040805180820190915260018152600360fc1b602082015290565b8160005b811561245b578061244581613506565b91506124549050600a8361363e565b9150612435565b60008167ffffffffffffffff81111561247657612476612e2a565b6040519080825280601f01601f1916602001820160405280156124a0576020820181803683370190505b5090505b8415610deb576124b560018361356d565b91506124c2600a86613652565b6124cd906030613584565b60f81b8183815181106124e2576124e26134da565b60200101906001600160f81b031916908160001a905350612504600a8661363e565b94506124a4565b6040516bffffffffffffffffffffffff19606088811b821660208401526034830188905286811b8216605484015285901b166068820152607c8101839052609c810182905260009060bc015b6040516020818303038152906040528051906020012090509695505050505050565b60008060008061258885612bd6565b6040805160008152602081018083528b905260ff8316918101919091526060810184905260808101839052929550909350915060019060a0016020604051602081039080840390855afa1580156125e3573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b6040805160038082526080820190925260609183916000916020820185803683370190505090506127108410156126385761263582612710613666565b91505b6008546001600160a01b038681169116141561277c57600b5461265d9061271061356d565b6126696127108461363e565b6126739190613666565b81600081518110612686576126866134da565b60200260200101818152505061271084101561272d57612710816000815181106126b2576126b26134da565b60200260200101516126c4919061363e565b816000815181106126d7576126d76134da565b602002602001018181525050806000815181106126f6576126f66134da565b602002602001015184612709919061356d565b8160018151811061271c5761271c6134da565b602002602001018181525050612773565b80600081518110612740576127406134da565b602002602001015182612753919061356d565b81600181518110612766576127666134da565b6020026020010181815250505b91506107c09050565b6000600c54600a5461278e9190613584565b905060008161279f6127108661363e565b6127a99190613666565b600a549091506127b9838361363e565b6127c39190613666565b836000815181106127d6576127d66134da565b602002602001018181525050826000815181106127f5576127f56134da565b602002602001015181612808919061356d565b8360018151811061281b5761281b6134da565b6020908102919091010152612830818761356d565b83600281518110612843576128436134da565b60200260200101818152505061271086101561292f576127108360008151811061286f5761286f6134da565b6020026020010151612881919061363e565b83600081518110612894576128946134da565b602002602001018181525050612710836001815181106128b6576128b66134da565b60200260200101516128c8919061363e565b836001815181106128db576128db6134da565b602002602001018181525050612710836002815181106128fd576128fd6134da565b602002602001015161290f919061363e565b83600281518110612922576129226134da565b6020026020010181815250505b829450505050506107c0565b6129453382612c4a565b610c635760405162461bcd60e51b815260206004820152602860248201527f4552433732313a2063616c6c6572206973206e6f74206f776e6572206e6f7220604482015267185c1c1c9bdd995960c21b6064820152608401610853565b60135460008281526017602052604090205442916129bf91613584565b11610c635760405162461bcd60e51b815260206004820152601460248201527326b7b232b930ba34b7b7103a34b6b29037bb32b960611b6044820152606401610853565b6000612a0e82610df3565b9050612a1b60008361200d565b6001600160a01b0381166000908152600460205260408120805460019290612a4490849061356d565b909155505060008281526003602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b60006001600160a01b0384163b15612b9157604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612ae2903390899088908890600401613685565b6020604051808303816000875af1925050508015612b1d575060408051601f3d908101601f19168201909252612b1a918101906136c2565b60015b612b77573d808015612b4b576040519150601f19603f3d011682016040523d82523d6000602084013e612b50565b606091505b508051612b6f5760405162461bcd60e51b8152600401610853906135d6565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610deb565b506001949350505050565b600086868686604051602001612bb291906136df565b60408051601f19818403018152908290526125579493929188908890602001613741565b60008060008351604114612c2c5760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964207369676e6174757265206c656e67746800000000000000006044820152606401610853565b50505060208101516040820151606090920151909260009190911a90565b6000612c5582611ff0565b612cb65760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610853565b6000612cc183610df3565b9050806001600160a01b0316846001600160a01b03161480612cfc5750836001600160a01b0316612cf18461091d565b6001600160a01b0316145b80610deb5750610deb81856112c9565b828054612d189061343b565b90600052602060002090601f016020900481019282612d3a5760008555612d80565b82601f10612d5357805160ff1916838001178555612d80565b82800160010185558215612d80579182015b82811115612d80578251825591602001919060010190612d65565b50612d8c929150612dc6565b5090565b508054612d9c9061343b565b6000825580601f10612dac575050565b601f016020900490600052602060002090810190610c6391905b5b80821115612d8c5760008155600101612dc7565b6001600160e01b031981168114610c6357600080fd5b600060208284031215612e0357600080fd5b81356121e581612ddb565b80356001600160a01b0381168114612e2557600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612e6957612e69612e2a565b604052919050565b600082601f830112612e8257600080fd5b813567ffffffffffffffff811115612e9c57612e9c612e2a565b612eaf601f8201601f1916602001612e40565b818152846020838601011115612ec457600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080600060e0888a031215612efc57600080fd5b612f0588612e0e565b965060208801359550612f1a60408901612e0e565b9450612f2860608901612e0e565b93506080880135925060a0880135915060c088013567ffffffffffffffff811115612f5257600080fd5b612f5e8a828b01612e71565b91505092959891949750929550565b60005b83811015612f88578181015183820152602001612f70565b83811115611e4a5750506000910152565b60008151808452612fb1816020860160208601612f6d565b601f01601f19169290920160200192915050565b6020815260006121e56020830184612f99565b600060208284031215612fea57600080fd5b5035919050565b6000806040838503121561300457600080fd5b61300d83612e0e565b946020939093013593505050565b60008060006060848603121561303057600080fd5b61303984612e0e565b925061304760208501612e0e565b9150604084013590509250925092565b60006020828403121561306957600080fd5b813567ffffffffffffffff81111561308057600080fd5b610deb84828501612e71565b60006020828403121561309e57600080fd5b6121e582612e0e565b600067ffffffffffffffff8211156130c1576130c1612e2a565b5060051b60200190565b600060208083850312156130de57600080fd5b823567ffffffffffffffff8111156130f557600080fd5b8301601f8101851361310657600080fd5b8035613119613114826130a7565b612e40565b81815260059190911b8201830190838101908783111561313857600080fd5b928401925b8284101561315d5761314e84612e0e565b8252928401929084019061313d565b979650505050505050565b600081518084526020808501945080840160005b838110156131985781518752958201959082019060010161317c565b509495945050505050565b6020815260006121e56020830184613168565b8015158114610c6357600080fd5b6000602082840312156131d657600080fd5b81356121e5816131b6565b600080604083850312156131f457600080fd5b6131fd83612e0e565b9150602083013561320d816131b6565b809150509250929050565b6000806000806080858703121561322e57600080fd5b61323785612e0e565b935061324560208601612e0e565b925060408501359150606085013567ffffffffffffffff81111561326857600080fd5b61327487828801612e71565b91505092959194509250565b6000806040838503121561329357600080fd5b61329c83612e0e565b91506132aa60208401612e0e565b90509250929050565b600082601f8301126132c457600080fd5b813560206132d4613114836130a7565b82815260059290921b840181019181810190868411156132f357600080fd5b8286015b8481101561330e57803583529183019183016132f7565b509695505050505050565b600080600080600080600060e0888a03121561333457600080fd5b61333d88612e0e565b9650602088013567ffffffffffffffff8082111561335a57600080fd5b818a0191508a601f83011261336e57600080fd5b813561337c613114826130a7565b8082825260208201915060208360051b86010192508d83111561339e57600080fd5b602085015b838110156133d75784813511156133b957600080fd5b6133c98f60208335890101612e71565b8352602092830192016133a3565b509950505060408a01359150808211156133f057600080fd5b6133fc8b838c016132b3565b965061340a60608b01612e0e565b955060808a0135945060a08a0135935060c08a013591508082111561342e57600080fd5b50612f5e8a828b01612e71565b600181811c9082168061344f57607f821691505b6020821081141561347057634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526017908201527f4f6e6c79204d6f64657261746f722046756e6374696f6e000000000000000000604082015260600190565b60208082526013908201527227b7363c9037bbb732b910333ab731ba34b7b760691b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561351a5761351a6134f0565b5060010190565b60006020828403121561353357600080fd5b81516121e5816131b6565b60008351613550818460208801612f6d565b835190830190613564818360208801612f6d565b01949350505050565b60008282101561357f5761357f6134f0565b500390565b60008219821115613597576135976134f0565b500190565b6001600160a01b03868116825260208201869052841660408201526060810183905260a06080820181905260009061315d90830184613168565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b60008261364d5761364d613628565b500490565b60008261366157613661613628565b500690565b6000816000190483118215151615613680576136806134f0565b500290565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906136b890830184612f99565b9695505050505050565b6000602082840312156136d457600080fd5b81516121e581612ddb565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561373457603f19888603018452613722858351612f99565b94509285019290850190600101613706565b5092979650505050505050565b60006bffffffffffffffffffffffff19808960601b168352808860601b166014840152508560288301528451602061377f8260488601838a01612f6d565b85519184016048019181870160005b828110156137aa5781518552938301939083019060010161378e565b50505093815290920197965050505050505056fea2646970667358221220df961dcf0613ddfb55197674f294df4b29cfda1ff99ca24823ad11c5daedce1f64736f6c634300080a0033

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

000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000001f7290c912b10eb2a4b958dadb5fe32e8e6d9f92000000000000000000000000355e175199064947ca73118f5969703d395c6d0600000000000000000000000000000000000000000000000000000000000000c800000000000000000000000000000000000000000000000000000000000000c800000000000000000000000000000000000000000000000000000000000001f4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000e4d61676963616c205469636b65740000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012574f4d204d61676963616c205469636b65740000000000000000000000000000

-----Decoded View---------------
Arg [0] : name (string): Magical Ticket
Arg [1] : symbol (string): WOM Magical Ticket
Arg [2] : setCreator (address): 0x1f7290c912B10EB2a4b958DaDB5FE32E8E6d9F92
Arg [3] : setModerator (address): 0x355e175199064947Ca73118f5969703D395c6d06
Arg [4] : setModFirstRoyalties (uint256): 200
Arg [5] : setModRoyalties (uint256): 200
Arg [6] : setCreRoyalties (uint256): 500
Arg [7] : setCost (uint256): 0
Arg [8] : setMaxSuplly (uint256): 1000
Arg [9] : limitDrop (uint256): 0
Arg [10] : limitMint (uint256): 1

-----Encoded View---------------
15 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [1] : 00000000000000000000000000000000000000000000000000000000000001a0
Arg [2] : 0000000000000000000000001f7290c912b10eb2a4b958dadb5fe32e8e6d9f92
Arg [3] : 000000000000000000000000355e175199064947ca73118f5969703d395c6d06
Arg [4] : 00000000000000000000000000000000000000000000000000000000000000c8
Arg [5] : 00000000000000000000000000000000000000000000000000000000000000c8
Arg [6] : 00000000000000000000000000000000000000000000000000000000000001f4
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [8] : 00000000000000000000000000000000000000000000000000000000000003e8
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [11] : 000000000000000000000000000000000000000000000000000000000000000e
Arg [12] : 4d61676963616c205469636b6574000000000000000000000000000000000000
Arg [13] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [14] : 574f4d204d61676963616c205469636b65740000000000000000000000000000


Deployed Bytecode Sourcemap

159:12659:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1536:305:4;;;;;;;;;;-1:-1:-1;1536:305:4;;;;;:::i;:::-;;:::i;:::-;;;565:14:13;;558:22;540:41;;528:2;513:18;1536:305:4;;;;;;;;694:29:0;;;;;;;;;;;;;;;;;;;738:25:13;;;726:2;711:18;694:29:0;592:177:13;8739:677:0;;;;;;:::i;:::-;;:::i;:::-;;2481:91:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;4022:221::-;;;;;;;;;;-1:-1:-1;4022:221:4;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;3754:32:13;;;3736:51;;3724:2;3709:18;4022:221:4;3590:203:13;3545:411:4;;;;;;;;;;-1:-1:-1;3545:411:4;;;;;:::i;:::-;;:::i;730:39:0:-;;;;;;;;;;;;;;;;10489:88;;;;;;;;;;-1:-1:-1;10560:9:0;;10489:88;;11638:160;;;;;;;;;;-1:-1:-1;11638:160:0;;;;;:::i;:::-;;:::i;9428:346::-;;;;;;:::i;:::-;;:::i;2135:108::-;;;;;;;;;;-1:-1:-1;2135:108:0;;;;;:::i;:::-;;:::i;2857:99::-;;;;;;;;;;-1:-1:-1;2857:99:0;;;;;:::i;:::-;;:::i;901:41::-;;;;;;;;;;-1:-1:-1;901:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10805:124;;;:::i;9786:193::-;;;;;;:::i;:::-;;:::i;10375:106::-;;;;;;;;;;-1:-1:-1;10375:106:0;;;;;:::i;:::-;;:::i;778:29::-;;;;;;;;;;;;;;;;816:34;;;;;;;;;;;;;;;;2575:270;;;;;;;;;;-1:-1:-1;2575:270:0;;;;;:::i;:::-;;:::i;859:29::-;;;;;;;;;;-1:-1:-1;859:29:0;;;;;;;;;;;6169:4:13;6157:17;;;6139:36;;6127:2;6112:18;859:29:0;5997:184:13;2013:110:0;;;;;;;;;;-1:-1:-1;2013:110:0;;;;;:::i;:::-;;:::i;5906:268::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2175:239:4:-;;;;;;;;;;-1:-1:-1;2175:239:4;;;;;:::i;:::-;;:::i;2351:106:0:-;;;;;;;;;;-1:-1:-1;2351:106:0;;;;;:::i;:::-;;:::i;413:38::-;;;;;;;;;;;;;;;;1905:208:4;;;;;;;;;;-1:-1:-1;1905:208:4;;;;;:::i;:::-;;:::i;622:29:0:-;;;;;;;;;;;;;;;;10585:208;;;;;;;;;;-1:-1:-1;10585:208:0;;;;;:::i;:::-;;:::i;11010:88::-;;;;;;;;;;-1:-1:-1;11083:7:0;;-1:-1:-1;;;;;11083:7:0;11010:88;;2641:95:4;;;;;;;;;;;;;:::i;535:38:0:-;;;;;;;;;;;;;;;;4315:295:4;;;;;;;;;;-1:-1:-1;4315:295:4;;;;;:::i;:::-;;:::i;317:40:0:-;;;;;;;;;;-1:-1:-1;317:40:0;;;;-1:-1:-1;;;317:40:0;;;;;;9991:376;;;;;;:::i;:::-;;:::i;404:679:5:-;;;;;;;;;;-1:-1:-1;404:679:5;;;;;:::i;:::-;;:::i;2255:88:0:-;;;;;;;;;;-1:-1:-1;2255:88:0;;;;;:::i;:::-;;:::i;2465:102::-;;;;;;;;;;-1:-1:-1;2465:102:0;;;;;:::i;:::-;;:::i;658:29::-;;;;;;;;;;;;;;;;4681:164:4;;;;;;;;;;-1:-1:-1;4681:164:4;;;;;:::i;:::-;;:::i;364:40:0:-;;;;;;;;;;-1:-1:-1;364:40:0;;;;-1:-1:-1;;;364:40:0;;;;;;11253:194;;;;;;;;;;-1:-1:-1;11253:194:0;;;;;:::i;:::-;;:::i;586:29::-;;;;;;;;;;;;;;;;6186:2545;;;;;;:::i;:::-;;:::i;490:38::-;;;;;;;;;;;;;;;;1536:305:4;1638:4;-1:-1:-1;;;;;;1675:40:4;;-1:-1:-1;;;1675:40:4;;:105;;-1:-1:-1;;;;;;;1732:48:4;;-1:-1:-1;;;1732:48:4;1675:105;:158;;;-1:-1:-1;;;;;;;;;;896:40:3;;;1797:36:4;1655:178;1536:305;-1:-1:-1;;1536:305:4:o;8739:677:0:-;8984:1;8972:9;:13;:39;;;;-1:-1:-1;;;;;;8989:22:0;;;8972:39;8969:91;;;9039:9;9027:21;;8969:91;9089:9;;-1:-1:-1;;;;;9089:9:0;9075:10;:23;9072:186;;9114:15;9123:5;9114:8;:15::i;:::-;9162:9;;9152:78;;-1:-1:-1;;;;;9162:9:0;9173:4;9179:7;9188;9197:8;9207:9;9218:5;9225:4;9152:9;:78::i;:::-;9144:102;;;;-1:-1:-1;;;9144:102:0;;10978:2:13;9144:102:0;;;10960:21:13;11017:2;10997:18;;;10990:30;-1:-1:-1;;;11036:18:13;;;11029:41;11087:18;;9144:102:0;;;;;;;;;9270:40;9284:4;9290:8;9300:9;9270:13;:40::i;:::-;9323:33;9333:4;9339:7;9348;9323:9;:33::i;:::-;-1:-1:-1;;;9369:21:0;;;;-1:-1:-1;;9369:12:0;:21;;;;;9391:15;9369:37;;-1:-1:-1;8739:677:0:o;2481:91:4:-;2526:13;2559:5;2552:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2481:91;:::o;4022:221::-;4098:7;4126:16;4134:7;4126;:16::i;:::-;4118:73;;;;-1:-1:-1;;;4118:73:4;;11703:2:13;4118:73:4;;;11685:21:13;11742:2;11722:18;;;11715:30;11781:34;11761:18;;;11754:62;-1:-1:-1;;;11832:18:13;;;11825:42;11884:19;;4118:73:4;11501:408:13;4118:73:4;-1:-1:-1;4211:24:4;;;;:15;:24;;;;;;-1:-1:-1;;;;;4211:24:4;;4022:221::o;3545:411::-;3626:13;3642:23;3657:7;3642:14;:23::i;:::-;3626:39;;3690:5;-1:-1:-1;;;;;3684:11:4;:2;-1:-1:-1;;;;;3684:11:4;;;3676:57;;;;-1:-1:-1;;;3676:57:4;;12116:2:13;3676:57:4;;;12098:21:13;12155:2;12135:18;;;12128:30;12194:34;12174:18;;;12167:62;-1:-1:-1;;;12245:18:13;;;12238:31;12286:19;;3676:57:4;11914:397:13;3676:57:4;682:10:2;-1:-1:-1;;;;;3768:21:4;;;;:62;;-1:-1:-1;3793:37:4;3810:5;682:10:2;4681:164:4;:::i;3793:37::-;3746:168;;;;-1:-1:-1;;;3746:168:4;;12518:2:13;3746:168:4;;;12500:21:13;12557:2;12537:18;;;12530:30;12596:34;12576:18;;;12569:62;12667:26;12647:18;;;12640:54;12711:19;;3746:168:4;12316:420:13;3746:168:4;3927:21;3936:2;3940:7;3927:8;:21::i;:::-;3615:341;3545:411;;:::o;11638:160:0:-;11979:9;;-1:-1:-1;;;;;11979:9:0;11965:10;:23;11957:59;;;;-1:-1:-1;;;11957:59:0;;;;;;;:::i;:::-;11721:6:::1;;11711;:16;;:39;;;;;11741:9;;11731:6;:19;;11711:39;11703:63;;;::::0;-1:-1:-1;;;11703:63:0;;13295:2:13;11703:63:0::1;::::0;::::1;13277:21:13::0;13334:2;13314:18;;;13307:30;-1:-1:-1;;;13353:18:13;;;13346:42;13405:18;;11703:63:0::1;13093:336:13::0;11703:63:0::1;11777:4;:13:::0;11638:160::o;9428:346::-;9572:16;9580:7;9572;:16::i;:::-;9609:54;9623:16;9631:7;9623;:16::i;:::-;9649:1;9653:9;9609:13;:54::i;:::-;9684:28;9694:4;9700:2;9704:7;9684:9;:28::i;:::-;9725:21;;;;:12;:21;;;;;9749:15;9725:39;;-1:-1:-1;;9428:346:0:o;2135:108::-;11860:7;;-1:-1:-1;;;;;11860:7:0;11846:10;:21;11838:53;;;;-1:-1:-1;;;11838:53:0;;;;;;;:::i;:::-;2211:12:::1;:24:::0;2135:108::o;2857:99::-;11979:9;;-1:-1:-1;;;;;11979:9:0;11965:10;:23;11957:59;;;;-1:-1:-1;;;11957:59:0;;;;;;;:::i;:::-;2930:18;;::::1;::::0;:11:::1;::::0;:18:::1;::::0;::::1;::::0;::::1;:::i;:::-;;2857:99:::0;:::o;10805:124::-;11979:9;;-1:-1:-1;;;;;11979:9:0;11965:10;:23;11957:59;;;;-1:-1:-1;;;11957:59:0;;;;;;;:::i;:::-;10873:47:::1;::::0;10881:10:::1;::::0;10898:21:::1;10873:47:::0;::::1;;;::::0;::::1;::::0;;;10898:21;10881:10;10873:47;::::1;;;;;;10865:56;;;::::0;::::1;;10805:124::o:0;9786:193::-;9932:39;9949:4;9955:2;9959:7;9932:39;;;;;;;;;;;;:16;:39::i;10375:106::-;10432:16;10440:7;10432;:16::i;:::-;10459:14;10465:7;10459:5;:14::i;:::-;10375:106;:::o;2575:270::-;11979:9;;-1:-1:-1;;;;;11979:9:0;11965:10;:23;11957:59;;;;-1:-1:-1;;;11957:59:0;;;;;;;:::i;:::-;2663:11;;2647:13:::1;2685:153;2709:5;2705:1;:9;2685:153;;;2739:9;:18;2749:4;2754:1;2749:7;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;2739:18:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;2739:18:0;;::::1;;2736:91;;2807:4;2786:9;:18;2796:4;2801:1;2796:7;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;2786:18:0::1;-1:-1:-1::0;;;;;2786:18:0::1;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;2736:91;2716:3:::0;::::1;::::0;::::1;:::i;:::-;;;;2685:153;;2013:110:::0;11979:9;;-1:-1:-1;;;;;11979:9:0;11965:10;:23;11957:59;;;;-1:-1:-1;;;11957:59:0;;;;;;;:::i;:::-;2091:12:::1;:24:::0;2013:110::o;5906:268::-;6002:15;;5966:16;;-1:-1:-1;;;6002:15:0;;;;:23;;6021:4;6002:23;5994:49;;;;-1:-1:-1;;;5994:49:0;;14388:2:13;5994:49:0;;;14370:21:13;14427:2;14407:18;;;14400:30;-1:-1:-1;;;14446:18:13;;;14439:44;14500:18;;5994:49:0;14186:338:13;5994:49:0;6054:17;6082:18;6118:48;6128:10;6139:1;6141;6151;6154;6156:6;6118:48;;;;;;;;;;;;:9;:48::i;:::-;6111:55;5906:268;-1:-1:-1;;;;5906:268:0:o;2175:239:4:-;2247:7;2283:16;;;:7;:16;;;;;;-1:-1:-1;;;;;2283:16:4;2318:19;2310:73;;;;-1:-1:-1;;;2310:73:4;;14731:2:13;2310:73:4;;;14713:21:13;14770:2;14750:18;;;14743:30;14809:34;14789:18;;;14782:62;-1:-1:-1;;;14860:18:13;;;14853:39;14909:19;;2310:73:4;14529:405:13;2351:106:0;11979:9;;-1:-1:-1;;;;;11979:9:0;11965:10;:23;11957:59;;;;-1:-1:-1;;;11957:59:0;;;;;;;:::i;:::-;2422:15:::1;:27:::0;;;::::1;;-1:-1:-1::0;;;2422:27:0::1;-1:-1:-1::0;;;;2422:27:0;;::::1;::::0;;;::::1;::::0;;2351:106::o;1905:208:4:-;1977:7;-1:-1:-1;;;;;2005:19:4;;1997:74;;;;-1:-1:-1;;;1997:74:4;;15141:2:13;1997:74:4;;;15123:21:13;15180:2;15160:18;;;15153:30;15219:34;15199:18;;;15192:62;-1:-1:-1;;;15270:18:13;;;15263:40;15320:19;;1997:74:4;14939:406:13;1997:74:4;-1:-1:-1;;;;;;2089:16:4;;;;;:9;:16;;;;;;;1905:208::o;10585::0:-;11979:9;;10698:4;;-1:-1:-1;;;;;11979:9:0;11965:10;:23;11957:59;;;;-1:-1:-1;;;11957:59:0;;;;;;;:::i;:::-;10760:25:::1;::::0;-1:-1:-1;;;10760:25:0;;-1:-1:-1;;;;;15542:32:13;;;10760:25:0::1;::::0;::::1;15524:51:13::0;15591:18;;;15584:34;;;10736:5:0;;10760:9;;::::1;::::0;::::1;::::0;15497:18:13;;10760:25:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10753:32:::0;10585:208;-1:-1:-1;;;;;10585:208:0:o;2641:95:4:-;2688:13;2721:7;2714:14;;;;;:::i;4315:295::-;-1:-1:-1;;;;;4418:24:4;;682:10:2;4418:24:4;;4410:62;;;;-1:-1:-1;;;4410:62:4;;16081:2:13;4410:62:4;;;16063:21:13;16120:2;16100:18;;;16093:30;16159:27;16139:18;;;16132:55;16204:18;;4410:62:4;15879:349:13;4410:62:4;682:10:2;4485:32:4;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;4485:42:4;;;;;;;;;;;;:53;;-1:-1:-1;;4485:53:4;;;;;;;;;;4554:48;;540:41:13;;;4485:42:4;;682:10:2;4554:48:4;;513:18:13;4554:48:4;;;;;;;4315:295;;:::o;9991:376:0:-;10168:16;10176:7;10168;:16::i;:::-;10205:42;10219:4;10233:1;10237:9;10205:13;:42::i;:::-;10260:39;10274:4;10280:2;10284:7;10293:5;10260:13;:39::i;:::-;-1:-1:-1;10312:21:0;;;;:12;:21;;;;;10334:15;10312:37;;-1:-1:-1;;9991:376:0:o;404:679:5:-;477:13;511:16;519:7;511;:16::i;:::-;503:78;;;;-1:-1:-1;;;503:78:5;;16435:2:13;503:78:5;;;16417:21:13;16474:2;16454:18;;;16447:30;16513:34;16493:18;;;16486:62;-1:-1:-1;;;16564:18:13;;;16557:47;16621:19;;503:78:5;16233:413:13;503:78:5;594:23;620:19;;;:10;:19;;;;;594:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;650:18;671:10;:8;:10::i;:::-;650:31;;763:4;757:18;779:1;757:23;753:72;;;-1:-1:-1;804:9:5;404:679;-1:-1:-1;;404:679:5:o;753:72::-;929:23;;:27;925:108;;1004:4;1010:9;987:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;973:48;;;;404:679;;;:::o;925:108::-;1052:23;1067:7;1052:14;:23::i;2255:88:0:-;11860:7;;-1:-1:-1;;;;;11860:7:0;11846:10;:21;11838:53;;;;-1:-1:-1;;;11838:53:0;;;;;;;:::i;:::-;2321:4:::1;:14:::0;2255:88::o;2465:102::-;11979:9;;-1:-1:-1;;;;;11979:9:0;11965:10;:23;11957:59;;;;-1:-1:-1;;;11957:59:0;;;;;;;:::i;:::-;2532:15:::1;:27:::0;;;::::1;;-1:-1:-1::0;;;2532:27:0::1;-1:-1:-1::0;;;;2532:27:0;;::::1;::::0;;;::::1;::::0;;2465:102::o;4681:164:4:-;-1:-1:-1;;;;;4802:25:4;;;4778:4;4802:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;4681:164::o;11253:194:0:-;11860:7;;-1:-1:-1;;;;;11860:7:0;11846:10;:21;11838:53;;;;-1:-1:-1;;;11838:53:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11344:22:0;::::1;11336:73;;;::::0;-1:-1:-1;;;11336:73:0;;17328:2:13;11336:73:0::1;::::0;::::1;17310:21:13::0;17367:2;17347:18;;;17340:30;17406:34;17386:18;;;17379:62;-1:-1:-1;;;17457:18:13;;;17450:36;17503:19;;11336:73:0::1;17126:402:13::0;11336:73:0::1;11420:19;11430:8;11420:9;:19::i;6186:2545::-:0;6502:15;;6427:16;;6487:1;;-1:-1:-1;;;6502:15:0;;;;6499:127;;-1:-1:-1;6550:18:0;;6499:127;;;-1:-1:-1;6609:5:0;6499:127;6638:25;6680:5;6666:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6666:20:0;;6638:48;;6702:9;;6715:1;6702:14;6699:108;;6763:9;;6750;6758:1;6750:5;:9;:::i;:::-;6740:6;;:20;;;;:::i;:::-;:32;6732:63;;;;-1:-1:-1;;;6732:63:0;;17998:2:13;6732:63:0;;;17980:21:13;18037:2;18017:18;;;18010:30;-1:-1:-1;;;18056:18:13;;;18049:48;18114:18;;6732:63:0;17796:342:13;6732:63:0;6834:1;6822:9;:13;:39;;;;-1:-1:-1;;;;;;6839:22:0;;;6822:39;6819:91;;;6889:9;6877:21;;6819:91;6985:9;;-1:-1:-1;;;;;6985:9:0;6971:10;:23;;;;:48;;-1:-1:-1;7012:7:0;;-1:-1:-1;;;;;7012:7:0;6998:10;:21;;6971:48;:76;;;;-1:-1:-1;7023:15:0;;-1:-1:-1;;;7023:15:0;;;;:24;6971:76;6968:262;;;7067:15;7076:5;7067:8;:15::i;:::-;7120:9;;7109:89;;-1:-1:-1;;;;;7120:9:0;7131:7;7140:8;7150:9;7161:11;7174:10;7186:5;7193:4;7109:10;:89::i;:::-;7101:113;;;;-1:-1:-1;;;7101:113:0;;10978:2:13;7101:113:0;;;10960:21:13;11017:2;10997:18;;;10990:30;-1:-1:-1;;;11036:18:13;;;11029:41;11087:18;;7101:113:0;10776:335:13;7101:113:0;7259:4;;:8;7256:84;;7309:4;;7300:5;7291:6;;:14;;;;:::i;:::-;:22;;7283:45;;;;-1:-1:-1;;;7283:45:0;;18345:2:13;7283:45:0;;;18327:21:13;18384:2;18364:18;;;18357:30;-1:-1:-1;;;18403:18:13;;;18396:40;18453:18;;7283:45:0;18143:334:13;7283:45:0;7362:1;7355:4;;:8;:35;;;;-1:-1:-1;7381:9:0;;-1:-1:-1;;;;;7381:9:0;7367:10;:23;;7355:35;:60;;;;-1:-1:-1;7408:7:0;;-1:-1:-1;;;;;7408:7:0;7394:10;:21;;7355:60;7352:144;;;7453:4;;7440:9;:17;;7432:52;;;;-1:-1:-1;;;7432:52:0;;18684:2:13;7432:52:0;;;18666:21:13;18723:2;18703:18;;;18696:30;18762:25;18742:18;;;18735:53;18805:18;;7432:52:0;18482:347:13;7432:52:0;7511:15;;-1:-1:-1;;;7511:15:0;;;;:23;;7530:4;7511:23;7508:110;;;7568:10;7558:21;;;;:9;:21;;;;;;;;:29;;:21;:29;7550:56;;;;-1:-1:-1;;;7550:56:0;;19036:2:13;7550:56:0;;;19018:21:13;19075:2;19055:18;;;19048:30;-1:-1:-1;;;19094:18:13;;;19087:45;19149:18;;7550:56:0;18834:339:13;7550:56:0;7633:7;;:11;7630:110;;7703:7;;7693:5;7669:21;7679:10;7669:9;:21::i;:::-;:29;;;;:::i;:::-;7668:42;;7660:68;;;;-1:-1:-1;;;7660:68:0;;19380:2:13;7660:68:0;;;19362:21:13;19419:2;19399:18;;;19392:30;-1:-1:-1;;;19438:18:13;;;19431:43;19491:18;;7660:68:0;19178:337:13;7660:68:0;7766:7;;7752:43;;-1:-1:-1;;;;;7766:7:0;7775:8;7785:9;7752:13;:43::i;:::-;7813:9;7808:814;7832:5;7828:1;:9;7808:814;;;7883:1;7873:6;;:11;;;;;;;:::i;:::-;;;;-1:-1:-1;;7917:6:0;;7964:15;;-1:-1:-1;;;7964:15:0;;;;7961:165;;8028:1;8012:10;8023:1;8012:13;;;;;;;;:::i;:::-;;;;;;;:17;8008:103;;;8078:10;8089:1;8078:13;;;;;;;;:::i;:::-;;;;;;;8070:21;;8008:103;8145:14;8153:5;8145:7;:14::i;:::-;8142:467;;8202:5;8188:8;8197:1;8188:11;;;;;;;;:::i;:::-;;;;;;:19;;;;;8226:21;8232:7;8241:5;8226;:21::i;:::-;8269:15;;-1:-1:-1;;;8269:15:0;;;;8266:211;;8336:35;8349:5;8356:11;8368:1;8356:14;;;;;;;;:::i;:::-;;;;;;;8336:12;:35::i;:::-;8266:211;;;8420:37;8433:5;8440:16;:5;:14;:16::i;:::-;8420:12;:37::i;:::-;8495:19;;;;:12;:19;;;;;8515:15;8495:35;;8142:467;;;8571:22;;-1:-1:-1;;;8571:22:0;;19722:2:13;8571:22:0;;;19704:21:13;19761:2;19741:18;;;19734:30;-1:-1:-1;;;19780:18:13;;;19773:42;19832:18;;8571:22:0;19520:336:13;8142:467:0;-1:-1:-1;7839:3:0;;;;:::i;:::-;;;;7808:814;;;;8639:56;8649:7;8658:5;8665:8;8675:9;8686:8;8639:56;;;;;;;;;;:::i;:::-;;;;;;;;8713:8;6186:2545;-1:-1:-1;;;;;;;;;6186:2545:0:o;12590:219::-;12651:16;;;;:9;:16;;;;;;;;;:21;;12643:52;;;;-1:-1:-1;;;12643:52:0;;20672:2:13;12643:52:0;;;20654:21:13;20711:2;20691:18;;;20684:30;-1:-1:-1;;;20730:18:13;;;20723:48;20788:18;;12643:52:0;20470:342:13;12643:52:0;12717:9;;12709:5;:17;12706:65;;;12742:9;:17;;;12706:65;12781:16;;;;:9;:16;;;;;:20;;-1:-1:-1;;12781:20:0;12800:1;12781:20;;;12590:219::o;2779:533:12:-;3042:4;3059:19;3081:70;3099:4;3105:7;3114;3123:8;3133:9;3144:6;3081:17;:70::i;:::-;3059:92;;3162:28;3193:36;3217:11;2309:66;;25214::13;2309::12;;;25202:79:13;25297:12;;;25290:28;;;2068:7:12;;25334:12:13;;2309:66:12;;;;;;;;;;;;2281:109;;;;;;2261:129;;1963:435;;;;3193:36;3162:67;;3297:7;-1:-1:-1;;;;;3247:57:12;:46;3261:20;3283:9;3247:13;:46::i;:::-;-1:-1:-1;;;;;3247:57:12;;;2779:533;-1:-1:-1;;;;;;;;;;;2779:533:12:o;4330:1568:0:-;4497:10;;4494:1395;;4525:24;4552:30;4563:10;4575:6;4552:10;:30::i;:::-;4525:57;-1:-1:-1;;;;;;4614:22:0;;4611:1265;;4691:7;;-1:-1:-1;;;;;4677:21:0;;;4691:7;;4677:21;;;;:39;;;4715:1;4702:7;4710:1;4702:10;;;;;;;;:::i;:::-;;;;;;;:14;4677:39;4674:195;;;4820:10;-1:-1:-1;;;;;4812:24:0;:36;4837:7;4845:1;4837:10;;;;;;;;:::i;:::-;;;;;;;4812:36;;;;;;;;;;;;;;;;;;;;;;;4804:45;;;;;;4903:1;4890:7;4898:1;4890:10;;;;;;;;:::i;:::-;;;;;;;:14;4887:166;;;5007:7;;5021:10;;-1:-1:-1;;;;;5007:7:0;;;;4999:33;;5021:7;;5007;;5021:10;;;;:::i;:::-;;;;;;;4999:33;;;;;;;;;;;;;;;;;;;;;;;4991:42;;;;;;5087:1;5074:7;5082:1;5074:10;;;;;;;;:::i;:::-;;;;;;;:14;5071:169;;;5192:9;;5208:10;;-1:-1:-1;;;;;5192:9:0;;;;5184:35;;5208:7;;5192:9;;5208:10;;;;;;:::i;:::-;;;;;;;5184:35;;;;;;;;;;;;;;;;;;;;;;;5176:44;;;;;;4611:1265;;;5370:49;;-1:-1:-1;;;5370:49:0;;5385:10;5370:49;;;21057:34:13;5405:4:0;21107:18:13;;;21100:43;21159:18;;;21152:34;;;5316:8:0;;-1:-1:-1;;;;;5370:14:0;;;;;20992:18:13;;5370:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5362:58;;;;;;5490:7;;-1:-1:-1;;;;;5476:21:0;;;5490:7;;5476:21;;;;:40;;;5515:1;5502:7;5510:1;5502:10;;;;;;;;:::i;:::-;;;;;;;:14;5476:40;5473:130;;;5548:1;-1:-1:-1;;;;;5548:10:0;;5559;5571:7;5579:1;5571:10;;;;;;;;:::i;:::-;;;;;;;5548:34;;;;;;;;;;;;;;;-1:-1:-1;;;;;15542:32:13;;;;15524:51;;15606:2;15591:18;;15584:34;15512:2;15497:18;;15350:274;5548:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5540:43;;;;;;5637:1;5624:7;5632:1;5624:10;;;;;;;;:::i;:::-;;;;;;;:14;5621:101;;;5681:7;;5690:10;;-1:-1:-1;;;;;5670:10:0;;;;;;5681:7;;;5690;;5681;;5690:10;;;;:::i;:::-;;;;;;;5670:31;;;;;;;;;;;;;;;-1:-1:-1;;;;;15542:32:13;;;;15524:51;;15606:2;15591:18;;15584:34;15512:2;15497:18;;15350:274;5670:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5662:40;;;;;;5756:1;5743:7;5751:1;5743:10;;;;;;;;:::i;:::-;;;;;;;:14;5740:103;;;5800:9;;5811:10;;-1:-1:-1;;;;;5789:10:0;;;;;;5800:9;;;5811:7;;5800:9;;5811:10;;;;;;:::i;:::-;;;;;;;5789:33;;;;;;;;;;;;;;;-1:-1:-1;;;;;15542:32:13;;;;15524:51;;15606:2;15591:18;;15584:34;15512:2;15497:18;;15350:274;5789:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5781:42;;;;;;5279:597;4611:1265;4508:1381;4330:1568;;;:::o;9643:578:4:-;9802:4;-1:-1:-1;;;;;9775:31:4;:23;9790:7;9775:14;:23::i;:::-;-1:-1:-1;;;;;9775:31:4;;9767:85;;;;-1:-1:-1;;;9767:85:4;;21399:2:13;9767:85:4;;;21381:21:13;21438:2;21418:18;;;21411:30;21477:34;21457:18;;;21450:62;-1:-1:-1;;;21528:18:13;;;21521:39;21577:19;;9767:85:4;21197:405:13;9767:85:4;-1:-1:-1;;;;;9871:16:4;;9863:65;;;;-1:-1:-1;;;9863:65:4;;21809:2:13;9863:65:4;;;21791:21:13;21848:2;21828:18;;;21821:30;21887:34;21867:18;;;21860:62;-1:-1:-1;;;21938:18:13;;;21931:34;21982:19;;9863:65:4;21607:400:13;9863:65:4;10045:29;10062:1;10066:7;10045:8;:29::i;:::-;-1:-1:-1;;;;;10087:15:4;;;;;;:9;:15;;;;;:20;;10106:1;;10087:15;:20;;10106:1;;10087:20;:::i;:::-;;;;-1:-1:-1;;;;;;;10118:13:4;;;;;;:9;:13;;;;;:18;;10135:1;;10118:13;:18;;10135:1;;10118:18;:::i;:::-;;;;-1:-1:-1;;10147:16:4;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;10147:21:4;-1:-1:-1;;;;;10147:21:4;;;;;;;;;10186:27;;10147:16;;10186:27;;;;;;;9643:578;;;:::o;6357:127::-;6422:4;6446:16;;;:7;:16;;;;;;-1:-1:-1;;;;;6446:16:4;:30;;;6357:127::o;10339:174::-;10414:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;10414:29:4;-1:-1:-1;;;;;10414:29:4;;;;;;;;:24;;10468:23;10414:24;10468:14;:23::i;:::-;-1:-1:-1;;;;;10459:46:4;;;;;;;;;;;10339:174;;:::o;12381:201:0:-;12457:9;;-1:-1:-1;;;;;12457:9:0;12443:10;:23;12440:135;;12483:25;12500:7;12483:16;:25::i;12440:135::-;12541:22;12555:7;12541:13;:22::i;1685:206:5:-;1754:20;1766:7;1754:11;:20::i;:::-;1797:19;;;;:10;:19;;;;;1791:33;;;;;:::i;:::-;:38;;-1:-1:-1;1787:97:5;;1853:19;;;;:10;:19;;;;;1846:26;;;:::i;5729:315:4:-;5886:28;5896:4;5902:2;5906:7;5886:9;:28::i;:::-;5933:48;5956:4;5962:2;5966:7;5975:5;5933:22;:48::i;:::-;5925:111;;;;-1:-1:-1;;;5925:111:4;;;;;;;:::i;3380:103::-;3431:13;3464:11;3457:18;;;;;:::i;2807:325::-;2871:13;2905:16;2913:7;2905;:16::i;:::-;2897:76;;;;-1:-1:-1;;;2897:76:4;;22633:2:13;2897:76:4;;;22615:21:13;22672:2;22652:18;;;22645:30;22711:34;22691:18;;;22684:62;-1:-1:-1;;;22762:18:13;;;22755:45;22817:19;;2897:76:4;22431:411:13;2897:76:4;2986:21;3010:10;:8;:10::i;:::-;2986:34;;3062:1;3044:7;3038:21;:25;:86;;;;;;;;;;;;;;;;;3090:7;3099:18;:7;:16;:18::i;:::-;3073:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3038:86;3031:93;2807:325;-1:-1:-1;;;2807:325:4:o;11455:175:0:-;11530:7;;;-1:-1:-1;;;;;11548:18:0;;;-1:-1:-1;;;;;;11548:18:0;;;;;;;11582:40;;11530:7;;;11548:18;11530:7;;11582:40;;11511:16;;11582:40;11500:130;11455:175;:::o;3324:564:12:-;3611:4;3628:19;3650:77;3669:8;3679:9;3690:6;3698:8;3708:10;3720:6;3650:18;:77::i;8335:382:4:-;-1:-1:-1;;;;;8415:16:4;;8407:61;;;;-1:-1:-1;;;8407:61:4;;23049:2:13;8407:61:4;;;23031:21:13;;;23068:18;;;23061:30;23127:34;23107:18;;;23100:62;23179:18;;8407:61:4;22847:356:13;8407:61:4;8488:16;8496:7;8488;:16::i;:::-;8487:17;8479:58;;;;-1:-1:-1;;;8479:58:4;;23410:2:13;8479:58:4;;;23392:21:13;23449:2;23429:18;;;23422:30;23488;23468:18;;;23461:58;23536:18;;8479:58:4;23208:352:13;8479:58:4;-1:-1:-1;;;;;8608:13:4;;;;;;:9;:13;;;;;:18;;8625:1;;8608:13;:18;;8625:1;;8608:18;:::i;:::-;;;;-1:-1:-1;;8637:16:4;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;8637:21:4;-1:-1:-1;;;;;8637:21:4;;;;;;;;8676:33;;8637:16;;;8676:33;;8637:16;;8676:33;8335:382;;:::o;1239:217:5:-;1339:16;1347:7;1339;:16::i;:::-;1331:75;;;;-1:-1:-1;;;1331:75:5;;23767:2:13;1331:75:5;;;23749:21:13;23806:2;23786:18;;;23779:30;23845:34;23825:18;;;23818:62;-1:-1:-1;;;23896:18:13;;;23889:44;23950:19;;1331:75:5;23565:410:13;1331:75:5;1417:19;;;;:10;:19;;;;;;;;:31;;;;;;;;:::i;288:723:10:-;344:13;565:10;561:53;;-1:-1:-1;;592:10:10;;;;;;;;;;;;-1:-1:-1;;;592:10:10;;;;;288:723::o;561:53::-;639:5;624:12;680:78;687:9;;680:78;;713:8;;;;:::i;:::-;;-1:-1:-1;736:10:10;;-1:-1:-1;744:2:10;736:10;;:::i;:::-;;;680:78;;;768:19;800:6;790:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;790:17:10;;768:39;;818:154;825:10;;818:154;;852:11;862:1;852:11;;:::i;:::-;;-1:-1:-1;921:10:10;929:2;921:5;:10;:::i;:::-;908:24;;:2;:24;:::i;:::-;895:39;;878:6;885;878:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;878:56:10;;;;;;;;-1:-1:-1;949:11:10;958:2;949:11;;:::i;:::-;;;818:154;;759:327:12;1008:69;;-1:-1:-1;;24693:2:13;24689:15;;;24685:24;;1008:69:12;;;24673:37:13;24726:12;;;24719:28;;;24781:15;;;24777:24;;24763:12;;;24756:46;24836:15;;;24832:24;24818:12;;;24811:46;24873:12;;;24866:28;;;24910:13;;;24903:29;;;971:7:12;;24948:13:13;;1008:69:12;;;;;;;;;;;;;998:80;;;;;;991:87;;759:327;;;;;;;;:::o;3896:283::-;4025:7;4051:9;4062;4073:7;4084:26;4099:10;4084:14;:26::i;:::-;4130:41;;;;;;;;;;;;25584:25:13;;;25657:4;25645:17;;25625:18;;;25618:45;;;;25679:18;;;25672:34;;;25722:18;;;25715:34;;;4050:60:12;;-1:-1:-1;4050:60:12;;-1:-1:-1;4050:60:12;-1:-1:-1;4130:41:12;;25556:19:13;;4130:41:12;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4130:41:12;;-1:-1:-1;;4130:41:12;;;3896:283;-1:-1:-1;;;;;;;3896:283:12:o;2964:1354:0:-;3141:16;;;3155:1;3141:16;;;;;;;;;3041:17;;3098:6;;3081:14;;3141:16;;;3041:17;;3141:16;;;;;-1:-1:-1;3141:16:0;3115:42;;3182:5;3173:6;:14;3170:68;;;3212:14;:6;3221:5;3212:14;:::i;:::-;3203:23;;3170:68;3267:7;;-1:-1:-1;;;;;3253:21:0;;;3267:7;;3253:21;3250:1061;;;3341:17;;3333:25;;:5;:25;:::i;:::-;3315:14;3324:5;3315:6;:14;:::i;:::-;:44;;;;:::i;:::-;3303:6;3310:1;3303:9;;;;;;;;:::i;:::-;;;;;;:56;;;;;3415:5;3406:6;:14;3403:220;;;3464:5;3452:6;3459:1;3452:9;;;;;;;;:::i;:::-;;;;;;;:17;;;;:::i;:::-;3440:6;3447:1;3440:9;;;;;;;;:::i;:::-;;;;;;:29;;;;;3509:6;3516:1;3509:9;;;;;;;;:::i;:::-;;;;;;;3500:6;:18;;;;:::i;:::-;3488:6;3495:1;3488:9;;;;;;;;:::i;:::-;;;;;;:30;;;;;3403:220;;;3580:6;3587:1;3580:9;;;;;;;;:::i;:::-;;;;;;;3571:6;:18;;;;:::i;:::-;3559:6;3566:1;3559:9;;;;;;;;:::i;:::-;;;;;;:30;;;;;3403:220;3646:6;-1:-1:-1;3639:13:0;;-1:-1:-1;3639:13:0;3250:1061;3703:17;3738:12;;3723;;:27;;;;:::i;:::-;3703:47;-1:-1:-1;3779:17:0;3703:47;3800:14;3809:5;3800:6;:14;:::i;:::-;:26;;;;:::i;:::-;3891:12;;3779:47;;-1:-1:-1;3867:21:0;3879:9;3779:47;3867:21;:::i;:::-;:36;;;;:::i;:::-;3855:6;3862:1;3855:9;;;;;;;;:::i;:::-;;;;;;:48;;;;;3958:6;3965:1;3958:9;;;;;;;;:::i;:::-;;;;;;;3946;:21;;;;:::i;:::-;3934:6;3941:1;3934:9;;;;;;;;:::i;:::-;;;;;;;;;;:33;4026:18;4035:9;4026:6;:18;:::i;:::-;4014:6;4021:1;4014:9;;;;;;;;:::i;:::-;;;;;;:30;;;;;4089:5;4080:6;:14;4077:178;;;4138:5;4126:6;4133:1;4126:9;;;;;;;;:::i;:::-;;;;;;;:17;;;;:::i;:::-;4114:6;4121:1;4114:9;;;;;;;;:::i;:::-;;;;;;:29;;;;;4186:5;4174:6;4181:1;4174:9;;;;;;;;:::i;:::-;;;;;;;:17;;;;:::i;:::-;4162:6;4169:1;4162:9;;;;;;;;:::i;:::-;;;;;;:29;;;;;4234:5;4222:6;4229:1;4222:9;;;;;;;;:::i;:::-;;;;;;;:17;;;;:::i;:::-;4210:6;4217:1;4210:9;;;;;;;;:::i;:::-;;;;;;:29;;;;;4077:178;4278:6;4271:13;;;;;;;;12042:169;12117:41;682:10:2;12150:7:0;12117:18;:41::i;:::-;12109:94;;;;-1:-1:-1;;;12109:94:0;;26135:2:13;12109:94:0;;;26117:21:13;26174:2;26154:18;;;26147:30;26213:34;26193:18;;;26186:62;-1:-1:-1;;;26264:18:13;;;26257:38;26312:19;;12109:94:0;25933:404:13;12219:154:0;12315:7;;12291:21;;;;:12;:21;;;;;;12325:15;;12291:31;;;:::i;:::-;:49;12283:82;;;;-1:-1:-1;;;12283:82:0;;26544:2:13;12283:82:0;;;26526:21:13;26583:2;26563:18;;;26556:30;-1:-1:-1;;;26602:18:13;;;26595:50;26662:18;;12283:82:0;26342:344:13;8946:360:4;9006:13;9022:23;9037:7;9022:14;:23::i;:::-;9006:39;;9147:29;9164:1;9168:7;9147:8;:29::i;:::-;-1:-1:-1;;;;;9189:16:4;;;;;;:9;:16;;;;;:21;;9209:1;;9189:16;:21;;9209:1;;9189:21;:::i;:::-;;;;-1:-1:-1;;9228:16:4;;;;:7;:16;;;;;;9221:23;;-1:-1:-1;;;;;;9221:23:4;;;9262:36;9236:7;;9228:16;-1:-1:-1;;;;;9262:36:4;;;;;9228:16;;9262:36;8995:311;8946:360;:::o;11078:799::-;11233:4;-1:-1:-1;;;;;11254:13:4;;1066:20:1;1114:8;11250:620:4;;11290:72;;-1:-1:-1;;;11290:72:4;;-1:-1:-1;;;;;11290:36:4;;;;;:72;;682:10:2;;11341:4:4;;11347:7;;11356:5;;11290:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11290:72:4;;;;;;;;-1:-1:-1;;11290:72:4;;;;;;;;;;;;:::i;:::-;;;11286:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11532:13:4;;11528:272;;11575:60;;-1:-1:-1;;;11575:60:4;;;;;;;:::i;11528:272::-;11750:6;11744:13;11735:6;11731:2;11727:15;11720:38;11286:529;-1:-1:-1;;;;;;11413:51:4;-1:-1:-1;;;11413:51:4;;-1:-1:-1;11406:58:4;;11250:620;-1:-1:-1;11854:4:4;11078:799;;;;;;:::o;1098:371:12:-;1335:7;1389:8;1399:9;1410:6;1429:9;1418:21;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1418:21:12;;;;;;;;;;1372:88;;;;;1441:10;;1453:6;;1418:21;1372:88;;:::i;4187:893::-;4293:9;4317;4341:7;4384:3;:10;4398:2;4384:16;4376:53;;;;-1:-1:-1;;;4376:53:12;;29515:2:13;4376:53:12;;;29497:21:13;29554:2;29534:18;;;29527:30;29593:26;29573:18;;;29566:54;29637:18;;4376:53:12;29313:348:13;4376:53:12;-1:-1:-1;;;4838:2:12;4829:12;;4823:19;4908:2;4899:12;;4893:19;5015:2;5006:12;;;5000:19;4823;;4997:1;4992:28;;;;;4187:893::o;6651:348:4:-;6744:4;6769:16;6777:7;6769;:16::i;:::-;6761:73;;;;-1:-1:-1;;;6761:73:4;;29868:2:13;6761:73:4;;;29850:21:13;29907:2;29887:18;;;29880:30;29946:34;29926:18;;;29919:62;-1:-1:-1;;;29997:18:13;;;29990:42;30049:19;;6761:73:4;29666:408:13;6761:73:4;6845:13;6861:23;6876:7;6861:14;:23::i;:::-;6845:39;;6914:5;-1:-1:-1;;;;;6903:16:4;:7;-1:-1:-1;;;;;6903:16:4;;:51;;;;6947:7;-1:-1:-1;;;;;6923:31:4;:20;6935:7;6923:11;:20::i;:::-;-1:-1:-1;;;;;6923:31:4;;6903:51;:87;;;;6958:32;6975:5;6982:7;6958:16;:32::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:131:13;-1:-1:-1;;;;;;88:32:13;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;774:173::-;842:20;;-1:-1:-1;;;;;891:31:13;;881:42;;871:70;;937:1;934;927:12;871:70;774:173;;;:::o;952:127::-;1013:10;1008:3;1004:20;1001:1;994:31;1044:4;1041:1;1034:15;1068:4;1065:1;1058:15;1084:275;1155:2;1149:9;1220:2;1201:13;;-1:-1:-1;;1197:27:13;1185:40;;1255:18;1240:34;;1276:22;;;1237:62;1234:88;;;1302:18;;:::i;:::-;1338:2;1331:22;1084:275;;-1:-1:-1;1084:275:13:o;1364:530::-;1406:5;1459:3;1452:4;1444:6;1440:17;1436:27;1426:55;;1477:1;1474;1467:12;1426:55;1513:6;1500:20;1539:18;1535:2;1532:26;1529:52;;;1561:18;;:::i;:::-;1605:55;1648:2;1629:13;;-1:-1:-1;;1625:27:13;1654:4;1621:38;1605:55;:::i;:::-;1685:2;1676:7;1669:19;1731:3;1724:4;1719:2;1711:6;1707:15;1703:26;1700:35;1697:55;;;1748:1;1745;1738:12;1697:55;1813:2;1806:4;1798:6;1794:17;1787:4;1778:7;1774:18;1761:55;1861:1;1836:16;;;1854:4;1832:27;1825:38;;;;1840:7;1364:530;-1:-1:-1;;;1364:530:13:o;1899:750::-;2021:6;2029;2037;2045;2053;2061;2069;2122:3;2110:9;2101:7;2097:23;2093:33;2090:53;;;2139:1;2136;2129:12;2090:53;2162:29;2181:9;2162:29;:::i;:::-;2152:39;;2238:2;2227:9;2223:18;2210:32;2200:42;;2261:38;2295:2;2284:9;2280:18;2261:38;:::i;:::-;2251:48;;2318:38;2352:2;2341:9;2337:18;2318:38;:::i;:::-;2308:48;;2403:3;2392:9;2388:19;2375:33;2365:43;;2455:3;2444:9;2440:19;2427:33;2417:43;;2511:3;2500:9;2496:19;2483:33;2539:18;2531:6;2528:30;2525:50;;;2571:1;2568;2561:12;2525:50;2594:49;2635:7;2626:6;2615:9;2611:22;2594:49;:::i;:::-;2584:59;;;1899:750;;;;;;;;;;:::o;2654:258::-;2726:1;2736:113;2750:6;2747:1;2744:13;2736:113;;;2826:11;;;2820:18;2807:11;;;2800:39;2772:2;2765:10;2736:113;;;2867:6;2864:1;2861:13;2858:48;;;-1:-1:-1;;2902:1:13;2884:16;;2877:27;2654:258::o;2917:::-;2959:3;2997:5;2991:12;3024:6;3019:3;3012:19;3040:63;3096:6;3089:4;3084:3;3080:14;3073:4;3066:5;3062:16;3040:63;:::i;:::-;3157:2;3136:15;-1:-1:-1;;3132:29:13;3123:39;;;;3164:4;3119:50;;2917:258;-1:-1:-1;;2917:258:13:o;3180:220::-;3329:2;3318:9;3311:21;3292:4;3349:45;3390:2;3379:9;3375:18;3367:6;3349:45;:::i;3405:180::-;3464:6;3517:2;3505:9;3496:7;3492:23;3488:32;3485:52;;;3533:1;3530;3523:12;3485:52;-1:-1:-1;3556:23:13;;3405:180;-1:-1:-1;3405:180:13:o;3798:254::-;3866:6;3874;3927:2;3915:9;3906:7;3902:23;3898:32;3895:52;;;3943:1;3940;3933:12;3895:52;3966:29;3985:9;3966:29;:::i;:::-;3956:39;4042:2;4027:18;;;;4014:32;;-1:-1:-1;;;3798:254:13:o;4057:328::-;4134:6;4142;4150;4203:2;4191:9;4182:7;4178:23;4174:32;4171:52;;;4219:1;4216;4209:12;4171:52;4242:29;4261:9;4242:29;:::i;:::-;4232:39;;4290:38;4324:2;4313:9;4309:18;4290:38;:::i;:::-;4280:48;;4375:2;4364:9;4360:18;4347:32;4337:42;;4057:328;;;;;:::o;4390:321::-;4459:6;4512:2;4500:9;4491:7;4487:23;4483:32;4480:52;;;4528:1;4525;4518:12;4480:52;4568:9;4555:23;4601:18;4593:6;4590:30;4587:50;;;4633:1;4630;4623:12;4587:50;4656:49;4697:7;4688:6;4677:9;4673:22;4656:49;:::i;4716:186::-;4775:6;4828:2;4816:9;4807:7;4803:23;4799:32;4796:52;;;4844:1;4841;4834:12;4796:52;4867:29;4886:9;4867:29;:::i;4907:183::-;4967:4;5000:18;4992:6;4989:30;4986:56;;;5022:18;;:::i;:::-;-1:-1:-1;5067:1:13;5063:14;5079:4;5059:25;;4907:183::o;5095:897::-;5179:6;5210:2;5253;5241:9;5232:7;5228:23;5224:32;5221:52;;;5269:1;5266;5259:12;5221:52;5309:9;5296:23;5342:18;5334:6;5331:30;5328:50;;;5374:1;5371;5364:12;5328:50;5397:22;;5450:4;5442:13;;5438:27;-1:-1:-1;5428:55:13;;5479:1;5476;5469:12;5428:55;5515:2;5502:16;5538:60;5554:43;5594:2;5554:43;:::i;:::-;5538:60;:::i;:::-;5632:15;;;5714:1;5710:10;;;;5702:19;;5698:28;;;5663:12;;;;5738:19;;;5735:39;;;5770:1;5767;5760:12;5735:39;5794:11;;;;5814:148;5830:6;5825:3;5822:15;5814:148;;;5896:23;5915:3;5896:23;:::i;:::-;5884:36;;5847:12;;;;5940;;;;5814:148;;;5981:5;5095:897;-1:-1:-1;;;;;;;5095:897:13:o;6186:435::-;6239:3;6277:5;6271:12;6304:6;6299:3;6292:19;6330:4;6359:2;6354:3;6350:12;6343:19;;6396:2;6389:5;6385:14;6417:1;6427:169;6441:6;6438:1;6435:13;6427:169;;;6502:13;;6490:26;;6536:12;;;;6571:15;;;;6463:1;6456:9;6427:169;;;-1:-1:-1;6612:3:13;;6186:435;-1:-1:-1;;;;;6186:435:13:o;6626:261::-;6805:2;6794:9;6787:21;6768:4;6825:56;6877:2;6866:9;6862:18;6854:6;6825:56;:::i;6892:118::-;6978:5;6971:13;6964:21;6957:5;6954:32;6944:60;;7000:1;6997;6990:12;7015:241;7071:6;7124:2;7112:9;7103:7;7099:23;7095:32;7092:52;;;7140:1;7137;7130:12;7092:52;7179:9;7166:23;7198:28;7220:5;7198:28;:::i;7261:315::-;7326:6;7334;7387:2;7375:9;7366:7;7362:23;7358:32;7355:52;;;7403:1;7400;7393:12;7355:52;7426:29;7445:9;7426:29;:::i;:::-;7416:39;;7505:2;7494:9;7490:18;7477:32;7518:28;7540:5;7518:28;:::i;:::-;7565:5;7555:15;;;7261:315;;;;;:::o;7581:537::-;7676:6;7684;7692;7700;7753:3;7741:9;7732:7;7728:23;7724:33;7721:53;;;7770:1;7767;7760:12;7721:53;7793:29;7812:9;7793:29;:::i;:::-;7783:39;;7841:38;7875:2;7864:9;7860:18;7841:38;:::i;:::-;7831:48;;7926:2;7915:9;7911:18;7898:32;7888:42;;7981:2;7970:9;7966:18;7953:32;8008:18;8000:6;7997:30;7994:50;;;8040:1;8037;8030:12;7994:50;8063:49;8104:7;8095:6;8084:9;8080:22;8063:49;:::i;:::-;8053:59;;;7581:537;;;;;;;:::o;8123:260::-;8191:6;8199;8252:2;8240:9;8231:7;8227:23;8223:32;8220:52;;;8268:1;8265;8258:12;8220:52;8291:29;8310:9;8291:29;:::i;:::-;8281:39;;8339:38;8373:2;8362:9;8358:18;8339:38;:::i;:::-;8329:48;;8123:260;;;;;:::o;8388:662::-;8442:5;8495:3;8488:4;8480:6;8476:17;8472:27;8462:55;;8513:1;8510;8503:12;8462:55;8549:6;8536:20;8575:4;8599:60;8615:43;8655:2;8615:43;:::i;8599:60::-;8693:15;;;8779:1;8775:10;;;;8763:23;;8759:32;;;8724:12;;;;8803:15;;;8800:35;;;8831:1;8828;8821:12;8800:35;8867:2;8859:6;8855:15;8879:142;8895:6;8890:3;8887:15;8879:142;;;8961:17;;8949:30;;8999:12;;;;8912;;8879:142;;;-1:-1:-1;9039:5:13;8388:662;-1:-1:-1;;;;;;8388:662:13:o;9055:1716::-;9237:6;9245;9253;9261;9269;9277;9285;9338:3;9326:9;9317:7;9313:23;9309:33;9306:53;;;9355:1;9352;9345:12;9306:53;9378:29;9397:9;9378:29;:::i;:::-;9368:39;;9458:2;9447:9;9443:18;9430:32;9481:18;9522:2;9514:6;9511:14;9508:34;;;9538:1;9535;9528:12;9508:34;9576:6;9565:9;9561:22;9551:32;;9621:7;9614:4;9610:2;9606:13;9602:27;9592:55;;9643:1;9640;9633:12;9592:55;9679:2;9666:16;9702:60;9718:43;9758:2;9718:43;:::i;9702:60::-;9784:3;9808:2;9803:3;9796:15;9836:2;9831:3;9827:12;9820:19;;9887:2;9881;9878:1;9874:10;9870:2;9866:19;9862:28;9848:42;;9913:7;9905:6;9902:19;9899:39;;;9934:1;9931;9924:12;9899:39;9966:2;9962;9958:11;9978:245;9994:6;9989:3;9986:15;9978:245;;;10073:2;10067:3;10054:17;10051:25;10048:45;;;10089:1;10086;10079:12;10048:45;10118:62;10172:7;10167:2;10160:3;10147:17;10143:2;10139:26;10135:35;10118:62;:::i;:::-;10106:75;;10210:2;10201:12;;;;10011;9978:245;;;-1:-1:-1;10242:5:13;-1:-1:-1;;;10300:2:13;10285:18;;10272:32;;-1:-1:-1;10316:16:13;;;10313:36;;;10345:1;10342;10335:12;10313:36;10368:63;10423:7;10412:8;10401:9;10397:24;10368:63;:::i;:::-;10358:73;;10450:38;10484:2;10473:9;10469:18;10450:38;:::i;:::-;10440:48;;10535:3;10524:9;10520:19;10507:33;10497:43;;10587:3;10576:9;10572:19;10559:33;10549:43;;10645:3;10634:9;10630:19;10617:33;10601:49;;10675:2;10665:8;10662:16;10659:36;;;10691:1;10688;10681:12;10659:36;;10714:51;10757:7;10746:8;10735:9;10731:24;10714:51;:::i;11116:380::-;11195:1;11191:12;;;;11238;;;11259:61;;11313:4;11305:6;11301:17;11291:27;;11259:61;11366:2;11358:6;11355:14;11335:18;11332:38;11329:161;;;11412:10;11407:3;11403:20;11400:1;11393:31;11447:4;11444:1;11437:15;11475:4;11472:1;11465:15;11329:161;;11116:380;;;:::o;12741:347::-;12943:2;12925:21;;;12982:2;12962:18;;;12955:30;13021:25;13016:2;13001:18;;12994:53;13079:2;13064:18;;12741:347::o;13434:343::-;13636:2;13618:21;;;13675:2;13655:18;;;13648:30;-1:-1:-1;;;13709:2:13;13694:18;;13687:49;13768:2;13753:18;;13434:343::o;13782:127::-;13843:10;13838:3;13834:20;13831:1;13824:31;13874:4;13871:1;13864:15;13898:4;13895:1;13888:15;13914:127;13975:10;13970:3;13966:20;13963:1;13956:31;14006:4;14003:1;13996:15;14030:4;14027:1;14020:15;14046:135;14085:3;-1:-1:-1;;14106:17:13;;14103:43;;;14126:18;;:::i;:::-;-1:-1:-1;14173:1:13;14162:13;;14046:135::o;15629:245::-;15696:6;15749:2;15737:9;15728:7;15724:23;15720:32;15717:52;;;15765:1;15762;15755:12;15717:52;15797:9;15791:16;15816:28;15838:5;15816:28;:::i;16651:470::-;16830:3;16868:6;16862:13;16884:53;16930:6;16925:3;16918:4;16910:6;16906:17;16884:53;:::i;:::-;17000:13;;16959:16;;;;17022:57;17000:13;16959:16;17056:4;17044:17;;17022:57;:::i;:::-;17095:20;;16651:470;-1:-1:-1;;;;16651:470:13:o;17533:125::-;17573:4;17601:1;17598;17595:8;17592:34;;;17606:18;;:::i;:::-;-1:-1:-1;17643:9:13;;17533:125::o;17663:128::-;17703:3;17734:1;17730:6;17727:1;17724:13;17721:39;;;17740:18;;:::i;:::-;-1:-1:-1;17776:9:13;;17663:128::o;19861:604::-;-1:-1:-1;;;;;20190:15:13;;;20172:34;;20237:2;20222:18;;20215:34;;;20285:15;;20280:2;20265:18;;20258:43;20332:2;20317:18;;20310:34;;;20152:3;20375;20360:19;;20353:32;;;20115:4;;20402:57;;20439:19;;20431:6;20402:57;:::i;22012:414::-;22214:2;22196:21;;;22253:2;22233:18;;;22226:30;22292:34;22287:2;22272:18;;22265:62;-1:-1:-1;;;22358:2:13;22343:18;;22336:48;22416:3;22401:19;;22012:414::o;23980:127::-;24041:10;24036:3;24032:20;24029:1;24022:31;24072:4;24069:1;24062:15;24096:4;24093:1;24086:15;24112:120;24152:1;24178;24168:35;;24183:18;;:::i;:::-;-1:-1:-1;24217:9:13;;24112:120::o;24237:112::-;24269:1;24295;24285:35;;24300:18;;:::i;:::-;-1:-1:-1;24334:9:13;;24237:112::o;25760:168::-;25800:7;25866:1;25862;25858:6;25854:14;25851:1;25848:21;25843:1;25836:9;25829:17;25825:45;25822:71;;;25873:18;;:::i;:::-;-1:-1:-1;25913:9:13;;25760:168::o;26691:489::-;-1:-1:-1;;;;;26960:15:13;;;26942:34;;27012:15;;27007:2;26992:18;;26985:43;27059:2;27044:18;;27037:34;;;27107:3;27102:2;27087:18;;27080:31;;;26885:4;;27128:46;;27154:19;;27146:6;27128:46;:::i;:::-;27120:54;26691:489;-1:-1:-1;;;;;;26691:489:13:o;27185:249::-;27254:6;27307:2;27295:9;27286:7;27282:23;27278:32;27275:52;;;27323:1;27320;27313:12;27275:52;27355:9;27349:16;27374:30;27398:5;27374:30;:::i;27439:803::-;27601:4;27630:2;27670;27659:9;27655:18;27700:2;27689:9;27682:21;27723:6;27758;27752:13;27789:6;27781;27774:22;27827:2;27816:9;27812:18;27805:25;;27889:2;27879:6;27876:1;27872:14;27861:9;27857:30;27853:39;27839:53;;27927:2;27919:6;27915:15;27948:1;27958:255;27972:6;27969:1;27966:13;27958:255;;;28065:2;28061:7;28049:9;28041:6;28037:22;28033:36;28028:3;28021:49;28093:40;28126:6;28117;28111:13;28093:40;:::i;:::-;28083:50;-1:-1:-1;28191:12:13;;;;28156:15;;;;27994:1;27987:9;27958:255;;;-1:-1:-1;28230:6:13;;27439:803;-1:-1:-1;;;;;;;27439:803:13:o;28247:1061::-;28566:3;28598:26;28594:31;28667:2;28658:6;28654:2;28650:15;28646:24;28641:3;28634:37;28722:2;28713:6;28709:2;28705:15;28701:24;28696:2;28691:3;28687:12;28680:46;;28756:6;28751:2;28746:3;28742:12;28735:28;28792:6;28786:13;28818:4;28831:60;28884:6;28879:2;28874:3;28870:12;28865:2;28857:6;28853:15;28831:60;:::i;:::-;28963:13;;28917:16;;;28935:2;28913:25;;29022:15;;;29055:1;29065:177;29079:8;29076:1;29073:15;29065:177;;;29144:13;;29130:28;;29180:14;;;;29217:15;;;;29103:1;29096:9;29065:177;;;-1:-1:-1;;;29251:21:13;;;29288:14;;;;;-1:-1:-1;;;;;;;28247:1061:13:o

Swarm Source

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