interface IERC721BulkTransfer {
    struct ToRecipient {
        address recipient;
        uint256 tokenId;
    }

    struct FromCollection {
        address collection;
        uint256 tokenId;
    }

    struct FromCollectionToRecipient {
        address collection;
        address recipient;
        uint256 tokenId;
    }

    /// @notice Transfer multiple tokens from a single ERC721 collection to a single recipient
    /// @param collection The address of the ERC721 contract
    /// @param recipient The recipient of the tokens
    /// @param tokenIds The array of token ids to be transferred
    function transfer(
        address collection,
        address recipient,
        uint256[] calldata tokenIds
    ) external;

    /// @notice Transfer multiple tokens from a single ERC721 collection to multiple recipients
    /// @param collection The address of the ERC721 contract
    /// @param recipientsData An array of { address recipient, uint256 tokenId }
    function transfer(address collection, ToRecipient[] calldata recipientsData)
        external;

    /// @notice Transfer multiple tokens from multiple ERC721 collections to a single recipient
    /// @param collectionsData An array of { address collection, uint256 tokenId }
    /// @param recipient The recipient of the tokens
    function transfer(
        FromCollection[] calldata collectionsData,
        address recipient
    ) external;

    /// @notice Transfer multiple tokens from multiple ERC721 collections to multiple recipients
    /// @param transferData An array of { address collection, address recipient, uint256 tokenId }
    function transfer(FromCollectionToRecipient[] calldata transferData)
        external;
}
/// @title ERC721 bulk transfer interface
/// @author https://github.com/gnkz
function transfer(
    address collection,
    address recipient,
    uint256[] calldata tokenIds
) external;

/// @notice Transfer multiple tokens from a single ERC721 collection to a single recipient
/// @param collection The address of the ERC721 contract
/// @param recipient The recipient of the tokens
/// @param tokenIds The array of token ids to be transferred