ETH Price: $3,109.34 (-0.98%)

Token

F1 Delta Time (F1DT)
 

Overview

Max Total Supply

268 F1DT

Holders

254

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
denet.eth
Balance
1 F1DT
0x83C9440dc34DA00c47A0d4dC2b598d7BDB1b53F7
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
DeltaTimeNFT

Compiler Version
v0.5.0+commit.1d4f565a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2019-05-23
*/

pragma solidity ^0.5.0;

/**
 * @title IERC165
 * @dev https://github.com/ethereum/EIPs/blob/master/EIPS/eip-165.md
 */
interface IERC165 {
    /**
     * @notice Query if a contract implements an interface
     * @param interfaceId The interface identifier, as specified in ERC-165
     * @dev Interface identification is specified in ERC-165. This function
     * uses less than 30,000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

/**
 * @title ERC165
 * @author Matt Condon (@shrugs)
 * @dev Implements ERC165 using a lookup table.
 */
contract ERC165 is IERC165 {
    bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;
    /**
     * 0x01ffc9a7 ===
     *     bytes4(keccak256('supportsInterface(bytes4)'))
     */

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

    /**
     * @dev A contract implementing SupportsInterfaceWithLookup
     * implement ERC165 itself
     */
    constructor () internal {
        _registerInterface(_INTERFACE_ID_ERC165);
    }

    /**
     * @dev implement supportsInterface(bytes4) using a lookup table
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool) {
        return _supportedInterfaces[interfaceId];
    }

    /**
     * @dev internal method for registering an interface
     */
    function _registerInterface(bytes4 interfaceId) internal {
        require(interfaceId != 0xffffffff);
        _supportedInterfaces[interfaceId] = true;
    }
}

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
contract IERC721Receiver {
    /**
     * @notice Handle the receipt of an NFT
     * @dev The ERC721 smart contract calls this function on the recipient
     * after a `safeTransfer`. This function MUST return the function selector,
     * otherwise the caller will revert the transaction. The selector to be
     * returned can be obtained as `this.onERC721Received.selector`. This
     * function MAY throw to revert and reject the transfer.
     * Note: the ERC721 contract address is always the message sender.
     * @param operator The address which called `safeTransferFrom` function
     * @param from The address which previously owned the token
     * @param tokenId The NFT identifier which is being transferred
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`
     */
    function onERC721Received(address operator, address from, uint256 tokenId, bytes memory data)
    public returns (bytes4);
}

/**
 * @title ERC721 Non-Fungible Token Standard basic interface
 * @dev see https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
 */
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);

    function balanceOf(address owner) public view returns (uint256 balance);
    function ownerOf(uint256 tokenId) public view returns (address owner);

    function approve(address to, uint256 tokenId) public;
    function getApproved(uint256 tokenId) public view returns (address operator);

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

    function transferFrom(address from, address to, uint256 tokenId) public;
    function safeTransferFrom(address from, address to, uint256 tokenId) public;

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

/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
 */
contract IERC721Metadata is IERC721 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

/**
 * @title Roles
 * @dev Library for managing addresses assigned to a Role.
 */
library Roles {
    struct Role {
        mapping (address => bool) bearer;
    }

    /**
     * @dev give an account access to this role
     */
    function add(Role storage role, address account) internal {
        require(account != address(0));
        require(!has(role, account));

        role.bearer[account] = true;
    }

    /**
     * @dev remove an account's access to this role
     */
    function remove(Role storage role, address account) internal {
        require(account != address(0));
        require(has(role, account));

        role.bearer[account] = false;
    }

    /**
     * @dev check if an account has this role
     * @return bool
     */
    function has(Role storage role, address account) internal view returns (bool) {
        require(account != address(0));
        return role.bearer[account];
    }
}

contract PauserRole {
    using Roles for Roles.Role;

    event PauserAdded(address indexed account);
    event PauserRemoved(address indexed account);

    Roles.Role private _pausers;

    constructor () internal {
        _addPauser(msg.sender);
    }

    modifier onlyPauser() {
        require(isPauser(msg.sender));
        _;
    }

    function isPauser(address account) public view returns (bool) {
        return _pausers.has(account);
    }

    function addPauser(address account) public onlyPauser {
        _addPauser(account);
    }

    function renouncePauser() public {
        _removePauser(msg.sender);
    }

    function _addPauser(address account) internal {
        _pausers.add(account);
        emit PauserAdded(account);
    }

    function _removePauser(address account) internal {
        _pausers.remove(account);
        emit PauserRemoved(account);
    }
}

/**
 * @title Pausable
 * @dev Base contract which allows children to implement an emergency stop mechanism.
 */
contract Pausable is PauserRole {
    event Paused(address account);
    event Unpaused(address account);

    bool private _paused;

    constructor () internal {
        _paused = false;
    }

    /**
     * @return true if the contract is paused, false otherwise.
     */
    function paused() public view returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     */
    modifier whenNotPaused() {
        require(!_paused);
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     */
    modifier whenPaused() {
        require(_paused);
        _;
    }

    /**
     * @dev called by the owner to pause, triggers stopped state
     */
    function pause() public onlyPauser whenNotPaused {
        _paused = true;
        emit Paused(msg.sender);
    }

    /**
     * @dev called by the owner to unpause, returns to normal state
     */
    function unpause() public onlyPauser whenPaused {
        _paused = false;
        emit Unpaused(msg.sender);
    }
}

contract MinterRole {
    using Roles for Roles.Role;

    event MinterAdded(address indexed account);
    event MinterRemoved(address indexed account);

    Roles.Role private _minters;

    constructor () internal {
        _addMinter(msg.sender);
    }

    modifier onlyMinter() {
        require(isMinter(msg.sender));
        _;
    }

    function isMinter(address account) public view returns (bool) {
        return _minters.has(account);
    }

    function addMinter(address account) public onlyMinter {
        _addMinter(account);
    }

    function renounceMinter() public {
        _removeMinter(msg.sender);
    }

    function _addMinter(address account) internal {
        _minters.add(account);
        emit MinterAdded(account);
    }

    function _removeMinter(address account) internal {
        _minters.remove(account);
        emit MinterRemoved(account);
    }
}

/**
 * @title SafeMath
 * @dev Unsigned math operations with safety checks that revert on error
 */
library SafeMath {
    /**
    * @dev Multiplies two unsigned integers, reverts on overflow.
    */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b);

        return c;
    }

    /**
    * @dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero.
    */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
    * @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend).
    */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a);
        uint256 c = a - b;

        return c;
    }

    /**
    * @dev Adds two unsigned integers, reverts on overflow.
    */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a);

        return c;
    }

    /**
    * @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo),
    * reverts when dividing by zero.
    */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b != 0);
        return a % b;
    }
}

/**
 * Utility library of inline functions on addresses
 */
library Address {
    /**
     * Returns whether the target address is a contract
     * @dev This function will return false if invoked during the constructor of a contract,
     * as the code is not actually created until after the constructor finishes.
     * @param account address of the account to check
     * @return whether the target address is a contract
     */
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        // XXX Currently there is no better way to check if there is a contract in an address
        // than to check the size of the code at that address.
        // See https://ethereum.stackexchange.com/a/14016/36603
        // for more details about how this works.
        // TODO Check this again before the Serenity release, because all addresses will be
        // contracts then.
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }
}

