ETH Price: $3,994.33 (+2.72%)

Contract

0x8Ec319e40E0A91A11cF584053EB5e420C613f01d
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

TokenTracker

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Set Approval For...199518452024-05-26 5:04:35203 days ago1716699875IN
0x8Ec319e4...0C613f01d
0 ETH0.000145313.14821161
Set Approval For...197501782024-04-28 0:15:11232 days ago1714263311IN
0x8Ec319e4...0C613f01d
0 ETH0.000201894.37414898
Set Approval For...197280732024-04-24 22:01:11235 days ago1713996071IN
0x8Ec319e4...0C613f01d
0 ETH0.000534211.57375529
Set Approval For...196429482024-04-12 23:59:11247 days ago1712966351IN
0x8Ec319e4...0C613f01d
0 ETH0.0007067415.31175605
Set Approval For...192620732024-02-19 13:28:11300 days ago1708349291IN
0x8Ec319e4...0C613f01d
0 ETH0.0018604840.30776595
Set Approval For...192159982024-02-13 2:05:11307 days ago1707789911IN
0x8Ec319e4...0C613f01d
0 ETH0.0012787727.70484921
Set Approval For...189398742024-01-05 8:24:11345 days ago1704443051IN
0x8Ec319e4...0C613f01d
0 ETH0.0002864311.77341645
Set Approval For...188870662023-12-28 22:25:59353 days ago1703802359IN
0x8Ec319e4...0C613f01d
0 ETH0.0008996519.4911878
Set Approval For...188518862023-12-23 23:49:47358 days ago1703375387IN
0x8Ec319e4...0C613f01d
0 ETH0.0009097319.70966637
Set Approval For...187809592023-12-14 0:57:35368 days ago1702515455IN
0x8Ec319e4...0C613f01d
0 ETH0.0018693340.49949344
Set Approval For...187090362023-12-03 23:09:11378 days ago1701644951IN
0x8Ec319e4...0C613f01d
0 ETH0.0016847236.49993554
Set Approval For...186574012023-11-26 17:41:59385 days ago1701020519IN
0x8Ec319e4...0C613f01d
0 ETH0.0016307935.33142185
Set Approval For...186461242023-11-25 3:47:23386 days ago1700884043IN
0x8Ec319e4...0C613f01d
0 ETH0.0009131819.78426543
Safe Transfer Fr...186397212023-11-24 6:16:23387 days ago1700806583IN
0x8Ec319e4...0C613f01d
0 ETH0.0024308919.54850198
Set Approval For...186164082023-11-20 23:55:35391 days ago1700524535IN
0x8Ec319e4...0C613f01d
0 ETH0.0012708927.53419866
Set Approval For...184325272023-10-26 6:12:35416 days ago1698300755IN
0x8Ec319e4...0C613f01d
0 ETH0.0007728216.74348043
Set Approval For...182248262023-09-27 4:49:59445 days ago1695790199IN
0x8Ec319e4...0C613f01d
0 ETH0.000296376.42099284
Update Project A...171372582023-04-27 11:36:35598 days ago1682595395IN
0x8Ec319e4...0C613f01d
0 ETH0.0010540535.87179891
Set Approval For...170950282023-04-21 13:21:11604 days ago1682083271IN
0x8Ec319e4...0C613f01d
0 ETH0.001623735.1778495
Set Approval For...170417322023-04-13 23:53:11612 days ago1681429991IN
0x8Ec319e4...0C613f01d
0 ETH0.0011039523.91731278
Set Approval For...167215572023-02-27 19:17:11657 days ago1677525431IN
0x8Ec319e4...0C613f01d
0 ETH0.0011133724.12150242
Set Approval For...166225082023-02-13 21:26:11671 days ago1676323571IN
0x8Ec319e4...0C613f01d
0 ETH0.0010136821.96174358
Update Project B...166063262023-02-11 15:10:35673 days ago1676128235IN
0x8Ec319e4...0C613f01d
0 ETH0.0008625519.77294179
Update Project B...166063242023-02-11 15:10:11673 days ago1676128211IN
0x8Ec319e4...0C613f01d
0 ETH0.0008983720.5941282
Update Project B...166063192023-02-11 15:09:11673 days ago1676128151IN
0x8Ec319e4...0C613f01d
0 ETH0.0009083522.07751998
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

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

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.