code: func (v *Validator) foundInDictionaries(s string) error {
  	v.once.Do(v.indexDictionaries)
  
  	pw := normalize(s)   // normalized password
  	revpw := reverse(pw) // reversed password
  	pwlen := len(pw)
  
  	// let's check perfect matches first
  	// we can skip this if the pw is longer than the longest word in our dictionary
  	if pwlen <= v.wordsMaxLen {
  		if _, ok := v.words[pw]; ok {
  			return &DictionaryError{ErrDictionary, pw, 0}
  		}
  		if _, ok := v.words[revpw]; ok {
  			return &DictionaryError{ErrMangledDictionary, revpw, 0}
  		}
  	}
  
  	// find hashed dictionary entries
  	if word, ok := v.hashedWords[pw]; ok {
  		return &HashedDictionaryError{ErrHashedDictionary, word}
  	}
  
  	// find mangled / reversed passwords
  	// we can skip this if the pw is longer than the longest word plus our minimum distance
  	if pwlen <= v.wordsMaxLen+v.options.MinDist {
  		for word := range v.words {
  			if dist := smetrics.WagnerFischer(word, pw, 1, 1, 1); dist <= v.options.MinDist {
  				return &DictionaryError{ErrMangledDictionary, word, dist}
  			}
  			if dist := smetrics.WagnerFischer(word, revpw, 1, 1, 1); dist <= v.options.MinDist {
  				return &DictionaryError{ErrMangledDictionary, word, dist}
  			}
  		}
  	}
  
  	return nil
  }
docs: // foundInDictionaries returns whether a (mangled) string exists in the indexed dictionaries