/**
* @dev the ERC-165 identifier for this interface is 0xf140be0d.
*/interfaceIERC5007/* is IERC721 */{/**
* @dev Returns the start time of the NFT as a UNIX timestamp.
*
* Requirements:
*
* - `tokenId` must exist.
*/functionstartTime(uint256tokenId)externalviewreturns(uint64);/**
* @dev Returns the end time of the NFT as a UNIX timestamp.
*
* Requirements:
*
* - `tokenId` must exist.
*/functionendTime(uint256tokenId)externalviewreturns(uint64);}
/**
* @dev the ERC-165 identifier for this interface is 0x75cf3842.
*/interfaceIERC5007Composable/* is IERC5007 */{/**
* @dev Returns the asset id of the time NFT.
* Only NFTs with same asset id can be merged.
*
* Requirements:
*
* - `tokenId` must exist.
*/functionassetId(uint256tokenId)externalviewreturns(uint256);/**
* @dev Split an old token to two new tokens.
* The assetId of the new token is the same as the assetId of the old token
*
* Requirements:
*
* - `oldTokenId` must exist.
* - `newToken1Id` must not exist.
* - `newToken1Owner` cannot be the zero address.
* - `newToken2Id` must not exist.
* - `newToken2Owner` cannot be the zero address.
* - `splitTime` require(oldToken.startTime <= splitTime && splitTime < oldToken.EndTime)
*/functionsplit(uint256oldTokenId,uint256newToken1Id,addressnewToken1Owner,uint256newToken2Id,addressnewToken2Owner,uint64splitTime)external;/**
* @dev Merge the first token and second token into the new token.
*
* Requirements:
*
* - `firstTokenId` must exist.
* - `secondTokenId` must exist.
* - require((firstToken.endTime + 1) == secondToken.startTime)
* - require((firstToken.assetId()) == secondToken.assetId())
* - `newTokenOwner` cannot be the zero address.
* - `newTokenId` must not exist.
*/functionmerge(uint256firstTokenId,uint256secondTokenId,addressnewTokenOwner,uint256newTokenId)external;}