<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def kdata(which, kind, fillen=_default_len_out, typlen=_default_len_out, srclen=_default_len_out):
 """ Return data for the nth kernel that is among a list of specified kernel types. http://naif.jpl.nasa.gov/pub/naif/toolkit_docs/C/cspice/kdata_c.html :param which: Index of kernel to fetch from the list of kernels. :type which: int :param kind: The kind of kernel to which fetches are limited. :type kind: str :param fillen: Available space in output file string. :type fillen: int :param typlen: Available space in output kernel type string. :type typlen: int :param srclen: Available space in output source string. :type srclen: int :return: The name of the kernel file, The type of the kernel, Name of the source file used to load file, The handle attached to file. :rtype: tuple """

    which = ctypes.c_int(which)
    kind = stypes.stringToCharP(kind)
    fillen = ctypes.c_int(fillen)
    typlen = ctypes.c_int(typlen)
    srclen = ctypes.c_int(srclen)
    file = stypes.stringToCharP(fillen)
    filtyp = stypes.stringToCharP(typlen)
    source = stypes.stringToCharP(srclen)
    handle = ctypes.c_int()
    found = ctypes.c_int()
    libspice.kdata_c(which, kind, fillen, typlen, srclen, file, filtyp, source,
                     ctypes.byref(handle), ctypes.byref(found))
    return stypes.toPythonString(file), stypes.toPythonString(
            filtyp), stypes.toPythonString(source), handle.value, bool(found.value)