library Strings {
    function strConcat(string memory _a, string memory _b, string memory _c, string memory _d, string memory _e) internal pure returns (string memory _concatenatedString) {
        bytes memory _ba = bytes(_a);
        bytes memory _bb = bytes(_b);
        bytes memory _bc = bytes(_c);
        bytes memory _bd = bytes(_d);
        bytes memory _be = bytes(_e);
        bytes memory babcde = new bytes(_ba.length + _bb.length + _bc.length + _bd.length + _be.length);
        uint k = 0;
        uint i = 0;
        for (i = 0; i < _ba.length; i++) {
            babcde[k++] = _ba[i];
        }
        for (i = 0; i < _bb.length; i++) {
            babcde[k++] = _bb[i];
        }
        for (i = 0; i < _bc.length; i++) {
            babcde[k++] = _bc[i];
        }
        for (i = 0; i < _bd.length; i++) {
            babcde[k++] = _bd[i];
        }
        for (i = 0; i < _be.length; i++) {
            babcde[k++] = _be[i];
        }
        return string(babcde);
    }

    function strConcat(string  memory _a, string  memory _b, string  memory _c, string  memory _d) internal pure returns (string  memory) {
        return strConcat(_a, _b, _c, _d, "");
    }

    function strConcat(string  memory _a, string  memory _b, string  memory _c) internal pure returns (string  memory) {
        return strConcat(_a, _b, _c, "", "");
    }

    function strConcat(string  memory _a, string  memory _b) internal pure returns (string  memory) {
        return strConcat(_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 - 1;
        while (_i != 0) {
            bstr[k--] = byte(uint8(48 + _i % 10));
            _i /= 10;
        }
        return string(bstr);
    }

    function split(bytes memory _base, uint8[] memory _lengths) internal pure returns (bytes[] memory arr) {
        uint _offset = 0;
        bytes[] memory splitArr = new bytes[](_lengths.length);

        for(uint i = 0; i < _lengths.length; i++) {
            bytes memory _tmpBytes = new bytes(_lengths[i]);

            for(uint j = 0; j < _lengths[i]; j++)
                _tmpBytes[j] = _base[_offset+j];

            splitArr[i] = _tmpBytes;
            _offset += _lengths[i];
        }

        return splitArr;
    }
}









/**
 * @title F1 Delta Time Non-Fungible Token 
 * @dev see https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
 */
contract DeltaTimeNFTBase is ERC165, IERC721, IERC721Metadata, Pausable, MinterRole {

    using SafeMath for uint256;
    using Address for address;
    using Strings for string;

    bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;
    /*
     * 0x80ac58cd ===
     *     bytes4(keccak256('balanceOf(address)')) ^
     *     bytes4(keccak256('ownerOf(uint256)')) ^
     *     bytes4(keccak256('approve(address,uint256)')) ^
     *     bytes4(keccak256('getApproved(uint256)')) ^
     *     bytes4(keccak256('setApprovalForAll(address,bool)')) ^
     *     bytes4(keccak256('isApprovedForAll(address,address)')) ^
     *     bytes4(keccak256('transferFrom(address,address,uint256)')) ^
     *     bytes4(keccak256('safeTransferFrom(address,address,uint256)')) ^
     *     bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)'))
     */

    bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;
    /**
     * 0x5b5e139f ===
     *     bytes4(keccak256('name()')) ^
     *     bytes4(keccak256('symbol()')) ^
     *     bytes4(keccak256('tokenURI(uint256)'))
     */

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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Token URI prefix
    string private _baseTokenURI;

    // Flag representing if metadata migrated to IPFS
    bool private _ipfsMigrated;

    // Token total Supply
    uint256 private _totalSupply;

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

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

    // Mapping Mapping from token ID to token URI
    mapping(uint256 => string) private _tokenURIs;

    // Mapping Mapping from token ID to token properties
    mapping (uint256 => uint256) private _tokenProperties;

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

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


    event TokenURI(uint256 indexed tokenId, string uri);


    /**
     * @dev Constructor function
     */
    constructor (string memory name, string memory symbol, string memory baseTokenURI) public {
        _name = name;
        _symbol = symbol;
        _totalSupply = 0;
        _baseTokenURI = baseTokenURI;
        _ipfsMigrated = false;

        // register the supported interfaces to conform to ERC721 via ERC165
        _registerInterface(_INTERFACE_ID_ERC721);
        _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;
    }

    /**
     * @dev Gets the total amount of tokens stored by the contract
     * @return uint256 representing the total amount of tokens
     */
    function totalSupply() public view returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev Returns whether the specified token exists
     * @param tokenId uint256 ID of the token to query the existence of
     * @return whether the token exists
     */
    function exists(uint256 tokenId) external view returns (bool) {
        return _exists(tokenId);
    }

    /**
     * @dev Sets IPFS migration flag true
     */
    function ipfsMigrationDone() public onlyMinter {
        _ipfsMigrated = true;
    }

    /**
     * @dev public function to set the token URI for a given token
     * Reverts if the token ID does not exist or metadata has migrated to IPFS
     * @param tokenId uint256 ID of the token to set its URI
     * @param uri string URI to assign
     */
    function setTokenURI(uint256 tokenId, string memory uri) public onlyMinter {
        require(!_ipfsMigrated);
        _setTokenURI(tokenId, uri);
    }

    /**
     * @dev Returns the URI for a given token ID
     * Throws if the token ID does not exist. May return an empty string.
     * @param tokenId uint256 ID of the token to query
     */
    function tokenURI(uint256 tokenId) external view returns (string memory) {
        require(_exists(tokenId));

        if (bytes(_tokenURIs[tokenId]).length > 0)
            return _tokenURIs[tokenId];

        return Strings.strConcat(baseTokenURI(),Strings.uint2str(tokenId));
    }

    /**
     * @dev Sets the prefix of token URI
     * @param baseTokenURI token URI prefix to be set
     */
    function setBaseTokenURI(string memory baseTokenURI) public onlyMinter {
        _baseTokenURI = baseTokenURI;
    }

    /**
     * @dev Returns prefix of token URI
     * @return string representing the token URI prefix
     */
    function baseTokenURI() public view returns (string memory) {
        return _baseTokenURI;
    }

    /**
     * @dev Returns the properties for a given token ID
     * Throws if the token ID does not exist.
     * @param tokenId uint256 ID of the token to query
     */
    function tokenProperties(uint256 tokenId) public view returns (uint256) {
        require(_exists(tokenId));
        return _tokenProperties[tokenId];
    }

    /**
     * @dev Gets the balance of the specified address
     * @param owner address to query the balance of
     * @return uint256 representing the amount owned by the passed address
     */
    function balanceOf(address owner) public view returns (uint256) {
        require(owner != address(0));
        return _ownedTokensCount[owner];
    }

    /**
     * @dev Gets the owner of the specified token ID
     * @param tokenId uint256 ID of the token to query the owner of
     * @return owner address currently marked as the owner of the given token ID
     */
    function ownerOf(uint256 tokenId) public view returns (address) {
        address owner = _tokenOwner[tokenId];
        require(owner != address(0));
        return owner;
    }

    /**
     * @dev Approves another address to transfer the given token ID
     * The zero address indicates there is no approved address.
     * There can only be one approved address per token at a given time.
     * Can only be called by the token owner or an approved operator.
     * @param to address to be approved for the given token ID
     * @param tokenId uint256 ID of the token to be approved
     */
    function approve(address to, uint256 tokenId) public whenNotPaused {
        address owner = ownerOf(tokenId);
        require(to != owner);
        require(msg.sender == owner || isApprovedForAll(owner, msg.sender));

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

    /**
     * @dev Gets the approved address for a token ID, or zero if no address set
     * Reverts if the token ID does not exist.
     * @param tokenId uint256 ID of the token to query the approval of
     * @return address currently approved for the given token ID
     */
    function getApproved(uint256 tokenId) public view returns (address) {
        require(_exists(tokenId));
        return _tokenApprovals[tokenId];
    }

    /**
     * @dev Sets or unsets the approval of a given operator
     * An operator is allowed to transfer all tokens of the sender on their behalf
     * @param to operator address to set the approval
     * @param approved representing the status of the approval to be set
     */
    function setApprovalForAll(address to, bool approved) public whenNotPaused {
        require(to != msg.sender);
        _operatorApprovals[msg.sender][to] = approved;
        emit ApprovalForAll(msg.sender, to, approved);
    }

    /**
     * @dev Tells whether an operator is approved by a given owner
     * @param owner owner address which you want to query the approval of
     * @param operator operator address which you want to query the approval of
     * @return bool whether the given operator is approved by the given owner
     */
    function isApprovedForAll(address owner, address operator) public view returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    /**
     * @dev Transfers the ownership of a given token ID to another address
     * Usage of this method is discouraged, use `safeTransferFrom` whenever possible
     * Requires the msg sender to be the owner, approved, or operator
     * @param from current owner of the token
     * @param to address to receive the ownership of the given token ID
     * @param tokenId uint256 ID of the token to be transferred
    */
    function transferFrom(address from, address to, uint256 tokenId) public whenNotPaused {
        require(_isApprovedOrOwner(msg.sender, tokenId));

        _transferFrom(from, to, tokenId);
    }

    /**
     * @dev Safely transfers the ownership of a given token ID to another address
     * If the target address is a contract, it must implement `onERC721Received`,
     * which is called upon a safe transfer, and return the magic value
     * `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`; otherwise,
     * the transfer is reverted.
     *
     * Requires the msg sender to be the owner, approved, or operator
     * @param from current owner of the token
     * @param to address to receive the ownership of the given token ID
     * @param tokenId uint256 ID of the token to be transferred
    */
    function safeTransferFrom(address from, address to, uint256 tokenId) public {
        safeTransferFrom(from, to, tokenId, "");
    }

    /**
     * @dev Safely transfers the ownership of a given token ID to another address
     * If the target address is a contract, it must implement `onERC721Received`,
     * which is called upon a safe transfer, and return the magic value
     * `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`; otherwise,
     * the transfer is reverted.
     * Requires the msg sender to be the owner, approved, or operator
     * @param from current owner of the token
     * @param to address to receive the ownership of the given token ID
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes data to send along with a safe transfer check
     */
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public {
        transferFrom(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data));
    }

    /**
     * @dev Public function to mint a new token
     * Reverts if the given token ID already exists
     * @param to address The address that will own the minted token
     * @param tokenId uint256 ID of the token to be minted
     * @param uri string Metadata URI of the token to be minted
     * @param tokenProps uint256 Properties of the token to be minted
     */
    function mint(address to, uint256 tokenId, string memory uri, uint256 tokenProps)
        public onlyMinter
    {
        _mint(to, tokenId, uri, tokenProps);
        _totalSupply += 1;
    }

    /**
     * @dev Public function to mint a batch of new tokens
     * Reverts if some the given token IDs already exist
     * @param to address[] List of addresses that will own the minted tokens
     * @param tokenIds uint256[] List of IDs of the tokens to be minted
     * @param tokenURIs bytes[] Concatenated metadata URIs of the tokens to be minted
     * @param urisLengths uint8[] Lengths of the metadata URIs in the tokenURIs parameter
     * @param tokenProps uint256[] List of properties of the tokens to be minted
     */
    function batchMint(
        address[] memory to,
        uint256[] memory tokenIds,
        bytes memory tokenURIs,
        uint8[] memory urisLengths,
        uint256[] memory tokenProps)
        public onlyMinter
    {
        require(tokenIds.length == to.length &&
                tokenIds.length == urisLengths.length &&
                tokenIds.length == tokenProps.length);
        bytes[] memory uris = Strings.split(tokenURIs, urisLengths);
        for (uint i = 0; i < tokenIds.length; i++) {
            _mint(to[i], tokenIds[i], string(uris[i]), tokenProps[i]);
        }
        _totalSupply += tokenIds.length;
    }

    /**
     * @dev Returns whether the specified token exists
     * @param tokenId uint256 ID of the token to query the existence of
     * @return whether the token exists
     */
    function _exists(uint256 tokenId) internal view returns (bool) {
        address owner = _tokenOwner[tokenId];
        return owner != address(0);
    }

    /**
     * @dev Returns whether the given spender can transfer a given token ID
     * @param spender address of the spender to query
     * @param tokenId uint256 ID of the token to be transferred
     * @return bool whether the msg.sender is approved for the given token ID,
     *    is an operator of the owner, or is the owner of the token
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view returns (bool) {
        address owner = ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    /**
     * @dev Internal function to mint a new token
     * Reverts if the given token ID already exists
     * @param to The address that will own the minted token
     * @param tokenId uint256 ID of the token to be minted
     * @param uri string URI of the token to be minted metadata
     * @param tokenProps uint256 properties of the token to be minted
     */
    function _mint(address to, uint256 tokenId, string memory uri, uint256 tokenProps) internal {
        require(to != address(0));
        require(!_exists(tokenId));

        _tokenOwner[tokenId] = to;
        _ownedTokensCount[to] = _ownedTokensCount[to].add(1);
        _setTokenURI(tokenId, uri);
        _tokenProperties[tokenId] = tokenProps;

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

    /**
     * @dev Internal function to set the token URI for a given token
     * Reverts if the token ID does not exist
     * @param tokenId uint256 ID of the token to set its URI
     * @param uri string URI to assign
     */
    function _setTokenURI(uint256 tokenId, string memory uri) internal {
        require(_exists(tokenId));
        _tokenURIs[tokenId] = uri;
        emit TokenURI(tokenId, uri);
    }

    /**
     * @dev Internal function to transfer ownership of a given token ID to another address.
     * As opposed to transferFrom, this imposes no restrictions on msg.sender.
     * @param from current owner of the token
     * @param to address to receive the ownership of the given token ID
     * @param tokenId uint256 ID of the token to be transferred
    */
    function _transferFrom(address from, address to, uint256 tokenId) internal {
        require(ownerOf(tokenId) == from);
        require(to != address(0));

        _clearApproval(tokenId);

        _ownedTokensCount[from] = _ownedTokensCount[from].sub(1);
        _ownedTokensCount[to] = _ownedTokensCount[to].add(1);

        _tokenOwner[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

    /**
     * @dev Internal function to invoke `onERC721Received` on a target address
     * The call is not executed if the target address is not a contract
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return whether the call correctly returned the expected magic value
     */
    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);
    }

    /**
     * @dev Private function to clear current approval of a given token ID
     * @param tokenId uint256 ID of the token to be transferred
     */
    function _clearApproval(uint256 tokenId) private {
        if (_tokenApprovals[tokenId] != address(0)) {
            _tokenApprovals[tokenId] = address(0);
        }
    }
}

contract DeltaTimeNFT is DeltaTimeNFTBase {

  constructor (string memory baseTokenURI) public DeltaTimeNFTBase("F1® Delta Time", "F1DT", baseTokenURI) {
  }

  function tokenType(uint256 tokenId) public view returns (uint256) {
      uint256 properties = tokenProperties(tokenId);
      return properties & 0xFF;
  }

  function tokenSubType(uint256 tokenId) public view returns (uint256) {
    uint256 properties = tokenProperties(tokenId);
    return (properties & (0xFF << 8)) >> 8;
  }

  function tokenTeam(uint256 tokenId) public view returns (uint256) {
    uint256 properties = tokenProperties(tokenId);
    return (properties & (0xFF << 16)) >> 16;
  }

  function tokenSeason(uint256 tokenId) public view returns (uint256) {
    uint256 properties = tokenProperties(tokenId);
    return (properties & (0xFF << 24)) >> 24;
  }

  function tokenRarity(uint256 tokenId) public view returns (uint256) {
    uint256 properties = tokenProperties(tokenId);
    return (properties & (0xFF << 32)) >> 32;
  }

  function tokenTrack(uint256 tokenId) public view returns (uint256) {
    // only CarNFT, DriverNFT, CarCompNFT, DriverCompNFT and TyreNFT has a track id
    uint256 properties = tokenProperties(tokenId);
    return (properties & (0xFF << 40)) >> 40;
  }

  function tokenCollection(uint256 tokenId) public view returns (uint256) {
    uint256 properties = tokenProperties(tokenId);
    return (properties & (0xFFFF << 48)) >> 48;
  }

  function tokenDriverNumber(uint256 tokenId) public view returns (uint256) {
    // only Car and Driver has a driver id
    uint256 properties = tokenProperties(tokenId);
    return (properties & (0xFFFF << 64)) >> 64;
  }

  function tokenRacingProperty1(uint256 tokenId) public view returns (uint256) {
    uint256 properties = tokenProperties(tokenId);
    return (properties & (0xFFFF << 80)) >> 80;
  }

  function tokenRacingProperty2(uint256 tokenId) public view returns (uint256) {
    uint256 properties = tokenProperties(tokenId);
    return (properties & (0xFFFF << 96)) >> 96;
  }

  function tokenRacingProperty3(uint256 tokenId) public view returns (uint256) {
    uint256 properties = tokenProperties(tokenId);
    return (properties & (0xFFFF << 112)) >> 112;
  }

  function tokenLuck(uint256 tokenId) public view returns (uint256) {
    uint256 properties = tokenProperties(tokenId);
    return (properties & (0xFFFF << 128)) >> 128;
  }

  function tokenEffect(uint256 tokenId) public view returns (uint256) {
    uint256 properties = tokenProperties(tokenId);
    return (properties & (0xFF << 144)) >> 144;
  }

  function tokenSpecial1(uint256 tokenId) public view returns (uint256) {
    uint256 properties = tokenProperties(tokenId);
    return (properties & (0xFFFF << 152)) >> 152;
  }

  function tokenSpecial2(uint256 tokenId) public view returns (uint256) {
    uint256 properties = tokenProperties(tokenId);
    return (properties & (0xFFFF << 168)) >> 168;
  }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[{"name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"},{"name":"uri","type":"string"},{"name":"tokenProps","type":"uint256"}],"name":"mint","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"tokenId","type":"uint256"},{"name":"uri","type":"string"}],"name":"setTokenURI","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"tokenSeason","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"ipfsMigrationDone","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"tokenCollection","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"baseTokenURI","type":"string"}],"name":"setBaseTokenURI","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"tokenTeam","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"tokenProperties","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"isPauser","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"tokenTrack","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"tokenSpecial1","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"exists","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"tokenRacingProperty3","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"tokenSubType","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renouncePauser","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"tokenRacingProperty2","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"addPauser","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"tokenDriverNumber","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"addMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"isMinter","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"tokenRarity","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"},{"name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address[]"},{"name":"tokenIds","type":"uint256[]"},{"name":"tokenURIs","type":"bytes"},{"name":"urisLengths","type":"uint8[]"},{"name":"tokenProps","type":"uint256[]"}],"name":"batchMint","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"baseTokenURI","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"tokenLuck","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"tokenType","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"tokenEffect","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"tokenSpecial2","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"tokenRacingProperty1","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"baseTokenURI","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"tokenId","type":"uint256"},{"indexed":false,"name":"uri","type":"string"}],"name":"TokenURI","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"MinterAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"MinterRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"PauserAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"PauserRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":true,"name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"approved","type":"address"},{"indexed":true,"name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"operator","type":"address"},{"indexed":false,"name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"}]

60806040523480156200001157600080fd5b506040516200414b3803806200414b833981018060405260208110156200003757600080fd5b8101908080516401000000008111156200005057600080fd5b828101905060208101848111156200006757600080fd5b81518560018202830111640100000000821117156200008557600080fd5b50509291905050506040805190810160405280600f81526020017f4631c2ae2044656c74612054696d6500000000000000000000000000000000008152506040805190810160405280600481526020017f463144540000000000000000000000000000000000000000000000000000000081525082620001376301ffc9a77c01000000000000000000000000000000000000000000000000000000000262000278640100000000026401000000009004565b620001513362000336640100000000026401000000009004565b6000600260006101000a81548160ff0219169083151502179055506200018633620003a0640100000000026401000000009004565b82600490805190602001906200019e92919062000562565b508160059080519060200190620001b792919062000562565b5060006008819055508060069080519060200190620001d892919062000562565b506000600760006101000a81548160ff021916908315150217905550620002316380ac58cd7c01000000000000000000000000000000000000000000000000000000000262000278640100000000026401000000009004565b6200026e635b5e139f7c01000000000000000000000000000000000000000000000000000000000262000278640100000000026401000000009004565b5050505062000611565b63ffffffff7c010000000000000000000000000000000000000000000000000000000002817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614151515620002ca57600080fd5b6001600080837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6200035a8160016200040a6401000000000262003581179091906401000000009004565b8073ffffffffffffffffffffffffffffffffffffffff167f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f860405160405180910390a250565b620003c48160036200040a6401000000000262003581179091906401000000009004565b8073ffffffffffffffffffffffffffffffffffffffff167f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f660405160405180910390a250565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156200044757600080fd5b620004628282620004cd640100000000026401000000009004565b1515156200046f57600080fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156200050b57600080fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620005a557805160ff1916838001178555620005d6565b82800160010185558215620005d6579182015b82811115620005d5578251825591602001919060010190620005b8565b5b509050620005e59190620005e9565b5090565b6200060e91905b808211156200060a576000816000905550600101620005f0565b5090565b90565b613b2a80620006216000396000f3fe608060405260043610610230576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806301ffc9a71461023557806306fdde03146102a7578063081812fc1461033757806308a8d7aa146103b2578063095ea7b3146104ae578063162094c41461050957806318160ddd146105db5780631ccd03ac1461060657806323b872dd1461065557806324af9942146106d05780632dd883e8146106e757806330176e1314610736578063332e4f78146107fe57806334110a4d1461084d5780633f4ba83a1461089c57806342842e0e146108b357806346fbf68e1461092e5780634ace9497146109975780634b2993e7146109e65780634f558e7914610a355780634fca277214610a885780635419808f14610ad75780635c975abb14610b265780636352211e14610b555780636ef8d66d14610bd057806370a0823114610be757806373c85eba14610c4c57806382dc1ec414610c9b5780638456cb5914610cec578063869b81a814610d0357806395d89b4114610d52578063983b2d5614610de25780639865027514610e33578063a22cb46514610e4a578063aa271e1a14610ea7578063afb0a36914610f10578063b88d4fde14610f5f578063bed93fb514611071578063c87b56dd14611389578063d547cfb71461143d578063dd8aafd5146114cd578063e6c3b1f61461151c578063e985e9c51461156b578063ebd2b309146115f4578063ee673c4014611643578063fe5585f614611692575b600080fd5b34801561024157600080fd5b5061028d6004803603602081101561025857600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690602001909291905050506116e1565b604051808215151515815260200191505060405180910390f35b3480156102b357600080fd5b506102bc611748565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102fc5780820151818401526020810190506102e1565b50505050905090810190601f1680156103295780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561034357600080fd5b506103706004803603602081101561035a57600080fd5b81019080803590602001909291905050506117ea565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103be57600080fd5b506104ac600480360360808110156103d557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561041c57600080fd5b82018360208201111561042e57600080fd5b8035906020019184600183028401116401000000008311171561045057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019092919050505061183b565b005b3480156104ba57600080fd5b50610507600480360360408110156104d157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611872565b005b34801561051557600080fd5b506105d96004803603604081101561052c57600080fd5b81019080803590602001909291908035906020019064010000000081111561055357600080fd5b82018360208201111561056557600080fd5b8035906020019184600183028401116401000000008311171561058757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506119d3565b005b3480156105e757600080fd5b506105f0611a11565b6040518082815260200191505060405180910390f35b34801561061257600080fd5b5061063f6004803603602081101561062957600080fd5b8101908080359060200190929190505050611a1b565b6040518082815260200191505060405180910390f35b34801561066157600080fd5b506106ce6004803603606081101561067857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611a44565b005b3480156106dc57600080fd5b506106e5611a85565b005b3480156106f357600080fd5b506107206004803603602081101561070a57600080fd5b8101908080359060200190929190505050611ab6565b6040518082815260200191505060405180910390f35b34801561074257600080fd5b506107fc6004803603602081101561075957600080fd5b810190808035906020019064010000000081111561077657600080fd5b82018360208201111561078857600080fd5b803590602001918460018302840111640100000000831117156107aa57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611ae3565b005b34801561080a57600080fd5b506108376004803603602081101561082157600080fd5b8101908080359060200190929190505050611b11565b6040518082815260200191505060405180910390f35b34801561085957600080fd5b506108866004803603602081101561087057600080fd5b8101908080359060200190929190505050611b39565b6040518082815260200191505060405180910390f35b3480156108a857600080fd5b506108b1611b6a565b005b3480156108bf57600080fd5b5061092c600480360360608110156108d657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611c19565b005b34801561093a57600080fd5b5061097d6004803603602081101561095157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c3a565b604051808215151515815260200191505060405180910390f35b3480156109a357600080fd5b506109d0600480360360208110156109ba57600080fd5b8101908080359060200190929190505050611c57565b6040518082815260200191505060405180910390f35b3480156109f257600080fd5b50610a1f60048036036020811015610a0957600080fd5b8101908080359060200190929190505050611c82565b6040518082815260200191505060405180910390f35b348015610a4157600080fd5b50610a6e60048036036020811015610a5857600080fd5b8101908080359060200190929190505050611cbc565b604051808215151515815260200191505060405180910390f35b348015610a9457600080fd5b50610ac160048036036020811015610aab57600080fd5b8101908080359060200190929190505050611cce565b6040518082815260200191505060405180910390f35b348015610ae357600080fd5b50610b1060048036036020811015610afa57600080fd5b8101908080359060200190929190505050611d03565b6040518082815260200191505060405180910390f35b348015610b3257600080fd5b50610b3b611d2a565b604051808215151515815260200191505060405180910390f35b348015610b6157600080fd5b50610b8e60048036036020811015610b7857600080fd5b8101908080359060200190929190505050611d41565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610bdc57600080fd5b50610be5611dbf565b005b348015610bf357600080fd5b50610c3660048036036020811015610c0a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611dca565b6040518082815260200191505060405180910390f35b348015610c5857600080fd5b50610c8560048036036020811015610c6f57600080fd5b8101908080359060200190929190505050611e4e565b6040518082815260200191505060405180910390f35b348015610ca757600080fd5b50610cea60048036036020811015610cbe57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e81565b005b348015610cf857600080fd5b50610d01611ea1565b005b348015610d0f57600080fd5b50610d3c60048036036020811015610d2657600080fd5b8101908080359060200190929190505050611f51565b6040518082815260200191505060405180910390f35b348015610d5e57600080fd5b50610d67611f80565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610da7578082015181840152602081019050610d8c565b50505050905090810190601f168015610dd45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610dee57600080fd5b50610e3160048036036020811015610e0557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612022565b005b348015610e3f57600080fd5b50610e48612042565b005b348015610e5657600080fd5b50610ea560048036036040811015610e6d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080351515906020019092919050505061204d565b005b348015610eb357600080fd5b50610ef660048036036020811015610eca57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506121a5565b604051808215151515815260200191505060405180910390f35b348015610f1c57600080fd5b50610f4960048036036020811015610f3357600080fd5b81019080803590602001909291905050506121c2565b6040518082815260200191505060405180910390f35b348015610f6b57600080fd5b5061106f60048036036080811015610f8257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610fe957600080fd5b820183602082011115610ffb57600080fd5b8035906020019184600183028401116401000000008311171561101d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506121ec565b005b34801561107d57600080fd5b50611387600480360360a081101561109457600080fd5b81019080803590602001906401000000008111156110b157600080fd5b8201836020820111156110c357600080fd5b803590602001918460208302840111640100000000831117156110e557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561114557600080fd5b82018360208201111561115757600080fd5b8035906020019184602083028401116401000000008311171561117957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156111d957600080fd5b8201836020820111156111eb57600080fd5b8035906020019184600183028401116401000000008311171561120d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561127057600080fd5b82018360208201111561128257600080fd5b803590602001918460208302840111640100000000831117156112a457600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561130457600080fd5b82018360208201111561131657600080fd5b8035906020019184602083028401116401000000008311171561133857600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050612214565b005b34801561139557600080fd5b506113c2600480360360208110156113ac57600080fd5b81019080803590602001909291905050506122fe565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156114025780820151818401526020810190506113e7565b50505050905090810190601f16801561142f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561144957600080fd5b50611452612418565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015611492578082015181840152602081019050611477565b50505050905090810190601f1680156114bf5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156114d957600080fd5b50611506600480360360208110156114f057600080fd5b81019080803590602001909291905050506124ba565b6040518082815260200191505060405180910390f35b34801561152857600080fd5b506115556004803603602081101561153f57600080fd5b81019080803590602001909291905050506124f1565b6040518082815260200191505060405180910390f35b34801561157757600080fd5b506115da6004803603604081101561158e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061250b565b604051808215151515815260200191505060405180910390f35b34801561160057600080fd5b5061162d6004803603602081101561161757600080fd5b810190808035906020019092919050505061259f565b6040518082815260200191505060405180910390f35b34801561164f57600080fd5b5061167c6004803603602081101561166657600080fd5b81019080803590602001909291905050506125d7565b6040518082815260200191505060405180910390f35b34801561169e57600080fd5b506116cb600480360360208110156116b557600080fd5b8101908080359060200190929190505050612613565b6040518082815260200191505060405180910390f35b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b606060048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156117e05780601f106117b5576101008083540402835291602001916117e0565b820191906000526020600020905b8154815290600101906020018083116117c357829003601f168201915b5050505050905090565b60006117f582612644565b151561180057600080fd5b600a600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b611844336121a5565b151561184f57600080fd5b61185b848484846126b6565b600160086000828254019250508190555050505050565b600260009054906101000a900460ff1615151561188e57600080fd5b600061189982611d41565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156118d657600080fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806119165750611915813361250b565b5b151561192157600080fd5b82600a600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6119dc336121a5565b15156119e757600080fd5b600760009054906101000a900460ff16151515611a0357600080fd5b611a0d8282612873565b5050565b6000600854905090565b600080611a2783611b39565b9050601863ff0000008216908060020a8204915050915050919050565b600260009054906101000a900460ff16151515611a6057600080fd5b611a6a3382612950565b1515611a7557600080fd5b611a808383836129e5565b505050565b611a8e336121a5565b1515611a9957600080fd5b6001600760006101000a81548160ff021916908315150217905550565b600080611ac283611b39565b9050603067ffff0000000000008216908060020a8204915050915050919050565b611aec336121a5565b1515611af757600080fd5b8060069080519060200190611b0d929190613a59565b5050565b600080611b1d83611b39565b9050601062ff00008216908060020a8204915050915050919050565b6000611b4482612644565b1515611b4f57600080fd5b600c6000838152602001908152602001600020549050919050565b611b7333611c3a565b1515611b7e57600080fd5b600260009054906101000a900460ff161515611b9957600080fd5b6000600260006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b611c3583838360206040519081016040528060008152506121ec565b505050565b6000611c50826001612c4a90919063ffffffff16565b9050919050565b600080611c6383611b39565b9050602865ff00000000008216908060020a8204915050915050919050565b600080611c8e83611b39565b9050609874ffff000000000000000000000000000000000000008216908060020a8204915050915050919050565b6000611cc782612644565b9050919050565b600080611cda83611b39565b905060706fffff00000000000000000000000000008216908060020a8204915050915050919050565b600080611d0f83611b39565b9050600861ff008216908060020a8204915050915050919050565b6000600260009054906101000a900460ff16905090565b6000806009600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611db657600080fd5b80915050919050565b611dc833612cde565b565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611e0757600080fd5b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600080611e5a83611b39565b905060606dffff0000000000000000000000008216908060020a8204915050915050919050565b611e8a33611c3a565b1515611e9557600080fd5b611e9e81612d38565b50565b611eaa33611c3a565b1515611eb557600080fd5b600260009054906101000a900460ff16151515611ed157600080fd5b6001600260006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b600080611f5d83611b39565b9050604069ffff00000000000000008216908060020a8204915050915050919050565b606060058054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156120185780601f10611fed57610100808354040283529160200191612018565b820191906000526020600020905b815481529060010190602001808311611ffb57829003601f168201915b5050505050905090565b61202b336121a5565b151561203657600080fd5b61203f81612d92565b50565b61204b33612dec565b565b600260009054906101000a900460ff1615151561206957600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156120a457600080fd5b80600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b60006121bb826003612c4a90919063ffffffff16565b9050919050565b6000806121ce83611b39565b9050602064ff000000008216908060020a8204915050915050919050565b6121f7848484611a44565b61220384848484612e46565b151561220e57600080fd5b50505050565b61221d336121a5565b151561222857600080fd5b8451845114801561223a575081518451145b8015612247575080518451145b151561225257600080fd5b606061225e8484613069565b905060008090505b85518110156122e4576122d7878281518110151561228057fe5b90602001906020020151878381518110151561229857fe5b9060200190602002015184848151811015156122b057fe5b9060200190602002015186858151811015156122c857fe5b906020019060200201516126b6565b8080600101915050612266565b508451600860008282540192505081905550505050505050565b606061230982612644565b151561231457600080fd5b6000600b600084815260200190815260200160002080546001816001161561010002031660029004905011156123f757600b60008381526020019081526020016000208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156123eb5780601f106123c0576101008083540402835291602001916123eb565b820191906000526020600020905b8154815290600101906020018083116123ce57829003601f168201915b50505050509050612413565b612410612402612418565b61240b8461322f565b613388565b90505b919050565b606060068054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156124b05780601f10612485576101008083540402835291602001916124b0565b820191906000526020600020905b81548152906001019060200180831161249357829003601f168201915b5050505050905090565b6000806124c683611b39565b9050608071ffff000000000000000000000000000000008216908060020a8204915050915050919050565b6000806124fd83611b39565b905060ff8116915050919050565b6000600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000806125ab83611b39565b9050609072ff0000000000000000000000000000000000008216908060020a8204915050915050919050565b6000806125e383611b39565b905060a876ffff0000000000000000000000000000000000000000008216908060020a8204915050915050919050565b60008061261f83611b39565b905060506bffff000000000000000000008216908060020a8204915050915050919050565b6000806009600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141515156126f257600080fd5b6126fb83612644565b15151561270757600080fd5b836009600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506127ac6001600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133cf90919063ffffffff16565b600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506127f98383612873565b80600c600085815260200190815260200160002081905550828473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a450505050565b61287c82612644565b151561288757600080fd5b80600b600084815260200190815260200160002090805190602001906128ae929190613a59565b50817fe9dd2c01379f6033709e315d41f1a58fcbd937ae2512da16462852d1082e7b73826040518080602001828103825283818151815260200191508051906020019080838360005b838110156129125780820151818401526020810190506128f7565b50505050905090810190601f16801561293f5780820380516001836020036101000a031916815260200191505b509250505060405180910390a25050565b60008061295c83611d41565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806129cb57508373ffffffffffffffffffffffffffffffffffffffff166129b3846117ea565b73ffffffffffffffffffffffffffffffffffffffff16145b806129dc57506129db818561250b565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612a0582611d41565b73ffffffffffffffffffffffffffffffffffffffff16141515612a2757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515612a6357600080fd5b612a6c816133f0565b612abf6001600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134b090919063ffffffff16565b600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612b556001600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133cf90919063ffffffff16565b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816009600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515612c8757600080fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612cf28160016134d290919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fcd265ebaf09df2871cc7bd4133404a235ba12eff2041bb89d9c714a2621c7c7e60405160405180910390a250565b612d4c81600161358190919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f860405160405180910390a250565b612da681600361358190919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f660405160405180910390a250565b612e008160036134d290919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669260405160405180910390a250565b6000612e678473ffffffffffffffffffffffffffffffffffffffff16613631565b1515612e765760019050613061565b60008473ffffffffffffffffffffffffffffffffffffffff1663150b7a02338887876040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612f6d578082015181840152602081019050612f52565b50505050905090810190601f168015612f9a5780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b158015612fbc57600080fd5b505af1158015612fd0573d6000803e3d6000fd5b505050506040513d6020811015612fe657600080fd5b8101908080519060200190929190505050905063150b7a027c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150505b949350505050565b60606000809050606083516040519080825280602002602001820160405280156130a757816020015b60608152602001906001900390816130925790505b50905060008090505b845181101561322357606085828151811015156130c957fe5b9060200190602002015160ff166040519080825280601f01601f1916602001820160405280156131085781602001600182028038833980820191505090505b50905060008090505b868381518110151561311f57fe5b9060200190602002015160ff168110156131d9578781860181518110151561314357fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002828281518110151561319c57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050613111565b508083838151811015156131e957fe5b90602001906020020181905250858281518110151561320457fe5b9060200190602002015160ff16840193505080806001019150506130b0565b50809250505092915050565b60606000821415613277576040805190810160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613383565b600082905060005b6000821415156132a5578080600101915050600a8281151561329d57fe5b04915061327f565b6060816040519080825280601f01601f1916602001820160405280156132da5781602001600182028038833980820191505090505b50905060006001830390505b60008614151561337b57600a868115156132fc57fe5b066030017f01000000000000000000000000000000000000000000000000000000000000000282828060019003935081518110151561333757fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8681151561337357fe5b0495506132e6565b819450505050505b919050565b60606133c78383602060405190810160405280600081525060206040519081016040528060008152506020604051908101604052806000815250613644565b905092915050565b60008082840190508381101515156133e657600080fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff16600a600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156134ad576000600a600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b60008282111515156134c157600080fd5b600082840390508091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561350e57600080fd5b6135188282612c4a565b151561352357600080fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156135bd57600080fd5b6135c78282612c4a565b1515156135d357600080fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600080823b905060008111915050919050565b6060808690506060869050606086905060608690506060869050606081518351855187518951010101016040519080825280601f01601f1916602001820160405280156136a05781602001600182028038833980820191505090505b50905060008090506000809050600090505b87518110156137655787818151811015156136c957fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002838380600101945081518110151561372857fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806001019150506136b2565b600090505b865181101561381d57868181518110151561378157fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f01000000000000000000000000000000000000000000000000000000000000000283838060010194508151811015156137e057fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808060010191505061376a565b600090505b85518110156138d557858181518110151561383957fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002838380600101945081518110151561389857fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050613822565b600090505b845181101561398d5784818151811015156138f157fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002838380600101945081518110151561395057fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806001019150506138da565b600090505b8351811015613a455783818151811015156139a957fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000028383806001019450815181101515613a0857fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050613992565b829850505050505050505095945050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613a9a57805160ff1916838001178555613ac8565b82800160010185558215613ac8579182015b82811115613ac7578251825591602001919060010190613aac565b5b509050613ad59190613ad9565b5090565b613afb91905b80821115613af7576000816000905550600101613adf565b5090565b9056fea165627a7a723058204daec22e8ac080c17cac5478ff62a5466d5397f8535b2e9ec0dee0768ecd9c3900290000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002168747470733a2f2f6e66742e663164656c746174696d652e636f6d2f6a736f6e2f00000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405260043610610230576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806301ffc9a71461023557806306fdde03146102a7578063081812fc1461033757806308a8d7aa146103b2578063095ea7b3146104ae578063162094c41461050957806318160ddd146105db5780631ccd03ac1461060657806323b872dd1461065557806324af9942146106d05780632dd883e8146106e757806330176e1314610736578063332e4f78146107fe57806334110a4d1461084d5780633f4ba83a1461089c57806342842e0e146108b357806346fbf68e1461092e5780634ace9497146109975780634b2993e7146109e65780634f558e7914610a355780634fca277214610a885780635419808f14610ad75780635c975abb14610b265780636352211e14610b555780636ef8d66d14610bd057806370a0823114610be757806373c85eba14610c4c57806382dc1ec414610c9b5780638456cb5914610cec578063869b81a814610d0357806395d89b4114610d52578063983b2d5614610de25780639865027514610e33578063a22cb46514610e4a578063aa271e1a14610ea7578063afb0a36914610f10578063b88d4fde14610f5f578063bed93fb514611071578063c87b56dd14611389578063d547cfb71461143d578063dd8aafd5146114cd578063e6c3b1f61461151c578063e985e9c51461156b578063ebd2b309146115f4578063ee673c4014611643578063fe5585f614611692575b600080fd5b34801561024157600080fd5b5061028d6004803603602081101561025857600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690602001909291905050506116e1565b604051808215151515815260200191505060405180910390f35b3480156102b357600080fd5b506102bc611748565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102fc5780820151818401526020810190506102e1565b50505050905090810190601f1680156103295780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561034357600080fd5b506103706004803603602081101561035a57600080fd5b81019080803590602001909291905050506117ea565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103be57600080fd5b506104ac600480360360808110156103d557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561041c57600080fd5b82018360208201111561042e57600080fd5b8035906020019184600183028401116401000000008311171561045057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019092919050505061183b565b005b3480156104ba57600080fd5b50610507600480360360408110156104d157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611872565b005b34801561051557600080fd5b506105d96004803603604081101561052c57600080fd5b81019080803590602001909291908035906020019064010000000081111561055357600080fd5b82018360208201111561056557600080fd5b8035906020019184600183028401116401000000008311171561058757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506119d3565b005b3480156105e757600080fd5b506105f0611a11565b6040518082815260200191505060405180910390f35b34801561061257600080fd5b5061063f6004803603602081101561062957600080fd5b8101908080359060200190929190505050611a1b565b6040518082815260200191505060405180910390f35b34801561066157600080fd5b506106ce6004803603606081101561067857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611a44565b005b3480156106dc57600080fd5b506106e5611a85565b005b3480156106f357600080fd5b506107206004803603602081101561070a57600080fd5b8101908080359060200190929190505050611ab6565b6040518082815260200191505060405180910390f35b34801561074257600080fd5b506107fc6004803603602081101561075957600080fd5b810190808035906020019064010000000081111561077657600080fd5b82018360208201111561078857600080fd5b803590602001918460018302840111640100000000831117156107aa57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611ae3565b005b34801561080a57600080fd5b506108376004803603602081101561082157600080fd5b8101908080359060200190929190505050611b11565b6040518082815260200191505060405180910390f35b34801561085957600080fd5b506108866004803603602081101561087057600080fd5b8101908080359060200190929190505050611b39565b6040518082815260200191505060405180910390f35b3480156108a857600080fd5b506108b1611b6a565b005b3480156108bf57600080fd5b5061092c600480360360608110156108d657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611c19565b005b34801561093a57600080fd5b5061097d6004803603602081101561095157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c3a565b604051808215151515815260200191505060405180910390f35b3480156109a357600080fd5b506109d0600480360360208110156109ba57600080fd5b8101908080359060200190929190505050611c57565b6040518082815260200191505060405180910390f35b3480156109f257600080fd5b50610a1f60048036036020811015610a0957600080fd5b8101908080359060200190929190505050611c82565b6040518082815260200191505060405180910390f35b348015610a4157600080fd5b50610a6e60048036036020811015610a5857600080fd5b8101908080359060200190929190505050611cbc565b604051808215151515815260200191505060405180910390f35b348015610a9457600080fd5b50610ac160048036036020811015610aab57600080fd5b8101908080359060200190929190505050611cce565b6040518082815260200191505060405180910390f35b348015610ae357600080fd5b50610b1060048036036020811015610afa57600080fd5b8101908080359060200190929190505050611d03565b6040518082815260200191505060405180910390f35b348015610b3257600080fd5b50610b3b611d2a565b604051808215151515815260200191505060405180910390f35b348015610b6157600080fd5b50610b8e60048036036020811015610b7857600080fd5b8101908080359060200190929190505050611d41565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610bdc57600080fd5b50610be5611dbf565b005b348015610bf357600080fd5b50610c3660048036036020811015610c0a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611dca565b6040518082815260200191505060405180910390f35b348015610c5857600080fd5b50610c8560048036036020811015610c6f57600080fd5b8101908080359060200190929190505050611e4e565b6040518082815260200191505060405180910390f35b348015610ca757600080fd5b50610cea60048036036020811015610cbe57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e81565b005b348015610cf857600080fd5b50610d01611ea1565b005b348015610d0f57600080fd5b50610d3c60048036036020811015610d2657600080fd5b8101908080359060200190929190505050611f51565b6040518082815260200191505060405180910390f35b348015610d5e57600080fd5b50610d67611f80565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610da7578082015181840152602081019050610d8c565b50505050905090810190601f168015610dd45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610dee57600080fd5b50610e3160048036036020811015610e0557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612022565b005b348015610e3f57600080fd5b50610e48612042565b005b348015610e5657600080fd5b50610ea560048036036040811015610e6d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080351515906020019092919050505061204d565b005b348015610eb357600080fd5b50610ef660048036036020811015610eca57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506121a5565b604051808215151515815260200191505060405180910390f35b348015610f1c57600080fd5b50610f4960048036036020811015610f3357600080fd5b81019080803590602001909291905050506121c2565b6040518082815260200191505060405180910390f35b348015610f6b57600080fd5b5061106f60048036036080811015610f8257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610fe957600080fd5b820183602082011115610ffb57600080fd5b8035906020019184600183028401116401000000008311171561101d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506121ec565b005b34801561107d57600080fd5b50611387600480360360a081101561109457600080fd5b81019080803590602001906401000000008111156110b157600080fd5b8201836020820111156110c357600080fd5b803590602001918460208302840111640100000000831117156110e557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561114557600080fd5b82018360208201111561115757600080fd5b8035906020019184602083028401116401000000008311171561117957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156111d957600080fd5b8201836020820111156111eb57600080fd5b8035906020019184600183028401116401000000008311171561120d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561127057600080fd5b82018360208201111561128257600080fd5b803590602001918460208302840111640100000000831117156112a457600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561130457600080fd5b82018360208201111561131657600080fd5b8035906020019184602083028401116401000000008311171561133857600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050612214565b005b34801561139557600080fd5b506113c2600480360360208110156113ac57600080fd5b81019080803590602001909291905050506122fe565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156114025780820151818401526020810190506113e7565b50505050905090810190601f16801561142f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561144957600080fd5b50611452612418565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015611492578082015181840152602081019050611477565b50505050905090810190601f1680156114bf5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156114d957600080fd5b50611506600480360360208110156114f057600080fd5b81019080803590602001909291905050506124ba565b6040518082815260200191505060405180910390f35b34801561152857600080fd5b506115556004803603602081101561153f57600080fd5b81019080803590602001909291905050506124f1565b6040518082815260200191505060405180910390f35b34801561157757600080fd5b506115da6004803603604081101561158e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061250b565b604051808215151515815260200191505060405180910390f35b34801561160057600080fd5b5061162d6004803603602081101561161757600080fd5b810190808035906020019092919050505061259f565b6040518082815260200191505060405180910390f35b34801561164f57600080fd5b5061167c6004803603602081101561166657600080fd5b81019080803590602001909291905050506125d7565b6040518082815260200191505060405180910390f35b34801561169e57600080fd5b506116cb600480360360208110156116b557600080fd5b8101908080359060200190929190505050612613565b6040518082815260200191505060405180910390f35b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b606060048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156117e05780601f106117b5576101008083540402835291602001916117e0565b820191906000526020600020905b8154815290600101906020018083116117c357829003601f168201915b5050505050905090565b60006117f582612644565b151561180057600080fd5b600a600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b611844336121a5565b151561184f57600080fd5b61185b848484846126b6565b600160086000828254019250508190555050505050565b600260009054906101000a900460ff1615151561188e57600080fd5b600061189982611d41565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156118d657600080fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806119165750611915813361250b565b5b151561192157600080fd5b82600a600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6119dc336121a5565b15156119e757600080fd5b600760009054906101000a900460ff16151515611a0357600080fd5b611a0d8282612873565b5050565b6000600854905090565b600080611a2783611b39565b9050601863ff0000008216908060020a8204915050915050919050565b600260009054906101000a900460ff16151515611a6057600080fd5b611a6a3382612950565b1515611a7557600080fd5b611a808383836129e5565b505050565b611a8e336121a5565b1515611a9957600080fd5b6001600760006101000a81548160ff021916908315150217905550565b600080611ac283611b39565b9050603067ffff0000000000008216908060020a8204915050915050919050565b611aec336121a5565b1515611af757600080fd5b8060069080519060200190611b0d929190613a59565b5050565b600080611b1d83611b39565b9050601062ff00008216908060020a8204915050915050919050565b6000611b4482612644565b1515611b4f57600080fd5b600c6000838152602001908152602001600020549050919050565b611b7333611c3a565b1515611b7e57600080fd5b600260009054906101000a900460ff161515611b9957600080fd5b6000600260006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b611c3583838360206040519081016040528060008152506121ec565b505050565b6000611c50826001612c4a90919063ffffffff16565b9050919050565b600080611c6383611b39565b9050602865ff00000000008216908060020a8204915050915050919050565b600080611c8e83611b39565b9050609874ffff000000000000000000000000000000000000008216908060020a8204915050915050919050565b6000611cc782612644565b9050919050565b600080611cda83611b39565b905060706fffff00000000000000000000000000008216908060020a8204915050915050919050565b600080611d0f83611b39565b9050600861ff008216908060020a8204915050915050919050565b6000600260009054906101000a900460ff16905090565b6000806009600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611db657600080fd5b80915050919050565b611dc833612cde565b565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611e0757600080fd5b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600080611e5a83611b39565b905060606dffff0000000000000000000000008216908060020a8204915050915050919050565b611e8a33611c3a565b1515611e9557600080fd5b611e9e81612d38565b50565b611eaa33611c3a565b1515611eb557600080fd5b600260009054906101000a900460ff16151515611ed157600080fd5b6001600260006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b600080611f5d83611b39565b9050604069ffff00000000000000008216908060020a8204915050915050919050565b606060058054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156120185780601f10611fed57610100808354040283529160200191612018565b820191906000526020600020905b815481529060010190602001808311611ffb57829003601f168201915b5050505050905090565b61202b336121a5565b151561203657600080fd5b61203f81612d92565b50565b61204b33612dec565b565b600260009054906101000a900460ff1615151561206957600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156120a457600080fd5b80600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b60006121bb826003612c4a90919063ffffffff16565b9050919050565b6000806121ce83611b39565b9050602064ff000000008216908060020a8204915050915050919050565b6121f7848484611a44565b61220384848484612e46565b151561220e57600080fd5b50505050565b61221d336121a5565b151561222857600080fd5b8451845114801561223a575081518451145b8015612247575080518451145b151561225257600080fd5b606061225e8484613069565b905060008090505b85518110156122e4576122d7878281518110151561228057fe5b90602001906020020151878381518110151561229857fe5b9060200190602002015184848151811015156122b057fe5b9060200190602002015186858151811015156122c857fe5b906020019060200201516126b6565b8080600101915050612266565b508451600860008282540192505081905550505050505050565b606061230982612644565b151561231457600080fd5b6000600b600084815260200190815260200160002080546001816001161561010002031660029004905011156123f757600b60008381526020019081526020016000208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156123eb5780601f106123c0576101008083540402835291602001916123eb565b820191906000526020600020905b8154815290600101906020018083116123ce57829003601f168201915b50505050509050612413565b612410612402612418565b61240b8461322f565b613388565b90505b919050565b606060068054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156124b05780601f10612485576101008083540402835291602001916124b0565b820191906000526020600020905b81548152906001019060200180831161249357829003601f168201915b5050505050905090565b6000806124c683611b39565b9050608071ffff000000000000000000000000000000008216908060020a8204915050915050919050565b6000806124fd83611b39565b905060ff8116915050919050565b6000600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000806125ab83611b39565b9050609072ff0000000000000000000000000000000000008216908060020a8204915050915050919050565b6000806125e383611b39565b905060a876ffff0000000000000000000000000000000000000000008216908060020a8204915050915050919050565b60008061261f83611b39565b905060506bffff000000000000000000008216908060020a8204915050915050919050565b6000806009600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141515156126f257600080fd5b6126fb83612644565b15151561270757600080fd5b836009600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506127ac6001600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133cf90919063ffffffff16565b600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506127f98383612873565b80600c600085815260200190815260200160002081905550828473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a450505050565b61287c82612644565b151561288757600080fd5b80600b600084815260200190815260200160002090805190602001906128ae929190613a59565b50817fe9dd2c01379f6033709e315d41f1a58fcbd937ae2512da16462852d1082e7b73826040518080602001828103825283818151815260200191508051906020019080838360005b838110156129125780820151818401526020810190506128f7565b50505050905090810190601f16801561293f5780820380516001836020036101000a031916815260200191505b509250505060405180910390a25050565b60008061295c83611d41565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806129cb57508373ffffffffffffffffffffffffffffffffffffffff166129b3846117ea565b73ffffffffffffffffffffffffffffffffffffffff16145b806129dc57506129db818561250b565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612a0582611d41565b73ffffffffffffffffffffffffffffffffffffffff16141515612a2757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515612a6357600080fd5b612a6c816133f0565b612abf6001600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134b090919063ffffffff16565b600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612b556001600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133cf90919063ffffffff16565b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816009600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515612c8757600080fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612cf28160016134d290919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fcd265ebaf09df2871cc7bd4133404a235ba12eff2041bb89d9c714a2621c7c7e60405160405180910390a250565b612d4c81600161358190919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f860405160405180910390a250565b612da681600361358190919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f660405160405180910390a250565b612e008160036134d290919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669260405160405180910390a250565b6000612e678473ffffffffffffffffffffffffffffffffffffffff16613631565b1515612e765760019050613061565b60008473ffffffffffffffffffffffffffffffffffffffff1663150b7a02338887876040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612f6d578082015181840152602081019050612f52565b50505050905090810190601f168015612f9a5780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b158015612fbc57600080fd5b505af1158015612fd0573d6000803e3d6000fd5b505050506040513d6020811015612fe657600080fd5b8101908080519060200190929190505050905063150b7a027c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150505b949350505050565b60606000809050606083516040519080825280602002602001820160405280156130a757816020015b60608152602001906001900390816130925790505b50905060008090505b845181101561322357606085828151811015156130c957fe5b9060200190602002015160ff166040519080825280601f01601f1916602001820160405280156131085781602001600182028038833980820191505090505b50905060008090505b868381518110151561311f57fe5b9060200190602002015160ff168110156131d9578781860181518110151561314357fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002828281518110151561319c57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050613111565b508083838151811015156131e957fe5b90602001906020020181905250858281518110151561320457fe5b9060200190602002015160ff16840193505080806001019150506130b0565b50809250505092915050565b60606000821415613277576040805190810160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613383565b600082905060005b6000821415156132a5578080600101915050600a8281151561329d57fe5b04915061327f565b6060816040519080825280601f01601f1916602001820160405280156132da5781602001600182028038833980820191505090505b50905060006001830390505b60008614151561337b57600a868115156132fc57fe5b066030017f01000000000000000000000000000000000000000000000000000000000000000282828060019003935081518110151561333757fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8681151561337357fe5b0495506132e6565b819450505050505b919050565b60606133c78383602060405190810160405280600081525060206040519081016040528060008152506020604051908101604052806000815250613644565b905092915050565b60008082840190508381101515156133e657600080fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff16600a600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156134ad576000600a600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b60008282111515156134c157600080fd5b600082840390508091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561350e57600080fd5b6135188282612c4a565b151561352357600080fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156135bd57600080fd5b6135c78282612c4a565b1515156135d357600080fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600080823b905060008111915050919050565b6060808690506060869050606086905060608690506060869050606081518351855187518951010101016040519080825280601f01601f1916602001820160405280156136a05781602001600182028038833980820191505090505b50905060008090506000809050600090505b87518110156137655787818151811015156136c957fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002838380600101945081518110151561372857fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806001019150506136b2565b600090505b865181101561381d57868181518110151561378157fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f01000000000000000000000000000000000000000000000000000000000000000283838060010194508151811015156137e057fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808060010191505061376a565b600090505b85518110156138d557858181518110151561383957fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002838380600101945081518110151561389857fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050613822565b600090505b845181101561398d5784818151811015156138f157fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002838380600101945081518110151561395057fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806001019150506138da565b600090505b8351811015613a455783818151811015156139a957fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000028383806001019450815181101515613a0857fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050613992565b829850505050505050505095945050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613a9a57805160ff1916838001178555613ac8565b82800160010185558215613ac8579182015b82811115613ac7578251825591602001919060010190613aac565b5b509050613ad59190613ad9565b5090565b613afb91905b80821115613af7576000816000905550600101613adf565b5090565b9056fea165627a7a723058204daec22e8ac080c17cac5478ff62a5466d5397f8535b2e9ec0dee0768ecd9c390029

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

0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002168747470733a2f2f6e66742e663164656c746174696d652e636f6d2f6a736f6e2f00000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : baseTokenURI (string): https://nft.f1deltatime.com/json/

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000021
Arg [2] : 68747470733a2f2f6e66742e663164656c746174696d652e636f6d2f6a736f6e
Arg [3] : 2f00000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

31376:3025:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1257:135;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1257:135:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1257:135:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17288:85;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17288:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;17288:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21829:154;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21829:154:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;21829:154:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25744:196;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25744:196:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;25744:196:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;25744:196:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;25744:196:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;25744:196:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;25744:196:0;;;;;;;;;;;;;;;;;;;;;;;;;;;21223:313;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21223:313:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;21223:313:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18556:154;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18556:154:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18556:154:0;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;18556:154:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;18556:154:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;18556:154:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;18556:154:0;;;;;;;;;;;;;;;;;;17734:91;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17734:91:0;;;;;;;;;;;;;;;;;;;;;;;32063:173;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32063:173:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;32063:173:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23433:198;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23433:198:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;23433:198:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18194:86;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18194:86:0;;;;;;32684:179;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32684:179:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;32684:179:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19331:118;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19331:118:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19331:118:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;19331:118:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;19331:118:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;19331:118:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;19331:118:0;;;;;;;;;;;;;;;;;;31886:171;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31886:171:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;31886:171:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19858:159;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19858:159:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19858:159:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7478:118;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7478:118:0;;;;;;24284:134;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24284:134:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;24284:134:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5752:109;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5752:109:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5752:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32421:257;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32421:257:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;32421:257:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34034:179;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34034:179:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;34034:179:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18021:104;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18021:104:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18021:104:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33480:186;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33480:186:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;33480:186:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31708:172;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31708:172:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;31708:172:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6731:78;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6731:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;20611:181;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20611:181:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20611:181:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5969:77;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5969:77:0;;;;;;20227:153;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20227:153:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20227:153:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33290:184;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33290:184:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;33290:184:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5869:92;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5869:92:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5869:92:0;;;;;;;;;;;;;;;;;;;;;;7267:116;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7267:116:0;;;;;;32869:225;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32869:225:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;32869:225:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17487:89;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17487:89:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;17487:89:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8083:92;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8083:92:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8083:92:0;;;;;;;;;;;;;;;;;;;;;;8183:77;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8183:77:0;;;;;;22283:231;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22283:231:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;22283:231:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7966:109;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7966:109:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7966:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32242:173;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32242:173:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;32242:173:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25137:214;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25137:214:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;25137:214:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;25137:214:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;25137:214:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;25137:214:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;25137:214:0;;;;;;;;;;;;;;;;;;26494:646;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26494:646:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;26494:646:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;26494:646:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;26494:646:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;26494:646:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;26494:646:0;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;26494:646:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;26494:646:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;26494:646:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;26494:646:0;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;26494:646:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;26494:646:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;26494:646:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;26494:646:0;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;26494:646:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;26494:646:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;26494:646:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;26494:646:0;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;26494:646:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;26494:646:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;26494:646:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;26494:646:0;;;;;;;;;;;;;;;;;;18917:291;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18917:291:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18917:291:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;18917:291:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19573:99;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19573:99:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;19573:99:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33672:175;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33672:175:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;33672:175:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31543:159;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31543:159:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;31543:159:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22843:147;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22843:147:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;22843:147:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33853:175;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33853:175:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;33853:175:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34219:179;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34219:179:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;34219:179:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33100:184;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33100:184:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;33100:184:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1257:135;1327:4;1351:20;:33;1372:11;1351:33;;;;;;;;;;;;;;;;;;;;;;;;;;;1344:40;;1257:135;;;:::o;17288:85::-;17327:13;17360:5;17353:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17288:85;:::o;21829:154::-;21888:7;21916:16;21924:7;21916;:16::i;:::-;21908:25;;;;;;;;21951:15;:24;21967:7;21951:24;;;;;;;;;;;;;;;;;;;;;21944:31;;21829:154;;;:::o;25744:196::-;7917:20;7926:10;7917:8;:20::i;:::-;7909:29;;;;;;;;25869:35;25875:2;25879:7;25888:3;25893:10;25869:5;:35::i;:::-;25931:1;25915:12;;:17;;;;;;;;;;;25744:196;;;;:::o;21223:313::-;6968:7;;;;;;;;;;;6967:8;6959:17;;;;;;;;21301:13;21317:16;21325:7;21317;:16::i;:::-;21301:32;;21358:5;21352:11;;:2;:11;;;;21344:20;;;;;;;;21397:5;21383:19;;:10;:19;;;:58;;;;21406:35;21423:5;21430:10;21406:16;:35::i;:::-;21383:58;21375:67;;;;;;;;21482:2;21455:15;:24;21471:7;21455:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;21520:7;21516:2;21500:28;;21509:5;21500:28;;;;;;;;;;;;6987:1;21223:313;;:::o;18556:154::-;7917:20;7926:10;7917:8;:20::i;:::-;7909:29;;;;;;;;18651:13;;;;;;;;;;;18650:14;18642:23;;;;;;;;18676:26;18689:7;18698:3;18676:12;:26::i;:::-;18556:154;;:::o;17734:91::-;17778:7;17805:12;;17798:19;;17734:91;:::o;32063:173::-;32122:7;32138:18;32159:24;32175:7;32159:15;:24::i;:::-;32138:45;;32228:2;32212:10;32198;:25;32197:33;52:12:-1;49:1;45:20;29:14;25:41;7:59;;32197:33:0;32190:40;;;32063:173;;;:::o;23433:198::-;6968:7;;;;;;;;;;;6967:8;6959:17;;;;;;;;23538:39;23557:10;23569:7;23538:18;:39::i;:::-;23530:48;;;;;;;;23591:32;23605:4;23611:2;23615:7;23591:13;:32::i;:::-;23433:198;;;:::o;18194:86::-;7917:20;7926:10;7917:8;:20::i;:::-;7909:29;;;;;;;;18268:4;18252:13;;:20;;;;;;;;;;;;;;;;;;18194:86::o;32684:179::-;32747:7;32763:18;32784:24;32800:7;32784:15;:24::i;:::-;32763:45;;32855:2;32837:12;32823:10;:27;32822:35;52:12:-1;49:1;45:20;29:14;25:41;7:59;;32822:35:0;32815:42;;;32684:179;;;:::o;19331:118::-;7917:20;7926:10;7917:8;:20::i;:::-;7909:29;;;;;;;;19429:12;19413:13;:28;;;;;;;;;;;;:::i;:::-;;19331:118;:::o;31886:171::-;31943:7;31959:18;31980:24;31996:7;31980:15;:24::i;:::-;31959:45;;32049:2;32033:10;32019;:25;32018:33;52:12:-1;49:1;45:20;29:14;25:41;7:59;;32018:33:0;32011:40;;;31886:171;;;:::o;19858:159::-;19921:7;19949:16;19957:7;19949;:16::i;:::-;19941:25;;;;;;;;19984:16;:25;20001:7;19984:25;;;;;;;;;;;;19977:32;;19858:159;;;:::o;7478:118::-;5703:20;5712:10;5703:8;:20::i;:::-;5695:29;;;;;;;;7147:7;;;;;;;;;;;7139:16;;;;;;;;7547:5;7537:7;;:15;;;;;;;;;;;;;;;;;;7568:20;7577:10;7568:20;;;;;;;;;;;;;;;;;;;;;;7478:118::o;24284:134::-;24371:39;24388:4;24394:2;24398:7;24371:39;;;;;;;;;;;;;:16;:39::i;:::-;24284:134;;;:::o;5752:109::-;5808:4;5832:21;5845:7;5832:8;:12;;:21;;;;:::i;:::-;5825:28;;5752:109;;;:::o;32421:257::-;32479:7;32580:18;32601:24;32617:7;32601:15;:24::i;:::-;32580:45;;32670:2;32654:10;32640;:25;32639:33;52:12:-1;49:1;45:20;29:14;25:41;7:59;;32639:33:0;32632:40;;;32421:257;;;:::o;34034:179::-;34095:7;34111:18;34132:24;34148:7;34132:15;:24::i;:::-;34111:45;;34204:3;34185:13;34171:10;:28;34170:37;52:12:-1;49:1;45:20;29:14;25:41;7:59;;34170:37:0;34163:44;;;34034:179;;;:::o;18021:104::-;18077:4;18101:16;18109:7;18101;:16::i;:::-;18094:23;;18021:104;;;:::o;33480:186::-;33548:7;33564:18;33585:24;33601:7;33585:15;:24::i;:::-;33564:45;;33657:3;33638:13;33624:10;:28;33623:37;52:12:-1;49:1;45:20;29:14;25:41;7:59;;33623:37:0;33616:44;;;33480:186;;;:::o;31708:172::-;31768:7;31784:18;31805:24;31821:7;31805:15;:24::i;:::-;31784:45;;31873:1;31858:9;31844:10;:24;31843:31;52:12:-1;49:1;45:20;29:14;25:41;7:59;;31843:31:0;31836:38;;;31708:172;;;:::o;6731:78::-;6770:4;6794:7;;;;;;;;;;;6787:14;;6731:78;:::o;20611:181::-;20666:7;20686:13;20702:11;:20;20714:7;20702:20;;;;;;;;;;;;;;;;;;;;;20686:36;;20758:1;20741:19;;:5;:19;;;;20733:28;;;;;;;;20779:5;20772:12;;;20611:181;;;:::o;5969:77::-;6013:25;6027:10;6013:13;:25::i;:::-;5969:77::o;20227:153::-;20282:7;20327:1;20310:19;;:5;:19;;;;20302:28;;;;;;;;20348:17;:24;20366:5;20348:24;;;;;;;;;;;;;;;;20341:31;;20227:153;;;:::o;33290:184::-;33358:7;33374:18;33395:24;33411:7;33395:15;:24::i;:::-;33374:45;;33466:2;33448:12;33434:10;:27;33433:35;52:12:-1;49:1;45:20;29:14;25:41;7:59;;33433:35:0;33426:42;;;33290:184;;;:::o;5869:92::-;5703:20;5712:10;5703:8;:20::i;:::-;5695:29;;;;;;;;5934:19;5945:7;5934:10;:19::i;:::-;5869:92;:::o;7267:116::-;5703:20;5712:10;5703:8;:20::i;:::-;5695:29;;;;;;;;6968:7;;;;;;;;;;;6967:8;6959:17;;;;;;;;7337:4;7327:7;;:14;;;;;;;;;;;;;;;;;;7357:18;7364:10;7357:18;;;;;;;;;;;;;;;;;;;;;;7267:116::o;32869:225::-;32934:7;32994:18;33015:24;33031:7;33015:15;:24::i;:::-;32994:45;;33086:2;33068:12;33054:10;:27;33053:35;52:12:-1;49:1;45:20;29:14;25:41;7:59;;33053:35:0;33046:42;;;32869:225;;;:::o;17487:89::-;17528:13;17561:7;17554:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17487:89;:::o;8083:92::-;7917:20;7926:10;7917:8;:20::i;:::-;7909:29;;;;;;;;8148:19;8159:7;8148:10;:19::i;:::-;8083:92;:::o;8183:77::-;8227:25;8241:10;8227:13;:25::i;:::-;8183:77::o;22283:231::-;6968:7;;;;;;;;;;;6967:8;6959:17;;;;;;;;22383:10;22377:16;;:2;:16;;;;22369:25;;;;;;;;22442:8;22405:18;:30;22424:10;22405:30;;;;;;;;;;;;;;;:34;22436:2;22405:34;;;;;;;;;;;;;;;;:45;;;;;;;;;;;;;;;;;;22493:2;22466:40;;22481:10;22466:40;;;22497:8;22466:40;;;;;;;;;;;;;;;;;;;;;;22283:231;;:::o;7966:109::-;8022:4;8046:21;8059:7;8046:8;:12;;:21;;;;:::i;:::-;8039:28;;7966:109;;;:::o;32242:173::-;32301:7;32317:18;32338:24;32354:7;32338:15;:24::i;:::-;32317:45;;32407:2;32391:10;32377;:25;32376:33;52:12:-1;49:1;45:20;29:14;25:41;7:59;;32376:33:0;32369:40;;;32242:173;;;:::o;25137:214::-;25244:31;25257:4;25263:2;25267:7;25244:12;:31::i;:::-;25294:48;25317:4;25323:2;25327:7;25336:5;25294:22;:48::i;:::-;25286:57;;;;;;;;25137:214;;;;:::o;26494:646::-;7917:20;7926:10;7917:8;:20::i;:::-;7909:29;;;;;;;;26758:2;:9;26739:8;:15;:28;:86;;;;;26807:11;:18;26788:8;:15;:37;26739:86;:143;;;;;26865:10;:17;26846:8;:15;:36;26739:143;26731:152;;;;;;;;26894:19;26916:37;26930:9;26941:11;26916:13;:37::i;:::-;26894:59;;26969:6;26978:1;26969:10;;26964:127;26985:8;:15;26981:1;:19;26964:127;;;27022:57;27028:2;27031:1;27028:5;;;;;;;;;;;;;;;;;;27035:8;27044:1;27035:11;;;;;;;;;;;;;;;;;;27055:4;27060:1;27055:7;;;;;;;;;;;;;;;;;;27065:10;27076:1;27065:13;;;;;;;;;;;;;;;;;;27022:5;:57::i;:::-;27002:3;;;;;;;26964:127;;;;27117:8;:15;27101:12;;:31;;;;;;;;;;;7949:1;26494:646;;;;;:::o;18917:291::-;18975:13;19009:16;19017:7;19009;:16::i;:::-;19001:25;;;;;;;;19079:1;19049:10;:19;19060:7;19049:19;;;;;;;;;;;19043:33;;;;;;;;;;;;;;;;:37;19039:82;;;19102:10;:19;19113:7;19102:19;;;;;;;;;;;19095:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19039:82;19141:59;19159:14;:12;:14::i;:::-;19174:25;19191:7;19174:16;:25::i;:::-;19141:17;:59::i;:::-;19134:66;;18917:291;;;;:::o;19573:99::-;19618:13;19651;19644:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19573:99;:::o;33672:175::-;33729:7;33745:18;33766:24;33782:7;33766:15;:24::i;:::-;33745:45;;33838:3;33819:13;33805:10;:28;33804:37;52:12:-1;49:1;45:20;29:14;25:41;7:59;;33804:37:0;33797:44;;;33672:175;;;:::o;31543:159::-;31600:7;31618:18;31639:24;31655:7;31639:15;:24::i;:::-;31618:45;;31692:4;31679:10;:17;31672:24;;;31543:159;;;:::o;22843:147::-;22923:4;22947:18;:25;22966:5;22947:25;;;;;;;;;;;;;;;:35;22973:8;22947:35;;;;;;;;;;;;;;;;;;;;;;;;;22940:42;;22843:147;;;;:::o;33853:175::-;33912:7;33928:18;33949:24;33965:7;33949:15;:24::i;:::-;33928:45;;34019:3;34002:11;33988:10;:26;33987:35;52:12:-1;49:1;45:20;29:14;25:41;7:59;;33987:35:0;33980:42;;;33853:175;;;:::o;34219:179::-;34280:7;34296:18;34317:24;34333:7;34317:15;:24::i;:::-;34296:45;;34389:3;34370:13;34356:10;:28;34355:37;52:12:-1;49:1;45:20;29:14;25:41;7:59;;34355:37:0;34348:44;;;34219:179;;;:::o;33100:184::-;33168:7;33184:18;33205:24;33221:7;33205:15;:24::i;:::-;33184:45;;33276:2;33258:12;33244:10;:27;33243:35;52:12:-1;49:1;45:20;29:14;25:41;7:59;;33243:35:0;33236:42;;;33100:184;;;:::o;27336:155::-;27393:4;27410:13;27426:11;:20;27438:7;27426:20;;;;;;;;;;;;;;;;;;;;;27410:36;;27481:1;27464:19;;:5;:19;;;;27457:26;;;27336:155;;;:::o;28499:411::-;28624:1;28610:16;;:2;:16;;;;28602:25;;;;;;;;28647:16;28655:7;28647;:16::i;:::-;28646:17;28638:26;;;;;;;;28700:2;28677:11;:20;28689:7;28677:20;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;28737:28;28763:1;28737:17;:21;28755:2;28737:21;;;;;;;;;;;;;;;;:25;;:28;;;;:::i;:::-;28713:17;:21;28731:2;28713:21;;;;;;;;;;;;;;;:52;;;;28776:26;28789:7;28798:3;28776:12;:26::i;:::-;28841:10;28813:16;:25;28830:7;28813:25;;;;;;;;;;;:38;;;;28894:7;28890:2;28869:33;;28886:1;28869:33;;;;;;;;;;;;28499:411;;;;:::o;29155:185::-;29241:16;29249:7;29241;:16::i;:::-;29233:25;;;;;;;;29291:3;29269:10;:19;29280:7;29269:19;;;;;;;;;;;:25;;;;;;;;;;;;:::i;:::-;;29319:7;29310:22;29328:3;29310:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;29310:22:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29155:185;;:::o;27863:249::-;27948:4;27965:13;27981:16;27989:7;27981;:16::i;:::-;27965:32;;28027:5;28016:16;;:7;:16;;;:51;;;;28060:7;28036:31;;:20;28048:7;28036:11;:20::i;:::-;:31;;;28016:51;:87;;;;28071:32;28088:5;28095:7;28071:16;:32::i;:::-;28016:87;28008:96;;;27863:249;;;;:::o;29723:414::-;29837:4;29817:24;;:16;29825:7;29817;:16::i;:::-;:24;;;29809:33;;;;;;;;29875:1;29861:16;;:2;:16;;;;29853:25;;;;;;;;29891:23;29906:7;29891:14;:23::i;:::-;29953:30;29981:1;29953:17;:23;29971:4;29953:23;;;;;;;;;;;;;;;;:27;;:30;;;;:::i;:::-;29927:17;:23;29945:4;29927:23;;;;;;;;;;;;;;;:56;;;;30018:28;30044:1;30018:17;:21;30036:2;30018:21;;;;;;;;;;;;;;;;:25;;:28;;;;:::i;:::-;29994:17;:21;30012:2;29994:21;;;;;;;;;;;;;;;:52;;;;30082:2;30059:11;:20;30071:7;30059:20;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;30121:7;30117:2;30102:27;;30111:4;30102:27;;;;;;;;;;;;29723:414;;;:::o;5217:165::-;5289:4;5333:1;5314:21;;:7;:21;;;;5306:30;;;;;;;;5354:4;:11;;:20;5366:7;5354:20;;;;;;;;;;;;;;;;;;;;;;;;;5347:27;;5217:165;;;;:::o;6184:130::-;6244:24;6260:7;6244:8;:15;;:24;;;;:::i;:::-;6298:7;6284:22;;;;;;;;;;;;6184:130;:::o;6054:122::-;6111:21;6124:7;6111:8;:12;;:21;;;;:::i;:::-;6160:7;6148:20;;;;;;;;;;;;6054:122;:::o;8268:::-;8325:21;8338:7;8325:8;:12;;:21;;;;:::i;:::-;8374:7;8362:20;;;;;;;;;;;;8268:122;:::o;8398:130::-;8458:24;8474:7;8458:8;:15;;:24;;;;:::i;:::-;8512:7;8498:22;;;;;;;;;;;;8398:130;:::o;30671:356::-;30793:4;30820:15;:2;:13;;;:15::i;:::-;30819:16;30815:60;;;30859:4;30852:11;;;;30815:60;30887:13;30919:2;30903:36;;;30940:10;30952:4;30958:7;30967:5;30903:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;30903:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30903:70:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30903:70:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;30903:70:0;;;;;;;;;;;;;;;;30887:86;;15612:10;31002:16;;30992:26;;;:6;:26;;;;30984:35;;;30671:356;;;;;;;:::o;13565:539::-;13648:18;13679:12;13694:1;13679:16;;13706:23;13744:8;:15;13732:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13706:54;;13777:6;13786:1;13777:10;;13773:296;13793:8;:15;13789:1;:19;13773:296;;;13830:22;13865:8;13874:1;13865:11;;;;;;;;;;;;;;;;;;13855:22;;;;;;;;;;;;;;;;;;;;;;;;;;;29:1:-1;21:6;17:14;116:4;104:10;96:6;87:34;147:4;139:6;135:17;125:27;;0:156;13855:22:0;;;;13830:47;;13898:6;13907:1;13898:10;;13894:86;13914:8;13923:1;13914:11;;;;;;;;;;;;;;;;;;13910:15;;:1;:15;13894:86;;;13964:5;13978:1;13970:7;:9;13964:16;;;;;;;;;;;;;;;;;;;;13949:9;13959:1;13949:12;;;;;;;;;;;;;;:31;;;;;;;;;;;13927:3;;;;;;;13894:86;;;;14011:9;13997:8;14006:1;13997:11;;;;;;;;;;;;;;;;;:23;;;;14046:8;14055:1;14046:11;;;;;;;;;;;;;;;;;;14035:22;;;;;;13773:296;13810:3;;;;;;;13773:296;;;;14088:8;14081:15;;;;13565:539;;;;:::o;13075:482::-;13125:27;13175:1;13169:2;:7;13165:50;;;13193:10;;;;;;;;;;;;;;;;;;;;;;13165:50;13225:6;13234:2;13225:11;;13247:8;13266:69;13278:1;13273;:6;;13266:69;;;13296:5;;;;;;;13321:2;13316:7;;;;;;;;;;;13266:69;;;13345:17;13375:3;13365:14;;;;;;;;;;;;;;;;;;;;;;;;;29:1:-1;21:6;17:14;116:4;104:10;96:6;87:34;147:4;139:6;135:17;125:27;;0:156;13365:14:0;;;;13345:34;;13390:6;13405:1;13399:3;:7;13390:16;;13417:103;13430:1;13424:2;:7;;13417:103;;;13481:2;13476;:7;;;;;;;;13471:2;:12;13460:25;;13448:4;13453:3;;;;;;;13448:9;;;;;;;;;;;;;;:37;;;;;;;;;;;13506:2;13500:8;;;;;;;;;;;13417:103;;;13544:4;13530:19;;;;;;13075:482;;;;:::o;12916:151::-;12996:14;13030:29;13040:2;13044;13030:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:9;:29::i;:::-;13023:36;;12916:151;;;;:::o;9988:150::-;10046:7;10066:9;10082:1;10078;:5;10066:17;;10107:1;10102;:6;;10094:15;;;;;;;;10129:1;10122:8;;;9988:150;;;;:::o;31194:175::-;31294:1;31258:38;;:15;:24;31274:7;31258:24;;;;;;;;;;;;;;;;;;;;;:38;;;;31254:108;;;31348:1;31313:15;:24;31329:7;31313:24;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;31254:108;31194:175;:::o;9752:150::-;9810:7;9843:1;9838;:6;;9830:15;;;;;;;;9856:9;9872:1;9868;:5;9856:17;;9893:1;9886:8;;;9752:150;;;;:::o;4934:189::-;5033:1;5014:21;;:7;:21;;;;5006:30;;;;;;;;5055:18;5059:4;5065:7;5055:3;:18::i;:::-;5047:27;;;;;;;;5110:5;5087:4;:11;;:20;5099:7;5087:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;4934:189;;:::o;4669:186::-;4765:1;4746:21;;:7;:21;;;;4738:30;;;;;;;;4788:18;4792:4;4798:7;4788:3;:18::i;:::-;4787:19;4779:28;;;;;;;;4843:4;4820;:11;;:20;4832:7;4820:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;4669:186;;:::o;10876:627::-;10936:4;10953:12;11460:7;11448:20;11440:28;;11494:1;11487:4;:8;11480:15;;;10876:627;;;:::o;11533:1000::-;11665:33;11711:16;11736:2;11711:28;;11750:16;11775:2;11750:28;;11789:16;11814:2;11789:28;;11828:16;11853:2;11828:28;;11867:16;11892:2;11867:28;;11906:19;11990:3;:10;11977:3;:10;11964:3;:10;11951:3;:10;11938:3;:10;:23;:36;:49;:62;11928:73;;;;;;;;;;;;;;;;;;;;;;;;;29:1:-1;21:6;17:14;116:4;104:10;96:6;87:34;147:4;139:6;135:17;125:27;;0:156;11928:73:0;;;;11906:95;;12012:6;12021:1;12012:10;;12033:6;12042:1;12033:10;;12063:1;12059:5;;12054:80;12070:3;:10;12066:1;:14;12054:80;;;12116:3;12120:1;12116:6;;;;;;;;;;;;;;;;;;;;12102;12109:3;;;;;;12102:11;;;;;;;;;;;;;;:20;;;;;;;;;;;12082:3;;;;;;;12054:80;;;12153:1;12149:5;;12144:80;12160:3;:10;12156:1;:14;12144:80;;;12206:3;12210:1;12206:6;;;;;;;;;;;;;;;;;;;;12192;12199:3;;;;;;12192:11;;;;;;;;;;;;;;:20;;;;;;;;;;;12172:3;;;;;;;12144:80;;;12243:1;12239:5;;12234:80;12250:3;:10;12246:1;:14;12234:80;;;12296:3;12300:1;12296:6;;;;;;;;;;;;;;;;;;;;12282;12289:3;;;;;;12282:11;;;;;;;;;;;;;;:20;;;;;;;;;;;12262:3;;;;;;;12234:80;;;12333:1;12329:5;;12324:80;12340:3;:10;12336:1;:14;12324:80;;;12386:3;12390:1;12386:6;;;;;;;;;;;;;;;;;;;;12372;12379:3;;;;;;12372:11;;;;;;;;;;;;;;:20;;;;;;;;;;;12352:3;;;;;;;12324:80;;;12423:1;12419:5;;12414:80;12430:3;:10;12426:1;:14;12414:80;;;12476:3;12480:1;12476:6;;;;;;;;;;;;;;;;;;;;12462;12469:3;;;;;;12462:11;;;;;;;;;;;;;;:20;;;;;;;;;;;12442:3;;;;;;;12414:80;;;12518:6;12504:21;;;;;;;;;;11533:1000;;;;;;;:::o;31376:3025::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

bzzr://4daec22e8ac080c17cac5478ff62a5466d5397f8535b2e9ec0dee0768ecd9c39
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.