ETH Price: $3,871.81 (+0.07%)

Token

ntent.art (NTENT)
 

Overview

Max Total Supply

764 NTENT

Holders

273

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
flemwad222.eth
Balance
1 NTENT
0x8ba08f0e54fbd2f5fa51424407ff13fd172c3f5a
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:
NtentArt

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-12-22
*/

// SPDX-License-Identifier: MIT

// File contracts/libs/IERC165.sol

// File: openzeppelin-solidity/contracts/introspection/IERC165.sol
pragma solidity ^0.8.9;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * [EIP](https://eips.ethereum.org/EIPS/eip-165).
 *
 * 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
     * [EIP section](https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified)
     * 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 contracts/libs/ERC165.sol

// File: openzeppelin-solidity/contracts/introspection/ERC165.sol

pragma solidity ^0.8.9;


/**
 * @dev Implementation of the `IERC165` interface.
 *
 * Contracts may inherit from this and call `_registerInterface` to declare
 * their support of an interface.
 */
contract ERC165 is IERC165 {
    /*
     * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7
     */
    bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;

    /**
     * @dev Mapping of interface ids to whether or not it's supported.
     */
    mapping(bytes4 => bool) private _supportedInterfaces;

    constructor () {
        // Derived contracts need only register support for their own interfaces,
        // we register support for ERC165 itself here
        _registerInterface(_INTERFACE_ID_ERC165);
    }

    /**
     * @dev See `IERC165.supportsInterface`.
     *
     * Time complexity O(1), guaranteed to always use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) override external view returns (bool) {
        return _supportedInterfaces[interfaceId];
    }

    /**
     * @dev Registers the contract as an implementer of the interface defined by
     * `interfaceId`. Support of the actual ERC165 interface is automatic and
     * registering its interface id is not required.
     *
     * See `IERC165.supportsInterface`.
     *
     * Requirements:
     *
     * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).
     */
    function _registerInterface(bytes4 interfaceId) internal {
        require(interfaceId != 0xffffffff, "ERC165: invalid interface id");
        _supportedInterfaces[interfaceId] = true;
    }
}


// File contracts/libs/IERC721.sol

// File: openzeppelin-solidity/contracts/token/ERC721/IERC721.sol

pragma solidity ^0.8.9;


/**
 * @dev Required interface of an ERC721 compliant contract.
 */
abstract contract IERC721 is IERC165 {
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

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

    /**
     * @dev Returns the owner of the NFT specified by `tokenId`.
     */
    function ownerOf(uint256 tokenId) public virtual view returns (address owner);

    /**
     * @dev Transfers a specific NFT (`tokenId`) from one account (`from`) to
     * another (`to`).
     *
     *
     *
     * Requirements:
     * - `from`, `to` cannot be zero.
     * - `tokenId` must be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this
     * NFT by either `approve` or `setApproveForAll`.
     */
    function safeTransferFrom(address from, address to, uint256 tokenId) public virtual;
    /**
     * @dev Transfers a specific NFT (`tokenId`) from one account (`from`) to
     * another (`to`).
     *
     * Requirements:
     * - If the caller is not `from`, it must be approved to move this NFT by
     * either `approve` or `setApproveForAll`.
     */
    function transferFrom(address from, address to, uint256 tokenId) public virtual;
    function approve(address to, uint256 tokenId) public virtual;
    function getApproved(uint256 tokenId) public virtual view returns (address operator);

    function setApprovalForAll(address operator, bool _approved) public virtual;
    function isApprovedForAll(address owner, address operator) public virtual view returns (bool);


    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public virtual;
}


// File contracts/libs/Address.sol

// File: openzeppelin-solidity/contracts/utils/Address.sol

pragma solidity ^0.8.9;

/**
 * @dev Collection of functions related to the address type,
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * This test is non-exhaustive, and there may be false-negatives: during the
     * execution of a contract's constructor, its address will be reported as
     * not containing a contract.
     *
     * > It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies in extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }
}


// File contracts/libs/Counters.sol

// File: openzeppelin-solidity/contracts/drafts/Counters.sol

pragma solidity ^0.8.9;



/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented or decremented by one. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 * Since it is not possible to overflow a 256 bit integer with increments of one, `increment` can skip the SafeMath
 * overflow check, thereby saving gas. This does assume however correct usage, in that the underlying `_value` is never
 * directly accessed.
 */
library Counters {

    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        counter._value += 1;
    }

    function decrement(Counter storage counter) internal {
        counter._value = counter._value - 1;
    }
}


// File contracts/libs/IERC721Receiver.sol

// File: openzeppelin-solidity/contracts/token/ERC721/IERC721Receiver.sol

pragma solidity ^0.8.9;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
abstract contract IERC721Receiver {
    function onERC721Received(address operator, address from, uint256 tokenId, bytes memory data)
    public virtual returns (bytes4);
}


// File contracts/libs/ERC721.sol

// File: openzeppelin-solidity/contracts/token/ERC721/ERC721.sol

pragma solidity ^0.8.9;



/**
 * @title ERC721 Non-Fungible Token Standard basic implementation
 * @dev see https://eips.ethereum.org/EIPS/eip-721
 */
