'Checks a list of hashes for presence in the store.
Sub stores need to pass back the original HashDigest objects since they
carry state about the original file source.
Only unique hashes are checked, if there is duplication in the hashes input
it is the caller\'s responsibility to maintain any necessary mappings.
Args:
hashes: A list of Hash objects to check.
external: If true, attempt to check stores defined as EXTERNAL.
Yields:
Tuples of (RDFURN, hash object) that exist in the store.'

def CheckHashes(self, hashes, external=True):

    hashes = set(hashes)
    for child in self.GetChildrenByPriority(allow_external=external):
        for (urn, hash_obj) in child.CheckHashes(hashes):
            (yield (urn, hash_obj))
            hashes.discard(hash_obj)
        if (not hashes):
            break
