code: private Path renameConflictingFile(Path canonicalPath, Path conflictingPath, String ciphertext, String dirId, String dirPrefix) throws IOException {
  		try {
  			String cleartext = cryptor.fileNameCryptor().decryptFilename(ciphertext, dirId.getBytes(StandardCharsets.UTF_8));
  			Path alternativePath = canonicalPath;
  			for (int i = 1; Files.exists(alternativePath); i++) {
  				String alternativeCleartext = cleartext + " (Conflict " + i + ")";
  				String alternativeCiphertext = cryptor.fileNameCryptor().encryptFilename(alternativeCleartext, dirId.getBytes(StandardCharsets.UTF_8));
  				String alternativeCiphertextFileName = dirPrefix + alternativeCiphertext;
  				if (alternativeCiphertextFileName.length() > SHORT_NAMES_MAX_LENGTH) {
  					alternativeCiphertextFileName = longFileNameProvider.deflate(alternativeCiphertextFileName);
  				}
  				alternativePath = canonicalPath.resolveSibling(alternativeCiphertextFileName);
  			}
  			LOG.info("Moving conflicting file {} to {}", conflictingPath, alternativePath);
  			return Files.move(conflictingPath, alternativePath, StandardCopyOption.ATOMIC_MOVE);
  		} catch (AuthenticationFailedException e) {
  			// not decryptable, no need to resolve any kind of conflict
  			LOG.info("Found valid Base32 string, which is an unauthentic ciphertext: {}", conflictingPath);
  			return conflictingPath;
  		}
  	}
docs: Resolves a conflict by renaming the conflicting file.
  
  @param canonicalPath The path to the original (conflict-free) file.
  @param conflictingPath The path to the potentially conflicting file.
  @param ciphertext The (previously inflated) ciphertext name of the file without any preceeding directory prefix.
  @param dirId The directory id of the file's parent directory.
  @param dirPrefix The directory prefix (if the conflicting file is a directory file) or an empty string.
  @return The new path after renaming the conflicting file.
  @throws IOException