'Lists bunch of directories efficiently.
Args:
urns: List of urns to list children.
token: Security token.
limit: Max number of children to list (NOTE: this is per urn).
age: The age of the items to retrieve. Should be one of ALL_TIMES,
NEWEST_TIME or a range.
Yields:
Tuples of Subjects and a list of children urns of a given subject.'

def MultiListChildren(self, urns, token=None, limit=None, age=NEWEST_TIME):

    checked_subjects = set()
    index_prefix = 'index:dir/'
    for (subject, values) in data_store.DB.MultiResolvePrefix(urns, index_prefix, token=token, timestamp=Factory.ParseAgeSpecification(age), limit=limit):
        checked_subjects.add(subject)
        subject_result = []
        for (predicate, _, timestamp) in values:
            urn = rdfvalue.RDFURN(subject).Add(predicate[len(index_prefix):])
            urn.age = rdfvalue.RDFDatetime(timestamp)
            subject_result.append(urn)
        (yield (subject, subject_result))
    for subject in (set(urns) - checked_subjects):
        (yield (subject, []))