contract ERC721 is ERC165, IERC721 {
    using Address for address;
    using Counters for Counters.Counter;

    // Equals to `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`
    // which can be also obtained as `IERC721Receiver(0).onERC721Received.selector`
    bytes4 private constant _ERC721_RECEIVED = 0x150b7a02;

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

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

    // Mapping from owner to number of owned token
    mapping (address => Counters.Counter) private _ownedTokensCount;

    // Mapping from owner to operator approvals
    mapping (address => mapping (address => bool)) private _operatorApprovals;
    
    bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;

    constructor () {
        // register the supported interfaces to conform to ERC721 via ERC165
        _registerInterface(_INTERFACE_ID_ERC721);
    }


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

        return _ownedTokensCount[owner].current();
    }

    function ownerOf(uint256 tokenId) public override view returns (address) {
        address owner = _tokenOwner[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");

        return owner;
    }

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

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

        _tokenApprovals[tokenId] = to;
        emit Approval(owner, to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

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

        _transferFrom(from, to, tokenId);
    }

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

    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public override {
        transferFrom(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

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

    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

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

        _tokenOwner[tokenId] = to;
        _ownedTokensCount[to].increment();

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

    function _burn(address owner, uint256 tokenId) internal virtual {
        require(ownerOf(tokenId) == owner, "ERC721: burn of token that is not own");

        _clearApproval(tokenId);

        _ownedTokensCount[owner].decrement();
        _tokenOwner[tokenId] = address(0);

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

    function _burn(uint256 tokenId) internal {
        _burn(ownerOf(tokenId), tokenId);
    }

    function _transferFrom(address from, address to, uint256 tokenId) internal virtual {
        require(ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _clearApproval(tokenId);

        _ownedTokensCount[from].decrement();
        _ownedTokensCount[to].increment();

        _tokenOwner[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

    function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data)
    internal returns (bool)
    {
        if (!to.isContract()) {
            return true;
        }

        bytes4 retval = IERC721Receiver(to).onERC721Received(msg.sender, from, tokenId, _data);
        return (retval == _ERC721_RECEIVED);
    }

    function _clearApproval(uint256 tokenId) private {
        if (_tokenApprovals[tokenId] != address(0)) {
            _tokenApprovals[tokenId] = address(0);
        }
    }
}

// File contracts/libs/IERC721Enumerable.sol
// File: openzeppelin-solidity/contracts/token/ERC721/IERC721Enumerable.sol

pragma solidity ^0.8.9;

abstract contract IERC721Enumerable is IERC721 {
    function totalSupply() public virtual view returns (uint256);
    function tokenOfOwnerByIndex(address owner, uint256 index) public virtual view returns (uint256 tokenId);

    function tokenByIndex(uint256 index) public virtual view returns (uint256);
}

// File contracts/libs/ERC721Enumerable.sol
// File: openzeppelin-solidity/contracts/token/ERC721/ERC721Enumerable.sol

pragma solidity ^0.8.9;

contract ERC721Enumerable is ERC165, ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => uint256[]) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

    bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;


    constructor () {
        // register the supported interface to conform to ERC721Enumerable via ERC165
        _registerInterface(_INTERFACE_ID_ERC721_ENUMERABLE);
    }

    function tokenOfOwnerByIndex(address owner, uint256 index) public override view returns (uint256) {
        require(index < balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }


    function totalSupply() public override view returns (uint256) {
        return _allTokens.length;
    }


    function tokenByIndex(uint256 index) public override view returns (uint256) {
        require(index < totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }

    function _transferFrom(address from, address to, uint256 tokenId) override internal {
        super._transferFrom(from, to, tokenId);

        _removeTokenFromOwnerEnumeration(from, tokenId);

        _addTokenToOwnerEnumeration(to, tokenId);
    }

    function _mint(address to, uint256 tokenId) override internal {
        super._mint(to, tokenId);

        _addTokenToOwnerEnumeration(to, tokenId);

        _addTokenToAllTokensEnumeration(tokenId);
    }

    function _burn(address owner, uint256 tokenId) override internal {
        super._burn(owner, tokenId);

        _removeTokenFromOwnerEnumeration(owner, tokenId);
        // Since tokenId will be deleted, we can clear its slot in _ownedTokensIndex to trigger a gas refund
        _ownedTokensIndex[tokenId] = 0;

        _removeTokenFromAllTokensEnumeration(tokenId);
    }

    function _tokensOfOwner(address owner) internal view returns (uint256[] storage) {
        return _ownedTokens[owner];
    }


    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        _ownedTokensIndex[tokenId] = _ownedTokens[to].length;
        _ownedTokens[to].push(tokenId);
    }
 
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _ownedTokens[from].length - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        _ownedTokens[from].pop();

        // Note that _ownedTokensIndex[tokenId] hasn't been cleared: it still points to the old slot (now occupied by
        // lastTokenId, or just over the end of the array if the token was the last one).
    }


    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        _allTokens.pop();
        _allTokensIndex[tokenId] = 0;
    }
}


// File contracts/libs/CustomERC721Metadata.sol

// File: contracts/CustomERC721Metadata.sol

pragma solidity ^0.8.9;

/**
 * ERC721 base contract without the concept of tokenUri as this is managed by the parent
 */
contract CustomERC721Metadata is ERC721Enumerable {

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;

    /**
     * @dev Constructor function
     */
    constructor (string memory nm, string memory sym) {
        _name = nm;
        _symbol = sym;

        // register the supported interfaces to conform to ERC721 via ERC165
        _registerInterface(_INTERFACE_ID_ERC721_METADATA);
    }

    /**
     * @dev Gets the token name
     * @return string representing the token name
     */
    function name() external view returns (string memory) {
        return _name;
    }

    /**
     * @dev Gets the token symbol
     * @return string representing the token symbol
     */
    function symbol() external view returns (string memory) {
        return _symbol;
    }

}

pragma solidity ^0.8.9;

interface NtentTokenUri {
   function tokenUri(uint256 _tokenId) external view returns(string memory);
}

contract NtentArt is CustomERC721Metadata {

    event Mint(
        address indexed _to,
        uint256 indexed _tokenId,
        uint256 indexed _projectId
    );

    struct Project {
        string name;
        string artist;
        string description;
        string website;
        string license;
        address purchaseContract;
        address dataContract;
        address tokenUriContract;
        bool acceptsMintPass;
        uint256 mintPassProjectId;
        bool dynamic;
        string projectBaseURI;
        string projectBaseIpfsURI;
        uint256 invocations;
        uint256 maxInvocations;
        string scriptJSON;
        mapping(uint256 => string) scripts;
        uint scriptCount;
        uint256 tokensBurned; 
        string ipfsHash;
        bool useHashString;
        bool useIpfs;
        bool active;
        bool locked;
        bool paused;

    }

    uint256 constant ONE_MILLION = 1_000_000;
    mapping(uint256 => Project) projects;

    //All financial functions are stripped from struct for visibility
    mapping(uint256 => address) public projectIdToArtistAddress;
    mapping(uint256 => uint256) public projectIdToPricePerTokenInWei;

    address public ntentAddress;
    uint256 public ntentPercentage = 10;

    mapping(uint256 => string) public staticIpfsImageLink;
    mapping(uint256 => uint256) public tokenIdToProjectId;
    mapping(uint256 => uint256[]) internal projectIdToTokenIds;
    mapping(uint256 => bytes32) public tokenIdToHash;
    mapping(bytes32 => uint256) public hashToTokenId;

    address public admin;
    mapping(address => bool) public isRainbowlisted;
    mapping(address => bool) public isMintRainbowlisted;

    uint256 public nextProjectId = 1;

    modifier onlyValidTokenId(uint256 _tokenId) {
        require(_exists(_tokenId), "Token ID not exists");
        _;
    }

    modifier onlyUnlocked(uint256 _projectId) {
        require(!projects[_projectId].locked, "Only if unlocked");
        _;
    }

    modifier onlyArtist(uint256 _projectId) {
        require(msg.sender == projectIdToArtistAddress[_projectId], "Only artist");
        _;
    }

    modifier onlyAdmin() {
        require(msg.sender == admin, "Only admin");
        _;
    }

    modifier onlyRainbowlisted() {
        require(isRainbowlisted[msg.sender], "Only Rainbowlisted");
        _;
    }

    modifier onlyArtistOrRainbowlisted(uint256 _projectId) {
        require(isRainbowlisted[msg.sender] || msg.sender == projectIdToArtistAddress[_projectId], "Only artist or Rainbowlisted");
        _;
    }

    constructor(string memory _tokenName, string memory _tokenSymbol) CustomERC721Metadata(_tokenName, _tokenSymbol) {
        admin = msg.sender;
        isRainbowlisted[msg.sender] = true;
        ntentAddress = msg.sender;
    }

    function concatenate(string memory a,string memory b) public pure returns (string memory){
        return string(abi.encodePacked(a,b));
    } 

    function uint2str(uint _i) internal pure returns (string memory _uintAsString) {
        if (_i == 0) {
            return "0";
        }
        uint j = _i;
        uint len;
        while (j != 0) {
            len++;
            j /= 10;
        }
        bytes memory bstr = new bytes(len);
        uint k = len;
        while (_i != 0) {
            k = k-1;
            uint8 temp = (48 + uint8(_i - _i / 10 * 10));
            bytes1 b1 = bytes1(temp);
            bstr[k] = b1;
            _i /= 10;
        }
        return string(bstr);
    }

    function mint(address _to, uint256 _projectId, address _by) external returns (uint256 _tokenId) {
        require(isMintRainbowlisted[msg.sender], "Must mint from Rainbowlisted minter");
        require(projects[_projectId].invocations + 1 <= projects[_projectId].maxInvocations, "Exceeds max invocations");
        require(projects[_projectId].active || _by == projectIdToArtistAddress[_projectId], "Proj must exist and be active");
        require(!projects[_projectId].paused || _by == projectIdToArtistAddress[_projectId], "Purchases are paused");

        uint256 tokenId = _mintToken(_to, _projectId);

        return tokenId;
    }

    function _mintToken(address _to, uint256 _projectId) internal returns (uint256 _tokenId) {

        uint256 tokenIdToBe = (_projectId * ONE_MILLION) + projects[_projectId].invocations;

        projects[_projectId].invocations = projects[_projectId].invocations + 1;

        bytes32 hash = keccak256(abi.encodePacked(projects[_projectId].invocations, block.number, blockhash(block.number - 1), msg.sender, _tokenId));
        tokenIdToHash[tokenIdToBe]=hash;
        hashToTokenId[hash] = tokenIdToBe;

        _mint(_to, tokenIdToBe);

        tokenIdToProjectId[tokenIdToBe] = _projectId;
        projectIdToTokenIds[_projectId].push(tokenIdToBe);

        emit Mint(_to, tokenIdToBe, _projectId);

        return tokenIdToBe;
    }
    
    function burn(address ownerAddress, uint256 tokenId) external returns(uint256 _tokenId) {
        require(isMintRainbowlisted[msg.sender], "Must burn from Rainbowlisted minter");
        _burn(ownerAddress, tokenId);
        projects[tokenIdToProjectId[tokenId]].tokensBurned = projects[tokenIdToProjectId[tokenId]].tokensBurned + 1;
        return tokenId;
    }
    
    function updateNtentAddress(address _ntentAddress) public onlyAdmin {
        ntentAddress = _ntentAddress;
    }

    function updateNtentPercentage(uint256 _ntentPercentage) public onlyAdmin {
        require(_ntentPercentage <= 50, "Max of 50%");
        ntentPercentage = _ntentPercentage;
    }

    function addRainbowlisted(address _address) public onlyAdmin {
        isRainbowlisted[_address] = true;
    }

    function removeRainbowlisted(address _address) public onlyAdmin {
        isRainbowlisted[_address] = false;
    }

    function addMintRainbowlisted(address _address) public onlyAdmin {
        isMintRainbowlisted[_address] = true;
    }

    function removeMintRainbowlisted(address _address) public onlyAdmin {
        isMintRainbowlisted[_address] = false;
    }
    
    function getPricePerTokenInWei(uint256 _projectId) public view returns (uint256 price) {
        return projectIdToPricePerTokenInWei[_projectId];
    }

    function toggleProjectIsLocked(uint256 _projectId) public onlyRainbowlisted onlyUnlocked(_projectId) {
        projects[_projectId].locked = true;
    }

    function toggleProjectIsActive(uint256 _projectId) public onlyRainbowlisted {
        projects[_projectId].active = !projects[_projectId].active;
    }

    function updateProjectArtistAddress(uint256 _projectId, address _artistAddress) public onlyArtistOrRainbowlisted(_projectId) {
        projectIdToArtistAddress[_projectId] = _artistAddress;
    }

    function toggleProjectIsPaused(uint256 _projectId) public onlyArtistOrRainbowlisted(_projectId) {
        projects[_projectId].paused = !projects[_projectId].paused;
    }

    function addProject(string memory _projectName, address _artistAddress, uint256 _pricePerTokenInWei, address _purchaseContract, bool _acceptsMintPass, uint256 _mintPassProjectId, bool _dynamic) public onlyRainbowlisted {

        uint256 projectId = nextProjectId;
        projectIdToArtistAddress[projectId] = _artistAddress;
        projects[projectId].name = _projectName;
        projects[projectId].purchaseContract = _purchaseContract;
        projects[projectId].acceptsMintPass = _acceptsMintPass;
        projects[projectId].mintPassProjectId = _mintPassProjectId;
        projectIdToPricePerTokenInWei[projectId] = _pricePerTokenInWei;
        projects[projectId].paused=true;
        projects[projectId].tokensBurned=0;
        projects[projectId].dynamic=_dynamic;
        projects[projectId].maxInvocations = ONE_MILLION;
        if (!_dynamic) {
            projects[projectId].useHashString = false;
        } else {
            projects[projectId].useHashString = true;
        }
        nextProjectId = nextProjectId + 1;
    }

    function updateProjectPricePerTokenInWei(uint256 _projectId, uint256 _pricePerTokenInWei) onlyArtist(_projectId) public {
        projectIdToPricePerTokenInWei[_projectId] = _pricePerTokenInWei;
    }

    function updateProjectName(uint256 _projectId, string memory _projectName) onlyUnlocked(_projectId) onlyArtistOrRainbowlisted(_projectId) public {
        projects[_projectId].name = _projectName;
    }

    function updateProjectArtistName(uint256 _projectId, string memory _projectArtistName) onlyUnlocked(_projectId) onlyArtistOrRainbowlisted(_projectId) public {
        projects[_projectId].artist = _projectArtistName;
    }
    
    function updateProjectPurchaseContractInfo(uint256 _projectId, address _projectPurchaseContract, bool _acceptsMintPass, uint256 _mintPassProjectId) onlyUnlocked(_projectId) onlyRainbowlisted public {
        projects[_projectId].purchaseContract = _projectPurchaseContract;
        projects[_projectId].acceptsMintPass = _acceptsMintPass;
        projects[_projectId].mintPassProjectId = _mintPassProjectId;
    }
    
    function updateProjectDataContractInfo(uint256 _projectId, address _projectDataContract) onlyUnlocked(_projectId) onlyRainbowlisted public {
        projects[_projectId].dataContract = _projectDataContract;
    }
    
    function updateProjectTokenUriContractInfo(uint256 _projectId, address _projectTokenUriContract) onlyUnlocked(_projectId) onlyRainbowlisted public {
        projects[_projectId].tokenUriContract = _projectTokenUriContract;
    }

    function updateProjectDescription(uint256 _projectId, string memory _projectDescription) onlyArtist(_projectId) public {
        projects[_projectId].description = _projectDescription;
    }

    function updateProjectWebsite(uint256 _projectId, string memory _projectWebsite) onlyArtist(_projectId) public {
        projects[_projectId].website = _projectWebsite;
    }

    function updateProjectLicense(uint256 _projectId, string memory _projectLicense) onlyUnlocked(_projectId) onlyArtistOrRainbowlisted(_projectId) public {
        projects[_projectId].license = _projectLicense;
    }

    function updateProjectMaxInvocations(uint256 _projectId, uint256 _maxInvocations) onlyArtist(_projectId) public {
        require((!projects[_projectId].locked || _maxInvocations<projects[_projectId].maxInvocations), "Only if unlocked");
        require(_maxInvocations > projects[_projectId].invocations, "Max invocations exceeds current");
        require(_maxInvocations <= ONE_MILLION, "Cannot exceed 1000000");
        projects[_projectId].maxInvocations = _maxInvocations;
    }

    function toggleProjectUseHashString(uint256 _projectId) onlyUnlocked(_projectId) onlyArtistOrRainbowlisted(_projectId) public {
      require(projects[_projectId].invocations == 0, "Cannot modify after token is minted.");
      projects[_projectId].useHashString = !projects[_projectId].useHashString;
    }

    function addProjectScript(uint256 _projectId, string memory _script) onlyUnlocked(_projectId) onlyArtistOrRainbowlisted(_projectId) public {
        projects[_projectId].scripts[projects[_projectId].scriptCount] = _script;
        projects[_projectId].scriptCount = projects[_projectId].scriptCount + 1;
    }

    function updateProjectScript(uint256 _projectId, uint256 _scriptId, string memory _script) onlyUnlocked(_projectId) onlyArtistOrRainbowlisted(_projectId) public {
        require(_scriptId < projects[_projectId].scriptCount, "scriptId out of range");
        projects[_projectId].scripts[_scriptId] = _script;
    }

    function removeProjectLastScript(uint256 _projectId) onlyUnlocked(_projectId) onlyArtistOrRainbowlisted(_projectId) public {
        require(projects[_projectId].scriptCount > 0, "there are no scripts to remove");
        delete projects[_projectId].scripts[projects[_projectId].scriptCount - 1];
        projects[_projectId].scriptCount = projects[_projectId].scriptCount + 1;
    }

    function updateProjectScriptJSON(uint256 _projectId, string memory _projectScriptJSON) onlyUnlocked(_projectId) onlyArtistOrRainbowlisted(_projectId) public {
        projects[_projectId].scriptJSON = _projectScriptJSON;
    }

    function updateProjectIpfsHash(uint256 _projectId, string memory _ipfsHash) onlyUnlocked(_projectId) onlyArtistOrRainbowlisted(_projectId) public {
        projects[_projectId].ipfsHash = _ipfsHash;
    }

    function updateProjectBaseURI(uint256 _projectId, string memory _newBaseURI) onlyArtist(_projectId) public {
        projects[_projectId].projectBaseURI = _newBaseURI;
    }

    function updateProjectBaseIpfsURI(uint256 _projectId, string memory _projectBaseIpfsURI) onlyArtist(_projectId) public {
        projects[_projectId].projectBaseIpfsURI = _projectBaseIpfsURI;
    }

    function toggleProjectUseIpfsForStatic(uint256 _projectId) onlyArtistOrRainbowlisted(_projectId) public {
        require(!projects[_projectId].dynamic, "can only set static IPFS hash for static projects");
        projects[_projectId].useIpfs = !projects[_projectId].useIpfs;
    }

    function toggleProjectIsDynamic(uint256 _projectId) onlyUnlocked(_projectId) onlyArtistOrRainbowlisted(_projectId) public {
      require(projects[_projectId].invocations == 0, "Can not switch after a token is minted.");
        if (projects[_projectId].dynamic) {
            projects[_projectId].useHashString = false;
        } else {
            projects[_projectId].useHashString = true;
        }
        projects[_projectId].dynamic = !projects[_projectId].dynamic;
    }

    function overrideTokenDynamicImageWithIpfsLink(uint256 _tokenId, string memory _ipfsHash) onlyArtistOrRainbowlisted(tokenIdToProjectId[_tokenId]) public {
        staticIpfsImageLink[_tokenId] = _ipfsHash;
    }

    function clearTokenIpfsImageUri(uint256 _tokenId) onlyArtistOrRainbowlisted(tokenIdToProjectId[_tokenId]) public {
        delete staticIpfsImageLink[tokenIdToProjectId[_tokenId]];
    }

    function projectDetails(uint256 _projectId) view public returns (string memory projectName, string memory artist, string memory description, string memory website, string memory license, bool dynamic) {
        projectName = projects[_projectId].name;
        artist = projects[_projectId].artist;
        description = projects[_projectId].description;
        website = projects[_projectId].website;
        license = projects[_projectId].license;
        dynamic = projects[_projectId].dynamic;
    }

    function projectTokenInfo(uint256 _projectId) view public returns (address artistAddress, uint256 pricePerTokenInWei, uint256 invocations, uint256 maxInvocations, bool active, address purchaseContract,  address dataContract, address tokenUriContract, bool acceptsMintPass, uint256 mintPassProjectId) {
        artistAddress = projectIdToArtistAddress[_projectId];
        pricePerTokenInWei = projectIdToPricePerTokenInWei[_projectId];
        invocations = projects[_projectId].invocations;
        maxInvocations = projects[_projectId].maxInvocations;
        active = projects[_projectId].active;
        purchaseContract = projects[_projectId].purchaseContract;
        dataContract = projects[_projectId].dataContract;
        tokenUriContract = projects[_projectId].tokenUriContract;
        acceptsMintPass = projects[_projectId].acceptsMintPass;
        mintPassProjectId = projects[_projectId].mintPassProjectId;
    }

    function projectScriptInfo(uint256 _projectId) view public returns (string memory scriptJSON, uint256 scriptCount, bool useHashString, string memory ipfsHash, bool locked, bool paused) {
        scriptJSON = projects[_projectId].scriptJSON;
        scriptCount = projects[_projectId].scriptCount;
        useHashString = projects[_projectId].useHashString;
        ipfsHash = projects[_projectId].ipfsHash;
        locked = projects[_projectId].locked;
        paused = projects[_projectId].paused;
    }

    function projectScriptByIndex(uint256 _projectId, uint256 _index) view public returns (string memory){
        return projects[_projectId].scripts[_index];
    }

    function projectURIInfo(uint256 _projectId) view public returns (string memory projectBaseURI, string memory projectBaseIpfsURI, bool useIpfs) {
        projectBaseURI = projects[_projectId].projectBaseURI;
        projectBaseIpfsURI = projects[_projectId].projectBaseIpfsURI;
        useIpfs = projects[_projectId].useIpfs;
    }

    function projectShowAllTokens(uint _projectId) public view returns (uint256[] memory){
        return projectIdToTokenIds[_projectId];
    }

    function tokensOfOwner(address owner) external view returns (uint256[] memory) {
        return _tokensOfOwner(owner);
    }

    function tokenURI(uint256 _tokenId) external view onlyValidTokenId(_tokenId) returns (string memory) {

        //check if custom tokenUri contract, if so, use that.
        if(projects[tokenIdToProjectId[_tokenId]].tokenUriContract != address(0)){
            NtentTokenUri ntentTokenUri = NtentTokenUri(projects[tokenIdToProjectId[_tokenId]].tokenUriContract);
            return ntentTokenUri.tokenUri(_tokenId);
        }
        
        //check if tokenId has a specified image link
        if (bytes(staticIpfsImageLink[_tokenId]).length > 0) {
            return concatenate(projects[tokenIdToProjectId[_tokenId]].projectBaseIpfsURI, staticIpfsImageLink[_tokenId]);
        }

        //check if the project has a single overall token Uri (mintpass, etc)
        if (!projects[tokenIdToProjectId[_tokenId]].dynamic && projects[tokenIdToProjectId[_tokenId]].useIpfs) {
            return concatenate(projects[tokenIdToProjectId[_tokenId]].projectBaseIpfsURI, projects[tokenIdToProjectId[_tokenId]].ipfsHash);
        }

        return concatenate(projects[tokenIdToProjectId[_tokenId]].projectBaseURI, uint2str(_tokenId));
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_tokenName","type":"string"},{"internalType":"string","name":"_tokenSymbol","type":"string"}],"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":"_to","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"_projectId","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"addMintRainbowlisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_projectName","type":"string"},{"internalType":"address","name":"_artistAddress","type":"address"},{"internalType":"uint256","name":"_pricePerTokenInWei","type":"uint256"},{"internalType":"address","name":"_purchaseContract","type":"address"},{"internalType":"bool","name":"_acceptsMintPass","type":"bool"},{"internalType":"uint256","name":"_mintPassProjectId","type":"uint256"},{"internalType":"bool","name":"_dynamic","type":"bool"}],"name":"addProject","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"},{"internalType":"string","name":"_script","type":"string"}],"name":"addProjectScript","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"addRainbowlisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"ownerAddress","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"clearTokenIpfsImageUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"a","type":"string"},{"internalType":"string","name":"b","type":"string"}],"name":"concatenate","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"}],"name":"getPricePerTokenInWei","outputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"hashToTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMintRainbowlisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isRainbowlisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_projectId","type":"uint256"},{"internalType":"address","name":"_by","type":"address"}],"name":"mint","outputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextProjectId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ntentAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ntentPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"string","name":"_ipfsHash","type":"string"}],"name":"overrideTokenDynamicImageWithIpfsLink","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"}],"name":"projectDetails","outputs":[{"internalType":"string","name":"projectName","type":"string"},{"internalType":"string","name":"artist","type":"string"},{"internalType":"string","name":"description","type":"string"},{"internalType":"string","name":"website","type":"string"},{"internalType":"string","name":"license","type":"string"},{"internalType":"bool","name":"dynamic","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"projectIdToArtistAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"projectIdToPricePerTokenInWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"projectScriptByIndex","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"}],"name":"projectScriptInfo","outputs":[{"internalType":"string","name":"scriptJSON","type":"string"},{"internalType":"uint256","name":"scriptCount","type":"uint256"},{"internalType":"bool","name":"useHashString","type":"bool"},{"internalType":"string","name":"ipfsHash","type":"string"},{"internalType":"bool","name":"locked","type":"bool"},{"internalType":"bool","name":"paused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"}],"name":"projectShowAllTokens","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"}],"name":"projectTokenInfo","outputs":[{"internalType":"address","name":"artistAddress","type":"address"},{"internalType":"uint256","name":"pricePerTokenInWei","type":"uint256"},{"internalType":"uint256","name":"invocations","type":"uint256"},{"internalType":"uint256","name":"maxInvocations","type":"uint256"},{"internalType":"bool","name":"active","type":"bool"},{"internalType":"address","name":"purchaseContract","type":"address"},{"internalType":"address","name":"dataContract","type":"address"},{"internalType":"address","name":"tokenUriContract","type":"address"},{"internalType":"bool","name":"acceptsMintPass","type":"bool"},{"internalType":"uint256","name":"mintPassProjectId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"}],"name":"projectURIInfo","outputs":[{"internalType":"string","name":"projectBaseURI","type":"string"},{"internalType":"string","name":"projectBaseIpfsURI","type":"string"},{"internalType":"bool","name":"useIpfs","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"removeMintRainbowlisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"}],"name":"removeProjectLastScript","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"removeRainbowlisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"staticIpfsImageLink","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"_projectId","type":"uint256"}],"name":"toggleProjectIsActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"}],"name":"toggleProjectIsDynamic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"}],"name":"toggleProjectIsLocked","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"}],"name":"toggleProjectIsPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"}],"name":"toggleProjectUseHashString","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"}],"name":"toggleProjectUseIpfsForStatic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenIdToHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenIdToProjectId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_ntentAddress","type":"address"}],"name":"updateNtentAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_ntentPercentage","type":"uint256"}],"name":"updateNtentPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"},{"internalType":"address","name":"_artistAddress","type":"address"}],"name":"updateProjectArtistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"},{"internalType":"string","name":"_projectArtistName","type":"string"}],"name":"updateProjectArtistName","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"},{"internalType":"string","name":"_projectBaseIpfsURI","type":"string"}],"name":"updateProjectBaseIpfsURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"},{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"updateProjectBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"},{"internalType":"address","name":"_projectDataContract","type":"address"}],"name":"updateProjectDataContractInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"},{"internalType":"string","name":"_projectDescription","type":"string"}],"name":"updateProjectDescription","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"},{"internalType":"string","name":"_ipfsHash","type":"string"}],"name":"updateProjectIpfsHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"},{"internalType":"string","name":"_projectLicense","type":"string"}],"name":"updateProjectLicense","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"},{"internalType":"uint256","name":"_maxInvocations","type":"uint256"}],"name":"updateProjectMaxInvocations","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"},{"internalType":"string","name":"_projectName","type":"string"}],"name":"updateProjectName","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"},{"internalType":"uint256","name":"_pricePerTokenInWei","type":"uint256"}],"name":"updateProjectPricePerTokenInWei","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"},{"internalType":"address","name":"_projectPurchaseContract","type":"address"},{"internalType":"bool","name":"_acceptsMintPass","type":"bool"},{"internalType":"uint256","name":"_mintPassProjectId","type":"uint256"}],"name":"updateProjectPurchaseContractInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"},{"internalType":"uint256","name":"_scriptId","type":"uint256"},{"internalType":"string","name":"_script","type":"string"}],"name":"updateProjectScript","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"},{"internalType":"string","name":"_projectScriptJSON","type":"string"}],"name":"updateProjectScriptJSON","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"},{"internalType":"address","name":"_projectTokenUriContract","type":"address"}],"name":"updateProjectTokenUriContractInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"},{"internalType":"string","name":"_projectWebsite","type":"string"}],"name":"updateProjectWebsite","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052600a600f5560016018553480156200001b57600080fd5b5060405162005105380380620051058339810160408190526200003e91620002f1565b8181620000526301ffc9a760e01b620000fa565b620000646380ac58cd60e01b620000fa565b6200007663780e9d6360e01b620000fa565b81516200008b9060099060208501906200017e565b508051620000a190600a9060208401906200017e565b50620000b4635b5e139f60e01b620000fa565b505060158054336001600160a01b031991821681179092556000828152601660205260409020805460ff19166001179055600e8054909116909117905550620003989050565b6001600160e01b03198082161415620001595760405162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015260640160405180910390fd5b6001600160e01b0319166000908152602081905260409020805460ff19166001179055565b8280546200018c906200035b565b90600052602060002090601f016020900481019282620001b05760008555620001fb565b82601f10620001cb57805160ff1916838001178555620001fb565b82800160010185558215620001fb579182015b82811115620001fb578251825591602001919060010190620001de565b50620002099291506200020d565b5090565b5b808211156200020957600081556001016200020e565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200024c57600080fd5b81516001600160401b038082111562000269576200026962000224565b604051601f8301601f19908116603f0116810190828211818310171562000294576200029462000224565b81604052838152602092508683858801011115620002b157600080fd5b600091505b83821015620002d55785820183015181830184015290820190620002b6565b83821115620002e75760008385830101525b9695505050505050565b600080604083850312156200030557600080fd5b82516001600160401b03808211156200031d57600080fd5b6200032b868387016200023a565b935060208501519150808211156200034257600080fd5b5062000351858286016200023a565b9150509250929050565b600181811c908216806200037057607f821691505b602082108114156200039257634e487b7160e01b600052602260045260246000fd5b50919050565b614d5d80620003a86000396000f3fe608060405234801561001057600080fd5b50600436106104285760003560e01c806370a082311161022b578063a784d5c111610130578063c87b56dd116100b8578063e935b7b111610087578063e935b7b114610ad5578063e985e9c514610ade578063f51f74a914610af1578063f70c0f0414610b11578063f851a44014610b3157600080fd5b8063c87b56dd14610a89578063d03c390c14610a9c578063db2ff86114610aaf578063dce5d85814610ac257600080fd5b8063b88d4fde116100ff578063b88d4fde14610a2a578063bcd4f24414610a3d578063bee04f9c14610a50578063c26aff0f14610a63578063c6d7323114610a7657600080fd5b8063a784d5c1146109de578063acad0124146109f1578063b1656ba314610a04578063b7b04fae14610a1757600080fd5b80638dd91a56116101b35780639dc29fac116101825780639dc29fac14610969578063a11ec70a1461097c578063a22cb4651461098f578063a3b2cca6146109a2578063a47d29cb146109b557600080fd5b80638dd91a561461091657806393961c661461093b57806395d89b411461094e57806397dc86cf1461095657600080fd5b8063826fc391116101fa578063826fc391146107d15780638462151c146107e45780638ba8f14d146108045780638c2c3622146108175780638c3c9cdd1461090357600080fd5b806370a082311461076857806370a8a0ad1461077b578063742ff77a1461078e578063810051d7146107ae57600080fd5b80632f745c59116103315780634aa6d417116102b9578063621a1f7411610288578063621a1f74146106fc5780636352211e1461071c578063672b17e91461072f57806369d14faf146107425780636bd5d5911461075557600080fd5b80634aa6d4171461069e5780634ae9a738146106c35780634f6ccce7146106d65780635c088dcc146106e957600080fd5b80633e48e848116103005780633e48e8481461063f5780633f383cb8146106525780633fef6c2a1461066557806342842e0e1461067857806343fa7f441461068b57600080fd5b80632f745c59146105f3578063360d223a1461060657806337859963146106195780633bdbd5c41461062c57600080fd5b80631b689c0b116103b457806325b75d681161038357806325b75d6814610585578063261eb4e514610598578063266001d3146105ab57806327901822146105be5780632d9c0205146105d157600080fd5b80631b689c0b146105265780632002f7131461054657806321c0da791461056957806323b872dd1461057257600080fd5b80630b8f4d2d116103fb5780630b8f4d2d146104c45780630d170673146104d75780630d4d1513146104ea57806318160ddd1461050b5780631afe39f81461051357600080fd5b806301ffc9a71461042d57806306fdde031461046f578063081812fc14610484578063095ea7b3146104af575b600080fd5b61045a61043b3660046143ae565b6001600160e01b03191660009081526020819052604090205460ff1690565b60405190151581526020015b60405180910390f35b610477610b44565b604051610466919061442a565b61049761049236600461443d565b610bd6565b6040516001600160a01b039091168152602001610466565b6104c26104bd366004614472565b610c70565b005b6104c26104d236600461449c565b610dd3565b6104c26104e5366004614584565b610e21565b6104fd6104f83660046145cb565b610ed4565b604051908152602001610466565b6007546104fd565b6104c2610521366004614617565b6110d6565b6104fd61053436600461443d565b60116020526000908152604090205481565b61045a61055436600461449c565b60166020526000908152604090205460ff1681565b6104fd600f5481565b6104c26105803660046146aa565b611238565b6104c2610593366004614584565b6112b8565b6104776105a636600461443d565b61136a565b6104776105b93660046146e6565b611404565b6104c26105cc36600461443d565b611430565b6105e46105df36600461443d565b6114b6565b60405161046693929190614740565b6104fd610601366004614472565b61161c565b6104c261061436600461449c565b6116c6565b6104c2610627366004614584565b611712565b6104c261063a36600461443d565b611775565b6104c261064d366004614584565b6118eb565b6104c261066036600461449c565b611948565b6104c2610673366004614584565b611993565b6104c26106863660046146aa565b611a45565b6104c261069936600461449c565b611a60565b6106b16106ac36600461443d565b611aae565b60405161046696959493929190614778565b600e54610497906001600160a01b031681565b6104fd6106e436600461443d565b611c43565b6104c26106f736600461443d565b611cd6565b6104fd61070a36600461443d565b60136020526000908152604090205481565b61049761072a36600461443d565b611dd1565b6104c261073d3660046147c6565b611e4e565b6104c261075036600461480a565b611f10565b6104c2610763366004614584565b611f91565b6104fd61077636600461449c565b611fee565b6104c261078936600461443d565b612077565b6104fd61079c36600461443d565b6000908152600d602052604090205490565b61045a6107bc36600461449c565b60176020526000908152604090205460ff1681565b6104c26107df366004614836565b6120e4565b6107f76107f236600461449c565b612231565b6040516104669190614858565b6104c261081236600461443d565b6122a7565b6108a261082536600461443d565b6000908152600c6020818152604080842054600d80845282862054600b90945291909420928301549083015460138401546005850154600686015460078701546008909701546001600160a01b03988916999698959794966201000090940460ff90811696938416959284169493831693600160a01b9093041691565b604080516001600160a01b039b8c168152602081019a909a528901979097526060880195909552921515608087015290861660a0860152851660c085015290931660e083015291151561010082015261012081019190915261014001610466565b610477610911366004614836565b612336565b61092961092436600461443d565b6123e7565b6040516104669695949392919061489c565b6104c2610949366004614584565b612732565b6104776127af565b6104c2610964366004614836565b6127be565b6104fd610977366004614472565b612809565b6104c261098a36600461443d565b6128cb565b6104c261099d366004614913565b612950565b6104c26109b0366004614584565b612a15565b6104976109c336600461443d565b600c602052600090815260409020546001600160a01b031681565b6104c26109ec36600461480a565b612a72565b6104c26109ff366004614584565b612b0e565b6104c2610a1236600461493d565b612c02565b6104c2610a25366004614584565b612d19565b6104c2610a3836600461498d565b612dcb565b6104c2610a4b36600461449c565b612e49565b6107f7610a5e36600461443d565b612e94565b6104c2610a7136600461480a565b612ef4565b6104c2610a84366004614584565b612f90565b610477610a9736600461443d565b613042565b6104c2610aaa36600461443d565b6134da565b6104c2610abd36600461443d565b613537565b6104c2610ad036600461443d565b613699565b6104fd60185481565b61045a610aec366004614a09565b6137b6565b6104fd610aff36600461443d565b60146020526000908152604090205481565b6104fd610b1f36600461443d565b600d6020526000908152604090205481565b601554610497906001600160a01b031681565b606060098054610b5390614a33565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7f90614a33565b8015610bcc5780601f10610ba157610100808354040283529160200191610bcc565b820191906000526020600020905b815481529060010190602001808311610baf57829003601f168201915b5050505050905090565b6000818152600160205260408120546001600160a01b0316610c545760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600260205260409020546001600160a01b031690565b6000610c7b82611dd1565b9050806001600160a01b0316836001600160a01b03161415610ce95760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610c4b565b336001600160a01b0382161480610d055750610d0581336137b6565b610d775760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610c4b565b60008281526002602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6015546001600160a01b03163314610dfd5760405162461bcd60e51b8152600401610c4b90614a68565b6001600160a01b03166000908152601760205260409020805460ff19166001179055565b6000828152600b602052604090206013015482906301000000900460ff1615610e5c5760405162461bcd60e51b8152600401610c4b90614a8c565b33600090815260166020526040902054839060ff1680610e9257506000818152600c60205260409020546001600160a01b031633145b610eae5760405162461bcd60e51b8152600401610c4b90614ab6565b6000848152600b602090815260409091208451610ecd928601906142c9565b5050505050565b3360009081526017602052604081205460ff16610f3f5760405162461bcd60e51b815260206004820152602360248201527f4d757374206d696e742066726f6d205261696e626f776c6973746564206d696e6044820152623a32b960e91b6064820152608401610c4b565b6000838152600b60205260409020600d810154600c90910154610f63906001614b03565b1115610fb15760405162461bcd60e51b815260206004820152601760248201527f45786365656473206d617820696e766f636174696f6e730000000000000000006044820152606401610c4b565b6000838152600b602052604090206013015462010000900460ff1680610ff057506000838152600c60205260409020546001600160a01b038381169116145b61103c5760405162461bcd60e51b815260206004820152601d60248201527f50726f6a206d75737420657869737420616e64206265206163746976650000006044820152606401610c4b565b6000838152600b6020526040902060130154640100000000900460ff16158061107e57506000838152600c60205260409020546001600160a01b038381169116145b6110c15760405162461bcd60e51b8152602060048201526014602482015273141d5c98da185cd95cc8185c99481c185d5cd95960621b6044820152606401610c4b565b60006110cd85856137e4565b95945050505050565b3360009081526016602052604090205460ff166111055760405162461bcd60e51b8152600401610c4b90614b1b565b6018546000818152600c6020908152604080832080546001600160a01b0319166001600160a01b038c16179055600b82529091208951611147928b01906142c9565b506000818152600b602081815260408084206005810180546001600160a01b0319166001600160a01b038c1617905560078101805460ff60a01b1916600160a01b8b15150217905560088101889055600d8084529185208b90559290915260138201805464010000000064ff0000000019909116179055601182019290925560098101805460ff1916851515179055620f424091015581611200576000818152600b60205260409020601301805460ff1916905561121d565b6000818152600b60205260409020601301805460ff191660011790555b60185461122b906001614b03565b6018555050505050505050565b611242338261393a565b6112a85760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6044820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b6064820152608401610c4b565b6112b3838383613a11565b505050565b6000828152600b602052604090206013015482906301000000900460ff16156112f35760405162461bcd60e51b8152600401610c4b90614a8c565b33600090815260166020526040902054839060ff168061132957506000818152600c60205260409020546001600160a01b031633145b6113455760405162461bcd60e51b8152600401610c4b90614ab6565b6000848152600b602090815260409091208451610ecd926004909201918601906142c9565b6010602052600090815260409020805461138390614a33565b80601f01602080910402602001604051908101604052809291908181526020018280546113af90614a33565b80156113fc5780601f106113d1576101008083540402835291602001916113fc565b820191906000526020600020905b8154815290600101906020018083116113df57829003601f168201915b505050505081565b60608282604051602001611419929190614b47565b604051602081830303815290604052905092915050565b60008181526011602090815260408083205433845260169092529091205460ff168061147257506000818152600c60205260409020546001600160a01b031633145b61148e5760405162461bcd60e51b8152600401610c4b90614ab6565b6000828152601160209081526040808320548352601090915281206114b29161434d565b5050565b6000818152600b60205260408120600a018054606092839290916114d990614a33565b80601f016020809104026020016040519081016040528092919081815260200182805461150590614a33565b80156115525780601f1061152757610100808354040283529160200191611552565b820191906000526020600020905b81548152906001019060200180831161153557829003601f168201915b50505050509250600b6000858152602001908152602001600020600b01805461157a90614a33565b80601f01602080910402602001604051908101604052809291908181526020018280546115a690614a33565b80156115f35780601f106115c8576101008083540402835291602001916115f3565b820191906000526020600020905b8154815290600101906020018083116115d657829003601f168201915b50505060009687525050600b602052604090942060130154929461010090930460ff1692915050565b600061162783611fee565b82106116895760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610c4b565b6001600160a01b03831660009081526005602052604090208054839081106116b3576116b3614b76565b9060005260206000200154905092915050565b6015546001600160a01b031633146116f05760405162461bcd60e51b8152600401610c4b90614a68565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6000828152600c602052604090205482906001600160a01b0316331461174a5760405162461bcd60e51b8152600401610c4b90614b8c565b6000838152600b60209081526040909120835161176f926003909201918501906142c9565b50505050565b6000818152600b602052604090206013015481906301000000900460ff16156117b05760405162461bcd60e51b8152600401610c4b90614a8c565b33600090815260166020526040902054829060ff16806117e657506000818152600c60205260409020546001600160a01b031633145b6118025760405162461bcd60e51b8152600401610c4b90614ab6565b6000838152600b60205260409020600c0154156118715760405162461bcd60e51b815260206004820152602760248201527f43616e206e6f7420737769746368206166746572206120746f6b656e2069732060448201526636b4b73a32b21760c91b6064820152608401610c4b565b6000838152600b602052604090206009015460ff16156118a9576000838152600b60205260409020601301805460ff191690556118c6565b6000838152600b60205260409020601301805460ff191660011790555b50506000908152600b60205260409020600901805460ff19811660ff90911615179055565b6000828152600c602052604090205482906001600160a01b031633146119235760405162461bcd60e51b8152600401610c4b90614b8c565b6000838152600b60209081526040909120835161176f92600a909201918501906142c9565b6015546001600160a01b031633146119725760405162461bcd60e51b8152600401610c4b90614a68565b6001600160a01b03166000908152601760205260409020805460ff19169055565b6000828152600b602052604090206013015482906301000000900460ff16156119ce5760405162461bcd60e51b8152600401610c4b90614a8c565b33600090815260166020526040902054839060ff1680611a0457506000818152600c60205260409020546001600160a01b031633145b611a205760405162461bcd60e51b8152600401610c4b90614ab6565b6000848152600b602090815260409091208451610ecd926012909201918601906142c9565b6112b383838360405180602001604052806000815250612dcb565b6015546001600160a01b03163314611a8a5760405162461bcd60e51b8152600401610c4b90614a68565b6001600160a01b03166000908152601660205260409020805460ff19166001179055565b60606000806060600080600b6000888152602001908152602001600020600e018054611ad990614a33565b80601f0160208091040260200160405190810160405280929190818152602001828054611b0590614a33565b8015611b525780601f10611b2757610100808354040283529160200191611b52565b820191906000526020600020905b815481529060010190602001808311611b3557829003601f168201915b50505060008a8152600b602052604090206010810154601382015460129092018054959b5090995060ff909116975092611b8e92509050614a33565b80601f0160208091040260200160405190810160405280929190818152602001828054611bba90614a33565b8015611c075780601f10611bdc57610100808354040283529160200191611c07565b820191906000526020600020905b815481529060010190602001808311611bea57829003601f168201915b5050506000998a525050600b602052604090972060130154959794969395939460ff630100000086048116956401000000009004169350915050565b6000611c4e60075490565b8210611cb15760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610c4b565b60078281548110611cc457611cc4614b76565b90600052602060002001549050919050565b33600090815260166020526040902054819060ff1680611d0c57506000818152600c60205260409020546001600160a01b031633145b611d285760405162461bcd60e51b8152600401610c4b90614ab6565b6000828152600b602052604090206009015460ff1615611da45760405162461bcd60e51b815260206004820152603160248201527f63616e206f6e6c7920736574207374617469632049504653206861736820666f60448201527072207374617469632070726f6a6563747360781b6064820152608401610c4b565b506000908152600b60205260409020601301805461ff001981166101009182900460ff1615909102179055565b6000818152600160205260408120546001600160a01b031680611e485760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610c4b565b92915050565b6000848152600b602052604090206013015484906301000000900460ff1615611e895760405162461bcd60e51b8152600401610c4b90614a8c565b3360009081526016602052604090205460ff16611eb85760405162461bcd60e51b8152600401610c4b90614b1b565b506000938452600b60205260409093206005810180546001600160a01b039094166001600160a01b031990941693909317909255600782018054911515600160a01b0260ff60a01b1990921691909117905560080155565b33600090815260166020526040902054829060ff1680611f4657506000818152600c60205260409020546001600160a01b031633145b611f625760405162461bcd60e51b8152600401610c4b90614ab6565b506000918252600c602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b6000828152600c602052604090205482906001600160a01b03163314611fc95760405162461bcd60e51b8152600401610c4b90614b8c565b6000838152600b60208181526040909220845161176f939190920191908501906142c9565b60006001600160a01b0382166120595760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610c4b565b6001600160a01b038216600090815260036020526040902054611e48565b6015546001600160a01b031633146120a15760405162461bcd60e51b8152600401610c4b90614a68565b60328111156120df5760405162461bcd60e51b815260206004820152600a6024820152694d6178206f662035302560b01b6044820152606401610c4b565b600f55565b6000828152600c602052604090205482906001600160a01b0316331461211c5760405162461bcd60e51b8152600401610c4b90614b8c565b6000838152600b60205260409020601301546301000000900460ff16158061215457506000838152600b60205260409020600d015482105b6121705760405162461bcd60e51b8152600401610c4b90614a8c565b6000838152600b60205260409020600c015482116121d05760405162461bcd60e51b815260206004820152601f60248201527f4d617820696e766f636174696f6e7320657863656564732063757272656e74006044820152606401610c4b565b620f424082111561221b5760405162461bcd60e51b8152602060048201526015602482015274043616e6e6f7420657863656564203130303030303605c1b6044820152606401610c4b565b506000918252600b6020526040909120600d0155565b6060612251826001600160a01b0316600090815260056020526040902090565b80548060200260200160405190810160405280929190818152602001828054801561229b57602002820191906000526020600020905b815481526020019060010190808311612287575b50505050509050919050565b3360009081526016602052604090205460ff166122d65760405162461bcd60e51b8152600401610c4b90614b1b565b6000818152600b602052604090206013015481906301000000900460ff16156123115760405162461bcd60e51b8152600401610c4b90614a8c565b506000908152600b60205260409020601301805463ff00000019166301000000179055565b6000828152600b60209081526040808320848452600f01909152902080546060919061236190614a33565b80601f016020809104026020016040519081016040528092919081815260200182805461238d90614a33565b80156123da5780601f106123af576101008083540402835291602001916123da565b820191906000526020600020905b8154815290600101906020018083116123bd57829003601f168201915b5050505050905092915050565b60608060608060606000600b6000888152602001908152602001600020600001805461241290614a33565b80601f016020809104026020016040519081016040528092919081815260200182805461243e90614a33565b801561248b5780601f106124605761010080835404028352916020019161248b565b820191906000526020600020905b81548152906001019060200180831161246e57829003601f168201915b50505060008a8152600b602052604090206001018054939950926124b192509050614a33565b80601f01602080910402602001604051908101604052809291908181526020018280546124dd90614a33565b801561252a5780601f106124ff5761010080835404028352916020019161252a565b820191906000526020600020905b81548152906001019060200180831161250d57829003601f168201915b50505060008a8152600b6020526040902060020180549398509261255092509050614a33565b80601f016020809104026020016040519081016040528092919081815260200182805461257c90614a33565b80156125c95780601f1061259e576101008083540402835291602001916125c9565b820191906000526020600020905b8154815290600101906020018083116125ac57829003601f168201915b50505060008a8152600b602052604090206003018054939750926125ef92509050614a33565b80601f016020809104026020016040519081016040528092919081815260200182805461261b90614a33565b80156126685780601f1061263d57610100808354040283529160200191612668565b820191906000526020600020905b81548152906001019060200180831161264b57829003601f168201915b50505060008a8152600b6020526040902060040180549396509261268e92509050614a33565b80601f01602080910402602001604051908101604052809291908181526020018280546126ba90614a33565b80156127075780601f106126dc57610100808354040283529160200191612707565b820191906000526020600020905b8154815290600101906020018083116126ea57829003601f168201915b5050506000998a525050600b602052604090972060090154959794969395929460ff90931692915050565b60008281526011602090815260408083205433845260169092529091205460ff168061277457506000818152600c60205260409020546001600160a01b031633145b6127905760405162461bcd60e51b8152600401610c4b90614ab6565b6000838152601060209081526040909120835161176f928501906142c9565b6060600a8054610b5390614a33565b6000828152600c602052604090205482906001600160a01b031633146127f65760405162461bcd60e51b8152600401610c4b90614b8c565b506000918252600d602052604090912055565b3360009081526017602052604081205460ff166128745760405162461bcd60e51b815260206004820152602360248201527f4d757374206275726e2066726f6d205261696e626f776c6973746564206d696e6044820152623a32b960e91b6064820152608401610c4b565b61287e8383613a30565b6000828152601160208181526040808420548452600b90915290912001546128a7906001614b03565b6000838152601160208181526040808420548452600b909152909120015550919050565b33600090815260166020526040902054819060ff168061290157506000818152600c60205260409020546001600160a01b031633145b61291d5760405162461bcd60e51b8152600401610c4b90614ab6565b506000908152600b60205260409020601301805464ff000000001981166401000000009182900460ff1615909102179055565b6001600160a01b0382163314156129a95760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610c4b565b3360008181526004602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6000828152600c602052604090205482906001600160a01b03163314612a4d5760405162461bcd60e51b8152600401610c4b90614b8c565b6000838152600b60209081526040909120835161176f926002909201918501906142c9565b6000828152600b602052604090206013015482906301000000900460ff1615612aad5760405162461bcd60e51b8152600401610c4b90614a8c565b3360009081526016602052604090205460ff16612adc5760405162461bcd60e51b8152600401610c4b90614b1b565b506000918252600b602052604090912060060180546001600160a01b0319166001600160a01b03909216919091179055565b6000828152600b602052604090206013015482906301000000900460ff1615612b495760405162461bcd60e51b8152600401610c4b90614a8c565b33600090815260166020526040902054839060ff1680612b7f57506000818152600c60205260409020546001600160a01b031633145b612b9b5760405162461bcd60e51b8152600401610c4b90614ab6565b6000848152600b6020908152604080832060108101548452600f0182529091208451612bc9928601906142c9565b506000848152600b6020526040902060100154612be7906001614b03565b6000948552600b602052604090942060100193909355505050565b6000838152600b602052604090206013015483906301000000900460ff1615612c3d5760405162461bcd60e51b8152600401610c4b90614a8c565b33600090815260166020526040902054849060ff1680612c7357506000818152600c60205260409020546001600160a01b031633145b612c8f5760405162461bcd60e51b8152600401610c4b90614ab6565b6000858152600b60205260409020601001548410612ce75760405162461bcd60e51b81526020600482015260156024820152747363726970744964206f7574206f662072616e676560581b6044820152606401610c4b565b6000858152600b60209081526040808320878452600f0182529091208451612d11928601906142c9565b505050505050565b6000828152600b602052604090206013015482906301000000900460ff1615612d545760405162461bcd60e51b8152600401610c4b90614a8c565b33600090815260166020526040902054839060ff1680612d8a57506000818152600c60205260409020546001600160a01b031633145b612da65760405162461bcd60e51b8152600401610c4b90614ab6565b6000848152600b602090815260409091208451610ecd926001909201918601906142c9565b612dd6848484611238565b612de284848484613a5c565b61176f5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b6064820152608401610c4b565b6015546001600160a01b03163314612e735760405162461bcd60e51b8152600401610c4b90614a68565b6001600160a01b03166000908152601660205260409020805460ff19169055565b60008181526012602090815260409182902080548351818402810184019094528084526060939283018282801561229b57602002820191906000526020600020908154815260200190600101908083116122875750505050509050919050565b6000828152600b602052604090206013015482906301000000900460ff1615612f2f5760405162461bcd60e51b8152600401610c4b90614a8c565b3360009081526016602052604090205460ff16612f5e5760405162461bcd60e51b8152600401610c4b90614b1b565b506000918252600b602052604090912060070180546001600160a01b0319166001600160a01b03909216919091179055565b6000828152600b602052604090206013015482906301000000900460ff1615612fcb5760405162461bcd60e51b8152600401610c4b90614a8c565b33600090815260166020526040902054839060ff168061300157506000818152600c60205260409020546001600160a01b031633145b61301d5760405162461bcd60e51b8152600401610c4b90614ab6565b6000848152600b602090815260409091208451610ecd92600e909201918601906142c9565b606081613066816000908152600160205260409020546001600160a01b0316151590565b6130a85760405162461bcd60e51b8152602060048201526013602482015272546f6b656e204944206e6f742065786973747360681b6044820152606401610c4b565b6000838152601160209081526040808320548352600b9091529020600701546001600160a01b03161561317c576000838152601160209081526040808320548352600b90915290819020600701549051631675f45560e01b8152600481018590526001600160a01b03909116908190631675f4559060240160006040518083038186803b15801561313857600080fd5b505afa15801561314c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526131749190810190614bb1565b9250506134d4565b6000838152601060205260408120805461319590614a33565b905011156132ee576000838152601160209081526040808320548352600b918290529091200180546132e791906131cb90614a33565b80601f01602080910402602001604051908101604052809291908181526020018280546131f790614a33565b80156132445780601f1061321957610100808354040283529160200191613244565b820191906000526020600020905b81548152906001019060200180831161322757829003601f168201915b505050600087815260106020526040902080549092506132649150614a33565b80601f016020809104026020016040519081016040528092919081815260200182805461329090614a33565b80156132dd5780601f106132b2576101008083540402835291602001916132dd565b820191906000526020600020905b8154815290600101906020018083116132c057829003601f168201915b5050505050611404565b91506134d4565b6000838152601160209081526040808320548352600b90915290206009015460ff1615801561334057506000838152601160209081526040808320548352600b909152902060130154610100900460ff165b1561341c576000838152601160209081526040808320548352600b918290529091200180546132e7919061337390614a33565b80601f016020809104026020016040519081016040528092919081815260200182805461339f90614a33565b80156133ec5780601f106133c1576101008083540402835291602001916133ec565b820191906000526020600020905b8154815290600101906020018083116133cf57829003601f168201915b5050506000878152601160209081526040808320548352600b909152902060120180549092506132649150614a33565b6000838152601160209081526040808320548352600b9091529020600a0180546134d1919061344a90614a33565b80601f016020809104026020016040519081016040528092919081815260200182805461347690614a33565b80156134c35780601f10613498576101008083540402835291602001916134c3565b820191906000526020600020905b8154815290600101906020018083116134a657829003601f168201915b50505050506105b985613b1a565b91505b50919050565b3360009081526016602052604090205460ff166135095760405162461bcd60e51b8152600401610c4b90614b1b565b6000908152600b60205260409020601301805462ff0000198116620100009182900460ff1615909102179055565b6000818152600b602052604090206013015481906301000000900460ff16156135725760405162461bcd60e51b8152600401610c4b90614a8c565b33600090815260166020526040902054829060ff16806135a857506000818152600c60205260409020546001600160a01b031633145b6135c45760405162461bcd60e51b8152600401610c4b90614ab6565b6000838152600b60205260409020601001546136225760405162461bcd60e51b815260206004820152601e60248201527f746865726520617265206e6f207363726970747320746f2072656d6f766500006044820152606401610c4b565b6000838152600b602052604081206010810154600f909101919061364890600190614c1f565b81526020019081526020016000206000613662919061434d565b6000838152600b602052604090206010015461367f906001614b03565b6000938452600b6020526040909320601001929092555050565b6000818152600b602052604090206013015481906301000000900460ff16156136d45760405162461bcd60e51b8152600401610c4b90614a8c565b33600090815260166020526040902054829060ff168061370a57506000818152600c60205260409020546001600160a01b031633145b6137265760405162461bcd60e51b8152600401610c4b90614ab6565b6000838152600b60205260409020600c0154156137915760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f74206d6f6469667920616674657220746f6b656e206973206d696e6044820152633a32b21760e11b6064820152608401610c4b565b50506000908152600b60205260409020601301805460ff19811660ff90911615179055565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b6000818152600b60205260408120600c01548190613805620f424085614c36565b61380f9190614b03565b6000848152600b60205260409020600c015490915061382f906001614b03565b6000848152600b60205260408120600c018290559043613850600182614c1f565b6040805160208101949094528301919091524060608083019190915233901b6bffffffffffffffffffffffff191660808201526094810184905260b40160408051601f1981840301815291815281516020928301206000858152601384528281208290558181526014909352912083905590506138cd8583613c43565b600082815260116020908152604080832087905586835260128252808320805460018101825590845291832090910184905551859184916001600160a01b038916917f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f91a4509392505050565b6000818152600160205260408120546001600160a01b03166139b35760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610c4b565b60006139be83611dd1565b9050806001600160a01b0316846001600160a01b031614806139f95750836001600160a01b03166139ee84610bd6565b6001600160a01b0316145b80613a095750613a0981856137b6565b949350505050565b613a1c838383613c9f565b613a268382613e23565b6112b38282613f32565b613a3a8282613f70565b613a448282613e23565b6000818152600660205260408120556114b281614066565b60006001600160a01b0384163b613a7557506001613a09565b604051630a85bd0160e11b81526000906001600160a01b0386169063150b7a0290613aaa9033908a9089908990600401614c55565b602060405180830381600087803b158015613ac457600080fd5b505af1158015613ad8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613afc9190614c92565b6001600160e01b031916630a85bd0160e11b14915050949350505050565b606081613b3e5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115613b685780613b5281614caf565b9150613b619050600a83614cca565b9150613b42565b60008167ffffffffffffffff811115613b8357613b836144b7565b6040519080825280601f01601f191660200182016040528015613bad576020820181803683370190505b509050815b8515613c3a57613bc3600182614c1f565b90506000613bd2600a88614cca565b613bdd90600a614c36565b613be79088614c1f565b613bf2906030614cec565b905060008160f81b905080848481518110613c0f57613c0f614b76565b60200101906001600160f81b031916908160001a905350613c31600a89614cca565b97505050613bb2565b50949350505050565b613c4d8282614127565b613c578282613f32565b6114b281600780546000838152600860205260408120829055600182018355919091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880155565b826001600160a01b0316613cb282611dd1565b6001600160a01b031614613d1a5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610c4b565b6001600160a01b038216613d7c5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610c4b565b613d858161425d565b6001600160a01b0383166000908152600360205260409020613da69061429a565b6001600160a01b0382166000908152600360205260409020613dc7906142ac565b60008181526001602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6001600160a01b038216600090815260056020526040812054613e4890600190614c1f565b600083815260066020526040902054909150808214613eef576001600160a01b0384166000908152600560205260408120805484908110613e8b57613e8b614b76565b906000526020600020015490508060056000876001600160a01b03166001600160a01b031681526020019081526020016000208381548110613ecf57613ecf614b76565b600091825260208083209091019290925591825260069052604090208190555b6001600160a01b0384166000908152600560205260409020805480613f1657613f16614d11565b6001900381819060005260206000200160009055905550505050565b6001600160a01b0390911660009081526005602081815260408084208054868652600684529185208290559282526001810183559183529091200155565b816001600160a01b0316613f8382611dd1565b6001600160a01b031614613fe75760405162461bcd60e51b815260206004820152602560248201527f4552433732313a206275726e206f6620746f6b656e2074686174206973206e6f6044820152643a1037bbb760d91b6064820152608401610c4b565b613ff08161425d565b6001600160a01b03821660009081526003602052604090206140119061429a565b60008181526001602052604080822080546001600160a01b0319169055518291906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b60075460009061407890600190614c1f565b600083815260086020526040812054600780549394509092849081106140a0576140a0614b76565b9060005260206000200154905080600783815481106140c1576140c1614b76565b600091825260208083209091019290925582815260089091526040902082905560078054806140f2576140f2614d11565b600190038181906000526020600020016000905590556000600860008681526020019081526020016000208190555050505050565b6001600160a01b03821661417d5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610c4b565b6000818152600160205260409020546001600160a01b0316156141e25760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610c4b565b600081815260016020908152604080832080546001600160a01b0319166001600160a01b038716908117909155835260039091529020614221906142ac565b60405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000818152600260205260409020546001600160a01b03161561429757600081815260026020526040902080546001600160a01b03191690555b50565b80546142a890600190614c1f565b9055565b60018160000160008282546142c19190614b03565b909155505050565b8280546142d590614a33565b90600052602060002090601f0160209004810192826142f7576000855561433d565b82601f1061431057805160ff191683800117855561433d565b8280016001018555821561433d579182015b8281111561433d578251825591602001919060010190614322565b50614349929150614383565b5090565b50805461435990614a33565b6000825580601f10614369575050565b601f01602090049060005260206000209081019061429791905b5b808211156143495760008155600101614384565b6001600160e01b03198116811461429757600080fd5b6000602082840312156143c057600080fd5b81356143cb81614398565b9392505050565b60005b838110156143ed5781810151838201526020016143d5565b8381111561176f5750506000910152565b600081518084526144168160208601602086016143d2565b601f01601f19169290920160200192915050565b6020815260006143cb60208301846143fe565b60006020828403121561444f57600080fd5b5035919050565b80356001600160a01b038116811461446d57600080fd5b919050565b6000806040838503121561448557600080fd5b61448e83614456565b946020939093013593505050565b6000602082840312156144ae57600080fd5b6143cb82614456565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156144f6576144f66144b7565b604052919050565b600067ffffffffffffffff821115614518576145186144b7565b50601f01601f191660200190565b6000614539614534846144fe565b6144cd565b905082815283838301111561454d57600080fd5b828260208301376000602084830101529392505050565b600082601f83011261457557600080fd5b6143cb83833560208501614526565b6000806040838503121561459757600080fd5b82359150602083013567ffffffffffffffff8111156145b557600080fd5b6145c185828601614564565b9150509250929050565b6000806000606084860312156145e057600080fd5b6145e984614456565b9250602084013591506145fe60408501614456565b90509250925092565b8035801515811461446d57600080fd5b600080600080600080600060e0888a03121561463257600080fd5b873567ffffffffffffffff81111561464957600080fd5b6146558a828b01614564565b97505061466460208901614456565b95506040880135945061467960608901614456565b935061468760808901614607565b925060a0880135915061469c60c08901614607565b905092959891949750929550565b6000806000606084860312156146bf57600080fd5b6146c884614456565b92506146d660208501614456565b9150604084013590509250925092565b600080604083850312156146f957600080fd5b823567ffffffffffffffff8082111561471157600080fd5b61471d86838701614564565b9350602085013591508082111561473357600080fd5b506145c185828601614564565b60608152600061475360608301866143fe565b828103602084015261476581866143fe565b9150508215156040830152949350505050565b60c08152600061478b60c08301896143fe565b876020840152861515604084015282810360608401526147ab81876143fe565b9415156080840152505090151560a090910152949350505050565b600080600080608085870312156147dc57600080fd5b843593506147ec60208601614456565b92506147fa60408601614607565b9396929550929360600135925050565b6000806040838503121561481d57600080fd5b8235915061482d60208401614456565b90509250929050565b6000806040838503121561484957600080fd5b50508035926020909101359150565b6020808252825182820181905260009190848201906040850190845b8181101561489057835183529284019291840191600101614874565b50909695505050505050565b60c0815260006148af60c08301896143fe565b82810360208401526148c181896143fe565b905082810360408401526148d581886143fe565b905082810360608401526148e981876143fe565b905082810360808401526148fd81866143fe565b91505082151560a0830152979650505050505050565b6000806040838503121561492657600080fd5b61492f83614456565b915061482d60208401614607565b60008060006060848603121561495257600080fd5b8335925060208401359150604084013567ffffffffffffffff81111561497757600080fd5b61498386828701614564565b9150509250925092565b600080600080608085870312156149a357600080fd5b6149ac85614456565b93506149ba60208601614456565b925060408501359150606085013567ffffffffffffffff8111156149dd57600080fd5b8501601f810187136149ee57600080fd5b6149fd87823560208401614526565b91505092959194509250565b60008060408385031215614a1c57600080fd5b614a2583614456565b915061482d60208401614456565b600181811c90821680614a4757607f821691505b602082108114156134d457634e487b7160e01b600052602260045260246000fd5b6020808252600a908201526927b7363c9030b236b4b760b11b604082015260600190565b60208082526010908201526f13db9b1e481a59881d5b9b1bd8dad95960821b604082015260600190565b6020808252601c908201527f4f6e6c7920617274697374206f72205261696e626f776c697374656400000000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008219821115614b1657614b16614aed565b500190565b60208082526012908201527113db9b1e4814985a5b989bdddb1a5cdd195960721b604082015260600190565b60008351614b598184602088016143d2565b835190830190614b6d8183602088016143d2565b01949350505050565b634e487b7160e01b600052603260045260246000fd5b6020808252600b908201526a13db9b1e48185c9d1a5cdd60aa1b604082015260600190565b600060208284031215614bc357600080fd5b815167ffffffffffffffff811115614bda57600080fd5b8201601f81018413614beb57600080fd5b8051614bf9614534826144fe565b818152856020838501011115614c0e57600080fd5b6110cd8260208301602086016143d2565b600082821015614c3157614c31614aed565b500390565b6000816000190483118215151615614c5057614c50614aed565b500290565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090614c88908301846143fe565b9695505050505050565b600060208284031215614ca457600080fd5b81516143cb81614398565b6000600019821415614cc357614cc3614aed565b5060010190565b600082614ce757634e487b7160e01b600052601260045260246000fd5b500490565b600060ff821660ff84168060ff03821115614d0957614d09614aed565b019392505050565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220fb18f0986350b3e9b05f9a7d25b3840ea8d032b8e802a4014b8527ac7989ed0164736f6c634300080900330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000096e74656e742e617274000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054e54454e54000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106104285760003560e01c806370a082311161022b578063a784d5c111610130578063c87b56dd116100b8578063e935b7b111610087578063e935b7b114610ad5578063e985e9c514610ade578063f51f74a914610af1578063f70c0f0414610b11578063f851a44014610b3157600080fd5b8063c87b56dd14610a89578063d03c390c14610a9c578063db2ff86114610aaf578063dce5d85814610ac257600080fd5b8063b88d4fde116100ff578063b88d4fde14610a2a578063bcd4f24414610a3d578063bee04f9c14610a50578063c26aff0f14610a63578063c6d7323114610a7657600080fd5b8063a784d5c1146109de578063acad0124146109f1578063b1656ba314610a04578063b7b04fae14610a1757600080fd5b80638dd91a56116101b35780639dc29fac116101825780639dc29fac14610969578063a11ec70a1461097c578063a22cb4651461098f578063a3b2cca6146109a2578063a47d29cb146109b557600080fd5b80638dd91a561461091657806393961c661461093b57806395d89b411461094e57806397dc86cf1461095657600080fd5b8063826fc391116101fa578063826fc391146107d15780638462151c146107e45780638ba8f14d146108045780638c2c3622146108175780638c3c9cdd1461090357600080fd5b806370a082311461076857806370a8a0ad1461077b578063742ff77a1461078e578063810051d7146107ae57600080fd5b80632f745c59116103315780634aa6d417116102b9578063621a1f7411610288578063621a1f74146106fc5780636352211e1461071c578063672b17e91461072f57806369d14faf146107425780636bd5d5911461075557600080fd5b80634aa6d4171461069e5780634ae9a738146106c35780634f6ccce7146106d65780635c088dcc146106e957600080fd5b80633e48e848116103005780633e48e8481461063f5780633f383cb8146106525780633fef6c2a1461066557806342842e0e1461067857806343fa7f441461068b57600080fd5b80632f745c59146105f3578063360d223a1461060657806337859963146106195780633bdbd5c41461062c57600080fd5b80631b689c0b116103b457806325b75d681161038357806325b75d6814610585578063261eb4e514610598578063266001d3146105ab57806327901822146105be5780632d9c0205146105d157600080fd5b80631b689c0b146105265780632002f7131461054657806321c0da791461056957806323b872dd1461057257600080fd5b80630b8f4d2d116103fb5780630b8f4d2d146104c45780630d170673146104d75780630d4d1513146104ea57806318160ddd1461050b5780631afe39f81461051357600080fd5b806301ffc9a71461042d57806306fdde031461046f578063081812fc14610484578063095ea7b3146104af575b600080fd5b61045a61043b3660046143ae565b6001600160e01b03191660009081526020819052604090205460ff1690565b60405190151581526020015b60405180910390f35b610477610b44565b604051610466919061442a565b61049761049236600461443d565b610bd6565b6040516001600160a01b039091168152602001610466565b6104c26104bd366004614472565b610c70565b005b6104c26104d236600461449c565b610dd3565b6104c26104e5366004614584565b610e21565b6104fd6104f83660046145cb565b610ed4565b604051908152602001610466565b6007546104fd565b6104c2610521366004614617565b6110d6565b6104fd61053436600461443d565b60116020526000908152604090205481565b61045a61055436600461449c565b60166020526000908152604090205460ff1681565b6104fd600f5481565b6104c26105803660046146aa565b611238565b6104c2610593366004614584565b6112b8565b6104776105a636600461443d565b61136a565b6104776105b93660046146e6565b611404565b6104c26105cc36600461443d565b611430565b6105e46105df36600461443d565b6114b6565b60405161046693929190614740565b6104fd610601366004614472565b61161c565b6104c261061436600461449c565b6116c6565b6104c2610627366004614584565b611712565b6104c261063a36600461443d565b611775565b6104c261064d366004614584565b6118eb565b6104c261066036600461449c565b611948565b6104c2610673366004614584565b611993565b6104c26106863660046146aa565b611a45565b6104c261069936600461449c565b611a60565b6106b16106ac36600461443d565b611aae565b60405161046696959493929190614778565b600e54610497906001600160a01b031681565b6104fd6106e436600461443d565b611c43565b6104c26106f736600461443d565b611cd6565b6104fd61070a36600461443d565b60136020526000908152604090205481565b61049761072a36600461443d565b611dd1565b6104c261073d3660046147c6565b611e4e565b6104c261075036600461480a565b611f10565b6104c2610763366004614584565b611f91565b6104fd61077636600461449c565b611fee565b6104c261078936600461443d565b612077565b6104fd61079c36600461443d565b6000908152600d602052604090205490565b61045a6107bc36600461449c565b60176020526000908152604090205460ff1681565b6104c26107df366004614836565b6120e4565b6107f76107f236600461449c565b612231565b6040516104669190614858565b6104c261081236600461443d565b6122a7565b6108a261082536600461443d565b6000908152600c6020818152604080842054600d80845282862054600b90945291909420928301549083015460138401546005850154600686015460078701546008909701546001600160a01b03988916999698959794966201000090940460ff90811696938416959284169493831693600160a01b9093041691565b604080516001600160a01b039b8c168152602081019a909a528901979097526060880195909552921515608087015290861660a0860152851660c085015290931660e083015291151561010082015261012081019190915261014001610466565b610477610911366004614836565b612336565b61092961092436600461443d565b6123e7565b6040516104669695949392919061489c565b6104c2610949366004614584565b612732565b6104776127af565b6104c2610964366004614836565b6127be565b6104fd610977366004614472565b612809565b6104c261098a36600461443d565b6128cb565b6104c261099d366004614913565b612950565b6104c26109b0366004614584565b612a15565b6104976109c336600461443d565b600c602052600090815260409020546001600160a01b031681565b6104c26109ec36600461480a565b612a72565b6104c26109ff366004614584565b612b0e565b6104c2610a1236600461493d565b612c02565b6104c2610a25366004614584565b612d19565b6104c2610a3836600461498d565b612dcb565b6104c2610a4b36600461449c565b612e49565b6107f7610a5e36600461443d565b612e94565b6104c2610a7136600461480a565b612ef4565b6104c2610a84366004614584565b612f90565b610477610a9736600461443d565b613042565b6104c2610aaa36600461443d565b6134da565b6104c2610abd36600461443d565b613537565b6104c2610ad036600461443d565b613699565b6104fd60185481565b61045a610aec366004614a09565b6137b6565b6104fd610aff36600461443d565b60146020526000908152604090205481565b6104fd610b1f36600461443d565b600d6020526000908152604090205481565b601554610497906001600160a01b031681565b606060098054610b5390614a33565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7f90614a33565b8015610bcc5780601f10610ba157610100808354040283529160200191610bcc565b820191906000526020600020905b815481529060010190602001808311610baf57829003601f168201915b5050505050905090565b6000818152600160205260408120546001600160a01b0316610c545760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600260205260409020546001600160a01b031690565b6000610c7b82611dd1565b9050806001600160a01b0316836001600160a01b03161415610ce95760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610c4b565b336001600160a01b0382161480610d055750610d0581336137b6565b610d775760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610c4b565b60008281526002602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6015546001600160a01b03163314610dfd5760405162461bcd60e51b8152600401610c4b90614a68565b6001600160a01b03166000908152601760205260409020805460ff19166001179055565b6000828152600b602052604090206013015482906301000000900460ff1615610e5c5760405162461bcd60e51b8152600401610c4b90614a8c565b33600090815260166020526040902054839060ff1680610e9257506000818152600c60205260409020546001600160a01b031633145b610eae5760405162461bcd60e51b8152600401610c4b90614ab6565b6000848152600b602090815260409091208451610ecd928601906142c9565b5050505050565b3360009081526017602052604081205460ff16610f3f5760405162461bcd60e51b815260206004820152602360248201527f4d757374206d696e742066726f6d205261696e626f776c6973746564206d696e6044820152623a32b960e91b6064820152608401610c4b565b6000838152600b60205260409020600d810154600c90910154610f63906001614b03565b1115610fb15760405162461bcd60e51b815260206004820152601760248201527f45786365656473206d617820696e766f636174696f6e730000000000000000006044820152606401610c4b565b6000838152600b602052604090206013015462010000900460ff1680610ff057506000838152600c60205260409020546001600160a01b038381169116145b61103c5760405162461bcd60e51b815260206004820152601d60248201527f50726f6a206d75737420657869737420616e64206265206163746976650000006044820152606401610c4b565b6000838152600b6020526040902060130154640100000000900460ff16158061107e57506000838152600c60205260409020546001600160a01b038381169116145b6110c15760405162461bcd60e51b8152602060048201526014602482015273141d5c98da185cd95cc8185c99481c185d5cd95960621b6044820152606401610c4b565b60006110cd85856137e4565b95945050505050565b3360009081526016602052604090205460ff166111055760405162461bcd60e51b8152600401610c4b90614b1b565b6018546000818152600c6020908152604080832080546001600160a01b0319166001600160a01b038c16179055600b82529091208951611147928b01906142c9565b506000818152600b602081815260408084206005810180546001600160a01b0319166001600160a01b038c1617905560078101805460ff60a01b1916600160a01b8b15150217905560088101889055600d8084529185208b90559290915260138201805464010000000064ff0000000019909116179055601182019290925560098101805460ff1916851515179055620f424091015581611200576000818152600b60205260409020601301805460ff1916905561121d565b6000818152600b60205260409020601301805460ff191660011790555b60185461122b906001614b03565b6018555050505050505050565b611242338261393a565b6112a85760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6044820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b6064820152608401610c4b565b6112b3838383613a11565b505050565b6000828152600b602052604090206013015482906301000000900460ff16156112f35760405162461bcd60e51b8152600401610c4b90614a8c565b33600090815260166020526040902054839060ff168061132957506000818152600c60205260409020546001600160a01b031633145b6113455760405162461bcd60e51b8152600401610c4b90614ab6565b6000848152600b602090815260409091208451610ecd926004909201918601906142c9565b6010602052600090815260409020805461138390614a33565b80601f01602080910402602001604051908101604052809291908181526020018280546113af90614a33565b80156113fc5780601f106113d1576101008083540402835291602001916113fc565b820191906000526020600020905b8154815290600101906020018083116113df57829003601f168201915b505050505081565b60608282604051602001611419929190614b47565b604051602081830303815290604052905092915050565b60008181526011602090815260408083205433845260169092529091205460ff168061147257506000818152600c60205260409020546001600160a01b031633145b61148e5760405162461bcd60e51b8152600401610c4b90614ab6565b6000828152601160209081526040808320548352601090915281206114b29161434d565b5050565b6000818152600b60205260408120600a018054606092839290916114d990614a33565b80601f016020809104026020016040519081016040528092919081815260200182805461150590614a33565b80156115525780601f1061152757610100808354040283529160200191611552565b820191906000526020600020905b81548152906001019060200180831161153557829003601f168201915b50505050509250600b6000858152602001908152602001600020600b01805461157a90614a33565b80601f01602080910402602001604051908101604052809291908181526020018280546115a690614a33565b80156115f35780601f106115c8576101008083540402835291602001916115f3565b820191906000526020600020905b8154815290600101906020018083116115d657829003601f168201915b50505060009687525050600b602052604090942060130154929461010090930460ff1692915050565b600061162783611fee565b82106116895760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610c4b565b6001600160a01b03831660009081526005602052604090208054839081106116b3576116b3614b76565b9060005260206000200154905092915050565b6015546001600160a01b031633146116f05760405162461bcd60e51b8152600401610c4b90614a68565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6000828152600c602052604090205482906001600160a01b0316331461174a5760405162461bcd60e51b8152600401610c4b90614b8c565b6000838152600b60209081526040909120835161176f926003909201918501906142c9565b50505050565b6000818152600b602052604090206013015481906301000000900460ff16156117b05760405162461bcd60e51b8152600401610c4b90614a8c565b33600090815260166020526040902054829060ff16806117e657506000818152600c60205260409020546001600160a01b031633145b6118025760405162461bcd60e51b8152600401610c4b90614ab6565b6000838152600b60205260409020600c0154156118715760405162461bcd60e51b815260206004820152602760248201527f43616e206e6f7420737769746368206166746572206120746f6b656e2069732060448201526636b4b73a32b21760c91b6064820152608401610c4b565b6000838152600b602052604090206009015460ff16156118a9576000838152600b60205260409020601301805460ff191690556118c6565b6000838152600b60205260409020601301805460ff191660011790555b50506000908152600b60205260409020600901805460ff19811660ff90911615179055565b6000828152600c602052604090205482906001600160a01b031633146119235760405162461bcd60e51b8152600401610c4b90614b8c565b6000838152600b60209081526040909120835161176f92600a909201918501906142c9565b6015546001600160a01b031633146119725760405162461bcd60e51b8152600401610c4b90614a68565b6001600160a01b03166000908152601760205260409020805460ff19169055565b6000828152600b602052604090206013015482906301000000900460ff16156119ce5760405162461bcd60e51b8152600401610c4b90614a8c565b33600090815260166020526040902054839060ff1680611a0457506000818152600c60205260409020546001600160a01b031633145b611a205760405162461bcd60e51b8152600401610c4b90614ab6565b6000848152600b602090815260409091208451610ecd926012909201918601906142c9565b6112b383838360405180602001604052806000815250612dcb565b6015546001600160a01b03163314611a8a5760405162461bcd60e51b8152600401610c4b90614a68565b6001600160a01b03166000908152601660205260409020805460ff19166001179055565b60606000806060600080600b6000888152602001908152602001600020600e018054611ad990614a33565b80601f0160208091040260200160405190810160405280929190818152602001828054611b0590614a33565b8015611b525780601f10611b2757610100808354040283529160200191611b52565b820191906000526020600020905b815481529060010190602001808311611b3557829003601f168201915b50505060008a8152600b602052604090206010810154601382015460129092018054959b5090995060ff909116975092611b8e92509050614a33565b80601f0160208091040260200160405190810160405280929190818152602001828054611bba90614a33565b8015611c075780601f10611bdc57610100808354040283529160200191611c07565b820191906000526020600020905b815481529060010190602001808311611bea57829003601f168201915b5050506000998a525050600b602052604090972060130154959794969395939460ff630100000086048116956401000000009004169350915050565b6000611c4e60075490565b8210611cb15760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610c4b565b60078281548110611cc457611cc4614b76565b90600052602060002001549050919050565b33600090815260166020526040902054819060ff1680611d0c57506000818152600c60205260409020546001600160a01b031633145b611d285760405162461bcd60e51b8152600401610c4b90614ab6565b6000828152600b602052604090206009015460ff1615611da45760405162461bcd60e51b815260206004820152603160248201527f63616e206f6e6c7920736574207374617469632049504653206861736820666f60448201527072207374617469632070726f6a6563747360781b6064820152608401610c4b565b506000908152600b60205260409020601301805461ff001981166101009182900460ff1615909102179055565b6000818152600160205260408120546001600160a01b031680611e485760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610c4b565b92915050565b6000848152600b602052604090206013015484906301000000900460ff1615611e895760405162461bcd60e51b8152600401610c4b90614a8c565b3360009081526016602052604090205460ff16611eb85760405162461bcd60e51b8152600401610c4b90614b1b565b506000938452600b60205260409093206005810180546001600160a01b039094166001600160a01b031990941693909317909255600782018054911515600160a01b0260ff60a01b1990921691909117905560080155565b33600090815260166020526040902054829060ff1680611f4657506000818152600c60205260409020546001600160a01b031633145b611f625760405162461bcd60e51b8152600401610c4b90614ab6565b506000918252600c602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b6000828152600c602052604090205482906001600160a01b03163314611fc95760405162461bcd60e51b8152600401610c4b90614b8c565b6000838152600b60208181526040909220845161176f939190920191908501906142c9565b60006001600160a01b0382166120595760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610c4b565b6001600160a01b038216600090815260036020526040902054611e48565b6015546001600160a01b031633146120a15760405162461bcd60e51b8152600401610c4b90614a68565b60328111156120df5760405162461bcd60e51b815260206004820152600a6024820152694d6178206f662035302560b01b6044820152606401610c4b565b600f55565b6000828152600c602052604090205482906001600160a01b0316331461211c5760405162461bcd60e51b8152600401610c4b90614b8c565b6000838152600b60205260409020601301546301000000900460ff16158061215457506000838152600b60205260409020600d015482105b6121705760405162461bcd60e51b8152600401610c4b90614a8c565b6000838152600b60205260409020600c015482116121d05760405162461bcd60e51b815260206004820152601f60248201527f4d617820696e766f636174696f6e7320657863656564732063757272656e74006044820152606401610c4b565b620f424082111561221b5760405162461bcd60e51b8152602060048201526015602482015274043616e6e6f7420657863656564203130303030303605c1b6044820152606401610c4b565b506000918252600b6020526040909120600d0155565b6060612251826001600160a01b0316600090815260056020526040902090565b80548060200260200160405190810160405280929190818152602001828054801561229b57602002820191906000526020600020905b815481526020019060010190808311612287575b50505050509050919050565b3360009081526016602052604090205460ff166122d65760405162461bcd60e51b8152600401610c4b90614b1b565b6000818152600b602052604090206013015481906301000000900460ff16156123115760405162461bcd60e51b8152600401610c4b90614a8c565b506000908152600b60205260409020601301805463ff00000019166301000000179055565b6000828152600b60209081526040808320848452600f01909152902080546060919061236190614a33565b80601f016020809104026020016040519081016040528092919081815260200182805461238d90614a33565b80156123da5780601f106123af576101008083540402835291602001916123da565b820191906000526020600020905b8154815290600101906020018083116123bd57829003601f168201915b5050505050905092915050565b60608060608060606000600b6000888152602001908152602001600020600001805461241290614a33565b80601f016020809104026020016040519081016040528092919081815260200182805461243e90614a33565b801561248b5780601f106124605761010080835404028352916020019161248b565b820191906000526020600020905b81548152906001019060200180831161246e57829003601f168201915b50505060008a8152600b602052604090206001018054939950926124b192509050614a33565b80601f01602080910402602001604051908101604052809291908181526020018280546124dd90614a33565b801561252a5780601f106124ff5761010080835404028352916020019161252a565b820191906000526020600020905b81548152906001019060200180831161250d57829003601f168201915b50505060008a8152600b6020526040902060020180549398509261255092509050614a33565b80601f016020809104026020016040519081016040528092919081815260200182805461257c90614a33565b80156125c95780601f1061259e576101008083540402835291602001916125c9565b820191906000526020600020905b8154815290600101906020018083116125ac57829003601f168201915b50505060008a8152600b602052604090206003018054939750926125ef92509050614a33565b80601f016020809104026020016040519081016040528092919081815260200182805461261b90614a33565b80156126685780601f1061263d57610100808354040283529160200191612668565b820191906000526020600020905b81548152906001019060200180831161264b57829003601f168201915b50505060008a8152600b6020526040902060040180549396509261268e92509050614a33565b80601f01602080910402602001604051908101604052809291908181526020018280546126ba90614a33565b80156127075780601f106126dc57610100808354040283529160200191612707565b820191906000526020600020905b8154815290600101906020018083116126ea57829003601f168201915b5050506000998a525050600b602052604090972060090154959794969395929460ff90931692915050565b60008281526011602090815260408083205433845260169092529091205460ff168061277457506000818152600c60205260409020546001600160a01b031633145b6127905760405162461bcd60e51b8152600401610c4b90614ab6565b6000838152601060209081526040909120835161176f928501906142c9565b6060600a8054610b5390614a33565b6000828152600c602052604090205482906001600160a01b031633146127f65760405162461bcd60e51b8152600401610c4b90614b8c565b506000918252600d602052604090912055565b3360009081526017602052604081205460ff166128745760405162461bcd60e51b815260206004820152602360248201527f4d757374206275726e2066726f6d205261696e626f776c6973746564206d696e6044820152623a32b960e91b6064820152608401610c4b565b61287e8383613a30565b6000828152601160208181526040808420548452600b90915290912001546128a7906001614b03565b6000838152601160208181526040808420548452600b909152909120015550919050565b33600090815260166020526040902054819060ff168061290157506000818152600c60205260409020546001600160a01b031633145b61291d5760405162461bcd60e51b8152600401610c4b90614ab6565b506000908152600b60205260409020601301805464ff000000001981166401000000009182900460ff1615909102179055565b6001600160a01b0382163314156129a95760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610c4b565b3360008181526004602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6000828152600c602052604090205482906001600160a01b03163314612a4d5760405162461bcd60e51b8152600401610c4b90614b8c565b6000838152600b60209081526040909120835161176f926002909201918501906142c9565b6000828152600b602052604090206013015482906301000000900460ff1615612aad5760405162461bcd60e51b8152600401610c4b90614a8c565b3360009081526016602052604090205460ff16612adc5760405162461bcd60e51b8152600401610c4b90614b1b565b506000918252600b602052604090912060060180546001600160a01b0319166001600160a01b03909216919091179055565b6000828152600b602052604090206013015482906301000000900460ff1615612b495760405162461bcd60e51b8152600401610c4b90614a8c565b33600090815260166020526040902054839060ff1680612b7f57506000818152600c60205260409020546001600160a01b031633145b612b9b5760405162461bcd60e51b8152600401610c4b90614ab6565b6000848152600b6020908152604080832060108101548452600f0182529091208451612bc9928601906142c9565b506000848152600b6020526040902060100154612be7906001614b03565b6000948552600b602052604090942060100193909355505050565b6000838152600b602052604090206013015483906301000000900460ff1615612c3d5760405162461bcd60e51b8152600401610c4b90614a8c565b33600090815260166020526040902054849060ff1680612c7357506000818152600c60205260409020546001600160a01b031633145b612c8f5760405162461bcd60e51b8152600401610c4b90614ab6565b6000858152600b60205260409020601001548410612ce75760405162461bcd60e51b81526020600482015260156024820152747363726970744964206f7574206f662072616e676560581b6044820152606401610c4b565b6000858152600b60209081526040808320878452600f0182529091208451612d11928601906142c9565b505050505050565b6000828152600b602052604090206013015482906301000000900460ff1615612d545760405162461bcd60e51b8152600401610c4b90614a8c565b33600090815260166020526040902054839060ff1680612d8a57506000818152600c60205260409020546001600160a01b031633145b612da65760405162461bcd60e51b8152600401610c4b90614ab6565b6000848152600b602090815260409091208451610ecd926001909201918601906142c9565b612dd6848484611238565b612de284848484613a5c565b61176f5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b6064820152608401610c4b565b6015546001600160a01b03163314612e735760405162461bcd60e51b8152600401610c4b90614a68565b6001600160a01b03166000908152601660205260409020805460ff19169055565b60008181526012602090815260409182902080548351818402810184019094528084526060939283018282801561229b57602002820191906000526020600020908154815260200190600101908083116122875750505050509050919050565b6000828152600b602052604090206013015482906301000000900460ff1615612f2f5760405162461bcd60e51b8152600401610c4b90614a8c565b3360009081526016602052604090205460ff16612f5e5760405162461bcd60e51b8152600401610c4b90614b1b565b506000918252600b602052604090912060070180546001600160a01b0319166001600160a01b03909216919091179055565b6000828152600b602052604090206013015482906301000000900460ff1615612fcb5760405162461bcd60e51b8152600401610c4b90614a8c565b33600090815260166020526040902054839060ff168061300157506000818152600c60205260409020546001600160a01b031633145b61301d5760405162461bcd60e51b8152600401610c4b90614ab6565b6000848152600b602090815260409091208451610ecd92600e909201918601906142c9565b606081613066816000908152600160205260409020546001600160a01b0316151590565b6130a85760405162461bcd60e51b8152602060048201526013602482015272546f6b656e204944206e6f742065786973747360681b6044820152606401610c4b565b6000838152601160209081526040808320548352600b9091529020600701546001600160a01b03161561317c576000838152601160209081526040808320548352600b90915290819020600701549051631675f45560e01b8152600481018590526001600160a01b03909116908190631675f4559060240160006040518083038186803b15801561313857600080fd5b505afa15801561314c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526131749190810190614bb1565b9250506134d4565b6000838152601060205260408120805461319590614a33565b905011156132ee576000838152601160209081526040808320548352600b918290529091200180546132e791906131cb90614a33565b80601f01602080910402602001604051908101604052809291908181526020018280546131f790614a33565b80156132445780601f1061321957610100808354040283529160200191613244565b820191906000526020600020905b81548152906001019060200180831161322757829003601f168201915b505050600087815260106020526040902080549092506132649150614a33565b80601f016020809104026020016040519081016040528092919081815260200182805461329090614a33565b80156132dd5780601f106132b2576101008083540402835291602001916132dd565b820191906000526020600020905b8154815290600101906020018083116132c057829003601f168201915b5050505050611404565b91506134d4565b6000838152601160209081526040808320548352600b90915290206009015460ff1615801561334057506000838152601160209081526040808320548352600b909152902060130154610100900460ff165b1561341c576000838152601160209081526040808320548352600b918290529091200180546132e7919061337390614a33565b80601f016020809104026020016040519081016040528092919081815260200182805461339f90614a33565b80156133ec5780601f106133c1576101008083540402835291602001916133ec565b820191906000526020600020905b8154815290600101906020018083116133cf57829003601f168201915b5050506000878152601160209081526040808320548352600b909152902060120180549092506132649150614a33565b6000838152601160209081526040808320548352600b9091529020600a0180546134d1919061344a90614a33565b80601f016020809104026020016040519081016040528092919081815260200182805461347690614a33565b80156134c35780601f10613498576101008083540402835291602001916134c3565b820191906000526020600020905b8154815290600101906020018083116134a657829003601f168201915b50505050506105b985613b1a565b91505b50919050565b3360009081526016602052604090205460ff166135095760405162461bcd60e51b8152600401610c4b90614b1b565b6000908152600b60205260409020601301805462ff0000198116620100009182900460ff1615909102179055565b6000818152600b602052604090206013015481906301000000900460ff16156135725760405162461bcd60e51b8152600401610c4b90614a8c565b33600090815260166020526040902054829060ff16806135a857506000818152600c60205260409020546001600160a01b031633145b6135c45760405162461bcd60e51b8152600401610c4b90614ab6565b6000838152600b60205260409020601001546136225760405162461bcd60e51b815260206004820152601e60248201527f746865726520617265206e6f207363726970747320746f2072656d6f766500006044820152606401610c4b565b6000838152600b602052604081206010810154600f909101919061364890600190614c1f565b81526020019081526020016000206000613662919061434d565b6000838152600b602052604090206010015461367f906001614b03565b6000938452600b6020526040909320601001929092555050565b6000818152600b602052604090206013015481906301000000900460ff16156136d45760405162461bcd60e51b8152600401610c4b90614a8c565b33600090815260166020526040902054829060ff168061370a57506000818152600c60205260409020546001600160a01b031633145b6137265760405162461bcd60e51b8152600401610c4b90614ab6565b6000838152600b60205260409020600c0154156137915760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f74206d6f6469667920616674657220746f6b656e206973206d696e6044820152633a32b21760e11b6064820152608401610c4b565b50506000908152600b60205260409020601301805460ff19811660ff90911615179055565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b6000818152600b60205260408120600c01548190613805620f424085614c36565b61380f9190614b03565b6000848152600b60205260409020600c015490915061382f906001614b03565b6000848152600b60205260408120600c018290559043613850600182614c1f565b6040805160208101949094528301919091524060608083019190915233901b6bffffffffffffffffffffffff191660808201526094810184905260b40160408051601f1981840301815291815281516020928301206000858152601384528281208290558181526014909352912083905590506138cd8583613c43565b600082815260116020908152604080832087905586835260128252808320805460018101825590845291832090910184905551859184916001600160a01b038916917f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f91a4509392505050565b6000818152600160205260408120546001600160a01b03166139b35760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610c4b565b60006139be83611dd1565b9050806001600160a01b0316846001600160a01b031614806139f95750836001600160a01b03166139ee84610bd6565b6001600160a01b0316145b80613a095750613a0981856137b6565b949350505050565b613a1c838383613c9f565b613a268382613e23565b6112b38282613f32565b613a3a8282613f70565b613a448282613e23565b6000818152600660205260408120556114b281614066565b60006001600160a01b0384163b613a7557506001613a09565b604051630a85bd0160e11b81526000906001600160a01b0386169063150b7a0290613aaa9033908a9089908990600401614c55565b602060405180830381600087803b158015613ac457600080fd5b505af1158015613ad8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613afc9190614c92565b6001600160e01b031916630a85bd0160e11b14915050949350505050565b606081613b3e5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115613b685780613b5281614caf565b9150613b619050600a83614cca565b9150613b42565b60008167ffffffffffffffff811115613b8357613b836144b7565b6040519080825280601f01601f191660200182016040528015613bad576020820181803683370190505b509050815b8515613c3a57613bc3600182614c1f565b90506000613bd2600a88614cca565b613bdd90600a614c36565b613be79088614c1f565b613bf2906030614cec565b905060008160f81b905080848481518110613c0f57613c0f614b76565b60200101906001600160f81b031916908160001a905350613c31600a89614cca565b97505050613bb2565b50949350505050565b613c4d8282614127565b613c578282613f32565b6114b281600780546000838152600860205260408120829055600182018355919091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880155565b826001600160a01b0316613cb282611dd1565b6001600160a01b031614613d1a5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610c4b565b6001600160a01b038216613d7c5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610c4b565b613d858161425d565b6001600160a01b0383166000908152600360205260409020613da69061429a565b6001600160a01b0382166000908152600360205260409020613dc7906142ac565b60008181526001602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6001600160a01b038216600090815260056020526040812054613e4890600190614c1f565b600083815260066020526040902054909150808214613eef576001600160a01b0384166000908152600560205260408120805484908110613e8b57613e8b614b76565b906000526020600020015490508060056000876001600160a01b03166001600160a01b031681526020019081526020016000208381548110613ecf57613ecf614b76565b600091825260208083209091019290925591825260069052604090208190555b6001600160a01b0384166000908152600560205260409020805480613f1657613f16614d11565b6001900381819060005260206000200160009055905550505050565b6001600160a01b0390911660009081526005602081815260408084208054868652600684529185208290559282526001810183559183529091200155565b816001600160a01b0316613f8382611dd1565b6001600160a01b031614613fe75760405162461bcd60e51b815260206004820152602560248201527f4552433732313a206275726e206f6620746f6b656e2074686174206973206e6f6044820152643a1037bbb760d91b6064820152608401610c4b565b613ff08161425d565b6001600160a01b03821660009081526003602052604090206140119061429a565b60008181526001602052604080822080546001600160a01b0319169055518291906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b60075460009061407890600190614c1f565b600083815260086020526040812054600780549394509092849081106140a0576140a0614b76565b9060005260206000200154905080600783815481106140c1576140c1614b76565b600091825260208083209091019290925582815260089091526040902082905560078054806140f2576140f2614d11565b600190038181906000526020600020016000905590556000600860008681526020019081526020016000208190555050505050565b6001600160a01b03821661417d5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610c4b565b6000818152600160205260409020546001600160a01b0316156141e25760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610c4b565b600081815260016020908152604080832080546001600160a01b0319166001600160a01b038716908117909155835260039091529020614221906142ac565b60405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000818152600260205260409020546001600160a01b03161561429757600081815260026020526040902080546001600160a01b03191690555b50565b80546142a890600190614c1f565b9055565b60018160000160008282546142c19190614b03565b909155505050565b8280546142d590614a33565b90600052602060002090601f0160209004810192826142f7576000855561433d565b82601f1061431057805160ff191683800117855561433d565b8280016001018555821561433d579182015b8281111561433d578251825591602001919060010190614322565b50614349929150614383565b5090565b50805461435990614a33565b6000825580601f10614369575050565b601f01602090049060005260206000209081019061429791905b5b808211156143495760008155600101614384565b6001600160e01b03198116811461429757600080fd5b6000602082840312156143c057600080fd5b81356143cb81614398565b9392505050565b60005b838110156143ed5781810151838201526020016143d5565b8381111561176f5750506000910152565b600081518084526144168160208601602086016143d2565b601f01601f19169290920160200192915050565b6020815260006143cb60208301846143fe565b60006020828403121561444f57600080fd5b5035919050565b80356001600160a01b038116811461446d57600080fd5b919050565b6000806040838503121561448557600080fd5b61448e83614456565b946020939093013593505050565b6000602082840312156144ae57600080fd5b6143cb82614456565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156144f6576144f66144b7565b604052919050565b600067ffffffffffffffff821115614518576145186144b7565b50601f01601f191660200190565b6000614539614534846144fe565b6144cd565b905082815283838301111561454d57600080fd5b828260208301376000602084830101529392505050565b600082601f83011261457557600080fd5b6143cb83833560208501614526565b6000806040838503121561459757600080fd5b82359150602083013567ffffffffffffffff8111156145b557600080fd5b6145c185828601614564565b9150509250929050565b6000806000606084860312156145e057600080fd5b6145e984614456565b9250602084013591506145fe60408501614456565b90509250925092565b8035801515811461446d57600080fd5b600080600080600080600060e0888a03121561463257600080fd5b873567ffffffffffffffff81111561464957600080fd5b6146558a828b01614564565b97505061466460208901614456565b95506040880135945061467960608901614456565b935061468760808901614607565b925060a0880135915061469c60c08901614607565b905092959891949750929550565b6000806000606084860312156146bf57600080fd5b6146c884614456565b92506146d660208501614456565b9150604084013590509250925092565b600080604083850312156146f957600080fd5b823567ffffffffffffffff8082111561471157600080fd5b61471d86838701614564565b9350602085013591508082111561473357600080fd5b506145c185828601614564565b60608152600061475360608301866143fe565b828103602084015261476581866143fe565b9150508215156040830152949350505050565b60c08152600061478b60c08301896143fe565b876020840152861515604084015282810360608401526147ab81876143fe565b9415156080840152505090151560a090910152949350505050565b600080600080608085870312156147dc57600080fd5b843593506147ec60208601614456565b92506147fa60408601614607565b9396929550929360600135925050565b6000806040838503121561481d57600080fd5b8235915061482d60208401614456565b90509250929050565b6000806040838503121561484957600080fd5b50508035926020909101359150565b6020808252825182820181905260009190848201906040850190845b8181101561489057835183529284019291840191600101614874565b50909695505050505050565b60c0815260006148af60c08301896143fe565b82810360208401526148c181896143fe565b905082810360408401526148d581886143fe565b905082810360608401526148e981876143fe565b905082810360808401526148fd81866143fe565b91505082151560a0830152979650505050505050565b6000806040838503121561492657600080fd5b61492f83614456565b915061482d60208401614607565b60008060006060848603121561495257600080fd5b8335925060208401359150604084013567ffffffffffffffff81111561497757600080fd5b61498386828701614564565b9150509250925092565b600080600080608085870312156149a357600080fd5b6149ac85614456565b93506149ba60208601614456565b925060408501359150606085013567ffffffffffffffff8111156149dd57600080fd5b8501601f810187136149ee57600080fd5b6149fd87823560208401614526565b91505092959194509250565b60008060408385031215614a1c57600080fd5b614a2583614456565b915061482d60208401614456565b600181811c90821680614a4757607f821691505b602082108114156134d457634e487b7160e01b600052602260045260246000fd5b6020808252600a908201526927b7363c9030b236b4b760b11b604082015260600190565b60208082526010908201526f13db9b1e481a59881d5b9b1bd8dad95960821b604082015260600190565b6020808252601c908201527f4f6e6c7920617274697374206f72205261696e626f776c697374656400000000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008219821115614b1657614b16614aed565b500190565b60208082526012908201527113db9b1e4814985a5b989bdddb1a5cdd195960721b604082015260600190565b60008351614b598184602088016143d2565b835190830190614b6d8183602088016143d2565b01949350505050565b634e487b7160e01b600052603260045260246000fd5b6020808252600b908201526a13db9b1e48185c9d1a5cdd60aa1b604082015260600190565b600060208284031215614bc357600080fd5b815167ffffffffffffffff811115614bda57600080fd5b8201601f81018413614beb57600080fd5b8051614bf9614534826144fe565b818152856020838501011115614c0e57600080fd5b6110cd8260208301602086016143d2565b600082821015614c3157614c31614aed565b500390565b6000816000190483118215151615614c5057614c50614aed565b500290565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090614c88908301846143fe565b9695505050505050565b600060208284031215614ca457600080fd5b81516143cb81614398565b6000600019821415614cc357614cc3614aed565b5060010190565b600082614ce757634e487b7160e01b600052601260045260246000fd5b500490565b600060ff821660ff84168060ff03821115614d0957614d09614aed565b019392505050565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220fb18f0986350b3e9b05f9a7d25b3840ea8d032b8e802a4014b8527ac7989ed0164736f6c63430008090033

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

