public DecryptEIDUID(Path inFile) {
    this.inFile = inFile;
    int len;
    if (Main.mode.equalsIgnoreCase("OrganizedXmlDirectory")) {
      String fileName = inFile.getFileName().toString();
      len = fileName.length();
      String strYear, strMonth;
      strYear = fileName.substring(len - 14, len - 10);
      strMonth = fileName.substring(len - 9, len - 7);
      this.outFile = Main.organizedXmlDirectory.resolve(strYear + File.separator + strMonth + "_dec" + File.separator + inFile.getFileName());
    } else {
      String tmp = inFile.getFileName().toString();
      String cleaned = tmp.replaceAll(".zip", "");
      cleaned = cleaned.replaceAll(".csv", "");
      cleaned = cleaned.replaceAll(".xml", "");

      if (inFile.getFileName().toString().contains(".csv"))
        this.outFile = Main.outputDirectory.resolve(cleaned + ".csv");
      else if (inFile.getFileName().toString().contains(".xml"))
        this.outFile = Main.outputDirectory.resolve(cleaned + ".xml");
      else
        this.outFile = Main.outputDirectory.resolve(inFile.getFileName());
    }

    // One directory per file.
    if (Main.unzipFiles) {
      try {
        ZipInputStream zipFile = new ZipInputStream(new FileInputStream(inFile.toFile()));
        zipFile.close();
        FileUnzipper fuz = new FileUnzipper(inFile);
        for (File f : fuz.getOutFiles()) {
          if (f.getAbsolutePath().endsWith(".xml") || f.getAbsolutePath().endsWith(".csv") || f.getAbsolutePath().endsWith(".zip")) {
            Main.count.incrementAndGet();
            Main.tpe.execute(new DecryptEIDUID(Main.tmpDirectory.resolve(f.getAbsolutePath())));
            done = true;
          }
        }
        return;
      } catch (Exception e) {
        // Not a zip file. Do nothing.
        e.printStackTrace();
      }
    }
  }