code: private static void replaceAtIndex(final TreeMap<Integer, Character[]> replacements, Integer current_index, final char[] password, final List<String> final_passwords)
      {
          for (final char replacement : replacements.get(current_index))
          {
              password[current_index] = replacement;
              if (current_index.equals(replacements.lastKey()))
              {
                  final_passwords.add(new String(password));
              }
              else if (final_passwords.size() > 100)
              {
                  // Give up if we've already made 100 replacements
                  return;
              }
              else
              {
                  replaceAtIndex(replacements, replacements.higherKey(current_index), password, final_passwords);
              }
          }
      }
docs: Internal function to recursively build the list of un-leet possibilities.
  
  @param replacements    TreeMap of replacement index, and the possible characters at that index to be replaced
  @param current_index   internal use for the function
  @param password        a Character array of the original password
  @param final_passwords List of the final passwords to be filled