0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000096e74656e742e617274000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054e54454e54000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _tokenName (string): ntent.art
Arg [1] : _tokenSymbol (string): NTENT

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [3] : 6e74656e742e6172740000000000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [5] : 4e54454e54000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

20742:18194:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1943:144;;;;;;:::i;:::-;-1:-1:-1;;;;;;2046:33:0;2022:4;2046:33;;;;;;;;;;;;;;1943:144;;;;565:14:1;;558:22;540:41;;528:2;513:18;1943:144:0;;;;;;;;20308:85;;;:::i;:::-;;;;;;;:::i;10135:213::-;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1692:32:1;;;1674:51;;1662:2;1647:18;10135:213:0;1528:203:1;9689:438:0;;;;;;:::i;:::-;;:::i;:::-;;26734:120;;;;;;:::i;:::-;;:::i;29150:204::-;;;;;;:::i;:::-;;:::i;24376:647::-;;;;;;:::i;:::-;;:::i;:::-;;;4412:25:1;;;4400:2;4385:18;24376:647:0;4266:177:1;15503:105:0;15583:10;:17;15503:105;;27869:1063;;;;;;:::i;:::-;;:::i;22117:53::-;;;;;;:::i;:::-;;;;;;;;;;;;;;22381:47;;;;;;:::i;:::-;;;;;;;;;;;;;;;;22013:35;;;;;;10785:299;;;;;;:::i;:::-;;:::i;30875:216::-;;;;;;:::i;:::-;;:::i;22057:53::-;;;;;;:::i;:::-;;:::i;23642:144::-;;;;;;:::i;:::-;;:::i;34803:188::-;;;;;;:::i;:::-;;:::i;37153:334::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;15252:241::-;;;;;;:::i;:::-;;:::i;26176:115::-;;;;;;:::i;:::-;;:::i;30691:176::-;;;;;;:::i;:::-;;:::i;34088:486::-;;;;;;:::i;:::-;;:::i;33405:175::-;;;;;;:::i;:::-;;:::i;26862:124::-;;;;;;:::i;:::-;;:::i;33191:206::-;;;;;;:::i;:::-;;:::i;11092:143::-;;;;;;:::i;:::-;;:::i;26490:112::-;;;;;;:::i;:::-;;:::i;36463:511::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;:::i;21979:27::-;;;;;-1:-1:-1;;;;;21979:27:0;;;15618:208;;;;;;:::i;:::-;;:::i;33795:285::-;;;;;;:::i;:::-;;:::i;22242:48::-;;;;;;:::i;:::-;;;;;;;;;;;;;;9444:237;;;;;;:::i;:::-;;:::i;29598:417::-;;;;;;:::i;:::-;;:::i;27483:197::-;;;;;;:::i;:::-;;:::i;33588:199::-;;;;;;:::i;:::-;;:::i;9216:220::-;;;;;;:::i;:::-;;:::i;26299:183::-;;;;;;:::i;:::-;;:::i;26998:154::-;;;;;;:::i;:::-;27070:13;27103:41;;;:29;:41;;;;;;;26998:154;22435:51;;;;;;:::i;:::-;;;;;;;;;;;;;;;;31099:489;;;;;;:::i;:::-;;:::i;37645:126::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;27160:154::-;;;;;;:::i;:::-;;:::i;35517:938::-;;;;;;:::i;:::-;35584:21;35844:36;;;:24;:36;;;;;;;;;35912:29;:41;;;;;;;35978:8;:20;;;;;;;:32;;;;36038:35;;;;36093:27;;;;36150:37;;;;36213:33;;;;36276:37;;;;36409:38;;;;;-1:-1:-1;;;;;35844:36:0;;;;35912:41;;35978:32;;36038:35;;36093:27;;;;;;;;;36150:37;;;;36213:33;;;;36276:37;;;;-1:-1:-1;;;36342:36:0;;;;;35517:938;;;;;-1:-1:-1;;;;;9590:15:1;;;9572:34;;9637:2;9622:18;;9615:34;;;;9665:18;;9658:34;;;;9723:2;9708:18;;9701:34;;;;9779:14;;9772:22;9766:3;9751:19;;9744:51;9832:15;;;9552:3;9811:19;;9804:44;9885:15;;9879:3;9864:19;;9857:44;9938:15;;;9932:3;9917:19;;9910:44;9998:14;;9991:22;9985:3;9970:19;;9963:51;10045:3;10030:19;;10023:35;;;;9521:3;9506:19;35517:938:0;9147:917:1;36982:163:0;;;;;;:::i;:::-;;:::i;34999:510::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;:::i;34582:213::-;;;;;;:::i;:::-;;:::i;20507:89::-;;;:::i;28940:202::-;;;;;;:::i;:::-;;:::i;25796:368::-;;;;;;:::i;:::-;;:::i;27688:173::-;;;;;;:::i;:::-;;:::i;10356:257::-;;;;;;:::i;:::-;;:::i;30491:192::-;;;;;;:::i;:::-;;:::i;21840:59::-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;21840:59:0;;;30027:214;;;;;;:::i;:::-;;:::i;31914:312::-;;;;;;:::i;:::-;;:::i;32234:318::-;;;;;;:::i;:::-;;:::i;29362:224::-;;;;;;:::i;:::-;;:::i;11243:277::-;;;;;;:::i;:::-;;:::i;26610:116::-;;;;;;:::i;:::-;;:::i;37495:142::-;;;;;;:::i;:::-;;:::i;30253:230::-;;;;;;:::i;:::-;;:::i;32955:228::-;;;;;;:::i;:::-;;:::i;37779:1154::-;;;;;;:::i;:::-;;:::i;27322:153::-;;;;;;:::i;:::-;;:::i;32560:387::-;;;;;;:::i;:::-;;:::i;31596:310::-;;;;;;:::i;:::-;;:::i;22495:32::-;;;;;;10621:156;;;;;;:::i;:::-;;:::i;22297:48::-;;;;;;:::i;:::-;;;;;;;;;;;;;;21906:64;;;;;;:::i;:::-;;;;;;;;;;;;;;22354:20;;;;;-1:-1:-1;;;;;22354:20:0;;;20308:85;20347:13;20380:5;20373:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20308:85;:::o;10135:213::-;10203:7;11618:20;;;:11;:20;;;;;;-1:-1:-1;;;;;11618:20:0;10223:73;;;;-1:-1:-1;;;10223:73:0;;13462:2:1;10223:73:0;;;13444:21:1;13501:2;13481:18;;;13474:30;13540:34;13520:18;;;13513:62;-1:-1:-1;;;13591:18:1;;;13584:42;13643:19;;10223:73:0;;;;;;;;;-1:-1:-1;10316:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;10316:24:0;;10135:213::o;9689:438::-;9770:13;9786:16;9794:7;9786;:16::i;:::-;9770:32;;9827:5;-1:-1:-1;;;;;9821:11:0;:2;-1:-1:-1;;;;;9821:11:0;;;9813:57;;;;-1:-1:-1;;;9813:57:0;;13875:2:1;9813:57:0;;;13857:21:1;13914:2;13894:18;;;13887:30;13953:34;13933:18;;;13926:62;-1:-1:-1;;;14004:18:1;;;13997:31;14045:19;;9813:57:0;13673:397:1;9813:57:0;9891:10;-1:-1:-1;;;;;9891:19:0;;;;:58;;;9914:35;9931:5;9938:10;9914:16;:35::i;:::-;9883:150;;;;-1:-1:-1;;;9883:150:0;;14277:2:1;9883:150:0;;;14259:21:1;14316:2;14296:18;;;14289:30;14355:34;14335:18;;;14328:62;14426:26;14406:18;;;14399:54;14470:19;;9883:150:0;14075:420:1;9883:150:0;10046:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;10046:29:0;-1:-1:-1;;;;;10046:29:0;;;;;;;;;10091:28;;10046:24;;10091:28;;;;;;;9759:368;9689:438;;:::o;26734:120::-;23013:5;;-1:-1:-1;;;;;23013:5:0;22999:10;:19;22991:42;;;;-1:-1:-1;;;22991:42:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26810:29:0::1;;::::0;;;:19:::1;:29;::::0;;;;:36;;-1:-1:-1;;26810:36:0::1;26842:4;26810:36;::::0;;26734:120::o;29150:204::-;22730:20;;;;:8;:20;;;;;:27;;;:20;;:27;;;;;22729:28;22721:57;;;;-1:-1:-1;;;22721:57:0;;;;;;;:::i;:::-;23277:10:::1;23261:27;::::0;;;:15:::1;:27;::::0;;;;;29276:10;;23261:27:::1;;::::0;:81:::1;;-1:-1:-1::0;23306:36:0::1;::::0;;;:24:::1;:36;::::0;;;;;-1:-1:-1;;;;;23306:36:0::1;23292:10;:50;23261:81;23253:122;;;;-1:-1:-1::0;;;23253:122:0::1;;;;;;;:::i;:::-;29306:20:::2;::::0;;;:8:::2;:20;::::0;;;;;;;:40;;::::2;::::0;;::::2;::::0;::::2;:::i;:::-;;22789:1:::1;29150:204:::0;;;:::o;24376:647::-;24511:10;24454:16;24491:31;;;:19;:31;;;;;;;;24483:79;;;;-1:-1:-1;;;24483:79:0;;15743:2:1;24483:79:0;;;15725:21:1;15782:2;15762:18;;;15755:30;15821:34;15801:18;;;15794:62;-1:-1:-1;;;15872:18:1;;;15865:33;15915:19;;24483:79:0;15541:399:1;24483:79:0;24621:20;;;;:8;:20;;;;;:35;;;;24581:32;;;;;:36;;24616:1;24581:36;:::i;:::-;:75;;24573:111;;;;-1:-1:-1;;;24573:111:0;;16412:2:1;24573:111:0;;;16394:21:1;16451:2;16431:18;;;16424:30;16490:25;16470:18;;;16463:53;16533:18;;24573:111:0;16210:347:1;24573:111:0;24703:20;;;;:8;:20;;;;;:27;;;;;;;;;:74;;-1:-1:-1;24741:36:0;;;;:24;:36;;;;;;-1:-1:-1;;;;;24734:43:0;;;24741:36;;24734:43;24703:74;24695:116;;;;-1:-1:-1;;;24695:116:0;;16764:2:1;24695:116:0;;;16746:21:1;16803:2;16783:18;;;16776:30;16842:31;16822:18;;;16815:59;16891:18;;24695:116:0;16562:353:1;24695:116:0;24831:20;;;;:8;:20;;;;;:27;;;;;;;;24830:28;;:75;;-1:-1:-1;24869:36:0;;;;:24;:36;;;;;;-1:-1:-1;;;;;24862:43:0;;;24869:36;;24862:43;24830:75;24822:108;;;;-1:-1:-1;;;24822:108:0;;17122:2:1;24822:108:0;;;17104:21:1;17161:2;17141:18;;;17134:30;-1:-1:-1;;;17180:18:1;;;17173:50;17240:18;;24822:108:0;16920:344:1;24822:108:0;24943:15;24961:27;24972:3;24977:10;24961;:27::i;:::-;24943:45;24376:647;-1:-1:-1;;;;;24376:647:0:o;27869:1063::-;23125:10;23109:27;;;;:15;:27;;;;;;;;23101:58;;;;-1:-1:-1;;;23101:58:0;;;;;;;:::i;:::-;28121:13:::1;::::0;28101:17:::1;28145:35:::0;;;:24:::1;:35;::::0;;;;;;;:52;;-1:-1:-1;;;;;;28145:52:0::1;-1:-1:-1::0;;;;;28145:52:0;::::1;;::::0;;28208:8:::1;:19:::0;;;;;:39;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;28258:19:0::1;::::0;;;:8:::1;:19;::::0;;;;;;;:36:::1;::::0;::::1;:56:::0;;-1:-1:-1;;;;;;28258:56:0::1;-1:-1:-1::0;;;;;28258:56:0;::::1;;::::0;;28325:35:::1;::::0;::::1;:54:::0;;-1:-1:-1;;;;28325:54:0::1;-1:-1:-1::0;;;28325:54:0;::::1;;;;::::0;;28390:37:::1;::::0;::::1;:58:::0;;;28459:29:::1;:40:::0;;;;;;:62;;;28532:19;;;;:26:::1;::::0;::::1;:31:::0;;;-1:-1:-1;;28532:31:0;;::::1;;::::0;;28574:32:::1;::::0;::::1;:34:::0;;;;28619:27:::1;::::0;::::1;:36:::0;;-1:-1:-1;;28619:36:0::1;::::0;::::1;;;::::0;;21708:9:::1;28666:34:::0;::::1;:48:::0;28619:36;28725:156:::1;;28791:5;28755:19:::0;;;:8:::1;:19;::::0;;;;:33:::1;;:41:::0;;-1:-1:-1;;28755:41:0::1;::::0;;28725:156:::1;;;28829:19;::::0;;;:8:::1;:19;::::0;;;;:33:::1;;:40:::0;;-1:-1:-1;;28829:40:0::1;28865:4;28829:40;::::0;;28725:156:::1;28907:13;::::0;:17:::1;::::0;28923:1:::1;28907:17;:::i;:::-;28891:13;:33:::0;-1:-1:-1;;;;;;;;27869:1063:0:o;10785:299::-;10938:39;10957:10;10969:7;10938:18;:39::i;:::-;10930:101;;;;-1:-1:-1;;;10930:101:0;;17818:2:1;10930:101:0;;;17800:21:1;17857:2;17837:18;;;17830:30;17896:34;17876:18;;;17869:62;-1:-1:-1;;;17947:18:1;;;17940:47;18004:19;;10930:101:0;17616:413:1;10930:101:0;11044:32;11058:4;11064:2;11068:7;11044:13;:32::i;:::-;10785:299;;;:::o;30875:216::-;22730:20;;;;:8;:20;;;;;:27;;;:20;;:27;;;;;22729:28;22721:57;;;;-1:-1:-1;;;22721:57:0;;;;;;;:::i;:::-;23277:10:::1;23261:27;::::0;;;:15:::1;:27;::::0;;;;;31007:10;;23261:27:::1;;::::0;:81:::1;;-1:-1:-1::0;23306:36:0::1;::::0;;;:24:::1;:36;::::0;;;;;-1:-1:-1;;;;;23306:36:0::1;23292:10;:50;23261:81;23253:122;;;;-1:-1:-1::0;;;23253:122:0::1;;;;;;;:::i;:::-;31037:20:::2;::::0;;;:8:::2;:20;::::0;;;;;;;:46;;::::2;::::0;:28:::2;::::0;;::::2;::::0;:46;::::2;::::0;::::2;:::i;22057:53::-:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23642:144::-;23717:13;23773:1;23775;23756:21;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23742:36;;23642:144;;;;:::o;34803:188::-;34879:28;;;;:18;:28;;;;;;;;;23277:10;23261:27;;:15;:27;;;;;;;;;;:81;;-1:-1:-1;23306:36:0;;;;:24;:36;;;;;;-1:-1:-1;;;;;23306:36:0;23292:10;:50;23261:81;23253:122;;;;-1:-1:-1;;;23253:122:0;;;;;;;:::i;:::-;34934:49:::1;34954:28:::0;;;:18:::1;:28;::::0;;;;;;;;34934:49;;:19:::1;:49:::0;;;;;34927:56:::1;::::0;::::1;:::i;:::-;34803:188:::0;;:::o;37153:334::-;37282:12;37324:20;;;:8;:20;;;;;:35;;37307:52;;37218:28;;;;37282:12;;37307:52;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37391:8;:20;37400:10;37391:20;;;;;;;;;;;:39;;37370:60;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;37451:20:0;;;;-1:-1:-1;;37451:8:0;:20;;;;;;:28;;;37153:334;;37451:28;;;;;;;37153:334;-1:-1:-1;;37153:334:0:o;15252:241::-;15341:7;15377:16;15387:5;15377:9;:16::i;:::-;15369:5;:24;15361:80;;;;-1:-1:-1;;;15361:80:0;;18711:2:1;15361:80:0;;;18693:21:1;18750:2;18730:18;;;18723:30;18789:34;18769:18;;;18762:62;-1:-1:-1;;;18840:18:1;;;18833:41;18891:19;;15361:80:0;18509:407:1;15361:80:0;-1:-1:-1;;;;;15459:19:0;;;;;;:12;:19;;;;;:26;;15479:5;;15459:26;;;;;;:::i;:::-;;;;;;;;;15452:33;;15252:241;;;;:::o;26176:115::-;23013:5;;-1:-1:-1;;;;;23013:5:0;22999:10;:19;22991:42;;;;-1:-1:-1;;;22991:42:0;;;;;;;:::i;:::-;26255:12:::1;:28:::0;;-1:-1:-1;;;;;;26255:28:0::1;-1:-1:-1::0;;;;;26255:28:0;;;::::1;::::0;;;::::1;::::0;;26176:115::o;30691:176::-;22879:36;;;;:24;:36;;;;;;;;-1:-1:-1;;;;;22879:36:0;22865:10;:50;22857:74;;;;-1:-1:-1;;;22857:74:0;;;;;;;:::i;:::-;30813:20:::1;::::0;;;:8:::1;:20;::::0;;;;;;;:46;;::::1;::::0;:28:::1;::::0;;::::1;::::0;:46;::::1;::::0;::::1;:::i;:::-;;30691:176:::0;;;:::o;34088:486::-;22730:20;;;;:8;:20;;;;;:27;;;:20;;:27;;;;;22729:28;22721:57;;;;-1:-1:-1;;;22721:57:0;;;;;;;:::i;:::-;23277:10:::1;23261:27;::::0;;;:15:::1;:27;::::0;;;;;34191:10;;23261:27:::1;;::::0;:81:::1;;-1:-1:-1::0;23306:36:0::1;::::0;;;:24:::1;:36;::::0;;;;;-1:-1:-1;;;;;23306:36:0::1;23292:10;:50;23261:81;23253:122;;;;-1:-1:-1::0;;;23253:122:0::1;;;;;;;:::i;:::-;34227:20:::2;::::0;;;:8:::2;:20;::::0;;;;:32:::2;;::::0;:37;34219:89:::2;;;::::0;-1:-1:-1;;;34219:89:0;;19595:2:1;34219:89:0::2;::::0;::::2;19577:21:1::0;19634:2;19614:18;;;19607:30;19673:34;19653:18;;;19646:62;-1:-1:-1;;;19724:18:1;;;19717:37;19771:19;;34219:89:0::2;19393:403:1::0;34219:89:0::2;34323:20;::::0;;;:8:::2;:20;::::0;;;;:28:::2;;::::0;::::2;;34319:177;;;34405:5;34368:20:::0;;;:8:::2;:20;::::0;;;;:34:::2;;:42:::0;;-1:-1:-1;;34368:42:0::2;::::0;;34319:177:::2;;;34443:20;::::0;;;:8:::2;:20;::::0;;;;:34:::2;;:41:::0;;-1:-1:-1;;34443:41:0::2;34480:4;34443:41;::::0;;34319:177:::2;-1:-1:-1::0;;34538:20:0::2;::::0;;;:8:::2;:20;::::0;;;;:28:::2;;::::0;;-1:-1:-1;;34506:60:0;::::2;34538:28;::::0;;::::2;34537:29;34506:60;::::0;;34088:486::o;33405:175::-;22879:36;;;;:24;:36;;;;;;;;-1:-1:-1;;;;;22879:36:0;22865:10;:50;22857:74;;;;-1:-1:-1;;;22857:74:0;;;;;;;:::i;:::-;33523:20:::1;::::0;;;:8:::1;:20;::::0;;;;;;;:49;;::::1;::::0;:35:::1;::::0;;::::1;::::0;:49;::::1;::::0;::::1;:::i;26862:124::-:0;23013:5;;-1:-1:-1;;;;;23013:5:0;22999:10;:19;22991:42;;;;-1:-1:-1;;;22991:42:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26941:29:0::1;26973:5;26941:29:::0;;;:19:::1;:29;::::0;;;;:37;;-1:-1:-1;;26941:37:0::1;::::0;;26862:124::o;33191:206::-;22730:20;;;;:8;:20;;;;;:27;;;:20;;:27;;;;;22729:28;22721:57;;;;-1:-1:-1;;;22721:57:0;;;;;;;:::i;:::-;23277:10:::1;23261:27;::::0;;;:15:::1;:27;::::0;;;;;33318:10;;23261:27:::1;;::::0;:81:::1;;-1:-1:-1::0;23306:36:0::1;::::0;;;:24:::1;:36;::::0;;;;;-1:-1:-1;;;;;23306:36:0::1;23292:10;:50;23261:81;23253:122;;;;-1:-1:-1::0;;;23253:122:0::1;;;;;;;:::i;:::-;33348:20:::2;::::0;;;:8:::2;:20;::::0;;;;;;;:41;;::::2;::::0;:29:::2;::::0;;::::2;::::0;:41;::::2;::::0;::::2;:::i;11092:143::-:0;11188:39;11205:4;11211:2;11215:7;11188:39;;;;;;;;;;;;:16;:39::i;26490:112::-;23013:5;;-1:-1:-1;;;;;23013:5:0;22999:10;:19;22991:42;;;;-1:-1:-1;;;22991:42:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26562:25:0::1;;::::0;;;:15:::1;:25;::::0;;;;:32;;-1:-1:-1;;26562:32:0::1;26590:4;26562:32;::::0;;26490:112::o;36463:511::-;36531:24;36557:19;36578:18;36598:22;36622:11;36635;36672:8;:20;36681:10;36672:20;;;;;;;;;;;:31;;36659:44;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;36728:20:0;;;;:8;:20;;;;;:32;;;;36787:34;;;;36843:29;;;;36832:40;;36659:44;;-1:-1:-1;36728:32:0;;-1:-1:-1;36787:34:0;;;;;-1:-1:-1;36843:29:0;36832:40;;-1:-1:-1;36832:40:0;-1:-1:-1;36832:40:0;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;36892:20:0;;;;-1:-1:-1;;36892:8:0;:20;;;;;;:27;;;36463:511;;;;;;36832:40;;36892:27;;;;;;;36939;;;;;-1:-1:-1;36463:511:0;-1:-1:-1;;36463:511:0:o;15618:208::-;15685:7;15721:13;15583:10;:17;;15503:105;15721:13;15713:5;:21;15705:78;;;;-1:-1:-1;;;15705:78:0;;20003:2:1;15705:78:0;;;19985:21:1;20042:2;20022:18;;;20015:30;20081:34;20061:18;;;20054:62;-1:-1:-1;;;20132:18:1;;;20125:42;20184:19;;15705:78:0;19801:408:1;15705:78:0;15801:10;15812:5;15801:17;;;;;;;;:::i;:::-;;;;;;;;;15794:24;;15618:208;;;:::o;33795:285::-;23277:10;23261:27;;;;:15;:27;;;;;;33880:10;;23261:27;;;:81;;-1:-1:-1;23306:36:0;;;;:24;:36;;;;;;-1:-1:-1;;;;;23306:36:0;23292:10;:50;23261:81;23253:122;;;;-1:-1:-1;;;23253:122:0;;;;;;;:::i;:::-;33919:20:::1;::::0;;;:8:::1;:20;::::0;;;;:28:::1;;::::0;::::1;;33918:29;33910:91;;;::::0;-1:-1:-1;;;33910:91:0;;20416:2:1;33910:91:0::1;::::0;::::1;20398:21:1::0;20455:2;20435:18;;;20428:30;20494:34;20474:18;;;20467:62;-1:-1:-1;;;20545:18:1;;;20538:47;20602:19;;33910:91:0::1;20214:413:1::0;33910:91:0::1;-1:-1:-1::0;34044:20:0::1;::::0;;;:8:::1;:20;::::0;;;;:28:::1;;::::0;;-1:-1:-1;;34012:60:0;::::1;34044:28;::::0;;;::::1;;;34043:29;34012:60:::0;;::::1;;::::0;;33795:285::o;9444:237::-;9508:7;9544:20;;;:11;:20;;;;;;-1:-1:-1;;;;;9544:20:0;9583:19;9575:73;;;;-1:-1:-1;;;9575:73:0;;20834:2:1;9575:73:0;;;20816:21:1;20873:2;20853:18;;;20846:30;20912:34;20892:18;;;20885:62;-1:-1:-1;;;20963:18:1;;;20956:39;21012:19;;9575:73:0;20632:405:1;9575:73:0;9668:5;9444:237;-1:-1:-1;;9444:237:0:o;29598:417::-;22730:20;;;;:8;:20;;;;;:27;;;:20;;:27;;;;;22729:28;22721:57;;;;-1:-1:-1;;;22721:57:0;;;;;;;:::i;:::-;23125:10:::1;23109:27;::::0;;;:15:::1;:27;::::0;;;;;::::1;;23101:58;;;;-1:-1:-1::0;;;23101:58:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;29807:20:0::2;::::0;;;:8:::2;:20;::::0;;;;;:37:::2;::::0;::::2;:64:::0;;-1:-1:-1;;;;;29807:64:0;;::::2;-1:-1:-1::0;;;;;;29807:64:0;;::::2;::::0;;;::::2;::::0;;;29882:36:::2;::::0;::::2;:55:::0;;;::::2;;-1:-1:-1::0;;;29882:55:0::2;-1:-1:-1::0;;;;29882:55:0;;::::2;::::0;;;::::2;::::0;;29948:38:::2;;:59:::0;29598:417::o;27483:197::-;23277:10;23261:27;;;;:15;:27;;;;;;27596:10;;23261:27;;;:81;;-1:-1:-1;23306:36:0;;;;:24;:36;;;;;;-1:-1:-1;;;;;23306:36:0;23292:10;:50;23261:81;23253:122;;;;-1:-1:-1;;;23253:122:0;;;;;;;:::i;:::-;-1:-1:-1;27619:36:0::1;::::0;;;:24:::1;:36;::::0;;;;;:53;;-1:-1:-1;;;;;;27619:53:0::1;-1:-1:-1::0;;;;;27619:53:0;;::::1;::::0;;;::::1;::::0;;27483:197::o;33588:199::-;22879:36;;;;:24;:36;;;;;;;;-1:-1:-1;;;;;22879:36:0;22865:10;:50;22857:74;;;;-1:-1:-1;;;22857:74:0;;;;;;;:::i;:::-;33718:20:::1;::::0;;;:8:::1;:20;::::0;;;;;;;:61;;::::1;::::0;:39;;;::::1;::::0;:61;;::::1;::::0;::::1;:::i;9216:220::-:0;9280:7;-1:-1:-1;;;;;9308:19:0;;9300:74;;;;-1:-1:-1;;;9300:74:0;;21244:2:1;9300:74:0;;;21226:21:1;21283:2;21263:18;;;21256:30;21322:34;21302:18;;;21295:62;-1:-1:-1;;;21373:18:1;;;21366:40;21423:19;;9300:74:0;21042:406:1;9300:74:0;-1:-1:-1;;;;;9394:24:0;;;;;;:17;:24;;;;;7169:14;9394:34;7077:114;26299:183;23013:5;;-1:-1:-1;;;;;23013:5:0;22999:10;:19;22991:42;;;;-1:-1:-1;;;22991:42:0;;;;;;;:::i;:::-;26412:2:::1;26392:16;:22;;26384:45;;;::::0;-1:-1:-1;;;26384:45:0;;21655:2:1;26384:45:0::1;::::0;::::1;21637:21:1::0;21694:2;21674:18;;;21667:30;-1:-1:-1;;;21713:18:1;;;21706:40;21763:18;;26384:45:0::1;21453:334:1::0;26384:45:0::1;26440:15;:34:::0;26299:183::o;31099:489::-;22879:36;;;;:24;:36;;;;;;;;-1:-1:-1;;;;;22879:36:0;22865:10;:50;22857:74;;;;-1:-1:-1;;;22857:74:0;;;;;;;:::i;:::-;31232:20:::1;::::0;;;:8:::1;:20;::::0;;;;:27:::1;;::::0;;;::::1;;;31231:28;::::0;:83:::1;;-1:-1:-1::0;31279:20:0::1;::::0;;;:8:::1;:20;::::0;;;;:35:::1;;::::0;31263:51;::::1;31231:83;31222:114;;;;-1:-1:-1::0;;;31222:114:0::1;;;;;;;:::i;:::-;31373:20;::::0;;;:8:::1;:20;::::0;;;;:32:::1;;::::0;31355:50;::::1;31347:94;;;::::0;-1:-1:-1;;;31347:94:0;;21994:2:1;31347:94:0::1;::::0;::::1;21976:21:1::0;22033:2;22013:18;;;22006:30;22072:33;22052:18;;;22045:61;22123:18;;31347:94:0::1;21792:355:1::0;31347:94:0::1;21708:9;31460:15;:30;;31452:64;;;::::0;-1:-1:-1;;;31452:64:0;;22354:2:1;31452:64:0::1;::::0;::::1;22336:21:1::0;22393:2;22373:18;;;22366:30;-1:-1:-1;;;22412:18:1;;;22405:51;22473:18;;31452:64:0::1;22152:345:1::0;31452:64:0::1;-1:-1:-1::0;31527:20:0::1;::::0;;;:8:::1;:20;::::0;;;;;:35:::1;;:53:::0;31099:489::o;37645:126::-;37706:16;37742:21;37757:5;-1:-1:-1;;;;;16803:19:0;16766:17;16803:19;;;:12;:19;;;;;;16704:126;37742:21;37735:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37645:126;;;:::o;27160:154::-;23125:10;23109:27;;;;:15;:27;;;;;;;;23101:58;;;;-1:-1:-1;;;23101:58:0;;;;;;;:::i;:::-;22730:20:::1;::::0;;;:8:::1;:20;::::0;;;;:27:::1;;::::0;:20;;:27;;::::1;;;22729:28;22721:57;;;;-1:-1:-1::0;;;22721:57:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;27272:20:0::2;::::0;;;:8:::2;:20;::::0;;;;:27:::2;;:34:::0;;-1:-1:-1;;27272:34:0::2;::::0;::::2;::::0;;27160:154::o;36982:163::-;37101:20;;;;:8;:20;;;;;;;;:36;;;:28;;:36;;;;;37094:43;;37069:13;;37101:36;37094:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36982:163;;;;:::o;34999:510::-;35064:25;35091:20;35113:25;35140:21;35163;35186:12;35225:8;:20;35234:10;35225:20;;;;;;;;;;;:25;;35211:39;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;35270:20:0;;;;:8;:20;;;;;:27;;35261:36;;35211:39;;-1:-1:-1;35270:27:0;35261:36;;-1:-1:-1;35261:36:0;-1:-1:-1;35261:36:0;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;35322:20:0;;;;:8;:20;;;;;:32;;35308:46;;35261:36;;-1:-1:-1;35322:32:0;35308:46;;-1:-1:-1;35308:46:0;-1:-1:-1;35308:46:0;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;35375:20:0;;;;:8;:20;;;;;:28;;35365:38;;35308:46;;-1:-1:-1;35375:28:0;35365:38;;-1:-1:-1;35365:38:0;-1:-1:-1;35365:38:0;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;35424:20:0;;;;:8;:20;;;;;:28;;35414:38;;35365;;-1:-1:-1;35424:28:0;35414:38;;-1:-1:-1;35414:38:0;-1:-1:-1;35414:38:0;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;35473:20:0;;;;-1:-1:-1;;35473:8:0;:20;;;;;;:28;;;34999:510;;;;;;;;35473:28;;;;;34999:510;-1:-1:-1;;34999:510:0:o;34582:213::-;34698:28;;;;:18;:28;;;;;;;;;23277:10;23261:27;;:15;:27;;;;;;;;;;:81;;-1:-1:-1;23306:36:0;;;;:24;:36;;;;;;-1:-1:-1;;;;;23306:36:0;23292:10;:50;23261:81;23253:122;;;;-1:-1:-1;;;23253:122:0;;;;;;;:::i;:::-;34746:29:::1;::::0;;;:19:::1;:29;::::0;;;;;;;:41;;::::1;::::0;;::::1;::::0;::::1;:::i;20507:89::-:0;20548:13;20581:7;20574:14;;;;;:::i;28940:202::-;22879:36;;;;:24;:36;;;;;;;;-1:-1:-1;;;;;22879:36:0;22865:10;:50;22857:74;;;;-1:-1:-1;;;22857:74:0;;;;;;;:::i;:::-;-1:-1:-1;29071:41:0::1;::::0;;;:29:::1;:41;::::0;;;;;:63;28940:202::o;25796:368::-;25923:10;25866:16;25903:31;;;:19;:31;;;;;;;;25895:79;;;;-1:-1:-1;;;25895:79:0;;22704:2:1;25895:79:0;;;22686:21:1;22743:2;22723:18;;;22716:30;22782:34;22762:18;;;22755:62;-1:-1:-1;;;22833:18:1;;;22826:33;22876:19;;25895:79:0;22502:399:1;25895:79:0;25985:28;25991:12;26005:7;25985:5;:28::i;:::-;26077:37;26086:27;;;:18;:27;;;;;;;;;26077:37;;:8;:37;;;;;;:50;;:54;;26130:1;26077:54;:::i;:::-;26024:37;26033:27;;;:18;:27;;;;;;;;;26024:37;;:8;:37;;;;;;:50;:107;-1:-1:-1;26033:27:0;25796:368;-1:-1:-1;25796:368:0:o;27688:173::-;23277:10;23261:27;;;;:15;:27;;;;;;27772:10;;23261:27;;;:81;;-1:-1:-1;23306:36:0;;;;:24;:36;;;;;;-1:-1:-1;;;;;23306:36:0;23292:10;:50;23261:81;23253:122;;;;-1:-1:-1;;;23253:122:0;;;;;;;:::i;:::-;-1:-1:-1;27826:20:0::1;::::0;;;:8:::1;:20;::::0;;;;:27:::1;;::::0;;-1:-1:-1;;27795:58:0;::::1;27826:27:::0;;;;::::1;;;27825:28;27795:58:::0;;::::1;;::::0;;27688:173::o;10356:257::-;-1:-1:-1;;;;;10445:16:0;;10451:10;10445:16;;10437:54;;;;-1:-1:-1;;;10437:54:0;;23108:2:1;10437:54:0;;;23090:21:1;23147:2;23127:18;;;23120:30;23186:27;23166:18;;;23159:55;23231:18;;10437:54:0;22906:349:1;10437:54:0;10523:10;10504:30;;;;:18;:30;;;;;;;;-1:-1:-1;;;;;10504:34:0;;;;;;;;;;;;:45;;-1:-1:-1;;10504:45:0;;;;;;;;;;10565:40;;540:41:1;;;10504:34:0;;10523:10;10565:40;;513:18:1;10565:40:0;;;;;;;10356:257;;:::o;30491:192::-;22879:36;;;;:24;:36;;;;;;;;-1:-1:-1;;;;;22879:36:0;22865:10;:50;22857:74;;;;-1:-1:-1;;;22857:74:0;;;;;;;:::i;:::-;30621:20:::1;::::0;;;:8:::1;:20;::::0;;;;;;;:54;;::::1;::::0;:32:::1;::::0;;::::1;::::0;:54;::::1;::::0;::::1;:::i;30027:214::-:0;22730:20;;;;:8;:20;;;;;:27;;;:20;;:27;;;;;22729:28;22721:57;;;;-1:-1:-1;;;22721:57:0;;;;;;;:::i;:::-;23125:10:::1;23109:27;::::0;;;:15:::1;:27;::::0;;;;;::::1;;23101:58;;;;-1:-1:-1::0;;;23101:58:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;30177:20:0::2;::::0;;;:8:::2;:20;::::0;;;;;:33:::2;;:56:::0;;-1:-1:-1;;;;;;30177:56:0::2;-1:-1:-1::0;;;;;30177:56:0;;::::2;::::0;;;::::2;::::0;;30027:214::o;31914:312::-;22730:20;;;;:8;:20;;;;;:27;;;:20;;:27;;;;;22729:28;22721:57;;;;-1:-1:-1;;;22721:57:0;;;;;;;:::i;:::-;23277:10:::1;23261:27;::::0;;;:15:::1;:27;::::0;;;;;32034:10;;23261:27:::1;;::::0;:81:::1;;-1:-1:-1::0;23306:36:0::1;::::0;;;:24:::1;:36;::::0;;;;;-1:-1:-1;;;;;23306:36:0::1;23292:10;:50;23261:81;23253:122;;;;-1:-1:-1::0;;;23253:122:0::1;;;;;;;:::i;:::-;32064:20:::2;::::0;;;:8:::2;:20;::::0;;;;;;;32093:32:::2;::::0;::::2;::::0;32064:62;;:28:::2;;:62:::0;;;;;:72;;::::2;::::0;;::::2;::::0;::::2;:::i;:::-;-1:-1:-1::0;32182:20:0::2;::::0;;;:8:::2;:20;::::0;;;;:32:::2;;::::0;:36:::2;::::0;32217:1:::2;32182:36;:::i;:::-;32147:20;::::0;;;:8:::2;:20;::::0;;;;;:32:::2;;:71:::0;;;;-1:-1:-1;;;31914:312:0:o;32234:318::-;22730:20;;;;:8;:20;;;;;:27;;;:20;;:27;;;;;22729:28;22721:57;;;;-1:-1:-1;;;22721:57:0;;;;;;;:::i;:::-;23277:10:::1;23261:27;::::0;;;:15:::1;:27;::::0;;;;;32376:10;;23261:27:::1;;::::0;:81:::1;;-1:-1:-1::0;23306:36:0::1;::::0;;;:24:::1;:36;::::0;;;;;-1:-1:-1;;;;;23306:36:0::1;23292:10;:50;23261:81;23253:122;;;;-1:-1:-1::0;;;23253:122:0::1;;;;;;;:::i;:::-;32426:20:::2;::::0;;;:8:::2;:20;::::0;;;;:32:::2;;::::0;32414:44;::::2;32406:78;;;::::0;-1:-1:-1;;;32406:78:0;;23462:2:1;32406:78:0::2;::::0;::::2;23444:21:1::0;23501:2;23481:18;;;23474:30;-1:-1:-1;;;23520:18:1;;;23513:51;23581:18;;32406:78:0::2;23260:345:1::0;32406:78:0::2;32495:20;::::0;;;:8:::2;:20;::::0;;;;;;;:39;;;:28:::2;;:39:::0;;;;;:49;;::::2;::::0;;::::2;::::0;::::2;:::i;:::-;;22789:1:::1;32234:318:::0;;;;:::o;29362:224::-;22730:20;;;;:8;:20;;;;;:27;;;:20;;:27;;;;;22729:28;22721:57;;;;-1:-1:-1;;;22721:57:0;;;;;;;:::i;:::-;23277:10:::1;23261:27;::::0;;;:15:::1;:27;::::0;;;;;29500:10;;23261:27:::1;;::::0;:81:::1;;-1:-1:-1::0;23306:36:0::1;::::0;;;:24:::1;:36;::::0;;;;;-1:-1:-1;;;;;23306:36:0::1;23292:10;:50;23261:81;23253:122;;;;-1:-1:-1::0;;;23253:122:0::1;;;;;;;:::i;:::-;29530:20:::2;::::0;;;:8:::2;:20;::::0;;;;;;;:48;;::::2;::::0;:27:::2;::::0;;::::2;::::0;:48;::::2;::::0;::::2;:::i;11243:277::-:0;11359:31;11372:4;11378:2;11382:7;11359:12;:31::i;:::-;11409:48;11432:4;11438:2;11442:7;11451:5;11409:22;:48::i;:::-;11401:111;;;;-1:-1:-1;;;11401:111:0;;23812:2:1;11401:111:0;;;23794:21:1;23851:2;23831:18;;;23824:30;23890:34;23870:18;;;23863:62;-1:-1:-1;;;23941:18:1;;;23934:48;23999:19;;11401:111:0;23610:414:1;26610:116:0;23013:5;;-1:-1:-1;;;;;23013:5:0;22999:10;:19;22991:42;;;;-1:-1:-1;;;22991:42:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26685:25:0::1;26713:5;26685:25:::0;;;:15:::1;:25;::::0;;;;:33;;-1:-1:-1;;26685:33:0::1;::::0;;26610:116::o;37495:142::-;37598:31;;;;:19;:31;;;;;;;;;37591:38;;;;;;;;;;;;;;;;;37563:16;;37591:38;;;37598:31;37591:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37495:142;;;:::o;30253:230::-;22730:20;;;;:8;:20;;;;;:27;;;:20;;:27;;;;;22729:28;22721:57;;;;-1:-1:-1;;;22721:57:0;;;;;;;:::i;:::-;23125:10:::1;23109:27;::::0;;;:15:::1;:27;::::0;;;;;::::1;;23101:58;;;;-1:-1:-1::0;;;23101:58:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;30411:20:0::2;::::0;;;:8:::2;:20;::::0;;;;;:37:::2;;:64:::0;;-1:-1:-1;;;;;;30411:64:0::2;-1:-1:-1::0;;;;;30411:64:0;;::::2;::::0;;;::::2;::::0;;30253:230::o;32955:228::-;22730:20;;;;:8;:20;;;;;:27;;;:20;;:27;;;;;22729:28;22721:57;;;;-1:-1:-1;;;22721:57:0;;;;;;;:::i;:::-;23277:10:::1;23261:27;::::0;;;:15:::1;:27;::::0;;;;;33093:10;;23261:27:::1;;::::0;:81:::1;;-1:-1:-1::0;23306:36:0::1;::::0;;;:24:::1;:36;::::0;;;;;-1:-1:-1;;;;;23306:36:0::1;23292:10;:50;23261:81;23253:122;;;;-1:-1:-1::0;;;23253:122:0::1;;;;;;;:::i;:::-;33123:20:::2;::::0;;;:8:::2;:20;::::0;;;;;;;:52;;::::2;::::0;:31:::2;::::0;;::::2;::::0;:52;::::2;::::0;::::2;:::i;37779:1154::-:0;37865:13;37846:8;22599:17;22607:8;11585:4;11618:20;;;:11;:20;;;;;;-1:-1:-1;;;;;11618:20:0;11656:19;;;11528:155;22599:17;22591:49;;;;-1:-1:-1;;;22591:49:0;;24231:2:1;22591:49:0;;;24213:21:1;24270:2;24250:18;;;24243:30;-1:-1:-1;;;24289:18:1;;;24282:49;24348:18;;22591:49:0;24029:343:1;22591:49:0;38026:1:::1;37968:28:::0;;;:18:::1;:28;::::0;;;;;;;;37959:38;;:8:::1;:38:::0;;;;;:55:::1;;::::0;-1:-1:-1;;;;;37959:55:0::1;:69:::0;37956:254:::1;;38044:27;38097:28:::0;;;:18:::1;:28;::::0;;;;;;;;38088:38;;:8:::1;:38:::0;;;;;;;:55:::1;;::::0;38166:32;;-1:-1:-1;;;38166:32:0;;::::1;::::0;::::1;4412:25:1::0;;;-1:-1:-1;;;;;38088:55:0;;::::1;::::0;;;38166:22:::1;::::0;4385:18:1;;38166:32:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;38166:32:0::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;38159:39;;;;;37956:254;38335:1;38295:29:::0;;;:19:::1;:29;::::0;;;;38289:43;;::::1;::::0;::::1;:::i;:::-;;;:47;38285:188;;;38372:38;38381:28:::0;;;:18:::1;:28;::::0;;;;;;;;38372:38;;:8:::1;:38:::0;;;;;;;:57:::1;38360:101:::0;;::::1;::::0;38372:57;38360:101:::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;38431:29:0::1;::::0;;;:19:::1;:29;::::0;;;;38360:101;;38431:29;;-1:-1:-1;38360:101:0::1;::::0;-1:-1:-1;38360:101:0::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:11;:101::i;:::-;38353:108;;;;38285:188;38569:38;38578:28:::0;;;:18:::1;:28;::::0;;;;;;;;38569:38;;:8:::1;:38:::0;;;;;:46:::1;;::::0;::::1;;38568:47;:97:::0;::::1;;;-1:-1:-1::0;38619:38:0::1;38628:28:::0;;;:18:::1;:28;::::0;;;;;;;;38619:38;;:8:::1;:38:::0;;;;;:46:::1;;::::0;::::1;::::0;::::1;;;38568:97;38564:256;;;38701:38;38710:28:::0;;;:18:::1;:28;::::0;;;;;;;;38701:38;;:8:::1;:38:::0;;;;;;;:57:::1;38689:119:::0;;::::1;::::0;38701:57;38689:119:::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;38760:38:0::1;38769:28:::0;;;:18:::1;:28;::::0;;;;;;;;38760:38;;:8:::1;:38:::0;;;;;:47:::1;;38689:119:::0;;38760:47;;-1:-1:-1;38689:119:0::1;::::0;-1:-1:-1;38689:119:0::1;:::i;38564:256::-;38851:38;38860:28:::0;;;:18:::1;:28;::::0;;;;;;;;38851:38;;:8:::1;:38:::0;;;;;:53:::1;;38839:86:::0;;::::1;::::0;38851:53;38839:86:::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38906:18;38915:8;38906;:18::i;38839:86::-;38832:93;;22651:1;37779:1154:::0;;;;:::o;27322:153::-;23125:10;23109:27;;;;:15;:27;;;;;;;;23101:58;;;;-1:-1:-1;;;23101:58:0;;;;;;;:::i;:::-;27440:20:::1;::::0;;;:8:::1;:20;::::0;;;;:27:::1;;::::0;;-1:-1:-1;;27409:58:0;::::1;27440:27:::0;;;;::::1;;;27439:28;27409:58:::0;;::::1;;::::0;;27322:153::o;32560:387::-;22730:20;;;;:8;:20;;;;;:27;;;:20;;:27;;;;;22729:28;22721:57;;;;-1:-1:-1;;;22721:57:0;;;;;;;:::i;:::-;23277:10:::1;23261:27;::::0;;;:15:::1;:27;::::0;;;;;32664:10;;23261:27:::1;;::::0;:81:::1;;-1:-1:-1::0;23306:36:0::1;::::0;;;:24:::1;:36;::::0;;;;;-1:-1:-1;;;;;23306:36:0::1;23292:10;:50;23261:81;23253:122;;;;-1:-1:-1::0;;;23253:122:0::1;;;;;;;:::i;:::-;32737:1:::2;32702:20:::0;;;:8:::2;:20;::::0;;;;:32:::2;;::::0;32694:79:::2;;;::::0;-1:-1:-1;;;32694:79:0;;25220:2:1;32694:79:0::2;::::0;::::2;25202:21:1::0;25259:2;25239:18;;;25232:30;25298:32;25278:18;;;25271:60;25348:18;;32694:79:0::2;25018:354:1::0;32694:79:0::2;32791:20;::::0;;;:8:::2;:20;::::0;;;;32820:32:::2;::::0;::::2;::::0;32791:28:::2;::::0;;::::2;::::0;:20;32820:36:::2;::::0;32855:1:::2;::::0;32820:36:::2;:::i;:::-;32791:66;;;;;;;;;;;;32784:73;;;;:::i;:::-;32903:20;::::0;;;:8:::2;:20;::::0;;;;:32:::2;;::::0;:36:::2;::::0;32938:1:::2;32903:36;:::i;:::-;32868:20;::::0;;;:8:::2;:20;::::0;;;;;:32:::2;;:71:::0;;;;-1:-1:-1;;32560:387:0:o;31596:310::-;22730:20;;;;:8;:20;;;;;:27;;;:20;;:27;;;;;22729:28;22721:57;;;;-1:-1:-1;;;22721:57:0;;;;;;;:::i;:::-;23277:10:::1;23261:27;::::0;;;:15:::1;:27;::::0;;;;;31703:10;;23261:27:::1;;::::0;:81:::1;;-1:-1:-1::0;23306:36:0::1;::::0;;;:24:::1;:36;::::0;;;;;-1:-1:-1;;;;;23306:36:0::1;23292:10;:50;23261:81;23253:122;;;;-1:-1:-1::0;;;23253:122:0::1;;;;;;;:::i;:::-;31739:20:::2;::::0;;;:8:::2;:20;::::0;;;;:32:::2;;::::0;:37;31731:86:::2;;;::::0;-1:-1:-1;;;31731:86:0;;25709:2:1;31731:86:0::2;::::0;::::2;25691:21:1::0;25748:2;25728:18;;;25721:30;25787:34;25767:18;;;25760:62;-1:-1:-1;;;25838:18:1;;;25831:34;25882:19;;31731:86:0::2;25507:400:1::0;31731:86:0::2;-1:-1:-1::0;;31864:20:0::2;::::0;;;:8:::2;:20;::::0;;;;:34:::2;;::::0;;-1:-1:-1;;31826:72:0;::::2;31864:34;::::0;;::::2;31863:35;31826:72;::::0;;31596:310::o;10621:156::-;-1:-1:-1;;;;;10734:25:0;;;10710:4;10734:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;10621:156::o;25031:753::-;25102:16;25184:20;;;:8;:20;;;;;:32;;;25102:16;;25156:24;21708:9;25193:10;25156:24;:::i;:::-;25155:61;;;;:::i;:::-;25264:20;;;;:8;:20;;;;;:32;;;25133:83;;-1:-1:-1;25264:36:0;;25299:1;25264:36;:::i;:::-;25229:20;;;;:8;:20;;;;;:32;;:71;;;:20;25389:12;25413:16;25428:1;25389:12;25413:16;:::i;:::-;25338:115;;;;;;26326:19:1;;;;26361:12;;26354:28;;;;25403:27:0;26398:12:1;;;;26391:28;;;;25432:10:0;26453:15:1;;-1:-1:-1;;26449:53:1;26435:12;;;26428:75;26519:13;;;26512:29;;;26557:13;;25338:115:0;;;-1:-1:-1;;25338:115:0;;;;;;;;;25328:126;;25338:115;25328:126;;;;25465:26;;;;:13;:26;;;;;:31;;;25507:19;;;:13;:19;;;;;:33;;;25328:126;-1:-1:-1;25553:23:0;25559:3;25479:11;25553:5;:23::i;:::-;25589:31;;;;:18;:31;;;;;;;;:44;;;25644:31;;;:19;:31;;;;;:49;;;;;;;;;;;;;;;;;;;25711:34;25623:10;;25608:11;;-1:-1:-1;;;;;25711:34:0;;;;;;-1:-1:-1;25765:11:0;25031:753;-1:-1:-1;;;25031:753:0:o;11691:333::-;11776:4;11618:20;;;:11;:20;;;;;;-1:-1:-1;;;;;11618:20:0;11793:73;;;;-1:-1:-1;;;11793:73:0;;26783:2:1;11793:73:0;;;26765:21:1;26822:2;26802:18;;;26795:30;26861:34;26841:18;;;26834:62;-1:-1:-1;;;26912:18:1;;;26905:42;26964:19;;11793:73:0;26581:408:1;11793:73:0;11877:13;11893:16;11901:7;11893;:16::i;:::-;11877:32;;11939:5;-1:-1:-1;;;;;11928:16:0;:7;-1:-1:-1;;;;;11928:16:0;;:51;;;;11972:7;-1:-1:-1;;;;;11948:31:0;:20;11960:7;11948:11;:20::i;:::-;-1:-1:-1;;;;;11948:31:0;;11928:51;:87;;;;11983:32;12000:5;12007:7;11983:16;:32::i;:::-;11920:96;11691:333;-1:-1:-1;;;;11691:333:0:o;15834:254::-;15929:38;15949:4;15955:2;15959:7;15929:19;:38::i;:::-;15980:47;16013:4;16019:7;15980:32;:47::i;:::-;16040:40;16068:2;16072:7;16040:27;:40::i;16315:381::-;16391:27;16403:5;16410:7;16391:11;:27::i;:::-;16431:48;16464:5;16471:7;16431:32;:48::i;:::-;16629:1;16600:26;;;:17;:26;;;;;:30;16643:45;16618:7;16643:36;:45::i;13307:352::-;13425:4;-1:-1:-1;;;;;13452:13:0;;5885:20;13447:60;;-1:-1:-1;13491:4:0;13484:11;;13447:60;13535:70;;-1:-1:-1;;;13535:70:0;;13519:13;;-1:-1:-1;;;;;13535:36:0;;;;;:70;;13572:10;;13584:4;;13590:7;;13599:5;;13535:70;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;13624:26:0;-1:-1:-1;;;13624:26:0;;-1:-1:-1;;13307:352:0;;;;;;:::o;23795:573::-;23845:27;23889:7;23885:50;;-1:-1:-1;;23913:10:0;;;;;;;;;;;;-1:-1:-1;;;23913:10:0;;;;;23795:573::o;23885:50::-;23954:2;23945:6;23986:69;23993:6;;23986:69;;24016:5;;;;:::i;:::-;;-1:-1:-1;24036:7:0;;-1:-1:-1;24041:2:0;24036:7;;:::i;:::-;;;23986:69;;;24065:17;24095:3;24085:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24085:14:0;-1:-1:-1;24065:34:0;-1:-1:-1;24119:3:0;24133:198;24140:7;;24133:198;;24168:3;24170:1;24168;:3;:::i;:::-;24164:7;-1:-1:-1;24186:10:0;24216:7;24221:2;24216;:7;:::i;:::-;:12;;24226:2;24216:12;:::i;:::-;24211:17;;:2;:17;:::i;:::-;24200:29;;:2;:29;:::i;:::-;24186:44;;24245:9;24264:4;24257:12;;24245:24;;24294:2;24284:4;24289:1;24284:7;;;;;;;;:::i;:::-;;;;:12;-1:-1:-1;;;;;24284:12:0;;;;;;;;-1:-1:-1;24311:8:0;24317:2;24311:8;;:::i;:::-;;;24149:182;;24133:198;;;-1:-1:-1;24355:4:0;23795:573;-1:-1:-1;;;;23795:573:0:o;16096:211::-;16169:24;16181:2;16185:7;16169:11;:24::i;:::-;16206:40;16234:2;16238:7;16206:27;:40::i;:::-;16259;16291:7;17139:10;:17;;17112:24;;;;:15;:24;;;;;:44;;;17167:24;;;;;;;;;;;;17035:164;12832:467;12954:4;-1:-1:-1;;;;;12934:24:0;:16;12942:7;12934;:16::i;:::-;-1:-1:-1;;;;;12934:24:0;;12926:78;;;;-1:-1:-1;;;12926:78:0;;28515:2:1;12926:78:0;;;28497:21:1;28554:2;28534:18;;;28527:30;28593:34;28573:18;;;28566:62;-1:-1:-1;;;28644:18:1;;;28637:39;28693:19;;12926:78:0;28313:405:1;12926:78:0;-1:-1:-1;;;;;13023:16:0;;13015:65;;;;-1:-1:-1;;;13015:65:0;;28925:2:1;13015:65:0;;;28907:21:1;28964:2;28944:18;;;28937:30;29003:34;28983:18;;;28976:62;-1:-1:-1;;;29054:18:1;;;29047:34;29098:19;;13015:65:0;28723:400:1;13015:65:0;13093:23;13108:7;13093:14;:23::i;:::-;-1:-1:-1;;;;;13129:23:0;;;;;;:17;:23;;;;;:35;;:33;:35::i;:::-;-1:-1:-1;;;;;13175:21:0;;;;;;:17;:21;;;;;:33;;:31;:33::i;:::-;13221:20;;;;:11;:20;;;;;;:25;;-1:-1:-1;;;;;;13221:25:0;-1:-1:-1;;;;;13221:25:0;;;;;;;;;13264:27;;13221:20;;13264:27;;;;;;;12832:467;;;:::o;17207:1142::-;-1:-1:-1;;;;;17498:18:0;;17473:22;17498:18;;;:12;:18;;;;;:25;:29;;17526:1;;17498:29;:::i;:::-;17538:18;17559:26;;;:17;:26;;;;;;17473:54;;-1:-1:-1;17692:28:0;;;17688:328;;-1:-1:-1;;;;;17759:18:0;;17737:19;17759:18;;;:12;:18;;;;;:34;;17778:14;;17759:34;;;;;;:::i;:::-;;;;;;;;;17737:56;;17843:11;17810:12;:18;17823:4;-1:-1:-1;;;;;17810:18:0;-1:-1:-1;;;;;17810:18:0;;;;;;;;;;;;17829:10;17810:30;;;;;;;;:::i;:::-;;;;;;;;;;;;:44;;;;17927:30;;;:17;:30;;;;;:43;;;17688:328;-1:-1:-1;;;;;18105:18:0;;;;;;:12;:18;;;;;:24;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;17288:1061;;17207:1142;;:::o;16840:186::-;-1:-1:-1;;;;;16954:16:0;;;;;;;:12;:16;;;;;;;;:23;;16925:26;;;:17;:26;;;;;:52;;;16988:16;;;:30;;;;;;;;;;;;;16840:186::o;12383:341::-;12486:5;-1:-1:-1;;;;;12466:25:0;:16;12474:7;12466;:16::i;:::-;-1:-1:-1;;;;;12466:25:0;;12458:75;;;;-1:-1:-1;;;12458:75:0;;29462:2:1;12458:75:0;;;29444:21:1;29501:2;29481:18;;;29474:30;29540:34;29520:18;;;29513:62;-1:-1:-1;;;29591:18:1;;;29584:35;29636:19;;12458:75:0;29260:401:1;12458:75:0;12546:23;12561:7;12546:14;:23::i;:::-;-1:-1:-1;;;;;12582:24:0;;;;;;:17;:24;;;;;:36;;:34;:36::i;:::-;12660:1;12629:20;;;:11;:20;;;;;;:33;;-1:-1:-1;;;;;;12629:33:0;;;12680:36;12641:7;;12660:1;-1:-1:-1;;;;;12680:36:0;;;;;12660:1;;12680:36;12383:341;;:::o;18359:1076::-;18637:10;:17;18612:22;;18637:21;;18657:1;;18637:21;:::i;:::-;18669:18;18690:24;;;:15;:24;;;;;;19063:10;:26;;18612:46;;-1:-1:-1;18690:24:0;;18612:46;;19063:26;;;;;;:::i;:::-;;;;;;;;;19041:48;;19127:11;19102:10;19113;19102:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;19207:28;;;:15;:28;;;;;;:41;;;19372:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;19426:1;19399:15;:24;19415:7;19399:24;;;;;;;;;;;:28;;;;18430:1005;;;18359:1076;:::o;12032:343::-;-1:-1:-1;;;;;12112:16:0;;12104:61;;;;-1:-1:-1;;;12104:61:0;;29868:2:1;12104:61:0;;;29850:21:1;;;29887:18;;;29880:30;29946:34;29926:18;;;29919:62;29998:18;;12104:61:0;29666:356:1;12104:61:0;11585:4;11618:20;;;:11;:20;;;;;;-1:-1:-1;;;;;11618:20:0;11656:19;12176:58;;;;-1:-1:-1;;;12176:58:0;;30229:2:1;12176:58:0;;;30211:21:1;30268:2;30248:18;;;30241:30;30307;30287:18;;;30280:58;30355:18;;12176:58:0;30027:352:1;12176:58:0;12247:20;;;;:11;:20;;;;;;;;:25;;-1:-1:-1;;;;;;12247:25:0;-1:-1:-1;;;;;12247:25:0;;;;;;;;12283:21;;:17;:21;;;;;:33;;:31;:33::i;:::-;12334;;12359:7;;-1:-1:-1;;;;;12334:33:0;;;12351:1;;12334:33;;12351:1;;12334:33;12032:343;;:::o;13667:175::-;13767:1;13731:24;;;:15;:24;;;;;;-1:-1:-1;;;;;13731:24:0;:38;13727:108;;13821:1;13786:24;;;:15;:24;;;;;:37;;-1:-1:-1;;;;;;13786:37:0;;;13727:108;13667:175;:::o;7298:107::-;7379:14;;:18;;7396:1;;7379:18;:::i;:::-;7362:35;;7298:107::o;7199:91::-;7281:1;7263:7;:14;;;:19;;;;;;;:::i;:::-;;;;-1:-1:-1;;;7199:91:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:131:1;-1:-1:-1;;;;;;88:32:1;;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;:::-;384:5;150:245;-1:-1:-1;;;150:245:1:o;592:258::-;664:1;674:113;688:6;685:1;682:13;674:113;;;764:11;;;758:18;745:11;;;738:39;710:2;703:10;674:113;;;805:6;802:1;799:13;796:48;;;-1:-1:-1;;840:1:1;822:16;;815:27;592:258::o;855:::-;897:3;935:5;929:12;962:6;957:3;950:19;978:63;1034:6;1027:4;1022:3;1018:14;1011:4;1004:5;1000:16;978:63;:::i;:::-;1095:2;1074:15;-1:-1:-1;;1070:29:1;1061:39;;;;1102:4;1057:50;;855:258;-1:-1:-1;;855:258:1:o;1118:220::-;1267:2;1256:9;1249:21;1230:4;1287:45;1328:2;1317:9;1313:18;1305:6;1287:45;:::i;1343:180::-;1402:6;1455:2;1443:9;1434:7;1430:23;1426:32;1423:52;;;1471:1;1468;1461:12;1423:52;-1:-1:-1;1494:23:1;;1343:180;-1:-1:-1;1343:180:1:o;1736:173::-;1804:20;;-1:-1:-1;;;;;1853:31:1;;1843:42;;1833:70;;1899:1;1896;1889:12;1833:70;1736:173;;;:::o;1914:254::-;1982:6;1990;2043:2;2031:9;2022:7;2018:23;2014:32;2011:52;;;2059:1;2056;2049:12;2011:52;2082:29;2101:9;2082:29;:::i;:::-;2072:39;2158:2;2143:18;;;;2130:32;;-1:-1:-1;;;1914:254:1:o;2173:186::-;2232:6;2285:2;2273:9;2264:7;2260:23;2256:32;2253:52;;;2301:1;2298;2291:12;2253:52;2324:29;2343:9;2324:29;:::i;2364:127::-;2425:10;2420:3;2416:20;2413:1;2406:31;2456:4;2453:1;2446:15;2480:4;2477:1;2470:15;2496:275;2567:2;2561:9;2632:2;2613:13;;-1:-1:-1;;2609:27:1;2597:40;;2667:18;2652:34;;2688:22;;;2649:62;2646:88;;;2714:18;;:::i;:::-;2750:2;2743:22;2496:275;;-1:-1:-1;2496:275:1:o;2776:187::-;2825:4;2858:18;2850:6;2847:30;2844:56;;;2880:18;;:::i;:::-;-1:-1:-1;2946:2:1;2925:15;-1:-1:-1;;2921:29:1;2952:4;2917:40;;2776:187::o;2968:338::-;3033:5;3062:53;3078:36;3107:6;3078:36;:::i;:::-;3062:53;:::i;:::-;3053:62;;3138:6;3131:5;3124:21;3178:3;3169:6;3164:3;3160:16;3157:25;3154:45;;;3195:1;3192;3185:12;3154:45;3244:6;3239:3;3232:4;3225:5;3221:16;3208:43;3298:1;3291:4;3282:6;3275:5;3271:18;3267:29;3260:40;2968:338;;;;;:::o;3311:222::-;3354:5;3407:3;3400:4;3392:6;3388:17;3384:27;3374:55;;3425:1;3422;3415:12;3374:55;3447:80;3523:3;3514:6;3501:20;3494:4;3486:6;3482:17;3447:80;:::i;3538:390::-;3616:6;3624;3677:2;3665:9;3656:7;3652:23;3648:32;3645:52;;;3693:1;3690;3683:12;3645:52;3729:9;3716:23;3706:33;;3790:2;3779:9;3775:18;3762:32;3817:18;3809:6;3806:30;3803:50;;;3849:1;3846;3839:12;3803:50;3872;3914:7;3905:6;3894:9;3890:22;3872:50;:::i;:::-;3862:60;;;3538:390;;;;;:::o;3933:328::-;4010:6;4018;4026;4079:2;4067:9;4058:7;4054:23;4050:32;4047:52;;;4095:1;4092;4085:12;4047:52;4118:29;4137:9;4118:29;:::i;:::-;4108:39;;4194:2;4183:9;4179:18;4166:32;4156:42;;4217:38;4251:2;4240:9;4236:18;4217:38;:::i;:::-;4207:48;;3933:328;;;;;:::o;4448:160::-;4513:20;;4569:13;;4562:21;4552:32;;4542:60;;4598:1;4595;4588:12;4613:746;4730:6;4738;4746;4754;4762;4770;4778;4831:3;4819:9;4810:7;4806:23;4802:33;4799:53;;;4848:1;4845;4838:12;4799:53;4888:9;4875:23;4921:18;4913:6;4910:30;4907:50;;;4953:1;4950;4943:12;4907:50;4976;5018:7;5009:6;4998:9;4994:22;4976:50;:::i;:::-;4966:60;;;5045:38;5079:2;5068:9;5064:18;5045:38;:::i;:::-;5035:48;;5130:2;5119:9;5115:18;5102:32;5092:42;;5153:38;5187:2;5176:9;5172:18;5153:38;:::i;:::-;5143:48;;5210:36;5241:3;5230:9;5226:19;5210:36;:::i;:::-;5200:46;;5293:3;5282:9;5278:19;5265:33;5255:43;;5317:36;5348:3;5337:9;5333:19;5317:36;:::i;:::-;5307:46;;4613:746;;;;;;;;;;:::o;5364:328::-;5441:6;5449;5457;5510:2;5498:9;5489:7;5485:23;5481:32;5478:52;;;5526:1;5523;5516:12;5478:52;5549:29;5568:9;5549:29;:::i;:::-;5539:39;;5597:38;5631:2;5620:9;5616:18;5597:38;:::i;:::-;5587:48;;5682:2;5671:9;5667:18;5654:32;5644:42;;5364:328;;;;;:::o;5697:543::-;5785:6;5793;5846:2;5834:9;5825:7;5821:23;5817:32;5814:52;;;5862:1;5859;5852:12;5814:52;5902:9;5889:23;5931:18;5972:2;5964:6;5961:14;5958:34;;;5988:1;5985;5978:12;5958:34;6011:50;6053:7;6044:6;6033:9;6029:22;6011:50;:::i;:::-;6001:60;;6114:2;6103:9;6099:18;6086:32;6070:48;;6143:2;6133:8;6130:16;6127:36;;;6159:1;6156;6149:12;6127:36;;6182:52;6226:7;6215:8;6204:9;6200:24;6182:52;:::i;6245:464::-;6464:2;6453:9;6446:21;6427:4;6490:45;6531:2;6520:9;6516:18;6508:6;6490:45;:::i;:::-;6583:9;6575:6;6571:22;6566:2;6555:9;6551:18;6544:50;6611:33;6637:6;6629;6611:33;:::i;:::-;6603:41;;;6694:6;6687:14;6680:22;6675:2;6664:9;6660:18;6653:50;6245:464;;;;;;:::o;6714:701::-;7005:3;6994:9;6987:22;6968:4;7032:46;7073:3;7062:9;7058:19;7050:6;7032:46;:::i;:::-;7114:6;7109:2;7098:9;7094:18;7087:34;7171:6;7164:14;7157:22;7152:2;7141:9;7137:18;7130:50;7228:9;7220:6;7216:22;7211:2;7200:9;7196:18;7189:50;7256:33;7282:6;7274;7256:33;:::i;:::-;7333:14;;7326:22;7320:3;7305:19;;7298:51;-1:-1:-1;;7393:14:1;;7386:22;7380:3;7365:19;;;7358:51;7248:41;6714:701;-1:-1:-1;;;;6714:701:1:o;7602:391::-;7685:6;7693;7701;7709;7762:3;7750:9;7741:7;7737:23;7733:33;7730:53;;;7779:1;7776;7769:12;7730:53;7815:9;7802:23;7792:33;;7844:38;7878:2;7867:9;7863:18;7844:38;:::i;:::-;7834:48;;7901:35;7932:2;7921:9;7917:18;7901:35;:::i;:::-;7602:391;;;;-1:-1:-1;7891:45:1;;7983:2;7968:18;7955:32;;-1:-1:-1;;7602:391:1:o;7998:254::-;8066:6;8074;8127:2;8115:9;8106:7;8102:23;8098:32;8095:52;;;8143:1;8140;8133:12;8095:52;8179:9;8166:23;8156:33;;8208:38;8242:2;8231:9;8227:18;8208:38;:::i;:::-;8198:48;;7998:254;;;;;:::o;8257:248::-;8325:6;8333;8386:2;8374:9;8365:7;8361:23;8357:32;8354:52;;;8402:1;8399;8392:12;8354:52;-1:-1:-1;;8425:23:1;;;8495:2;8480:18;;;8467:32;;-1:-1:-1;8257:248:1:o;8510:632::-;8681:2;8733:21;;;8803:13;;8706:18;;;8825:22;;;8652:4;;8681:2;8904:15;;;;8878:2;8863:18;;;8652:4;8947:169;8961:6;8958:1;8955:13;8947:169;;;9022:13;;9010:26;;9091:15;;;;9056:12;;;;8983:1;8976:9;8947:169;;;-1:-1:-1;9133:3:1;;8510:632;-1:-1:-1;;;;;;8510:632:1:o;10069:957::-;10432:3;10421:9;10414:22;10395:4;10459:46;10500:3;10489:9;10485:19;10477:6;10459:46;:::i;:::-;10553:9;10545:6;10541:22;10536:2;10525:9;10521:18;10514:50;10587:33;10613:6;10605;10587:33;:::i;:::-;10573:47;;10668:9;10660:6;10656:22;10651:2;10640:9;10636:18;10629:50;10702:33;10728:6;10720;10702:33;:::i;:::-;10688:47;;10783:9;10775:6;10771:22;10766:2;10755:9;10751:18;10744:50;10817:33;10843:6;10835;10817:33;:::i;:::-;10803:47;;10899:9;10891:6;10887:22;10881:3;10870:9;10866:19;10859:51;10927:33;10953:6;10945;10927:33;:::i;:::-;10919:41;;;11011:6;11004:14;10997:22;10991:3;10980:9;10976:19;10969:51;10069:957;;;;;;;;;:::o;11031:254::-;11096:6;11104;11157:2;11145:9;11136:7;11132:23;11128:32;11125:52;;;11173:1;11170;11163:12;11125:52;11196:29;11215:9;11196:29;:::i;:::-;11186:39;;11244:35;11275:2;11264:9;11260:18;11244:35;:::i;11290:458::-;11377:6;11385;11393;11446:2;11434:9;11425:7;11421:23;11417:32;11414:52;;;11462:1;11459;11452:12;11414:52;11498:9;11485:23;11475:33;;11555:2;11544:9;11540:18;11527:32;11517:42;;11610:2;11599:9;11595:18;11582:32;11637:18;11629:6;11626:30;11623:50;;;11669:1;11666;11659:12;11623:50;11692;11734:7;11725:6;11714:9;11710:22;11692:50;:::i;:::-;11682:60;;;11290:458;;;;;:::o;11753:667::-;11848:6;11856;11864;11872;11925:3;11913:9;11904:7;11900:23;11896:33;11893:53;;;11942:1;11939;11932:12;11893:53;11965:29;11984:9;11965:29;:::i;:::-;11955:39;;12013:38;12047:2;12036:9;12032:18;12013:38;:::i;:::-;12003:48;;12098:2;12087:9;12083:18;12070:32;12060:42;;12153:2;12142:9;12138:18;12125:32;12180:18;12172:6;12169:30;12166:50;;;12212:1;12209;12202:12;12166:50;12235:22;;12288:4;12280:13;;12276:27;-1:-1:-1;12266:55:1;;12317:1;12314;12307:12;12266:55;12340:74;12406:7;12401:2;12388:16;12383:2;12379;12375:11;12340:74;:::i;:::-;12330:84;;;11753:667;;;;;;;:::o;12425:260::-;12493:6;12501;12554:2;12542:9;12533:7;12529:23;12525:32;12522:52;;;12570:1;12567;12560:12;12522:52;12593:29;12612:9;12593:29;:::i;:::-;12583:39;;12641:38;12675:2;12664:9;12660:18;12641:38;:::i;12875:380::-;12954:1;12950:12;;;;12997;;;13018:61;;13072:4;13064:6;13060:17;13050:27;;13018:61;13125:2;13117:6;13114:14;13094:18;13091:38;13088:161;;;13171:10;13166:3;13162:20;13159:1;13152:31;13206:4;13203:1;13196:15;13234:4;13231:1;13224:15;14500:334;14702:2;14684:21;;;14741:2;14721:18;;;14714:30;-1:-1:-1;;;14775:2:1;14760:18;;14753:40;14825:2;14810:18;;14500:334::o;14839:340::-;15041:2;15023:21;;;15080:2;15060:18;;;15053:30;-1:-1:-1;;;15114:2:1;15099:18;;15092:46;15170:2;15155:18;;14839:340::o;15184:352::-;15386:2;15368:21;;;15425:2;15405:18;;;15398:30;15464;15459:2;15444:18;;15437:58;15527:2;15512:18;;15184:352::o;15945:127::-;16006:10;16001:3;15997:20;15994:1;15987:31;16037:4;16034:1;16027:15;16061:4;16058:1;16051:15;16077:128;16117:3;16148:1;16144:6;16141:1;16138:13;16135:39;;;16154:18;;:::i;:::-;-1:-1:-1;16190:9:1;;16077:128::o;17269:342::-;17471:2;17453:21;;;17510:2;17490:18;;;17483:30;-1:-1:-1;;;17544:2:1;17529:18;;17522:48;17602:2;17587:18;;17269:342::o;18034:470::-;18213:3;18251:6;18245:13;18267:53;18313:6;18308:3;18301:4;18293:6;18289:17;18267:53;:::i;:::-;18383:13;;18342:16;;;;18405:57;18383:13;18342:16;18439:4;18427:17;;18405:57;:::i;:::-;18478:20;;18034:470;-1:-1:-1;;;;18034:470:1:o;18921:127::-;18982:10;18977:3;18973:20;18970:1;18963:31;19013:4;19010:1;19003:15;19037:4;19034:1;19027:15;19053:335;19255:2;19237:21;;;19294:2;19274:18;;;19267:30;-1:-1:-1;;;19328:2:1;19313:18;;19306:41;19379:2;19364:18;;19053:335::o;24377:636::-;24457:6;24510:2;24498:9;24489:7;24485:23;24481:32;24478:52;;;24526:1;24523;24516:12;24478:52;24559:9;24553:16;24592:18;24584:6;24581:30;24578:50;;;24624:1;24621;24614:12;24578:50;24647:22;;24700:4;24692:13;;24688:27;-1:-1:-1;24678:55:1;;24729:1;24726;24719:12;24678:55;24758:2;24752:9;24783:49;24799:32;24828:2;24799:32;:::i;24783:49::-;24855:2;24848:5;24841:17;24895:7;24890:2;24885;24881;24877:11;24873:20;24870:33;24867:53;;;24916:1;24913;24906:12;24867:53;24929:54;24980:2;24975;24968:5;24964:14;24959:2;24955;24951:11;24929:54;:::i;25377:125::-;25417:4;25445:1;25442;25439:8;25436:34;;;25450:18;;:::i;:::-;-1:-1:-1;25487:9:1;;25377:125::o;25912:168::-;25952:7;26018:1;26014;26010:6;26006:14;26003:1;26000:21;25995:1;25988:9;25981:17;25977:45;25974:71;;;26025:18;;:::i;:::-;-1:-1:-1;26065:9:1;;25912:168::o;26994:489::-;-1:-1:-1;;;;;27263:15:1;;;27245:34;;27315:15;;27310:2;27295:18;;27288:43;27362:2;27347:18;;27340:34;;;27410:3;27405:2;27390:18;;27383:31;;;27188:4;;27431:46;;27457:19;;27449:6;27431:46;:::i;:::-;27423:54;26994:489;-1:-1:-1;;;;;;26994:489:1:o;27488:249::-;27557:6;27610:2;27598:9;27589:7;27585:23;27581:32;27578:52;;;27626:1;27623;27616:12;27578:52;27658:9;27652:16;27677:30;27701:5;27677:30;:::i;27742:135::-;27781:3;-1:-1:-1;;27802:17:1;;27799:43;;;27822:18;;:::i;:::-;-1:-1:-1;27869:1:1;27858:13;;27742:135::o;27882:217::-;27922:1;27948;27938:132;;27992:10;27987:3;27983:20;27980:1;27973:31;28027:4;28024:1;28017:15;28055:4;28052:1;28045:15;27938:132;-1:-1:-1;28084:9:1;;27882:217::o;28104:204::-;28142:3;28178:4;28175:1;28171:12;28210:4;28207:1;28203:12;28245:3;28239:4;28235:14;28230:3;28227:23;28224:49;;;28253:18;;:::i;:::-;28289:13;;28104:204;-1:-1:-1;;;28104:204:1:o;29128:127::-;29189:10;29184:3;29180:20;29177:1;29170:31;29220:4;29217:1;29210:15;29244:4;29241:1;29234:15

Swarm Source

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