New Upstream Snapshot - zxing

Ready changes

Summary

Merged new upstream version: 3.5.1+git20221101.1.bc88dd1+ds (was: 3.4.1+ds).

Resulting package

Built on 2022-11-25T03:43 (took 16m47s)

The resulting binary packages can be installed (if you have the apt repository enabled) by running one of:

apt install -t fresh-snapshots libzxing-core-javaapt install -t fresh-snapshots libzxing-javaapt install -t fresh-snapshots libzxing-javase-java

Diff

diff --git a/README.md b/README.md
index 64ef047..cacfbfe 100644
--- a/README.md
+++ b/README.md
@@ -54,9 +54,10 @@ library implemented in Java, with ports to other languages.
 
 | Module                                                                                    | Description
 | ----------------------------------------------------------------------------------------- | -----------
+| [SCodes](https://github.com/scytheStudio/SCodes)                                          | Qt & Qml wrapper
 | [QZXing](https://github.com/ftylitak/qzxing)                                              | port to Qt framework
 | [glassechidna/zxing-cpp](https://github.com/glassechidna/zxing-cpp)                       | port to C++ (forked from the [deprecated official C++ port](https://github.com/zxing/zxing/tree/00f634024ceeee591f54e6984ea7dd666fab22ae/cpp))
-| [nu-book/zxing-cpp](https://github.com/nu-book/zxing-cpp)                                 | recent port to C++
+| [zxing-cpp/zxing-cpp](https://github.com/zxing-cpp/zxing-cpp)                             | latest/active port to C++, includes Android, iOS, Python, WASM and WinRT wrappers
 | [zxing_cpp.rb](https://github.com/glassechidna/zxing_cpp.rb)                              | bindings for Ruby (not just JRuby), powered by [zxing-cpp](https://github.com/glassechidna/zxing-cpp)
 | [jsqrcode](https://github.com/LazarSoft/jsqrcode)                                         | port to JavaScript
 | [python-zxing](https://github.com/oostendo/python-zxing)                                  | bindings for Python
@@ -67,22 +68,23 @@ library implemented in Java, with ports to other languages.
 | [php-zxing](https://github.com/dsiddharth2/php-zxing)                                     | PHP wrapper to Zxing Java library
 | [zxing-js/library](https://github.com/zxing-js/library)                                   | TypeScript port of ZXing library
 | [pyzxing](https://github.com/ChenjieXu/pyzxing)                                           | Python wrapper to ZXing library
-
+| [zxing-dart](https://github.com/shirne/zxing-dart)                                        | Port to dart
 
 ### Other related third-party open source projects
 
 | Module                                         | Description
 | ---------------------------------------------- | -----------
 | [Barcode4J](http://barcode4j.sourceforge.net/) | Generator library in Java
+| [BoofCV](https://boofcv.org) | Generator and reader library in Java
 | [ZBar](http://zbar.sourceforge.net/)           | Reader library in C99
-| [OkapiBarcode](https://github.com/woo-j/OkapiBarcode)  | |
+| [OkapiBarcode](https://github.com/woo-j/OkapiBarcode)  | Generator library in Java |
 
 ## Links
 
-* [Online Decoder](https://zxing.org/w/decode.jspx)
-* [QR Code Generator](https://zxing.appspot.com/generator)
-* [Javadoc](https://zxing.github.io/zxing/apidocs/)
-* [Documentation Site](https://zxing.github.io/zxing/)
+  * [Online Decoder](https://zxing.org/w/decode.jspx)
+  * [QR Code Generator](https://zxing.appspot.com/generator)
+  * [Javadoc](https://zxing.github.io/zxing/apidocs/)
+  * [Documentation Site](https://zxing.github.io/zxing/)
 
 ## Contacting
 
@@ -91,10 +93,8 @@ on StackOverflow](https://stackoverflow.com/questions/tagged/zxing).
 
 ## Etcetera
 
-[![Build Status](https://travis-ci.org/zxing/zxing.svg?branch=master)](https://travis-ci.org/zxing/zxing)
-[![Coverity Status](https://scan.coverity.com/projects/1924/badge.svg)](https://scan.coverity.com/projects/1924)
-[![codecov.io](https://codecov.io/github/zxing/zxing/coverage.svg?branch=master)](https://codecov.io/github/zxing/zxing?branch=master)
-[![Codacy Badge](https://api.codacy.com/project/badge/Grade/7270e4b57c50483699448bf32721ab10)](https://www.codacy.com/app/srowen/zxing?utm_source=github.com&utm_medium=referral&utm_content=zxing/zxing&utm_campaign=Badge_Grade)
+[![codecov](https://codecov.io/gh/zxing/zxing/branch/master/graph/badge.svg?token=6RrJHvUMDl)](https://codecov.io/gh/zxing/zxing)
+[![Codacy](https://app.codacy.com/project/badge/Grade/5d1186edeb714f0187e3eb18cc6aeef1)](https://www.codacy.com/gh/zxing/zxing/dashboard?utm_source=github.com&utm_medium=referral&utm_content=zxing/zxing&utm_campaign=Badge_Grade)
 
 QR code is trademarked by Denso Wave, inc. Thanks to Haase & Martin OHG for contributing the logo.
 
diff --git a/core/pom.xml b/core/pom.xml
index 5717604..f26dc89 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -18,7 +18,7 @@
   <modelVersion>4.0.0</modelVersion>
 
   <artifactId>core</artifactId>
-  <version>3.4.1</version>
+  <version>3.5.2-SNAPSHOT</version>
   <packaging>jar</packaging>
 
   <dependencies>
@@ -32,7 +32,7 @@
   <parent>
     <groupId>com.google.zxing</groupId>
     <artifactId>zxing-parent</artifactId>
-    <version>3.4.1</version>
+    <version>3.5.2-SNAPSHOT</version>
   </parent>
 
   <name>ZXing Core</name>
@@ -63,7 +63,7 @@
       <plugin>
         <groupId>biz.aQute.bnd</groupId>
         <artifactId>bnd-maven-plugin</artifactId>
-        <version>5.1.2</version>
+        <version>6.3.1</version>
         <executions>
           <execution>
             <goals>
diff --git a/core/src/main/java/com/google/zxing/DecodeHintType.java b/core/src/main/java/com/google/zxing/DecodeHintType.java
index 11f579e..a532750 100644
--- a/core/src/main/java/com/google/zxing/DecodeHintType.java
+++ b/core/src/main/java/com/google/zxing/DecodeHintType.java
@@ -98,6 +98,12 @@ public enum DecodeHintType {
    */
   ALLOWED_EAN_EXTENSIONS(int[].class),
 
+  /**
+   * If true, also tries to decode as inverted image. All configured decoders are simply called a
+   * second time with an inverted image. Doesn't matter what it maps to; use {@link Boolean#TRUE}.
+   */
+  ALSO_INVERTED(Void.class),
+
   // End of enumeration values.
   ;
 
diff --git a/core/src/main/java/com/google/zxing/Dimension.java b/core/src/main/java/com/google/zxing/Dimension.java
index dd40d06..242e0f7 100644
--- a/core/src/main/java/com/google/zxing/Dimension.java
+++ b/core/src/main/java/com/google/zxing/Dimension.java
@@ -51,7 +51,7 @@ public final class Dimension {
 
   @Override
   public int hashCode() {
-      return width * 32713 + height;
+    return width * 32713 + height;
   }
 
   @Override
diff --git a/core/src/main/java/com/google/zxing/EncodeHintType.java b/core/src/main/java/com/google/zxing/EncodeHintType.java
index 9a2fd57..f94b575 100644
--- a/core/src/main/java/com/google/zxing/EncodeHintType.java
+++ b/core/src/main/java/com/google/zxing/EncodeHintType.java
@@ -44,6 +44,22 @@ public enum EncodeHintType {
    */
   DATA_MATRIX_SHAPE,
 
+  /**
+   * Specifies whether to use compact mode for Data Matrix (type {@link Boolean}, or "true" or "false" 
+   * {@link String } value).
+   * The compact encoding mode also supports the encoding of characters that are not in the ISO-8859-1
+   * character set via ECIs.
+   * Please note that in that case, the most compact character encoding is chosen for characters in
+   * the input that are not in the ISO-8859-1 character set. Based on experience, some scanners do not
+   * support encodings like cp-1256 (Arabic). In such cases the encoding can be forced to UTF-8 by
+   * means of the {@link #CHARACTER_SET} encoding hint.
+   * Compact encoding also provides GS1-FNC1 support when {@link #GS1_FORMAT} is selected. In this case
+   * group-separator character (ASCII 29 decimal) can be used to encode the positions of FNC1 codewords
+   * for the purpose of delimiting AIs.
+   * This option and {@link #FORCE_C40} are mutually exclusive.
+   */
+  DATA_MATRIX_COMPACT,
+
   /**
    * Specifies a minimum barcode size (type {@link Dimension}). Only applicable to Data Matrix now.
    *
@@ -87,6 +103,16 @@ public enum EncodeHintType {
    */
   PDF417_DIMENSIONS,
 
+  /**
+   * Specifies whether to automatically insert ECIs when encoding PDF417 (type {@link Boolean}, or "true" or "false"
+   * {@link String} value). 
+   * Please note that in that case, the most compact character encoding is chosen for characters in
+   * the input that are not in the ISO-8859-1 character set. Based on experience, some scanners do not
+   * support encodings like cp-1256 (Arabic). In such cases the encoding can be forced to UTF-8 by
+   * means of the {@link #CHARACTER_SET} encoding hint.
+   */
+  PDF417_AUTO_ECI,
+
   /**
    * Specifies the required number of layers for an Aztec code.
    * A negative number (-1, -2, -3, -4) specifies a compact Aztec code.
@@ -110,9 +136,42 @@ public enum EncodeHintType {
    */
   QR_MASK_PATTERN,
 
+
+  /**
+   * Specifies whether to use compact mode for QR code (type {@link Boolean}, or "true" or "false"
+   * {@link String } value).
+   * Please note that when compaction is performed, the most compact character encoding is chosen
+   * for characters in the input that are not in the ISO-8859-1 character set. Based on experience,
+   * some scanners do not support encodings like cp-1256 (Arabic). In such cases the encoding can
+   * be forced to UTF-8 by means of the {@link #CHARACTER_SET} encoding hint.
+   */
+  QR_COMPACT,
+
   /**
    * Specifies whether the data should be encoded to the GS1 standard (type {@link Boolean}, or "true" or "false"
    * {@link String } value).
    */
   GS1_FORMAT,
+
+  /**
+   * Forces which encoding will be used. Currently only used for Code-128 code sets (Type {@link String}).
+   * Valid values are "A", "B", "C".
+   * This option and {@link #CODE128_COMPACT} are mutually exclusive.
+   */
+  FORCE_CODE_SET,
+
+  /**
+   * Forces C40 encoding for data-matrix (type {@link Boolean}, or "true" or "false") {@link String } value). This 
+   * option and {@link #DATA_MATRIX_COMPACT} are mutually exclusive.
+   */
+  FORCE_C40,
+
+  /**
+   * Specifies whether to use compact mode for Code-128 code (type {@link Boolean}, or "true" or "false" 
+   * {@link String } value).
+   * This can yield slightly smaller bar codes. This option and {@link #FORCE_CODE_SET} are mutually
+   * exclusive.
+   */
+  CODE128_COMPACT,
+
 }
diff --git a/core/src/main/java/com/google/zxing/MultiFormatReader.java b/core/src/main/java/com/google/zxing/MultiFormatReader.java
index 44cef6d..5814729 100644
--- a/core/src/main/java/com/google/zxing/MultiFormatReader.java
+++ b/core/src/main/java/com/google/zxing/MultiFormatReader.java
@@ -129,10 +129,10 @@ public final class MultiFormatReader implements Reader {
         readers.add(new AztecReader());
       }
       if (formats.contains(BarcodeFormat.PDF_417)) {
-         readers.add(new PDF417Reader());
+        readers.add(new PDF417Reader());
       }
       if (formats.contains(BarcodeFormat.MAXICODE)) {
-         readers.add(new MaxiCodeReader());
+        readers.add(new MaxiCodeReader());
       }
       // At end in "try harder" mode
       if (addOneDReader && tryHarder) {
@@ -169,12 +169,29 @@ public final class MultiFormatReader implements Reader {
   private Result decodeInternal(BinaryBitmap image) throws NotFoundException {
     if (readers != null) {
       for (Reader reader : readers) {
+        if (Thread.currentThread().isInterrupted()) {
+          throw NotFoundException.getNotFoundInstance();
+        }
         try {
           return reader.decode(image, hints);
         } catch (ReaderException re) {
           // continue
         }
       }
+      if (hints != null && hints.containsKey(DecodeHintType.ALSO_INVERTED)) {
+        // Calling all readers again with inverted image
+        image.getBlackMatrix().flip();
+        for (Reader reader : readers) {
+          if (Thread.currentThread().isInterrupted()) {
+            throw NotFoundException.getNotFoundInstance();
+          }
+          try {
+            return reader.decode(image, hints);
+          } catch (ReaderException re) {
+            // continue
+          }
+        }
+      }
     }
     throw NotFoundException.getNotFoundInstance();
   }
diff --git a/core/src/main/java/com/google/zxing/NotFoundException.java b/core/src/main/java/com/google/zxing/NotFoundException.java
index 863526a..a00c3fe 100644
--- a/core/src/main/java/com/google/zxing/NotFoundException.java
+++ b/core/src/main/java/com/google/zxing/NotFoundException.java
@@ -34,7 +34,7 @@ public final class NotFoundException extends ReaderException {
   }
 
   public static NotFoundException getNotFoundInstance() {
-    return INSTANCE;
+    return isStackTrace ? new NotFoundException() : INSTANCE;
   }
 
 }
\ No newline at end of file
diff --git a/core/src/main/java/com/google/zxing/ReaderException.java b/core/src/main/java/com/google/zxing/ReaderException.java
index 32bbcda..c0690e3 100644
--- a/core/src/main/java/com/google/zxing/ReaderException.java
+++ b/core/src/main/java/com/google/zxing/ReaderException.java
@@ -26,7 +26,7 @@ package com.google.zxing;
 public abstract class ReaderException extends Exception {
 
   // disable stack traces when not running inside test units
-  protected static final boolean isStackTrace =
+  protected static boolean isStackTrace =
       System.getProperty("surefire.test.class.path") != null;
   protected static final StackTraceElement[] NO_TRACE = new StackTraceElement[0];
 
@@ -44,4 +44,15 @@ public abstract class ReaderException extends Exception {
     return null;
   }
 
+  /**
+   * For testing only. Controls whether library exception classes include stack traces or not.
+   * Defaults to false, unless running in the project's unit testing harness.
+   *
+   * @param enabled if true, enables stack traces in library exception classes
+   * @since 3.5.0
+   */
+  public static void setStackTrace(boolean enabled) {
+    isStackTrace = enabled;
+  }
+
 }
diff --git a/core/src/main/java/com/google/zxing/ResultMetadataType.java b/core/src/main/java/com/google/zxing/ResultMetadataType.java
index 67c5363..0869170 100644
--- a/core/src/main/java/com/google/zxing/ResultMetadataType.java
+++ b/core/src/main/java/com/google/zxing/ResultMetadataType.java
@@ -94,4 +94,10 @@ public enum ResultMetadataType {
    */
   STRUCTURED_APPEND_PARITY,
 
+  /**
+   * Barcode Symbology Identifier.
+   * Note: According to the GS1 specification the identifier may have to replace a leading FNC1/GS character
+   * when prepending to the barcode content.
+   */
+  SYMBOLOGY_IDENTIFIER,
 }
diff --git a/core/src/main/java/com/google/zxing/aztec/AztecReader.java b/core/src/main/java/com/google/zxing/aztec/AztecReader.java
index c553e0a..f3a3e21 100644
--- a/core/src/main/java/com/google/zxing/aztec/AztecReader.java
+++ b/core/src/main/java/com/google/zxing/aztec/AztecReader.java
@@ -110,6 +110,7 @@ public final class AztecReader implements Reader {
     if (ecLevel != null) {
       result.putMetadata(ResultMetadataType.ERROR_CORRECTION_LEVEL, ecLevel);
     }
+    result.putMetadata(ResultMetadataType.SYMBOLOGY_IDENTIFIER, "]z" + decoderResult.getSymbologyModifier());
 
     return result;
   }
diff --git a/core/src/main/java/com/google/zxing/aztec/AztecWriter.java b/core/src/main/java/com/google/zxing/aztec/AztecWriter.java
index 79bca7b..e5cb7e6 100644
--- a/core/src/main/java/com/google/zxing/aztec/AztecWriter.java
+++ b/core/src/main/java/com/google/zxing/aztec/AztecWriter.java
@@ -24,7 +24,6 @@ import com.google.zxing.aztec.encoder.Encoder;
 import com.google.zxing.common.BitMatrix;
 
 import java.nio.charset.Charset;
-import java.nio.charset.StandardCharsets;
 import java.util.Map;
 
 /**
@@ -39,7 +38,7 @@ public final class AztecWriter implements Writer {
 
   @Override
   public BitMatrix encode(String contents, BarcodeFormat format, int width, int height, Map<EncodeHintType,?> hints) {
-    Charset charset = StandardCharsets.ISO_8859_1;
+    Charset charset = null; // Do not add any ECI code by default
     int eccPercent = Encoder.DEFAULT_EC_PERCENT;
     int layers = Encoder.DEFAULT_AZTEC_LAYERS;
     if (hints != null) {
@@ -62,7 +61,7 @@ public final class AztecWriter implements Writer {
     if (format != BarcodeFormat.AZTEC) {
       throw new IllegalArgumentException("Can only encode AZTEC, but got " + format);
     }
-    AztecCode aztec = Encoder.encode(contents.getBytes(charset), eccPercent, layers);
+    AztecCode aztec = Encoder.encode(contents, eccPercent, layers, charset);
     return renderResult(aztec, width, height);
   }
 
diff --git a/core/src/main/java/com/google/zxing/aztec/decoder/Decoder.java b/core/src/main/java/com/google/zxing/aztec/decoder/Decoder.java
index d456dd1..6f6ac42 100644
--- a/core/src/main/java/com/google/zxing/aztec/decoder/Decoder.java
+++ b/core/src/main/java/com/google/zxing/aztec/decoder/Decoder.java
@@ -19,11 +19,16 @@ package com.google.zxing.aztec.decoder;
 import com.google.zxing.FormatException;
 import com.google.zxing.aztec.AztecDetectorResult;
 import com.google.zxing.common.BitMatrix;
+import com.google.zxing.common.CharacterSetECI;
 import com.google.zxing.common.DecoderResult;
 import com.google.zxing.common.reedsolomon.GenericGF;
 import com.google.zxing.common.reedsolomon.ReedSolomonDecoder;
 import com.google.zxing.common.reedsolomon.ReedSolomonException;
 
+import java.io.ByteArrayOutputStream;
+import java.io.UnsupportedEncodingException;
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
 import java.util.Arrays;
 
 /**
@@ -60,7 +65,7 @@ public final class Decoder {
   };
 
   private static final String[] PUNCT_TABLE = {
-      "", "\r", "\r\n", ". ", ", ", ": ", "!", "\"", "#", "$", "%", "&", "'", "(", ")",
+      "FLG(n)", "\r", "\r\n", ". ", ", ", ": ", "!", "\"", "#", "$", "%", "&", "'", "(", ")",
       "*", "+", ",", "-", ".", "/", ":", ";", "<", "=", ">", "?", "[", "]", "{", "}", "CTRL_UL"
   };
 
@@ -68,22 +73,25 @@ public final class Decoder {
       "CTRL_PS", " ", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ",", ".", "CTRL_UL", "CTRL_US"
   };
 
+  private static final Charset DEFAULT_ENCODING = StandardCharsets.ISO_8859_1;
+
   private AztecDetectorResult ddata;
 
   public DecoderResult decode(AztecDetectorResult detectorResult) throws FormatException {
     ddata = detectorResult;
     BitMatrix matrix = detectorResult.getBits();
     boolean[] rawbits = extractBits(matrix);
-    boolean[] correctedBits = correctBits(rawbits);
-    byte[] rawBytes = convertBoolArrayToByteArray(correctedBits);
-    String result = getEncodedData(correctedBits);
-    DecoderResult decoderResult = new DecoderResult(rawBytes, result, null, null);
-    decoderResult.setNumBits(correctedBits.length);
+    CorrectedBitsResult correctedBits = correctBits(rawbits);
+    byte[] rawBytes = convertBoolArrayToByteArray(correctedBits.correctBits);
+    String result = getEncodedData(correctedBits.correctBits);
+    DecoderResult decoderResult =
+        new DecoderResult(rawBytes, result, null, String.format("%d%%", correctedBits.ecLevel));
+    decoderResult.setNumBits(correctedBits.correctBits.length);
     return decoderResult;
   }
 
   // This method is used for testing the high-level encoder
-  public static String highLevelDecode(boolean[] correctedBits) {
+  public static String highLevelDecode(boolean[] correctedBits) throws FormatException {
     return getEncodedData(correctedBits);
   }
 
@@ -92,11 +100,20 @@ public final class Decoder {
    *
    * @return the decoded string
    */
-  private static String getEncodedData(boolean[] correctedBits) {
+  private static String getEncodedData(boolean[] correctedBits) throws FormatException {
     int endIndex = correctedBits.length;
     Table latchTable = Table.UPPER; // table most recently latched to
     Table shiftTable = Table.UPPER; // table to use for the next read
-    StringBuilder result = new StringBuilder(20);
+
+    // Final decoded string result
+    // (correctedBits-5) / 4 is an upper bound on the size (all-digit result)
+    StringBuilder result = new StringBuilder((correctedBits.length - 5) / 4);
+
+    // Intermediary buffer of decoded bytes, which is decoded into a string and flushed
+    // when character encoding changes (ECI) or input ends.
+    ByteArrayOutputStream decodedBytes = new ByteArrayOutputStream();
+    Charset encoding = DEFAULT_ENCODING;
+
     int index = 0;
     while (index < endIndex) {
       if (shiftTable == Table.BINARY) {
@@ -118,7 +135,7 @@ public final class Decoder {
             break;
           }
           int code = readCode(correctedBits, index, 8);
-          result.append((char) code);
+          decodedBytes.write((byte) code);
           index += 8;
         }
         // Go back to whatever mode we had been in
@@ -131,7 +148,48 @@ public final class Decoder {
         int code = readCode(correctedBits, index, size);
         index += size;
         String str = getCharacter(shiftTable, code);
-        if (str.startsWith("CTRL_")) {
+        if ("FLG(n)".equals(str)) {
+          if (endIndex - index < 3) {
+            break;
+          }
+          int n = readCode(correctedBits, index, 3);
+          index += 3;
+          //  flush bytes, FLG changes state
+          try {
+            result.append(decodedBytes.toString(encoding.name()));
+          } catch (UnsupportedEncodingException uee) {
+            throw new IllegalStateException(uee);
+          }
+          decodedBytes.reset();
+          switch (n) {
+            case 0:
+              result.append((char) 29);  // translate FNC1 as ASCII 29
+              break;
+            case 7:
+              throw FormatException.getFormatInstance(); // FLG(7) is reserved and illegal
+            default:
+              // ECI is decimal integer encoded as 1-6 codes in DIGIT mode
+              int eci = 0;
+              if (endIndex - index < 4 * n) {
+                break;
+              }
+              while (n-- > 0) {
+                int nextDigit = readCode(correctedBits, index, 4);
+                index += 4;
+                if (nextDigit < 2 || nextDigit > 11) {
+                  throw FormatException.getFormatInstance(); // Not a decimal digit
+                }
+                eci = eci * 10 + (nextDigit - 2);
+              }
+              CharacterSetECI charsetECI = CharacterSetECI.getCharacterSetECIByValue(eci);
+              if (charsetECI == null) {
+                throw FormatException.getFormatInstance();
+              }
+              encoding = charsetECI.getCharset();
+          }
+          // Go back to whatever mode we had been in
+          shiftTable = latchTable;
+        } else if (str.startsWith("CTRL_")) {
           // Table changes
           // ISO/IEC 24778:2008 prescribes ending a shift sequence in the mode from which it was invoked.
           // That's including when that mode is a shift.
@@ -142,12 +200,20 @@ public final class Decoder {
             latchTable = shiftTable;
           }
         } else {
-          result.append(str);
+          // Though stored as a table of strings for convenience, codes actually represent 1 or 2 *bytes*.
+          byte[] b = str.getBytes(StandardCharsets.US_ASCII);
+          decodedBytes.write(b, 0, b.length);
           // Go back to whatever mode we had been in
           shiftTable = latchTable;
         }
       }
     }
+    try {
+      result.append(decodedBytes.toString(encoding.name()));
+    } catch (UnsupportedEncodingException uee) {
+      // can't happen
+      throw new IllegalStateException(uee);
+    }
     return result.toString();
   }
 
@@ -196,13 +262,23 @@ public final class Decoder {
     }
   }
 
+  static final class CorrectedBitsResult {
+    private final boolean[] correctBits;
+    private final int ecLevel;
+
+    CorrectedBitsResult(boolean[] correctBits, int ecLevel) {
+      this.correctBits = correctBits;
+      this.ecLevel = ecLevel;
+    }
+  }
+
   /**
    * <p>Performs RS error correction on an array of bits.</p>
    *
    * @return the corrected array
    * @throws FormatException if the input contains too many errors
    */
-  private boolean[] correctBits(boolean[] rawbits) throws FormatException {
+  private CorrectedBitsResult correctBits(boolean[] rawbits) throws FormatException {
     GenericGF gf;
     int codewordSize;
 
@@ -266,7 +342,8 @@ public final class Decoder {
         }
       }
     }
-    return correctedBits;
+
+    return new CorrectedBitsResult(correctedBits, 100 * (numCodewords - numDataCodewords) / numCodewords);
   }
 
   /**
diff --git a/core/src/main/java/com/google/zxing/aztec/detector/Detector.java b/core/src/main/java/com/google/zxing/aztec/detector/Detector.java
index 6ce7c55..c078a94 100644
--- a/core/src/main/java/com/google/zxing/aztec/detector/Detector.java
+++ b/core/src/main/java/com/google/zxing/aztec/detector/Detector.java
@@ -66,7 +66,7 @@ public final class Detector {
    * @return {@link AztecDetectorResult} encapsulating results of detecting an Aztec Code
    * @throws NotFoundException if no Aztec Code can be found
    */
-   public AztecDetectorResult detect(boolean isMirror) throws NotFoundException {
+  public AztecDetectorResult detect(boolean isMirror) throws NotFoundException {
 
     // 1. Get the center of the aztec matrix
     Point pCenter = getMatrixCenter();
@@ -425,10 +425,12 @@ public final class Detector {
 
     int corr = 3;
 
-    p1 = new Point(p1.getX() - corr, p1.getY() + corr);
-    p2 = new Point(p2.getX() - corr, p2.getY() - corr);
-    p3 = new Point(p3.getX() + corr, p3.getY() - corr);
-    p4 = new Point(p4.getX() + corr, p4.getY() + corr);
+    p1 = new Point(Math.max(0, p1.getX() - corr), Math.min(image.getHeight() - 1, p1.getY() + corr));
+    p2 = new Point(Math.max(0, p2.getX() - corr), Math.max(0, p2.getY() - corr));
+    p3 = new Point(Math.min(image.getWidth() - 1, p3.getX() + corr),
+                   Math.max(0, Math.min(image.getHeight() - 1, p3.getY() - corr)));
+    p4 = new Point(Math.min(image.getWidth() - 1, p4.getX() + corr),
+                   Math.min(image.getHeight() - 1, p4.getY() + corr));
 
     int cInit = getColor(p4, p1);
 
@@ -461,6 +463,9 @@ public final class Detector {
    */
   private int getColor(Point p1, Point p2) {
     float d = distance(p1, p2);
+    if (d == 0.0f) {
+      return 0;
+    }
     float dx = (p2.getX() - p1.getX()) / d;
     float dy = (p2.getY() - p1.getY()) / d;
     int error = 0;
@@ -470,13 +475,13 @@ public final class Detector {
 
     boolean colorModel = image.get(p1.getX(), p1.getY());
 
-    int iMax = (int) Math.ceil(d);
+    int iMax = (int) Math.floor(d);
     for (int i = 0; i < iMax; i++) {
-      px += dx;
-      py += dy;
       if (image.get(MathUtils.round(px), MathUtils.round(py)) != colorModel) {
         error++;
       }
+      px += dx;
+      py += dy;
     }
 
     float errRatio = error / d;
@@ -545,7 +550,7 @@ public final class Detector {
   }
 
   private boolean isValid(int x, int y) {
-    return x >= 0 && x < image.getWidth() && y > 0 && y < image.getHeight();
+    return x >= 0 && x < image.getWidth() && y >= 0 && y < image.getHeight();
   }
 
   private boolean isValid(ResultPoint point) {
@@ -566,10 +571,7 @@ public final class Detector {
     if (compact) {
       return 4 * nbLayers + 11;
     }
-    if (nbLayers <= 4) {
-      return 4 * nbLayers + 15;
-    }
-    return 4 * nbLayers + 2 * ((nbLayers - 4) / 8 + 1) + 15;
+    return 4 * nbLayers + 2 * ((2 * nbLayers + 6) / 15) + 15;
   }
 
   static final class Point {
diff --git a/core/src/main/java/com/google/zxing/aztec/encoder/BinaryShiftToken.java b/core/src/main/java/com/google/zxing/aztec/encoder/BinaryShiftToken.java
index 61abaaf..969b4dc 100644
--- a/core/src/main/java/com/google/zxing/aztec/encoder/BinaryShiftToken.java
+++ b/core/src/main/java/com/google/zxing/aztec/encoder/BinaryShiftToken.java
@@ -20,32 +20,33 @@ import com.google.zxing.common.BitArray;
 
 final class BinaryShiftToken extends Token {
 
-  private final short binaryShiftStart;
-  private final short binaryShiftByteCount;
+  private final int binaryShiftStart;
+  private final int binaryShiftByteCount;
 
   BinaryShiftToken(Token previous,
                    int binaryShiftStart,
                    int binaryShiftByteCount) {
     super(previous);
-    this.binaryShiftStart = (short) binaryShiftStart;
-    this.binaryShiftByteCount = (short) binaryShiftByteCount;
+    this.binaryShiftStart = binaryShiftStart;
+    this.binaryShiftByteCount = binaryShiftByteCount;
   }
 
   @Override
   public void appendTo(BitArray bitArray, byte[] text) {
-    for (int i = 0; i < binaryShiftByteCount; i++) {
-      if (i == 0 || (i == 31 && binaryShiftByteCount <= 62)) {
+    int bsbc = binaryShiftByteCount;
+    for (int i = 0; i < bsbc; i++) {
+      if (i == 0 || (i == 31 && bsbc <= 62)) {
         // We need a header before the first character, and before
         // character 31 when the total byte code is <= 62
         bitArray.appendBits(31, 5);  // BINARY_SHIFT
-        if (binaryShiftByteCount > 62) {
-          bitArray.appendBits(binaryShiftByteCount - 31, 16);
+        if (bsbc > 62) {
+          bitArray.appendBits(bsbc - 31, 16);
         } else if (i == 0) {
           // 1 <= binaryShiftByteCode <= 62
-          bitArray.appendBits(Math.min(binaryShiftByteCount, 31), 5);
+          bitArray.appendBits(Math.min(bsbc, 31), 5);
         } else {
           // 32 <= binaryShiftCount <= 62 and i == 31
-          bitArray.appendBits(binaryShiftByteCount - 31, 5);
+          bitArray.appendBits(bsbc - 31, 5);
         }
       }
       bitArray.appendBits(text[binaryShiftStart + i], 8);
diff --git a/core/src/main/java/com/google/zxing/aztec/encoder/Encoder.java b/core/src/main/java/com/google/zxing/aztec/encoder/Encoder.java
index 7ad0a46..4acd8f6 100644
--- a/core/src/main/java/com/google/zxing/aztec/encoder/Encoder.java
+++ b/core/src/main/java/com/google/zxing/aztec/encoder/Encoder.java
@@ -21,6 +21,9 @@ import com.google.zxing.common.BitMatrix;
 import com.google.zxing.common.reedsolomon.GenericGF;
 import com.google.zxing.common.reedsolomon.ReedSolomonEncoder;
 
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+
 /**
  * Generates Aztec 2D barcodes.
  *
@@ -42,17 +45,57 @@ public final class Encoder {
   }
 
   /**
-   * Encodes the given binary content as an Aztec symbol
+   * Encodes the given string content as an Aztec symbol (without ECI code)
+   *
+   * @param data input data string; must be encodable as ISO/IEC 8859-1 (Latin-1)
+   * @return Aztec symbol matrix with metadata
+   */
+  public static AztecCode encode(String data) {
+    return encode(data.getBytes(StandardCharsets.ISO_8859_1));
+  }
+
+  /**
+   * Encodes the given string content as an Aztec symbol (without ECI code)
+   *
+   * @param data input data string; must be encodable as ISO/IEC 8859-1 (Latin-1)
+   * @param minECCPercent minimal percentage of error check words (According to ISO/IEC 24778:2008,
+   *                      a minimum of 23% + 3 words is recommended)
+   * @param userSpecifiedLayers if non-zero, a user-specified value for the number of layers
+   * @return Aztec symbol matrix with metadata
+   */
+  public static AztecCode encode(String data, int minECCPercent, int userSpecifiedLayers) {
+    return encode(data.getBytes(StandardCharsets.ISO_8859_1), minECCPercent, userSpecifiedLayers, null);
+  }
+
+  /**
+   * Encodes the given string content as an Aztec symbol
+   *
+   * @param data input data string
+   * @param minECCPercent minimal percentage of error check words (According to ISO/IEC 24778:2008,
+   *                      a minimum of 23% + 3 words is recommended)
+   * @param userSpecifiedLayers if non-zero, a user-specified value for the number of layers
+   * @param charset character set in which to encode string using ECI; if null, no ECI code
+   *                will be inserted, and the string must be encodable as ISO/IEC 8859-1
+   *                (Latin-1), the default encoding of the symbol.
+   * @return Aztec symbol matrix with metadata
+   */
+  public static AztecCode encode(String data, int minECCPercent, int userSpecifiedLayers, Charset charset) {
+    byte[] bytes = data.getBytes(null != charset ? charset : StandardCharsets.ISO_8859_1);
+    return encode(bytes, minECCPercent, userSpecifiedLayers, charset);
+  }
+
+  /**
+   * Encodes the given binary content as an Aztec symbol (without ECI code)
    *
    * @param data input data string
    * @return Aztec symbol matrix with metadata
    */
   public static AztecCode encode(byte[] data) {
-    return encode(data, DEFAULT_EC_PERCENT, DEFAULT_AZTEC_LAYERS);
+    return encode(data, DEFAULT_EC_PERCENT, DEFAULT_AZTEC_LAYERS, null);
   }
 
   /**
-   * Encodes the given binary content as an Aztec symbol
+   * Encodes the given binary content as an Aztec symbol (without ECI code)
    *
    * @param data input data string
    * @param minECCPercent minimal percentage of error check words (According to ISO/IEC 24778:2008,
@@ -61,8 +104,23 @@ public final class Encoder {
    * @return Aztec symbol matrix with metadata
    */
   public static AztecCode encode(byte[] data, int minECCPercent, int userSpecifiedLayers) {
+    return encode(data, minECCPercent, userSpecifiedLayers, null);
+  }
+
+  /**
+   * Encodes the given binary content as an Aztec symbol
+   *
+   * @param data input data string
+   * @param minECCPercent minimal percentage of error check words (According to ISO/IEC 24778:2008,
+   *                      a minimum of 23% + 3 words is recommended)
+   * @param userSpecifiedLayers if non-zero, a user-specified value for the number of layers
+   * @param charset character set to mark using ECI; if null, no ECI code will be inserted, and the
+   *                default encoding of ISO/IEC 8859-1 will be assuming by readers.
+   * @return Aztec symbol matrix with metadata
+   */
+  public static AztecCode encode(byte[] data, int minECCPercent, int userSpecifiedLayers, Charset charset) {
     // High-level encode
-    BitArray bits = new HighLevelEncoder(data).encode();
+    BitArray bits = new HighLevelEncoder(data, charset).encode();
 
     // stuff bits and choose symbol size
     int eccBits = bits.getSize() * minECCPercent / 100 + 11;
diff --git a/core/src/main/java/com/google/zxing/aztec/encoder/HighLevelEncoder.java b/core/src/main/java/com/google/zxing/aztec/encoder/HighLevelEncoder.java
index 8a20fd5..1d0cd4b 100644
--- a/core/src/main/java/com/google/zxing/aztec/encoder/HighLevelEncoder.java
+++ b/core/src/main/java/com/google/zxing/aztec/encoder/HighLevelEncoder.java
@@ -17,11 +17,15 @@
 package com.google.zxing.aztec.encoder;
 
 import com.google.zxing.common.BitArray;
+import com.google.zxing.common.CharacterSetECI;
+
+import java.nio.charset.Charset;
 
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Comparator;
+import java.util.Deque;
 import java.util.Iterator;
 import java.util.LinkedList;
 
@@ -148,16 +152,31 @@ public final class HighLevelEncoder {
   }
 
   private final byte[] text;
+  private final Charset charset;
 
   public HighLevelEncoder(byte[] text) {
     this.text = text;
+    this.charset = null;
+  }
+
+  public HighLevelEncoder(byte[] text, Charset charset) {
+    this.text = text;
+    this.charset = charset;
   }
 
   /**
    * @return text represented by this encoder encoded as a {@link BitArray}
    */
   public BitArray encode() {
-    Collection<State> states = Collections.singletonList(State.INITIAL_STATE);
+    State initialState = State.INITIAL_STATE;
+    if (charset != null) {
+      CharacterSetECI eci = CharacterSetECI.getCharacterSetECI(charset);
+      if (null == eci) {
+        throw new IllegalArgumentException("No ECI code for character set " + charset);
+      }
+      initialState = initialState.appendFLGn(eci.getValue());
+    }
+    Collection<State> states = Collections.singletonList(initialState);
     for (int index = 0; index < text.length; index++) {
       int pairCode;
       int nextChar = index + 1 < text.length ? text[index + 1] : 0;
@@ -283,7 +302,7 @@ public final class HighLevelEncoder {
   }
 
   private static Collection<State> simplifyStates(Iterable<State> states) {
-    Collection<State> result = new LinkedList<>();
+    Deque<State> result = new LinkedList<>();
     for (State newState : states) {
       boolean add = true;
       for (Iterator<State> iterator = result.iterator(); iterator.hasNext();) {
@@ -297,7 +316,7 @@ public final class HighLevelEncoder {
         }
       }
       if (add) {
-        result.add(newState);
+        result.addFirst(newState);
       }
     }
     return result;
diff --git a/core/src/main/java/com/google/zxing/aztec/encoder/State.java b/core/src/main/java/com/google/zxing/aztec/encoder/State.java
index cfbb307..9771fba 100644
--- a/core/src/main/java/com/google/zxing/aztec/encoder/State.java
+++ b/core/src/main/java/com/google/zxing/aztec/encoder/State.java
@@ -16,8 +16,10 @@
 
 package com.google.zxing.aztec.encoder;
 
-import java.util.Deque;
-import java.util.LinkedList;
+import java.nio.charset.StandardCharsets;
+
+import java.util.ArrayList;
+import java.util.List;
 
 import com.google.zxing.common.BitArray;
 
@@ -40,18 +42,14 @@ final class State {
   private final int binaryShiftByteCount;
   // The total number of bits generated (including Binary Shift).
   private final int bitCount;
+  private final int binaryShiftCost;
 
   private State(Token token, int mode, int binaryBytes, int bitCount) {
     this.token = token;
     this.mode = mode;
     this.binaryShiftByteCount = binaryBytes;
     this.bitCount = bitCount;
-    // Make sure we match the token
-    //int binaryShiftBitCount = (binaryShiftByteCount * 8) +
-    //    (binaryShiftByteCount == 0 ? 0 :
-    //     binaryShiftByteCount <= 31 ? 10 :
-    //     binaryShiftByteCount <= 62 ? 20 : 21);
-    //assert this.bitCount == token.getTotalBitCount() + binaryShiftBitCount;
+    this.binaryShiftCost = calculateBinaryShiftCost(binaryBytes);
   }
 
   int getMode() {
@@ -70,10 +68,28 @@ final class State {
     return bitCount;
   }
 
+  State appendFLGn(int eci) {
+    State result = shiftAndAppend(HighLevelEncoder.MODE_PUNCT, 0); // 0: FLG(n)
+    Token token = result.token;
+    int bitsAdded = 3;
+    if (eci < 0) {
+      token = token.add(0, 3); // 0: FNC1
+    } else if (eci > 999999) {
+      throw new IllegalArgumentException("ECI code must be between 0 and 999999");
+    } else {
+      byte[] eciDigits = Integer.toString(eci).getBytes(StandardCharsets.ISO_8859_1);
+      token = token.add(eciDigits.length, 3); // 1-6: number of ECI digits
+      for (byte eciDigit : eciDigits) {
+        token = token.add(eciDigit - '0' + 2, 4);
+      }
+      bitsAdded += eciDigits.length * 4;
+    }
+    return new State(token, mode, 0, bitCount + bitsAdded);
+  }
+
   // Create a new state representing this state with a latch to a (not
   // necessary different) mode, and then a code.
   State latchAndAppend(int mode, int value) {
-    //assert binaryShiftByteCount == 0;
     int bitCount = this.bitCount;
     Token token = this.token;
     if (mode != this.mode) {
@@ -89,7 +105,6 @@ final class State {
   // Create a new state representing this state, with a temporary shift
   // to a different mode to output a single value.
   State shiftAndAppend(int mode, int value) {
-    //assert binaryShiftByteCount == 0 && this.mode != mode;
     Token token = this.token;
     int thisModeBitCount = this.mode == HighLevelEncoder.MODE_DIGIT ? 4 : 5;
     // Shifts exist only to UPPER and PUNCT, both with tokens size 5.
@@ -105,15 +120,14 @@ final class State {
     int mode = this.mode;
     int bitCount = this.bitCount;
     if (this.mode == HighLevelEncoder.MODE_PUNCT || this.mode == HighLevelEncoder.MODE_DIGIT) {
-      //assert binaryShiftByteCount == 0;
       int latch = HighLevelEncoder.LATCH_TABLE[mode][HighLevelEncoder.MODE_UPPER];
       token = token.add(latch & 0xFFFF, latch >> 16);
       bitCount += latch >> 16;
       mode = HighLevelEncoder.MODE_UPPER;
     }
     int deltaBitCount =
-      (binaryShiftByteCount == 0 || binaryShiftByteCount == 31) ? 18 :
-      (binaryShiftByteCount == 62) ? 9 : 8;
+        (binaryShiftByteCount == 0 || binaryShiftByteCount == 31) ? 18 :
+        (binaryShiftByteCount == 62) ? 9 : 8;
     State result = new State(token, mode, binaryShiftByteCount + 1, bitCount + deltaBitCount);
     if (result.binaryShiftByteCount == 2047 + 31) {
       // The string is as long as it's allowed to be.  We should end it.
@@ -130,7 +144,6 @@ final class State {
     }
     Token token = this.token;
     token = token.addBinaryShift(index - binaryShiftByteCount, binaryShiftByteCount);
-    //assert token.getTotalBitCount() == this.bitCount;
     return new State(token, mode, 0, this.bitCount);
   }
 
@@ -140,27 +153,24 @@ final class State {
     int newModeBitCount = this.bitCount + (HighLevelEncoder.LATCH_TABLE[this.mode][other.mode] >> 16);
     if (this.binaryShiftByteCount < other.binaryShiftByteCount) {
       // add additional B/S encoding cost of other, if any
-      newModeBitCount += calculateBinaryShiftCost(other) - calculateBinaryShiftCost(this);
+      newModeBitCount += other.binaryShiftCost - this.binaryShiftCost;
     } else if (this.binaryShiftByteCount > other.binaryShiftByteCount && other.binaryShiftByteCount > 0) {
       // maximum possible additional cost (we end up exceeding the 31 byte boundary and other state can stay beneath it)
-      newModeBitCount += 10; 
+      newModeBitCount += 10;
     }
     return newModeBitCount <= other.bitCount;
   }
 
   BitArray toBitArray(byte[] text) {
-    // Reverse the tokens, so that they are in the order that they should
-    // be output
-    Deque<Token> symbols = new LinkedList<>();
+    List<Token> symbols = new ArrayList<>();
     for (Token token = endBinaryShift(text.length).token; token != null; token = token.getPrevious()) {
-      symbols.addFirst(token);
+      symbols.add(token);
     }
     BitArray bitArray = new BitArray();
-    // Add each token to the result.
-    for (Token symbol : symbols) {
-      symbol.appendTo(bitArray, text);
+    // Add each token to the result in forward order
+    for (int i = symbols.size() - 1; i >= 0; i--) {
+      symbols.get(i).appendTo(bitArray, text);
     }
-    //assert bitArray.getSize() == this.bitCount;
     return bitArray;
   }
 
@@ -168,15 +178,15 @@ final class State {
   public String toString() {
     return String.format("%s bits=%d bytes=%d", HighLevelEncoder.MODE_NAMES[mode], bitCount, binaryShiftByteCount);
   }
-  
-  private static int calculateBinaryShiftCost(State state) {
-    if (state.binaryShiftByteCount > 62) {
+
+  private static int calculateBinaryShiftCost(int binaryShiftByteCount) {
+    if (binaryShiftByteCount > 62) {
       return 21; // B/S with extended length
     }
-    if (state.binaryShiftByteCount > 31) {
+    if (binaryShiftByteCount > 31) {
       return 20; // two B/S
     }
-    if (state.binaryShiftByteCount > 0) {
+    if (binaryShiftByteCount > 0) {
       return 10; // one B/S
     }
     return 0;
diff --git a/core/src/main/java/com/google/zxing/aztec/encoder/Token.java b/core/src/main/java/com/google/zxing/aztec/encoder/Token.java
index c61bc57..8178f38 100644
--- a/core/src/main/java/com/google/zxing/aztec/encoder/Token.java
+++ b/core/src/main/java/com/google/zxing/aztec/encoder/Token.java
@@ -34,7 +34,7 @@ abstract class Token {
 
   final Token add(int value, int bitCount) {
     return new SimpleToken(this, value, bitCount);
-   }
+  }
 
   final Token addBinaryShift(int start, int byteCount) {
     //int bitCount = (byteCount * 8) + (byteCount <= 31 ? 10 : byteCount <= 62 ? 20 : 21);
diff --git a/core/src/main/java/com/google/zxing/client/result/WifiParsedResult.java b/core/src/main/java/com/google/zxing/client/result/WifiParsedResult.java
index 62ad3d8..c88b6aa 100644
--- a/core/src/main/java/com/google/zxing/client/result/WifiParsedResult.java
+++ b/core/src/main/java/com/google/zxing/client/result/WifiParsedResult.java
@@ -40,7 +40,14 @@ public final class WifiParsedResult extends ParsedResult {
     this(networkEncryption, ssid, password, hidden, null, null, null, null);
   }
 
-  public WifiParsedResult(String networkEncryption, String ssid, String password, boolean hidden, String identity, String anonymousIdentity, String eapMethod, String phase2Method) {
+  public WifiParsedResult(String networkEncryption,
+                          String ssid,
+                          String password,
+                          boolean hidden,
+                          String identity,
+                          String anonymousIdentity,
+                          String eapMethod,
+                          String phase2Method) {
     super(ParsedResultType.WIFI);
     this.ssid = ssid;
     this.networkEncryption = networkEncryption;
@@ -94,4 +101,4 @@ public final class WifiParsedResult extends ParsedResult {
     return result.toString();
   }
 
-}
\ No newline at end of file
+}
diff --git a/core/src/main/java/com/google/zxing/client/result/WifiResultParser.java b/core/src/main/java/com/google/zxing/client/result/WifiResultParser.java
index 55c0e11..a35f28d 100644
--- a/core/src/main/java/com/google/zxing/client/result/WifiResultParser.java
+++ b/core/src/main/java/com/google/zxing/client/result/WifiResultParser.java
@@ -18,6 +18,7 @@ package com.google.zxing.client.result;
 
 import com.google.zxing.Result;
 
+@SuppressWarnings("checkstyle:lineLength")
 /**
  * <p>Parses a WIFI configuration string. Strings will be of the form:</p>
  *
diff --git a/core/src/main/java/com/google/zxing/common/BitArray.java b/core/src/main/java/com/google/zxing/common/BitArray.java
index 19f0c99..b07785b 100644
--- a/core/src/main/java/com/google/zxing/common/BitArray.java
+++ b/core/src/main/java/com/google/zxing/common/BitArray.java
@@ -25,12 +25,15 @@ import java.util.Arrays;
  */
 public final class BitArray implements Cloneable {
 
+  private static final int[] EMPTY_BITS = {};
+  private static final float LOAD_FACTOR = 0.75f;
+
   private int[] bits;
   private int size;
 
   public BitArray() {
     this.size = 0;
-    this.bits = new int[1];
+    this.bits = EMPTY_BITS;
   }
 
   public BitArray(int size) {
@@ -52,9 +55,9 @@ public final class BitArray implements Cloneable {
     return (size + 7) / 8;
   }
 
-  private void ensureCapacity(int size) {
-    if (size > bits.length * 32) {
-      int[] newBits = makeArray(size);
+  private void ensureCapacity(int newSize) {
+    if (newSize > bits.length * 32) {
+      int[] newBits = makeArray((int) Math.ceil(newSize / LOAD_FACTOR));
       System.arraycopy(bits, 0, newBits, 0, bits.length);
       this.bits = newBits;
     }
@@ -233,10 +236,15 @@ public final class BitArray implements Cloneable {
     if (numBits < 0 || numBits > 32) {
       throw new IllegalArgumentException("Num bits must be between 0 and 32");
     }
-    ensureCapacity(size + numBits);
-    for (int numBitsLeft = numBits; numBitsLeft > 0; numBitsLeft--) {
-      appendBit(((value >> (numBitsLeft - 1)) & 0x01) == 1);
+    int nextSize = size;
+    ensureCapacity(nextSize + numBits);
+    for (int numBitsLeft = numBits - 1; numBitsLeft >= 0; numBitsLeft--) {
+      if ((value & (1 << numBitsLeft)) != 0) {
+        bits[nextSize / 32] |= 1 << (nextSize & 0x1F);
+      }
+      nextSize++;
     }
+    size = nextSize;
   }
 
   public void appendBitArray(BitArray other) {
@@ -296,13 +304,7 @@ public final class BitArray implements Cloneable {
     int len = (size - 1) / 32;
     int oldBitsLen = len + 1;
     for (int i = 0; i < oldBitsLen; i++) {
-      long x = bits[i];
-      x = ((x >>  1) & 0x55555555L) | ((x & 0x55555555L) <<  1);
-      x = ((x >>  2) & 0x33333333L) | ((x & 0x33333333L) <<  2);
-      x = ((x >>  4) & 0x0f0f0f0fL) | ((x & 0x0f0f0f0fL) <<  4);
-      x = ((x >>  8) & 0x00ff00ffL) | ((x & 0x00ff00ffL) <<  8);
-      x = ((x >> 16) & 0x0000ffffL) | ((x & 0x0000ffffL) << 16);
-      newBits[len - i] = (int) x;
+      newBits[len - i] = Integer.reverse(bits[i]);
     }
     // now correct the int's if the bit size isn't a multiple of 32
     if (size != oldBitsLen * 32) {
diff --git a/core/src/main/java/com/google/zxing/common/BitMatrix.java b/core/src/main/java/com/google/zxing/common/BitMatrix.java
index 1648e20..d3f2175 100755
--- a/core/src/main/java/com/google/zxing/common/BitMatrix.java
+++ b/core/src/main/java/com/google/zxing/common/BitMatrix.java
@@ -35,10 +35,10 @@ import java.util.Arrays;
  */
 public final class BitMatrix implements Cloneable {
 
-  private final int width;
-  private final int height;
-  private final int rowSize;
-  private final int[] bits;
+  private int width;
+  private int height;
+  private int rowSize;
+  private int[] bits;
 
   /**
    * Creates an empty square {@code BitMatrix}.
@@ -189,6 +189,16 @@ public final class BitMatrix implements Cloneable {
     bits[offset] ^= 1 << (x & 0x1f);
   }
 
+  /**
+   * <p>Flips every bit in the matrix.</p>
+   */
+  public void flip() {
+    int max = bits.length;
+    for (int i = 0; i < max; i++) {
+      bits[i] = ~bits[i];
+    }
+  }
+
   /**
    * Exclusive-or (XOR): Flip the bit in this {@code BitMatrix} if the corresponding
    * mask bit is set.
@@ -276,6 +286,29 @@ public final class BitMatrix implements Cloneable {
     System.arraycopy(row.getBitArray(), 0, bits, y * rowSize, rowSize);
   }
 
+  /**
+   * Modifies this {@code BitMatrix} to represent the same but rotated the given degrees (0, 90, 180, 270)
+   *
+   * @param degrees number of degrees to rotate through counter-clockwise (0, 90, 180, 270)
+   */
+  public void rotate(int degrees) {
+    switch (degrees % 360) {
+      case 0:
+        return;
+      case 90:
+        rotate90();
+        return;
+      case 180:
+        rotate180();
+        return;
+      case 270:
+        rotate90();
+        rotate180();
+        return;
+    }
+    throw new IllegalArgumentException("degrees must be a multiple of 0, 90, 180, or 270");
+  }
+
   /**
    * Modifies this {@code BitMatrix} to represent the same but rotated 180 degrees
    */
@@ -294,6 +327,30 @@ public final class BitMatrix implements Cloneable {
     }
   }
 
+  /**
+   * Modifies this {@code BitMatrix} to represent the same but rotated 90 degrees counterclockwise
+   */
+  public void rotate90() {
+    int newWidth = height;
+    int newHeight = width;
+    int newRowSize = (newWidth + 31) / 32;
+    int[] newBits = new int[newRowSize * newHeight];
+
+    for (int y = 0; y < height; y++) {
+      for (int x = 0; x < width; x++) {
+        int offset = y * rowSize + (x / 32);
+        if (((bits[offset] >>> (x & 0x1f)) & 1) != 0) {
+          int newOffset = (newHeight - 1 - x) * newRowSize + (y / 32);
+          newBits[newOffset] |= 1 << (y & 0x1f);
+        }
+      }
+    }
+    width = newWidth;
+    height = newHeight;
+    rowSize = newRowSize;
+    bits = newBits;
+  }
+
   /**
    * This is useful in detecting the enclosing rectangle of a 'pure' barcode.
    *
@@ -428,7 +485,7 @@ public final class BitMatrix implements Cloneable {
     hash = 31 * hash + width;
     hash = 31 * hash + height;
     hash = 31 * hash + rowSize;
-     hash = 31 * hash + Arrays.hashCode(bits);
+    hash = 31 * hash + Arrays.hashCode(bits);
     return hash;
   }
 
diff --git a/core/src/main/java/com/google/zxing/common/CharacterSetECI.java b/core/src/main/java/com/google/zxing/common/CharacterSetECI.java
index 4be90c2..5865445 100644
--- a/core/src/main/java/com/google/zxing/common/CharacterSetECI.java
+++ b/core/src/main/java/com/google/zxing/common/CharacterSetECI.java
@@ -18,6 +18,8 @@ package com.google.zxing.common;
 
 import com.google.zxing.FormatException;
 
+import java.nio.charset.Charset;
+
 import java.util.HashMap;
 import java.util.Map;
 
@@ -36,14 +38,14 @@ public enum CharacterSetECI {
   ISO8859_3(5, "ISO-8859-3"),
   ISO8859_4(6, "ISO-8859-4"),
   ISO8859_5(7, "ISO-8859-5"),
-  ISO8859_6(8, "ISO-8859-6"),
+  // ISO8859_6(8, "ISO-8859-6"),
   ISO8859_7(9, "ISO-8859-7"),
-  ISO8859_8(10, "ISO-8859-8"),
+  // ISO8859_8(10, "ISO-8859-8"),
   ISO8859_9(11, "ISO-8859-9"),
-  ISO8859_10(12, "ISO-8859-10"),
-  ISO8859_11(13, "ISO-8859-11"),
+  // ISO8859_10(12, "ISO-8859-10"),
+  // ISO8859_11(13, "ISO-8859-11"),
   ISO8859_13(15, "ISO-8859-13"),
-  ISO8859_14(16, "ISO-8859-14"),
+  // ISO8859_14(16, "ISO-8859-14"),
   ISO8859_15(17, "ISO-8859-15"),
   ISO8859_16(18, "ISO-8859-16"),
   SJIS(20, "Shift_JIS"),
@@ -93,6 +95,19 @@ public enum CharacterSetECI {
     return values[0];
   }
 
+  public Charset getCharset() {
+    return Charset.forName(name());
+  }
+
+  /**
+   * @param charset Java character set object
+   * @return CharacterSetECI representing ECI for character encoding, or null if it is legal
+   *   but unsupported
+   */
+  public static CharacterSetECI getCharacterSetECI(Charset charset) {
+    return NAME_TO_ECI.get(charset.name());
+  }
+
   /**
    * @param value character set ECI value
    * @return {@code CharacterSetECI} representing ECI of given value, or null if it is legal but
diff --git a/core/src/main/java/com/google/zxing/common/DecoderResult.java b/core/src/main/java/com/google/zxing/common/DecoderResult.java
index 9a0d1b1..db2e7e0 100644
--- a/core/src/main/java/com/google/zxing/common/DecoderResult.java
+++ b/core/src/main/java/com/google/zxing/common/DecoderResult.java
@@ -37,12 +37,21 @@ public final class DecoderResult {
   private Object other;
   private final int structuredAppendParity;
   private final int structuredAppendSequenceNumber;
+  private final int symbologyModifier;
 
   public DecoderResult(byte[] rawBytes,
                        String text,
                        List<byte[]> byteSegments,
                        String ecLevel) {
-    this(rawBytes, text, byteSegments, ecLevel, -1, -1);
+    this(rawBytes, text, byteSegments, ecLevel, -1, -1, 0);
+  }
+
+  public DecoderResult(byte[] rawBytes,
+                       String text,
+                       List<byte[]> byteSegments,
+                       String ecLevel,
+                       int symbologyModifier) {
+    this(rawBytes, text, byteSegments, ecLevel, -1, -1, symbologyModifier);
   }
 
   public DecoderResult(byte[] rawBytes,
@@ -51,6 +60,16 @@ public final class DecoderResult {
                        String ecLevel,
                        int saSequence,
                        int saParity) {
+    this(rawBytes, text, byteSegments, ecLevel, saSequence, saParity, 0);
+  }
+
+  public DecoderResult(byte[] rawBytes,
+                       String text,
+                       List<byte[]> byteSegments,
+                       String ecLevel,
+                       int saSequence,
+                       int saParity,
+                       int symbologyModifier) {
     this.rawBytes = rawBytes;
     this.numBits = rawBytes == null ? 0 : 8 * rawBytes.length;
     this.text = text;
@@ -58,6 +77,7 @@ public final class DecoderResult {
     this.ecLevel = ecLevel;
     this.structuredAppendParity = saParity;
     this.structuredAppendSequenceNumber = saSequence;
+    this.symbologyModifier = symbologyModifier;
   }
 
   /**
@@ -149,4 +169,8 @@ public final class DecoderResult {
     return structuredAppendSequenceNumber;
   }
 
+  public int getSymbologyModifier() {
+    return symbologyModifier;
+  }
+
 }
diff --git a/core/src/main/java/com/google/zxing/common/ECIEncoderSet.java b/core/src/main/java/com/google/zxing/common/ECIEncoderSet.java
new file mode 100755
index 0000000..afa889b
--- /dev/null
+++ b/core/src/main/java/com/google/zxing/common/ECIEncoderSet.java
@@ -0,0 +1,199 @@
+/*
+ * Copyright 2021 ZXing authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.zxing.common;
+
+import java.nio.charset.Charset;
+import java.nio.charset.CharsetEncoder;
+import java.nio.charset.StandardCharsets;
+import java.nio.charset.UnsupportedCharsetException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Set of CharsetEncoders for a given input string
+ *
+ * Invariants:
+ * - The list contains only encoders from CharacterSetECI (list is shorter then the list of encoders available on
+ *   the platform for which ECI values are defined).
+ * - The list contains encoders at least one encoder for every character in the input.
+ * - The first encoder in the list is always the ISO-8859-1 encoder even of no character in the input can be encoded
+ *       by it.
+ * - If the input contains a character that is not in ISO-8859-1 then the last two entries in the list will be the
+ *   UTF-8 encoder and the UTF-16BE encoder.
+ *
+ * @author Alex Geller
+ */
+public final class ECIEncoderSet {
+
+  // List of encoders that potentially encode characters not in ISO-8859-1 in one byte.
+  private static final List<CharsetEncoder> ENCODERS = new ArrayList<>();
+  static {
+    String[] names = { "IBM437",
+                       "ISO-8859-2",
+                       "ISO-8859-3",
+                       "ISO-8859-4",
+                       "ISO-8859-5",
+                       "ISO-8859-6",
+                       "ISO-8859-7",
+                       "ISO-8859-8",
+                       "ISO-8859-9",
+                       "ISO-8859-10",
+                       "ISO-8859-11",
+                       "ISO-8859-13",
+                       "ISO-8859-14",
+                       "ISO-8859-15",
+                       "ISO-8859-16",
+                       "windows-1250",
+                       "windows-1251",
+                       "windows-1252",
+                       "windows-1256",
+                       "Shift_JIS" };
+    for (String name : names) {
+      if (CharacterSetECI.getCharacterSetECIByName(name) != null) {
+        try {
+          ENCODERS.add(Charset.forName(name).newEncoder());
+        } catch (UnsupportedCharsetException e) {
+          // continue
+        }
+      }
+    }
+  }
+
+  private final CharsetEncoder[] encoders;
+  private final int priorityEncoderIndex;
+
+  /**
+   * Constructs an encoder set
+   *
+   * @param stringToEncode the string that needs to be encoded
+   * @param priorityCharset The preferred {@link Charset} or null.
+   * @param fnc1 fnc1 denotes the character in the input that represents the FNC1 character or -1 for a non-GS1 bar
+   * code. When specified, it is considered an error to pass it as argument to the methods canEncode() or encode().
+   */
+  public ECIEncoderSet(String stringToEncode, Charset priorityCharset, int fnc1) {
+    List<CharsetEncoder> neededEncoders = new ArrayList<>();
+
+    //we always need the ISO-8859-1 encoder. It is the default encoding
+    neededEncoders.add(StandardCharsets.ISO_8859_1.newEncoder());
+    boolean needUnicodeEncoder = priorityCharset != null && priorityCharset.name().startsWith("UTF");
+
+    //Walk over the input string and see if all characters can be encoded with the list of encoders 
+    for (int i = 0; i < stringToEncode.length(); i++) {
+      boolean canEncode = false;
+      for (CharsetEncoder encoder : neededEncoders) {
+        char c = stringToEncode.charAt(i);
+        if (c == fnc1 || encoder.canEncode(c)) {
+          canEncode = true;
+          break;
+        }
+      }
+
+      if (!canEncode) {
+        //for the character at position i we don't yet have an encoder in the list
+        for (CharsetEncoder encoder : ENCODERS) {
+          if (encoder.canEncode(stringToEncode.charAt(i))) {
+            //Good, we found an encoder that can encode the character. We add him to the list and continue scanning
+            //the input
+            neededEncoders.add(encoder);
+            canEncode = true;
+            break;
+          }
+        }
+      }
+
+      if (!canEncode) {
+        //The character is not encodeable by any of the single byte encoders so we remember that we will need a
+        //Unicode encoder.
+        needUnicodeEncoder = true;
+      }
+    }
+  
+    if (neededEncoders.size() == 1 && !needUnicodeEncoder) {
+      //the entire input can be encoded by the ISO-8859-1 encoder
+      encoders = new CharsetEncoder[] { neededEncoders.get(0) };
+    } else {
+      // we need more than one single byte encoder or we need a Unicode encoder.
+      // In this case we append a UTF-8 and UTF-16 encoder to the list
+      encoders = new CharsetEncoder[neededEncoders.size() + 2];
+      int index = 0;
+      for (CharsetEncoder encoder : neededEncoders) {
+        encoders[index++] = encoder;
+      }
+
+      encoders[index] = StandardCharsets.UTF_8.newEncoder();
+      encoders[index + 1] = StandardCharsets.UTF_16BE.newEncoder();
+    }
+  
+    //Compute priorityEncoderIndex by looking up priorityCharset in encoders
+    int priorityEncoderIndexValue = -1;
+    if (priorityCharset != null) {
+      for (int i = 0; i < encoders.length; i++) {
+        if (encoders[i] != null && priorityCharset.name().equals(encoders[i].charset().name())) {
+          priorityEncoderIndexValue = i;
+          break;
+        }
+      }
+    }
+    priorityEncoderIndex = priorityEncoderIndexValue;
+    //invariants
+    assert encoders[0].charset().equals(StandardCharsets.ISO_8859_1);
+  }
+
+  public int length() {
+    return encoders.length;
+  }
+
+  public String getCharsetName(int index) {
+    assert index < length();
+    return encoders[index].charset().name();
+  }
+
+  public Charset getCharset(int index) {
+    assert index < length();
+    return encoders[index].charset();
+  }
+
+  public int getECIValue(int encoderIndex) {
+    return CharacterSetECI.getCharacterSetECI(encoders[encoderIndex].charset()).getValue();
+  }
+
+  /*
+   *  returns -1 if no priority charset was defined
+   */
+  public int getPriorityEncoderIndex() {
+    return priorityEncoderIndex;
+  }
+
+  public boolean canEncode(char c, int encoderIndex) {
+    assert encoderIndex < length();
+    CharsetEncoder encoder = encoders[encoderIndex];
+    return encoder.canEncode("" + c);
+  }
+
+  public byte[] encode(char c, int encoderIndex) {
+    assert encoderIndex < length();
+    CharsetEncoder encoder = encoders[encoderIndex];
+    assert encoder.canEncode("" + c);
+    return ("" + c).getBytes(encoder.charset());
+  }
+
+  public byte[] encode(String s, int encoderIndex) {
+    assert encoderIndex < length();
+    CharsetEncoder encoder = encoders[encoderIndex];
+    return s.getBytes(encoder.charset());
+  }
+}
diff --git a/core/src/main/java/com/google/zxing/common/ECIInput.java b/core/src/main/java/com/google/zxing/common/ECIInput.java
new file mode 100755
index 0000000..ad444e1
--- /dev/null
+++ b/core/src/main/java/com/google/zxing/common/ECIInput.java
@@ -0,0 +1,107 @@
+/*
+ * Copyright 2021 ZXing authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.zxing.common;
+
+/**
+ * Interface to navigate a sequence of ECIs and bytes.
+ *
+ * @author Alex Geller
+ */
+public interface ECIInput {
+
+ /**
+  * Returns the length of this input.  The length is the number
+  * of {@code byte}s in or ECIs in the sequence.
+  *
+  * @return  the number of {@code char}s in this sequence
+  */
+  int length();
+
+ /**
+  * Returns the {@code byte} value at the specified index.  An index ranges from zero
+  * to {@code length() - 1}.  The first {@code byte} value of the sequence is at
+  * index zero, the next at index one, and so on, as for array
+  * indexing.
+  *
+  * @param   index the index of the {@code byte} value to be returned
+  *
+  * @return  the specified {@code byte} value as character or the FNC1 character
+  *
+  * @throws  IndexOutOfBoundsException
+  *          if the {@code index} argument is negative or not less than
+  *          {@code length()}
+  * @throws  IllegalArgumentException
+  *          if the value at the {@code index} argument is an ECI (@see #isECI)
+  */
+  char charAt(int index);
+
+ /**
+  * Returns a {@code CharSequence} that is a subsequence of this sequence.
+  * The subsequence starts with the {@code char} value at the specified index and
+  * ends with the {@code char} value at index {@code end - 1}.  The length
+  * (in {@code char}s) of the
+  * returned sequence is {@code end - start}, so if {@code start == end}
+  * then an empty sequence is returned.
+  *
+  * @param   start   the start index, inclusive
+  * @param   end     the end index, exclusive
+  *
+  * @return  the specified subsequence
+  *
+  * @throws  IndexOutOfBoundsException
+  *          if {@code start} or {@code end} are negative,
+  *          if {@code end} is greater than {@code length()},
+  *          or if {@code start} is greater than {@code end}
+  * @throws  IllegalArgumentException
+  *          if a value in the range {@code start}-{@code end} is an ECI (@see #isECI)
+  */
+  CharSequence subSequence(int start, int end);
+
+ /**
+  * Determines if a value is an ECI
+  *
+  * @param   index the index of the value
+  *
+  * @return  true if the value at position {@code index} is an ECI
+  *
+  * @throws  IndexOutOfBoundsException
+  *          if the {@code index} argument is negative or not less than
+  *          {@code length()}
+  */
+  boolean isECI(int index);
+
+ /**
+  * Returns the {@code int} ECI value at the specified index.  An index ranges from zero
+  * to {@code length() - 1}.  The first {@code byte} value of the sequence is at
+  * index zero, the next at index one, and so on, as for array
+  * indexing.
+  *
+  * @param   index the index of the {@code int} value to be returned
+  *
+  * @return  the specified {@code int} ECI value. 
+  *          The ECI specified the encoding of all bytes with a higher index until the
+  *          next ECI or until the end of the input if no other ECI follows.
+  *
+  * @throws  IndexOutOfBoundsException
+  *          if the {@code index} argument is negative or not less than
+  *          {@code length()}
+  * @throws  IllegalArgumentException
+  *          if the value at the {@code index} argument is not an ECI (@see #isECI)
+  */
+  int getECIValue(int index);
+  boolean haveNCharacters(int index, int n);
+}
diff --git a/core/src/main/java/com/google/zxing/common/ECIStringBuilder.java b/core/src/main/java/com/google/zxing/common/ECIStringBuilder.java
new file mode 100644
index 0000000..a4a2968
--- /dev/null
+++ b/core/src/main/java/com/google/zxing/common/ECIStringBuilder.java
@@ -0,0 +1,145 @@
+/*
+ * Copyright 2022 ZXing authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.zxing.common;
+
+import com.google.zxing.FormatException;
+
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+
+/**
+ * Class that converts a sequence of ECIs and bytes into a string
+ *
+ * @author Alex Geller
+ */
+public final class ECIStringBuilder {
+  private StringBuilder currentBytes;
+  private StringBuilder result;
+  private Charset currentCharset = StandardCharsets.ISO_8859_1;
+
+  public ECIStringBuilder() {
+    currentBytes = new StringBuilder();
+  }
+  public ECIStringBuilder(int initialCapacity) {
+    currentBytes = new StringBuilder(initialCapacity);
+  }
+
+  /**
+   * Appends {@code value} as a byte value
+   *
+   * @param value character whose lowest byte is to be appended
+   */
+  public void append(char value) {
+    currentBytes.append((char) (value & 0xff));
+  }
+
+  /**
+   * Appends {@code value} as a byte value
+   *
+   * @param value byte to append
+   */
+  public void append(byte value) {
+    currentBytes.append((char) (value & 0xff));
+  }
+
+  /**
+   * Appends the characters in {@code value} as bytes values
+   *
+   * @param value string to append
+   */
+  public void append(String value) {
+    currentBytes.append(value);
+  }
+
+  /**
+   * Append the string repesentation of {@code value} (short for {@code append(String.valueOf(value))})
+   *
+   * @param value int to append as a string
+   */
+  public void append(int value) {
+    append(String.valueOf(value));
+  }
+
+  /**
+   * Appends ECI value to output.
+   *
+   * @param value ECI value to append, as an int
+   * @throws FormatException on invalid ECI value
+   */
+  public void appendECI(int value) throws FormatException {
+    encodeCurrentBytesIfAny();
+    CharacterSetECI characterSetECI = CharacterSetECI.getCharacterSetECIByValue(value);
+    if (characterSetECI == null) {
+      throw FormatException.getFormatInstance();
+    }
+    currentCharset = characterSetECI.getCharset();
+  }
+
+  private void encodeCurrentBytesIfAny() {
+    if (currentCharset.equals(StandardCharsets.ISO_8859_1)) {
+      if (currentBytes.length() > 0) {
+        if (result == null) {
+          result = currentBytes;
+          currentBytes = new StringBuilder();
+        } else {
+          result.append(currentBytes);
+          currentBytes = new StringBuilder();
+        }
+      }
+    } else if (currentBytes.length() > 0) {
+      byte[] bytes = currentBytes.toString().getBytes(StandardCharsets.ISO_8859_1);
+      currentBytes = new StringBuilder();
+      if (result == null) {
+        result = new StringBuilder(new String(bytes, currentCharset));
+      } else {
+        result.append(new String(bytes, currentCharset));
+      }
+    }
+  }
+
+  /**
+   * Appends the characters from {@code value} (unlike all other append methods of this class who append bytes)
+   *
+   * @param value characters to append
+   */
+  public void appendCharacters(StringBuilder value) {
+    encodeCurrentBytesIfAny();
+    result.append(value);
+  }
+
+  /**
+   * Short for {@code toString().length()} (if possible, use {@link #isEmpty()} instead)
+   *
+   * @return length of string representation in characters
+   */
+  public int length() {
+    return toString().length();
+  }
+
+  /**
+   * @return true iff nothing has been appended
+   */
+  public boolean isEmpty() {
+    return currentBytes.length() == 0 && (result == null || result.length() == 0);
+  }
+
+  @Override
+  public String toString() {
+    encodeCurrentBytesIfAny();
+    return result == null ? "" : result.toString();
+  }
+}
diff --git a/core/src/main/java/com/google/zxing/common/MinimalECIInput.java b/core/src/main/java/com/google/zxing/common/MinimalECIInput.java
new file mode 100755
index 0000000..0f287b6
--- /dev/null
+++ b/core/src/main/java/com/google/zxing/common/MinimalECIInput.java
@@ -0,0 +1,346 @@
+/*
+ * Copyright 2021 ZXing authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.zxing.common;
+
+import java.nio.charset.Charset;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Class that converts a character string into a sequence of ECIs and bytes
+ *
+ * The implementation uses the Dijkstra algorithm to produce minimal encodings
+ *
+ * @author Alex Geller
+ */
+public class MinimalECIInput implements ECIInput {
+
+  private static final int COST_PER_ECI = 3; // approximated (latch + 2 codewords)
+  private final int[] bytes;
+  private final int fnc1;
+
+ /**
+  * Constructs a minimal input
+  *
+  * @param stringToEncode the character string to encode
+  * @param priorityCharset The preferred {@link Charset}. When the value of the argument is null, the algorithm
+  *   chooses charsets that leads to a minimal representation. Otherwise the algorithm will use the priority
+  *   charset to encode any character in the input that can be encoded by it if the charset is among the
+  *   supported charsets.
+  * @param fnc1 denotes the character in the input that represents the FNC1 character or -1 if this is not GS1
+  *   input.
+  */
+  public MinimalECIInput(String stringToEncode, Charset priorityCharset, int fnc1) {
+    this.fnc1 = fnc1;
+    ECIEncoderSet encoderSet = new ECIEncoderSet(stringToEncode, priorityCharset, fnc1);
+    if (encoderSet.length() == 1) { //optimization for the case when all can be encoded without ECI in ISO-8859-1
+      bytes = new int[stringToEncode.length()];
+      for (int i = 0; i < bytes.length; i++) {
+        char c = stringToEncode.charAt(i);
+        bytes[i] = c == fnc1 ? 1000 : (int) c;
+      }
+    } else {
+      bytes = encodeMinimally(stringToEncode, encoderSet, fnc1);
+    }
+  }
+
+  public int getFNC1Character() {
+    return fnc1;
+  }
+
+ /**
+  * Returns the length of this input.  The length is the number
+  * of {@code byte}s, FNC1 characters or ECIs in the sequence.
+  *
+  * @return  the number of {@code char}s in this sequence
+  */
+  public int length() {
+    return bytes.length;
+  }
+
+  public boolean haveNCharacters(int index, int n) {
+    if (index + n - 1 >= bytes.length) {
+      return false;
+    }
+    for (int i = 0; i < n; i++) {
+      if (isECI(index + i)) {
+        return false;
+      }
+    }
+    return true;
+  }
+
+ /**
+  * Returns the {@code byte} value at the specified index.  An index ranges from zero
+  * to {@code length() - 1}.  The first {@code byte} value of the sequence is at
+  * index zero, the next at index one, and so on, as for array
+  * indexing.
+  *
+  * @param   index the index of the {@code byte} value to be returned
+  *
+  * @return  the specified {@code byte} value as character or the FNC1 character
+  *
+  * @throws  IndexOutOfBoundsException
+  *          if the {@code index} argument is negative or not less than
+  *          {@code length()}
+  * @throws  IllegalArgumentException
+  *          if the value at the {@code index} argument is an ECI (@see #isECI)
+  */
+  public char charAt(int index) {
+    if (index < 0 || index >= length()) {
+      throw new IndexOutOfBoundsException("" + index);
+    }
+    if (isECI(index)) {
+      throw new IllegalArgumentException("value at " + index + " is not a character but an ECI");
+    }
+    return isFNC1(index) ? (char) fnc1 : (char) bytes[index];
+  }
+
+ /**
+  * Returns a {@code CharSequence} that is a subsequence of this sequence.
+  * The subsequence starts with the {@code char} value at the specified index and
+  * ends with the {@code char} value at index {@code end - 1}.  The length
+  * (in {@code char}s) of the
+  * returned sequence is {@code end - start}, so if {@code start == end}
+  * then an empty sequence is returned.
+  *
+  * @param   start   the start index, inclusive
+  * @param   end     the end index, exclusive
+  *
+  * @return  the specified subsequence
+  *
+  * @throws  IndexOutOfBoundsException
+  *          if {@code start} or {@code end} are negative,
+  *          if {@code end} is greater than {@code length()},
+  *          or if {@code start} is greater than {@code end}
+  * @throws  IllegalArgumentException
+  *          if a value in the range {@code start}-{@code end} is an ECI (@see #isECI)
+  */
+  public CharSequence subSequence(int start, int end) {
+    if (start < 0 || start > end || end > length()) {
+      throw new IndexOutOfBoundsException("" + start);
+    }
+    StringBuilder result = new StringBuilder();
+    for (int i = start; i < end; i++) {
+      if (isECI(i)) {
+        throw new IllegalArgumentException("value at " + i + " is not a character but an ECI");
+      }
+      result.append(charAt(i));
+    }
+    return result;
+  }
+
+ /**
+  * Determines if a value is an ECI
+  *
+  * @param   index the index of the value
+  *
+  * @return  true if the value at position {@code index} is an ECI
+  *
+  * @throws  IndexOutOfBoundsException
+  *          if the {@code index} argument is negative or not less than
+  *          {@code length()}
+  */
+  public boolean isECI(int index) {
+    if (index < 0 || index >= length()) {
+      throw new IndexOutOfBoundsException("" + index);
+    }
+    return bytes[index] > 255 && bytes[index] <= 999;
+  }
+
+ /**
+  * Determines if a value is the FNC1 character
+  *
+  * @param   index the index of the value
+  *
+  * @return  true if the value at position {@code index} is the FNC1 character
+  *
+  * @throws  IndexOutOfBoundsException
+  *          if the {@code index} argument is negative or not less than
+  *          {@code length()}
+  */
+  public boolean isFNC1(int index) {
+    if (index < 0 || index >= length()) {
+      throw new IndexOutOfBoundsException("" + index);
+    }
+    return bytes[index] == 1000;
+  }
+
+ /**
+  * Returns the {@code int} ECI value at the specified index.  An index ranges from zero
+  * to {@code length() - 1}.  The first {@code byte} value of the sequence is at
+  * index zero, the next at index one, and so on, as for array
+  * indexing.
+  *
+  * @param   index the index of the {@code int} value to be returned
+  *
+  * @return  the specified {@code int} ECI value.
+  *          The ECI specified the encoding of all bytes with a higher index until the
+  *          next ECI or until the end of the input if no other ECI follows.
+  *
+  * @throws  IndexOutOfBoundsException
+  *          if the {@code index} argument is negative or not less than
+  *          {@code length()}
+  * @throws  IllegalArgumentException
+  *          if the value at the {@code index} argument is not an ECI (@see #isECI)
+  */
+  public int getECIValue(int index) {
+    if (index < 0 || index >= length()) {
+      throw new IndexOutOfBoundsException("" + index);
+    }
+    if (!isECI(index)) {
+      throw new IllegalArgumentException("value at " + index + " is not an ECI but a character");
+    }
+    return bytes[index] - 256;
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder result = new StringBuilder();
+    for (int i = 0; i < length(); i++) {
+      if (i > 0) {
+        result.append(", ");
+      }
+      if (isECI(i)) {
+        result.append("ECI(");
+        result.append(getECIValue(i));
+        result.append(')');
+      } else if (charAt(i) < 128) {
+        result.append('\'');
+        result.append(charAt(i));
+        result.append('\'');
+      } else {
+        result.append((int) charAt(i));
+      }
+    }
+    return result.toString();
+  }
+  static void addEdge(InputEdge[][] edges, int to, InputEdge edge) {
+    if (edges[to][edge.encoderIndex] == null ||
+        edges[to][edge.encoderIndex].cachedTotalSize > edge.cachedTotalSize) {
+      edges[to][edge.encoderIndex] = edge;
+    }
+  }
+
+  static void addEdges(String stringToEncode,
+                       ECIEncoderSet encoderSet,
+                       InputEdge[][] edges,
+                       int from,
+                       InputEdge previous,
+                       int fnc1) {
+
+    char ch = stringToEncode.charAt(from);
+
+    int start = 0;
+    int end = encoderSet.length();
+    if (encoderSet.getPriorityEncoderIndex() >= 0 && (ch == fnc1 || encoderSet.canEncode(ch,
+        encoderSet.getPriorityEncoderIndex()))) {
+      start = encoderSet.getPriorityEncoderIndex();
+      end = start + 1;
+    }
+
+    for (int i = start; i < end; i++) {
+      if (ch == fnc1 || encoderSet.canEncode(ch,i)) {
+        addEdge(edges, from + 1, new InputEdge(ch, encoderSet, i, previous, fnc1));
+      }
+    }
+  }
+
+  static int[] encodeMinimally(String stringToEncode, ECIEncoderSet encoderSet, int fnc1) {
+    int inputLength = stringToEncode.length();
+
+    // Array that represents vertices. There is a vertex for every character and encoding.
+    InputEdge[][] edges = new InputEdge[inputLength + 1][encoderSet.length()];
+    addEdges(stringToEncode, encoderSet, edges, 0, null, fnc1);
+
+    for (int i = 1; i <= inputLength; i++) {
+      for (int j = 0; j < encoderSet.length(); j++) {
+        if (edges[i][j] != null && i < inputLength) {
+          addEdges(stringToEncode, encoderSet, edges, i, edges[i][j], fnc1);
+        }
+      }
+      //optimize memory by removing edges that have been passed.
+      for (int j = 0; j < encoderSet.length(); j++) {
+        edges[i - 1][j] = null;
+      }
+    }
+    int minimalJ = -1;
+    int minimalSize = Integer.MAX_VALUE;
+    for (int j = 0; j < encoderSet.length(); j++) {
+      if (edges[inputLength][j] != null) {
+        InputEdge edge = edges[inputLength][j];
+        if (edge.cachedTotalSize < minimalSize) {
+          minimalSize = edge.cachedTotalSize;
+          minimalJ = j;
+        }
+      }
+    }
+    if (minimalJ < 0) {
+      throw new IllegalStateException("Failed to encode \"" + stringToEncode + "\"");
+    }
+    List<Integer> intsAL = new ArrayList<>();
+    InputEdge current = edges[inputLength][minimalJ];
+    while (current != null) {
+      if (current.isFNC1()) {
+        intsAL.add(0, 1000);
+      } else {
+        byte[] bytes = encoderSet.encode(current.c,current.encoderIndex);
+        for (int i = bytes.length - 1; i >= 0; i--) {
+          intsAL.add(0, (bytes[i] & 0xFF));
+        }
+      }
+      int previousEncoderIndex = current.previous == null ? 0 : current.previous.encoderIndex;
+      if (previousEncoderIndex != current.encoderIndex) {
+        intsAL.add(0,256 + encoderSet.getECIValue(current.encoderIndex));
+      }
+      current = current.previous;
+    }
+    int[] ints = new int[intsAL.size()];
+    for (int i = 0; i < ints.length; i++) {
+      ints[i] = intsAL.get(i);
+    }
+    return ints;
+  }
+
+  private static final class InputEdge {
+    private final char c;
+    private final int encoderIndex; //the encoding of this edge
+    private final InputEdge previous;
+    private final int cachedTotalSize;
+
+    private InputEdge(char c, ECIEncoderSet encoderSet, int encoderIndex, InputEdge previous, int fnc1) {
+      this.c = c == fnc1 ? 1000 : c;
+      this.encoderIndex = encoderIndex;
+      this.previous = previous;
+
+      int size = this.c == 1000 ? 1 : encoderSet.encode(c, encoderIndex).length;
+      int previousEncoderIndex = previous == null ? 0 : previous.encoderIndex;
+      if (previousEncoderIndex != encoderIndex) {
+        size += COST_PER_ECI;
+      }
+      if (previous != null) {
+        size += previous.cachedTotalSize;
+      }
+      this.cachedTotalSize = size;
+    }
+
+    boolean isFNC1() {
+      return c == 1000;
+    }
+
+  }
+}
diff --git a/core/src/main/java/com/google/zxing/common/StringUtils.java b/core/src/main/java/com/google/zxing/common/StringUtils.java
index 2eb3a31..b749d83 100644
--- a/core/src/main/java/com/google/zxing/common/StringUtils.java
+++ b/core/src/main/java/com/google/zxing/common/StringUtils.java
@@ -17,6 +17,8 @@
 package com.google.zxing.common;
 
 import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+import java.nio.charset.UnsupportedCharsetException;
 import java.util.Map;
 
 import com.google.zxing.DecodeHintType;
@@ -29,15 +31,27 @@ import com.google.zxing.DecodeHintType;
  */
 public final class StringUtils {
 
-  private static final String PLATFORM_DEFAULT_ENCODING = Charset.defaultCharset().name();
+  private static final Charset PLATFORM_DEFAULT_ENCODING = Charset.defaultCharset();
+  public static final Charset SHIFT_JIS_CHARSET = Charset.forName("SJIS");
+  public static final Charset GB2312_CHARSET;
+  static {
+    Charset gb2312Charset;
+    try {
+      gb2312Charset = Charset.forName("GB2312");
+    } catch (UnsupportedCharsetException ucee) {
+      // Can happen on some embedded JREs?
+      gb2312Charset = null;
+    }
+    GB2312_CHARSET = gb2312Charset;
+  }
+  private static final Charset EUC_JP = Charset.forName("EUC_JP");
+  private static final boolean ASSUME_SHIFT_JIS =
+      SHIFT_JIS_CHARSET.equals(PLATFORM_DEFAULT_ENCODING) ||
+      EUC_JP.equals(PLATFORM_DEFAULT_ENCODING);
+
+  // Retained for ABI compatibility with earlier versions
   public static final String SHIFT_JIS = "SJIS";
   public static final String GB2312 = "GB2312";
-  private static final String EUC_JP = "EUC_JP";
-  private static final String UTF8 = "UTF8";
-  private static final String ISO88591 = "ISO8859_1";
-  private static final boolean ASSUME_SHIFT_JIS =
-      SHIFT_JIS.equalsIgnoreCase(PLATFORM_DEFAULT_ENCODING) ||
-      EUC_JP.equalsIgnoreCase(PLATFORM_DEFAULT_ENCODING);
 
   private StringUtils() { }
 
@@ -45,13 +59,44 @@ public final class StringUtils {
    * @param bytes bytes encoding a string, whose encoding should be guessed
    * @param hints decode hints if applicable
    * @return name of guessed encoding; at the moment will only guess one of:
-   *  {@link #SHIFT_JIS}, {@link #UTF8}, {@link #ISO88591}, or the platform
-   *  default encoding if none of these can possibly be correct
+   *  "SJIS", "UTF8", "ISO8859_1", or the platform default encoding if none
+   *  of these can possibly be correct
    */
   public static String guessEncoding(byte[] bytes, Map<DecodeHintType,?> hints) {
+    Charset c = guessCharset(bytes, hints);
+    if (c.equals(SHIFT_JIS_CHARSET)) {
+      return "SJIS";
+    }
+    if (c.equals(StandardCharsets.UTF_8)) {
+      return "UTF8";
+    }
+    if (c.equals(StandardCharsets.ISO_8859_1)) {
+      return "ISO8859_1";
+    }
+    return c.name();
+  }
+
+  /**
+   * @param bytes bytes encoding a string, whose encoding should be guessed
+   * @param hints decode hints if applicable
+   * @return Charset of guessed encoding; at the moment will only guess one of:
+   *  {@link #SHIFT_JIS_CHARSET}, {@link StandardCharsets#UTF_8},
+   *  {@link StandardCharsets#ISO_8859_1}, {@link StandardCharsets#UTF_16},
+   *  or the platform default encoding if
+   *  none of these can possibly be correct
+   */
+  public static Charset guessCharset(byte[] bytes, Map<DecodeHintType,?> hints) {
     if (hints != null && hints.containsKey(DecodeHintType.CHARACTER_SET)) {
-      return hints.get(DecodeHintType.CHARACTER_SET).toString();
+      return Charset.forName(hints.get(DecodeHintType.CHARACTER_SET).toString());
+    }
+
+    // First try UTF-16, assuming anything with its BOM is UTF-16
+    if (bytes.length > 2 &&
+        ((bytes[0] == (byte) 0xFE && bytes[1] == (byte) 0xFF) ||
+         (bytes[0] == (byte) 0xFF && bytes[1] == (byte) 0xFE))) {
+      return StandardCharsets.UTF_16;
     }
+
     // For now, merely tries to distinguish ISO-8859-1, UTF-8 and Shift_JIS,
     // which should be by far the most common encodings.
     int length = bytes.length;
@@ -164,11 +209,11 @@ public final class StringUtils {
 
     // Easy -- if there is BOM or at least 1 valid not-single byte character (and no evidence it can't be UTF-8), done
     if (canBeUTF8 && (utf8bom || utf2BytesChars + utf3BytesChars + utf4BytesChars > 0)) {
-      return UTF8;
+      return StandardCharsets.UTF_8;
     }
     // Easy -- if assuming Shift_JIS or >= 3 valid consecutive not-ascii characters (and no evidence it can't be), done
     if (canBeShiftJIS && (ASSUME_SHIFT_JIS || sjisMaxKatakanaWordLength >= 3 || sjisMaxDoubleBytesWordLength >= 3)) {
-      return SHIFT_JIS;
+      return SHIFT_JIS_CHARSET;
     }
     // Distinguishing Shift_JIS and ISO-8859-1 can be a little tough for short words. The crude heuristic is:
     // - If we saw
@@ -177,18 +222,18 @@ public final class StringUtils {
     // - then we conclude Shift_JIS, else ISO-8859-1
     if (canBeISO88591 && canBeShiftJIS) {
       return (sjisMaxKatakanaWordLength == 2 && sjisKatakanaChars == 2) || isoHighOther * 10 >= length
-          ? SHIFT_JIS : ISO88591;
+          ? SHIFT_JIS_CHARSET : StandardCharsets.ISO_8859_1;
     }
 
     // Otherwise, try in order ISO-8859-1, Shift JIS, UTF-8 and fall back to default platform encoding
     if (canBeISO88591) {
-      return ISO88591;
+      return StandardCharsets.ISO_8859_1;
     }
     if (canBeShiftJIS) {
-      return SHIFT_JIS;
+      return SHIFT_JIS_CHARSET;
     }
     if (canBeUTF8) {
-      return UTF8;
+      return StandardCharsets.UTF_8;
     }
     // Otherwise, we take a wild guess with platform encoding
     return PLATFORM_DEFAULT_ENCODING;
diff --git a/core/src/main/java/com/google/zxing/common/reedsolomon/ReedSolomonDecoder.java b/core/src/main/java/com/google/zxing/common/reedsolomon/ReedSolomonDecoder.java
index e406e2f..2593456 100644
--- a/core/src/main/java/com/google/zxing/common/reedsolomon/ReedSolomonDecoder.java
+++ b/core/src/main/java/com/google/zxing/common/reedsolomon/ReedSolomonDecoder.java
@@ -100,7 +100,7 @@ public final class ReedSolomonDecoder {
     GenericGFPoly t = field.getOne();
 
     // Run Euclidean algorithm until r's degree is less than R/2
-    while (r.getDegree() >= R / 2) {
+    while (2 * r.getDegree() >= R) {
       GenericGFPoly rLastLast = rLast;
       GenericGFPoly tLastLast = tLast;
       rLast = r;
@@ -125,7 +125,8 @@ public final class ReedSolomonDecoder {
       t = q.multiply(tLast).addOrSubtract(tLastLast);
 
       if (r.getDegree() >= rLast.getDegree()) {
-        throw new IllegalStateException("Division algorithm failed to reduce polynomial?");
+        throw new IllegalStateException("Division algorithm failed to reduce polynomial? " +
+          "r: " + r + ", rLast: " + rLast);
       }
     }
 
diff --git a/core/src/main/java/com/google/zxing/datamatrix/DataMatrixReader.java b/core/src/main/java/com/google/zxing/datamatrix/DataMatrixReader.java
index b0f380d..f596fd1 100644
--- a/core/src/main/java/com/google/zxing/datamatrix/DataMatrixReader.java
+++ b/core/src/main/java/com/google/zxing/datamatrix/DataMatrixReader.java
@@ -83,6 +83,7 @@ public final class DataMatrixReader implements Reader {
     if (ecLevel != null) {
       result.putMetadata(ResultMetadataType.ERROR_CORRECTION_LEVEL, ecLevel);
     }
+    result.putMetadata(ResultMetadataType.SYMBOLOGY_IDENTIFIER, "]d" + decoderResult.getSymbologyModifier());
     return result;
   }
 
diff --git a/core/src/main/java/com/google/zxing/datamatrix/DataMatrixWriter.java b/core/src/main/java/com/google/zxing/datamatrix/DataMatrixWriter.java
index 2abed6a..0bc680c 100644
--- a/core/src/main/java/com/google/zxing/datamatrix/DataMatrixWriter.java
+++ b/core/src/main/java/com/google/zxing/datamatrix/DataMatrixWriter.java
@@ -24,11 +24,13 @@ import com.google.zxing.datamatrix.encoder.DefaultPlacement;
 import com.google.zxing.Dimension;
 import com.google.zxing.datamatrix.encoder.ErrorCorrection;
 import com.google.zxing.datamatrix.encoder.HighLevelEncoder;
+import com.google.zxing.datamatrix.encoder.MinimalEncoder;
 import com.google.zxing.datamatrix.encoder.SymbolInfo;
 import com.google.zxing.datamatrix.encoder.SymbolShapeHint;
 import com.google.zxing.qrcode.encoder.ByteMatrix;
 
 import java.util.Map;
+import java.nio.charset.Charset;
 
 /**
  * This object renders a Data Matrix code as a BitMatrix 2D array of greyscale values.
@@ -81,7 +83,26 @@ public final class DataMatrixWriter implements Writer {
 
 
     //1. step: Data encodation
-    String encoded = HighLevelEncoder.encodeHighLevel(contents, shape, minSize, maxSize);
+    String encoded;
+
+    boolean hasCompactionHint = hints != null && hints.containsKey(EncodeHintType.DATA_MATRIX_COMPACT) &&
+        Boolean.parseBoolean(hints.get(EncodeHintType.DATA_MATRIX_COMPACT).toString());
+    if (hasCompactionHint) {
+
+      boolean hasGS1FormatHint = hints.containsKey(EncodeHintType.GS1_FORMAT) &&
+          Boolean.parseBoolean(hints.get(EncodeHintType.GS1_FORMAT).toString());
+
+      Charset charset = null;
+      boolean hasEncodingHint = hints.containsKey(EncodeHintType.CHARACTER_SET);
+      if (hasEncodingHint) {
+        charset = Charset.forName(hints.get(EncodeHintType.CHARACTER_SET).toString());
+      }
+      encoded = MinimalEncoder.encodeHighLevel(contents, charset, hasGS1FormatHint ? 0x1D : -1, shape);
+    } else {
+      boolean hasForceC40Hint = hints != null && hints.containsKey(EncodeHintType.FORCE_C40) &&
+          Boolean.parseBoolean(hints.get(EncodeHintType.FORCE_C40).toString());
+      encoded = HighLevelEncoder.encodeHighLevel(contents, shape, minSize, maxSize, hasForceC40Hint);
+    }
 
     SymbolInfo symbolInfo = SymbolInfo.lookup(encoded.length(), shape, minSize, maxSize, true);
 
@@ -89,7 +110,8 @@ public final class DataMatrixWriter implements Writer {
     String codewords = ErrorCorrection.encodeECC200(encoded, symbolInfo);
 
     //3. step: Module placement in Matrix
-    DefaultPlacement placement = new DefaultPlacement(codewords, symbolInfo.getSymbolDataWidth(), symbolInfo.getSymbolDataHeight());
+    DefaultPlacement placement =
+        new DefaultPlacement(codewords, symbolInfo.getSymbolDataWidth(), symbolInfo.getSymbolDataHeight());
     placement.place();
 
     //4. step: low-level encoding
diff --git a/core/src/main/java/com/google/zxing/datamatrix/decoder/BitMatrixParser.java b/core/src/main/java/com/google/zxing/datamatrix/decoder/BitMatrixParser.java
index 151267e..225df65 100644
--- a/core/src/main/java/com/google/zxing/datamatrix/decoder/BitMatrixParser.java
+++ b/core/src/main/java/com/google/zxing/datamatrix/decoder/BitMatrixParser.java
@@ -48,7 +48,7 @@ final class BitMatrixParser {
   }
 
   /**
-   * <p>Creates the version object based on the dimension of the original bit matrix from 
+   * <p>Creates the version object based on the dimension of the original bit matrix from
    * the datamatrix code.</p>
    *
    * <p>See ISO 16022:2006 Table 7 - ECC 200 symbol attributes</p>
@@ -126,7 +126,7 @@ final class BitMatrixParser {
         // Sweep downward diagonally to the left
         do {
           if ((row >= 0) && (column < numColumns) && !readMappingMatrix.get(column, row)) {
-             result[resultOffset++] = (byte) readUtah(row, column, numRows, numColumns);
+            result[resultOffset++] = (byte) readUtah(row, column, numRows, numColumns);
           }
           row += 2;
           column -= 2;
@@ -161,6 +161,9 @@ final class BitMatrixParser {
       column += numColumns;
       row += 4 - ((numColumns + 4) & 0x07);
     }
+    if (row >= numRows) {
+      row -= numRows;
+    }
     readMappingMatrix.set(column, row);
     return mappingBitMatrix.get(column, row);
   }
diff --git a/core/src/main/java/com/google/zxing/datamatrix/decoder/DataBlock.java b/core/src/main/java/com/google/zxing/datamatrix/decoder/DataBlock.java
index e764c08..fd64b26 100644
--- a/core/src/main/java/com/google/zxing/datamatrix/decoder/DataBlock.java
+++ b/core/src/main/java/com/google/zxing/datamatrix/decoder/DataBlock.java
@@ -52,7 +52,7 @@ final class DataBlock {
     int totalBlocks = 0;
     Version.ECB[] ecBlockArray = ecBlocks.getECBlocks();
     for (Version.ECB ecBlock : ecBlockArray) {
-       totalBlocks += ecBlock.getCount();
+      totalBlocks += ecBlock.getCount();
     }
 
     // Now establish DataBlocks of the appropriate size and number of data codewords
diff --git a/core/src/main/java/com/google/zxing/datamatrix/decoder/DecodedBitStreamParser.java b/core/src/main/java/com/google/zxing/datamatrix/decoder/DecodedBitStreamParser.java
index 6969ca1..497b8c3 100644
--- a/core/src/main/java/com/google/zxing/datamatrix/decoder/DecodedBitStreamParser.java
+++ b/core/src/main/java/com/google/zxing/datamatrix/decoder/DecodedBitStreamParser.java
@@ -19,11 +19,14 @@ package com.google.zxing.datamatrix.decoder;
 import com.google.zxing.FormatException;
 import com.google.zxing.common.BitSource;
 import com.google.zxing.common.DecoderResult;
+import com.google.zxing.common.ECIStringBuilder;
 
-import java.io.UnsupportedEncodingException;
+import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 
 /**
  * <p>Data Matrix Codes can encode text as bits in one of several modes, and can use multiple modes
@@ -43,7 +46,8 @@ final class DecodedBitStreamParser {
     TEXT_ENCODE,
     ANSIX12_ENCODE,
     EDIFACT_ENCODE,
-    BASE256_ENCODE
+    BASE256_ENCODE,
+    ECI_ENCODE
   }
 
   /**
@@ -84,20 +88,24 @@ final class DecodedBitStreamParser {
 
   static DecoderResult decode(byte[] bytes) throws FormatException {
     BitSource bits = new BitSource(bytes);
-    StringBuilder result = new StringBuilder(100);
+    ECIStringBuilder result = new ECIStringBuilder(100);
     StringBuilder resultTrailer = new StringBuilder(0);
     List<byte[]> byteSegments = new ArrayList<>(1);
     Mode mode = Mode.ASCII_ENCODE;
+    // Could look directly at 'bytes', if we're sure of not having to account for multi byte values
+    Set<Integer> fnc1Positions = new HashSet<>();
+    int symbologyModifier;
+    boolean isECIencoded = false;
     do {
       if (mode == Mode.ASCII_ENCODE) {
-        mode = decodeAsciiSegment(bits, result, resultTrailer);
+        mode = decodeAsciiSegment(bits, result, resultTrailer, fnc1Positions);
       } else {
         switch (mode) {
           case C40_ENCODE:
-            decodeC40Segment(bits, result);
+            decodeC40Segment(bits, result, fnc1Positions);
             break;
           case TEXT_ENCODE:
-            decodeTextSegment(bits, result);
+            decodeTextSegment(bits, result, fnc1Positions);
             break;
           case ANSIX12_ENCODE:
             decodeAnsiX12Segment(bits, result);
@@ -108,6 +116,10 @@ final class DecodedBitStreamParser {
           case BASE256_ENCODE:
             decodeBase256Segment(bits, result, byteSegments);
             break;
+          case ECI_ENCODE:
+            decodeECISegment(bits, result);
+            isECIencoded = true; // ECI detection only, atm continue decoding as ASCII
+            break;
           default:
             throw FormatException.getFormatInstance();
         }
@@ -115,17 +127,42 @@ final class DecodedBitStreamParser {
       }
     } while (mode != Mode.PAD_ENCODE && bits.available() > 0);
     if (resultTrailer.length() > 0) {
-      result.append(resultTrailer);
+      result.appendCharacters(resultTrailer);
+    }
+    if (isECIencoded) {
+      // Examples for this numbers can be found in this documentation of a hardware barcode scanner:
+      // https://honeywellaidc.force.com/supportppr/s/article/List-of-barcode-symbology-AIM-Identifiers
+      if (fnc1Positions.contains(0) || fnc1Positions.contains(4)) {
+        symbologyModifier = 5;
+      } else if (fnc1Positions.contains(1) || fnc1Positions.contains(5)) {
+        symbologyModifier = 6;
+      } else {
+        symbologyModifier = 4;
+      }
+    } else {
+      if (fnc1Positions.contains(0) || fnc1Positions.contains(4)) {
+        symbologyModifier = 2;
+      } else if (fnc1Positions.contains(1) || fnc1Positions.contains(5)) {
+        symbologyModifier = 3;
+      } else {
+        symbologyModifier = 1;
+      }
     }
-    return new DecoderResult(bytes, result.toString(), byteSegments.isEmpty() ? null : byteSegments, null);
+
+    return new DecoderResult(bytes,
+                             result.toString(),
+                             byteSegments.isEmpty() ? null : byteSegments,
+                             null,
+                             symbologyModifier);
   }
 
   /**
    * See ISO 16022:2006, 5.2.3 and Annex C, Table C.2
    */
   private static Mode decodeAsciiSegment(BitSource bits,
-                                         StringBuilder result,
-                                         StringBuilder resultTrailer) throws FormatException {
+                                         ECIStringBuilder result,
+                                         StringBuilder resultTrailer,
+                                         Set<Integer> fnc1positions) throws FormatException {
     boolean upperShift = false;
     do {
       int oneByte = bits.readBits(8);
@@ -153,6 +190,7 @@ final class DecodedBitStreamParser {
           case 231: // Latch to Base 256 encodation
             return Mode.BASE256_ENCODE;
           case 232: // FNC1
+            fnc1positions.add(result.length());
             result.append((char) 29); // translate as ASCII 29
             break;
           case 233: // Structured Append
@@ -178,10 +216,7 @@ final class DecodedBitStreamParser {
           case 240: // Latch to EDIFACT encodation
             return Mode.EDIFACT_ENCODE;
           case 241: // ECI Character
-            // TODO(bbrown): I think we need to support ECI
-            //throw ReaderException.getInstance();
-            // Ignore this symbol for now
-            break;
+            return Mode.ECI_ENCODE;
           default:
             // Not to be used in ASCII encodation
             // but work around encoders that end with 254, latch back to ASCII
@@ -198,7 +233,8 @@ final class DecodedBitStreamParser {
   /**
    * See ISO 16022:2006, 5.2.5 and Annex C, Table C.1
    */
-  private static void decodeC40Segment(BitSource bits, StringBuilder result) throws FormatException {
+  private static void decodeC40Segment(BitSource bits, ECIStringBuilder result, Set<Integer> fnc1positions)
+      throws FormatException {
     // Three C40 values are encoded in a 16-bit value as
     // (1600 * C1) + (40 * C2) + C3 + 1
     // TODO(bbrown): The Upper Shift with C40 doesn't work in the 4 value scenario all the time
@@ -258,6 +294,7 @@ final class DecodedBitStreamParser {
             } else {
               switch (cValue) {
                 case 27: // FNC1
+                  fnc1positions.add(result.length());
                   result.append((char) 29); // translate as ASCII 29
                   break;
                 case 30: // Upper Shift
@@ -288,7 +325,8 @@ final class DecodedBitStreamParser {
   /**
    * See ISO 16022:2006, 5.2.6 and Annex C, Table C.2
    */
-  private static void decodeTextSegment(BitSource bits, StringBuilder result) throws FormatException {
+  private static void decodeTextSegment(BitSource bits, ECIStringBuilder result, Set<Integer> fnc1positions)
+      throws FormatException {
     // Three Text values are encoded in a 16-bit value as
     // (1600 * C1) + (40 * C2) + C3 + 1
     // TODO(bbrown): The Upper Shift with Text doesn't work in the 4 value scenario all the time
@@ -348,6 +386,7 @@ final class DecodedBitStreamParser {
             } else {
               switch (cValue) {
                 case 27: // FNC1
+                  fnc1positions.add(result.length());
                   result.append((char) 29); // translate as ASCII 29
                   break;
                 case 30: // Upper Shift
@@ -384,7 +423,7 @@ final class DecodedBitStreamParser {
    * See ISO 16022:2006, 5.2.7
    */
   private static void decodeAnsiX12Segment(BitSource bits,
-                                           StringBuilder result) throws FormatException {
+                                           ECIStringBuilder result) throws FormatException {
     // Three ANSI X12 values are encoded in a 16-bit value as
     // (1600 * C1) + (40 * C2) + C3 + 1
 
@@ -443,7 +482,7 @@ final class DecodedBitStreamParser {
   /**
    * See ISO 16022:2006, 5.2.8 and Annex C Table C.3
    */
-  private static void decodeEdifactSegment(BitSource bits, StringBuilder result) {
+  private static void decodeEdifactSegment(BitSource bits, ECIStringBuilder result) {
     do {
       // If there is only two or less bytes left then it will be encoded as ASCII
       if (bits.available() <= 16) {
@@ -475,7 +514,7 @@ final class DecodedBitStreamParser {
    * See ISO 16022:2006, 5.2.9 and Annex B, B.2
    */
   private static void decodeBase256Segment(BitSource bits,
-                                           StringBuilder result,
+                                           ECIStringBuilder result,
                                            Collection<byte[]> byteSegments)
       throws FormatException {
     // Figure out how long the Base 256 Segment is.
@@ -505,13 +544,39 @@ final class DecodedBitStreamParser {
       bytes[i] = (byte) unrandomize255State(bits.readBits(8), codewordPosition++);
     }
     byteSegments.add(bytes);
-    try {
-      result.append(new String(bytes, "ISO8859_1"));
-    } catch (UnsupportedEncodingException uee) {
-      throw new IllegalStateException("Platform does not support required encoding: " + uee);
+    result.append(new String(bytes, StandardCharsets.ISO_8859_1));
+  }
+
+  /**
+   * See ISO 16022:2007, 5.4.1
+   */
+  private static void decodeECISegment(BitSource bits,
+                                           ECIStringBuilder result)
+      throws FormatException {
+    if (bits.available() < 8) {
+      throw FormatException.getFormatInstance();
+    }
+    int c1 = bits.readBits(8);
+    if (c1 <= 127) {
+      result.appendECI(c1 - 1);
     }
+    //currently we only support character set ECIs
+    /*} else {
+      if (bits.available() < 8) {
+        throw FormatException.getFormatInstance();
+      }
+      int c2 = bits.readBits(8);
+      if (c1 >= 128 && c1 <= 191) {
+      } else {
+        if (bits.available() < 8) {
+          throw FormatException.getFormatInstance();
+        }
+        int c3 = bits.readBits(8);
+      }
+    }*/
   }
 
+
   /**
    * See ISO 16022:2006, Annex B, B.2
    */
diff --git a/core/src/main/java/com/google/zxing/datamatrix/decoder/Version.java b/core/src/main/java/com/google/zxing/datamatrix/decoder/Version.java
index 5341d23..2a13326 100644
--- a/core/src/main/java/com/google/zxing/datamatrix/decoder/Version.java
+++ b/core/src/main/java/com/google/zxing/datamatrix/decoder/Version.java
@@ -230,7 +230,46 @@ public final class Version {
         new Version(29, 16, 36, 14, 16,
             new ECBlocks(24, new ECB(1, 32))),
         new Version(30, 16, 48, 14, 22,
-            new ECBlocks(28, new ECB(1, 49)))
+            new ECBlocks(28, new ECB(1, 49))),
+
+        // extended forms as specified in
+        // ISO 21471:2020 (DMRE) 5.5.1 Table 7
+        new Version(31, 8, 48, 6, 22,
+            new ECBlocks(15, new ECB(1, 18))),
+        new Version(32, 8, 64, 6, 14,
+            new ECBlocks(18, new ECB(1, 24))),
+        new Version(33, 8, 80, 6, 18,
+            new ECBlocks(22, new ECB(1, 32))),
+        new Version(34, 8, 96, 6, 22,
+            new ECBlocks(28, new ECB(1, 38))),
+        new Version(35, 8, 120, 6, 18,
+            new ECBlocks(32, new ECB(1, 49))),
+        new Version(36, 8, 144, 6, 22,
+            new ECBlocks(36, new ECB(1, 63))),
+        new Version(37, 12, 64, 10, 14,
+            new ECBlocks(27, new ECB(1, 43))),
+        new Version(38, 12, 88, 10, 20,
+            new ECBlocks(36, new ECB(1, 64))),
+        new Version(39, 16, 64, 14, 14,
+            new ECBlocks(36, new ECB(1, 62))),
+        new Version(40, 20, 36, 18, 16,
+            new ECBlocks(28, new ECB(1, 44))),
+        new Version(41, 20, 44, 18, 20,
+            new ECBlocks(34, new ECB(1, 56))),
+        new Version(42, 20, 64, 18, 14,
+            new ECBlocks(42, new ECB(1, 84))),
+        new Version(43, 22, 48, 20, 22,
+            new ECBlocks(38, new ECB(1, 72))),
+        new Version(44, 24, 48, 22, 22,
+            new ECBlocks(41, new ECB(1, 80))),
+        new Version(45, 24, 64, 22, 14,
+            new ECBlocks(46, new ECB(1, 108))),
+        new Version(46, 26, 40, 24, 18,
+            new ECBlocks(38, new ECB(1, 70))),
+        new Version(47, 26, 48, 24, 22,
+            new ECBlocks(42, new ECB(1, 90))),
+        new Version(48, 26, 64, 24, 14,
+            new ECBlocks(50, new ECB(1, 118)))
     };
   }
 
diff --git a/core/src/main/java/com/google/zxing/datamatrix/detector/Detector.java b/core/src/main/java/com/google/zxing/datamatrix/detector/Detector.java
index 3759953..283ca7c 100644
--- a/core/src/main/java/com/google/zxing/datamatrix/detector/Detector.java
+++ b/core/src/main/java/com/google/zxing/datamatrix/detector/Detector.java
@@ -71,12 +71,12 @@ public final class Detector {
       dimensionRight += 1;
     }
 
-    if (4 * dimensionTop < 7 * dimensionRight && 4 * dimensionRight < 7 * dimensionTop) {
+    if (4 * dimensionTop < 6 * dimensionRight && 4 * dimensionRight < 6 * dimensionTop) {
       // The matrix is square
       dimensionTop = dimensionRight = Math.max(dimensionTop, dimensionRight);
     }
 
-    BitMatrix bits = sampleGrid(image, 
+    BitMatrix bits = sampleGrid(image,
                                 topLeft,
                                 bottomLeft,
                                 bottomRight,
@@ -219,11 +219,11 @@ public final class Detector {
     trRight = transitionsBetween(pointCs, pointD);
 
     ResultPoint candidate1 = new ResultPoint(
-      pointD.getX() + (pointC.getX() - pointB.getX()) / (trTop + 1),
-      pointD.getY() + (pointC.getY() - pointB.getY()) / (trTop + 1));
+        pointD.getX() + (pointC.getX() - pointB.getX()) / (trTop + 1),
+        pointD.getY() + (pointC.getY() - pointB.getY()) / (trTop + 1));
     ResultPoint candidate2 = new ResultPoint(
-      pointD.getX() + (pointA.getX() - pointB.getX()) / (trRight + 1),
-      pointD.getY() + (pointA.getY() - pointB.getY()) / (trRight + 1));
+        pointD.getX() + (pointA.getX() - pointB.getX()) / (trRight + 1),
+        pointD.getY() + (pointA.getY() - pointB.getY()) / (trRight + 1));
 
     if (!isValid(candidate1)) {
       if (isValid(candidate2)) {
@@ -301,7 +301,7 @@ public final class Detector {
   }
 
   private boolean isValid(ResultPoint p) {
-    return p.getX() >= 0 && p.getX() < image.getWidth() && p.getY() > 0 && p.getY() < image.getHeight();
+    return p.getX() >= 0 && p.getX() <= image.getWidth() - 1 && p.getY() > 0 && p.getY() <= image.getHeight() - 1;
   }
 
   private static BitMatrix sampleGrid(BitMatrix image,
@@ -343,7 +343,8 @@ public final class Detector {
     int fromX = (int) from.getX();
     int fromY = (int) from.getY();
     int toX = (int) to.getX();
-    int toY = (int) to.getY();
+    int toY = Math.min(image.getHeight() - 1, (int) to.getY());
+
     boolean steep = Math.abs(toY - fromY) > Math.abs(toX - fromX);
     if (steep) {
       int temp = fromX;
diff --git a/core/src/main/java/com/google/zxing/datamatrix/encoder/C40Encoder.java b/core/src/main/java/com/google/zxing/datamatrix/encoder/C40Encoder.java
index 02ff047..1194bdd 100644
--- a/core/src/main/java/com/google/zxing/datamatrix/encoder/C40Encoder.java
+++ b/core/src/main/java/com/google/zxing/datamatrix/encoder/C40Encoder.java
@@ -23,6 +23,40 @@ class C40Encoder implements Encoder {
     return HighLevelEncoder.C40_ENCODATION;
   }
 
+  void encodeMaximal(EncoderContext context) {
+    StringBuilder buffer = new StringBuilder();
+    int lastCharSize = 0;
+    int backtrackStartPosition = context.pos;
+    int backtrackBufferLength = 0;
+    while (context.hasMoreCharacters()) {
+      char c = context.getCurrentChar();
+      context.pos++;
+      lastCharSize = encodeChar(c, buffer);
+      if (buffer.length() % 3 == 0) {
+        backtrackStartPosition = context.pos;
+        backtrackBufferLength = buffer.length();
+      }
+    }
+    if (backtrackBufferLength != buffer.length()) {
+      int unwritten = (buffer.length() / 3) * 2;
+
+      int curCodewordCount = context.getCodewordCount() + unwritten + 1; // +1 for the latch to C40
+      context.updateSymbolInfo(curCodewordCount);
+      int available = context.getSymbolInfo().getDataCapacity() - curCodewordCount;
+      int rest = buffer.length() % 3;
+      if ((rest == 2 && available != 2) ||
+          (rest == 1 && (lastCharSize > 3 || available != 1))) {
+        buffer.setLength(backtrackBufferLength);
+        context.pos = backtrackStartPosition;
+      }
+    }
+    if (buffer.length() > 0) {
+      context.writeCodeword(HighLevelEncoder.LATCH_TO_C40);
+    }
+  
+    handleEOD(context, buffer);
+  }
+
   @Override
   public void encode(EncoderContext context) {
     //step C
diff --git a/core/src/main/java/com/google/zxing/datamatrix/encoder/HighLevelEncoder.java b/core/src/main/java/com/google/zxing/datamatrix/encoder/HighLevelEncoder.java
index 5e8520f..0016ce7 100644
--- a/core/src/main/java/com/google/zxing/datamatrix/encoder/HighLevelEncoder.java
+++ b/core/src/main/java/com/google/zxing/datamatrix/encoder/HighLevelEncoder.java
@@ -91,15 +91,15 @@ public final class HighLevelEncoder {
   /**
    * 05 Macro header
    */
-  private static final String MACRO_05_HEADER = "[)>\u001E05\u001D";
+  static final String MACRO_05_HEADER = "[)>\u001E05\u001D";
   /**
    * 06 Macro header
    */
-  private static final String MACRO_06_HEADER = "[)>\u001E06\u001D";
+  static final String MACRO_06_HEADER = "[)>\u001E06\u001D";
   /**
    * Macro trailer
    */
-  private static final String MACRO_TRAILER = "\u001E\u0004";
+  static final String MACRO_TRAILER = "\u001E\u0004";
 
   static final int ASCII_ENCODATION = 0;
   static final int C40_ENCODATION = 1;
@@ -111,20 +111,6 @@ public final class HighLevelEncoder {
   private HighLevelEncoder() {
   }
 
-  /*
-   * Converts the message to a byte array using the default encoding (cp437) as defined by the
-   * specification
-   *
-   * @param msg the message
-   * @return the byte array of the message
-   */
-
-  /*
-  public static byte[] getBytesForMessage(String msg) {
-    return msg.getBytes(Charset.forName("cp437")); //See 4.4.3 and annex B of ISO/IEC 15438:2001(E)
-  }
-   */
-
   private static char randomize253State(int codewordPosition) {
     int pseudoRandom = ((149 * codewordPosition) % 253) + 1;
     int tempVariable = PAD + pseudoRandom;
@@ -139,7 +125,7 @@ public final class HighLevelEncoder {
    * @return the encoded message (the char values range from 0 to 255)
    */
   public static String encodeHighLevel(String msg) {
-    return encodeHighLevel(msg, SymbolShapeHint.FORCE_NONE, null, null);
+    return encodeHighLevel(msg, SymbolShapeHint.FORCE_NONE, null, null, false);
   }
 
   /**
@@ -157,9 +143,29 @@ public final class HighLevelEncoder {
                                        SymbolShapeHint shape,
                                        Dimension minSize,
                                        Dimension maxSize) {
+    return encodeHighLevel(msg, shape, minSize, maxSize, false);
+  }
+  /**
+   * Performs message encoding of a DataMatrix message using the algorithm described in annex P
+   * of ISO/IEC 16022:2000(E).
+   *
+   * @param msg     the message
+   * @param shape   requested shape. May be {@code SymbolShapeHint.FORCE_NONE},
+   *                {@code SymbolShapeHint.FORCE_SQUARE} or {@code SymbolShapeHint.FORCE_RECTANGLE}.
+   * @param minSize the minimum symbol size constraint or null for no constraint
+   * @param maxSize the maximum symbol size constraint or null for no constraint
+   * @param forceC40 enforce C40 encoding
+   * @return the encoded message (the char values range from 0 to 255)
+   */
+  public static String encodeHighLevel(String msg,
+                                       SymbolShapeHint shape,
+                                       Dimension minSize,
+                                       Dimension maxSize,
+                                       boolean forceC40) {
     //the codewords 0..255 are encoded as Unicode characters
+    C40Encoder c40Encoder = new C40Encoder();
     Encoder[] encoders = {
-        new ASCIIEncoder(), new C40Encoder(), new TextEncoder(),
+        new ASCIIEncoder(), c40Encoder, new TextEncoder(),
         new X12Encoder(), new EdifactEncoder(),  new Base256Encoder()
     };
 
@@ -178,6 +184,13 @@ public final class HighLevelEncoder {
     }
 
     int encodingMode = ASCII_ENCODATION; //Default mode
+
+    if (forceC40) {
+      c40Encoder.encodeMaximal(context);
+      encodingMode = context.getNewEncoding();
+      context.resetEncoderSignal();
+    }
+
     while (context.hasMoreCharacters()) {
       encoders[encodingMode].encode(context);
       if (context.getNewEncoding() >= 0) {
@@ -207,6 +220,26 @@ public final class HighLevelEncoder {
   }
 
   static int lookAheadTest(CharSequence msg, int startpos, int currentMode) {
+    int newMode = lookAheadTestIntern(msg, startpos, currentMode);
+    if (currentMode == X12_ENCODATION && newMode == X12_ENCODATION) {
+      int endpos = Math.min(startpos + 3, msg.length());
+      for (int i = startpos; i < endpos; i++) {
+        if (!isNativeX12(msg.charAt(i))) {
+          return ASCII_ENCODATION;
+        }
+      }
+    } else if (currentMode == EDIFACT_ENCODATION && newMode == EDIFACT_ENCODATION) {
+      int endpos = Math.min(startpos + 4, msg.length());
+      for (int i = startpos; i < endpos; i++) {
+        if (!isNativeEDIFACT(msg.charAt(i))) {
+          return ASCII_ENCODATION;
+        }
+      }
+    }
+    return newMode;
+  }
+
+  static int lookAheadTestIntern(CharSequence msg, int startpos, int currentMode) {
     if (startpos >= msg.length()) {
       return currentMode;
     }
@@ -220,29 +253,32 @@ public final class HighLevelEncoder {
     }
 
     int charsProcessed = 0;
+    byte[] mins = new byte[6];
+    int[] intCharCounts = new int[6];
     while (true) {
       //step K
       if ((startpos + charsProcessed) == msg.length()) {
-        int min = Integer.MAX_VALUE;
-        byte[] mins = new byte[6];
-        int[] intCharCounts = new int[6];
-        min = findMinimums(charCounts, intCharCounts, min, mins);
+        Arrays.fill(mins, (byte) 0);
+        Arrays.fill(intCharCounts, 0);
+        int min = findMinimums(charCounts, intCharCounts, Integer.MAX_VALUE, mins);
         int minCount = getMinimumCount(mins);
 
         if (intCharCounts[ASCII_ENCODATION] == min) {
           return ASCII_ENCODATION;
         }
-        if (minCount == 1 && mins[BASE256_ENCODATION] > 0) {
-          return BASE256_ENCODATION;
-        }
-        if (minCount == 1 && mins[EDIFACT_ENCODATION] > 0) {
-          return EDIFACT_ENCODATION;
-        }
-        if (minCount == 1 && mins[TEXT_ENCODATION] > 0) {
-          return TEXT_ENCODATION;
-        }
-        if (minCount == 1 && mins[X12_ENCODATION] > 0) {
-          return X12_ENCODATION;
+        if (minCount == 1) {
+          if (mins[BASE256_ENCODATION] > 0) {
+            return BASE256_ENCODATION;
+          }
+          if (mins[EDIFACT_ENCODATION] > 0) {
+            return EDIFACT_ENCODATION;
+          }
+          if (mins[TEXT_ENCODATION] > 0) {
+            return TEXT_ENCODATION;
+          }
+          if (mins[X12_ENCODATION] > 0) {
+            return X12_ENCODATION;
+          }
         }
         return C40_ENCODATION;
       }
@@ -306,35 +342,37 @@ public final class HighLevelEncoder {
 
       //step R
       if (charsProcessed >= 4) {
-        int[] intCharCounts = new int[6];
-        byte[] mins = new byte[6];
+        Arrays.fill(mins, (byte) 0);
+        Arrays.fill(intCharCounts, 0);
         findMinimums(charCounts, intCharCounts, Integer.MAX_VALUE, mins);
-        int minCount = getMinimumCount(mins);
 
-        if (intCharCounts[ASCII_ENCODATION] < intCharCounts[BASE256_ENCODATION]
-            && intCharCounts[ASCII_ENCODATION] < intCharCounts[C40_ENCODATION]
-            && intCharCounts[ASCII_ENCODATION] < intCharCounts[TEXT_ENCODATION]
-            && intCharCounts[ASCII_ENCODATION] < intCharCounts[X12_ENCODATION]
-            && intCharCounts[ASCII_ENCODATION] < intCharCounts[EDIFACT_ENCODATION]) {
+        if (intCharCounts[ASCII_ENCODATION] < min(intCharCounts[BASE256_ENCODATION],
+              intCharCounts[C40_ENCODATION], intCharCounts[TEXT_ENCODATION], intCharCounts[X12_ENCODATION],
+              intCharCounts[EDIFACT_ENCODATION])) {
           return ASCII_ENCODATION;
         }
-        if (intCharCounts[BASE256_ENCODATION] < intCharCounts[ASCII_ENCODATION]
-            || (mins[C40_ENCODATION] + mins[TEXT_ENCODATION] + mins[X12_ENCODATION] + mins[EDIFACT_ENCODATION]) == 0) {
+        if (intCharCounts[BASE256_ENCODATION] < intCharCounts[ASCII_ENCODATION] ||
+              intCharCounts[BASE256_ENCODATION] + 1 < min(intCharCounts[C40_ENCODATION],
+              intCharCounts[TEXT_ENCODATION], intCharCounts[X12_ENCODATION], intCharCounts[EDIFACT_ENCODATION])) {
           return BASE256_ENCODATION;
         }
-        if (minCount == 1 && mins[EDIFACT_ENCODATION] > 0) {
+        if (intCharCounts[EDIFACT_ENCODATION] + 1 < min(intCharCounts[BASE256_ENCODATION],
+              intCharCounts[C40_ENCODATION] , intCharCounts[TEXT_ENCODATION] , intCharCounts[X12_ENCODATION],
+              intCharCounts[ASCII_ENCODATION])) {
           return EDIFACT_ENCODATION;
         }
-        if (minCount == 1 && mins[TEXT_ENCODATION] > 0) {
+        if (intCharCounts[TEXT_ENCODATION] + 1 < min(intCharCounts[BASE256_ENCODATION],
+              intCharCounts[C40_ENCODATION] , intCharCounts[EDIFACT_ENCODATION] , intCharCounts[X12_ENCODATION],
+              intCharCounts[ASCII_ENCODATION])) {
           return TEXT_ENCODATION;
         }
-        if (minCount == 1 && mins[X12_ENCODATION] > 0) {
+        if (intCharCounts[X12_ENCODATION] + 1 < min(intCharCounts[BASE256_ENCODATION],
+              intCharCounts[C40_ENCODATION] , intCharCounts[EDIFACT_ENCODATION] , intCharCounts[TEXT_ENCODATION],
+              intCharCounts[ASCII_ENCODATION])) {
           return X12_ENCODATION;
         }
-        if (intCharCounts[C40_ENCODATION] + 1 < intCharCounts[ASCII_ENCODATION]
-            && intCharCounts[C40_ENCODATION] + 1 < intCharCounts[BASE256_ENCODATION]
-            && intCharCounts[C40_ENCODATION] + 1 < intCharCounts[EDIFACT_ENCODATION]
-            && intCharCounts[C40_ENCODATION] + 1 < intCharCounts[TEXT_ENCODATION]) {
+        if (intCharCounts[C40_ENCODATION] + 1 < min(intCharCounts[ASCII_ENCODATION],
+              intCharCounts[BASE256_ENCODATION] , intCharCounts[EDIFACT_ENCODATION] , intCharCounts[TEXT_ENCODATION])) {
           if (intCharCounts[C40_ENCODATION] < intCharCounts[X12_ENCODATION]) {
             return C40_ENCODATION;
           }
@@ -357,18 +395,23 @@ public final class HighLevelEncoder {
     }
   }
 
+  private static int min(int f1, int f2, int f3, int f4, int f5) {
+    return Math.min(min(f1, f2, f3, f4),f5);
+  }
+
+  private static int min(int f1, int f2, int f3, int f4) {
+    return Math.min(f1, Math.min(f2, Math.min(f3, f4)));
+  }
+
   private static int findMinimums(float[] charCounts, int[] intCharCounts, int min, byte[] mins) {
-    Arrays.fill(mins, (byte) 0);
     for (int i = 0; i < 6; i++) {
-      intCharCounts[i] = (int) Math.ceil(charCounts[i]);
-      int current = intCharCounts[i];
+      int current = (intCharCounts[i] = (int) Math.ceil(charCounts[i]));
       if (min > current) {
         min = current;
         Arrays.fill(mins, (byte) 0);
       }
       if (min == current) {
         mins[i]++;
-
       }
     }
     return min;
@@ -390,15 +433,15 @@ public final class HighLevelEncoder {
     return ch >= 128 && ch <= 255;
   }
 
-  private static boolean isNativeC40(char ch) {
+  static boolean isNativeC40(char ch) {
     return (ch == ' ') || (ch >= '0' && ch <= '9') || (ch >= 'A' && ch <= 'Z');
   }
 
-  private static boolean isNativeText(char ch) {
+  static boolean isNativeText(char ch) {
     return (ch == ' ') || (ch >= '0' && ch <= '9') || (ch >= 'a' && ch <= 'z');
   }
 
-  private static boolean isNativeX12(char ch) {
+  static boolean isNativeX12(char ch) {
     return isX12TermSep(ch) || (ch == ' ') || (ch >= '0' && ch <= '9') || (ch >= 'A' && ch <= 'Z');
   }
 
@@ -408,7 +451,7 @@ public final class HighLevelEncoder {
         || (ch == '>');
   }
 
-  private static boolean isNativeEDIFACT(char ch) {
+  static boolean isNativeEDIFACT(char ch) {
     return ch >= ' ' && ch <= '^';
   }
 
@@ -424,20 +467,12 @@ public final class HighLevelEncoder {
    * @return the requested character count
    */
   public static int determineConsecutiveDigitCount(CharSequence msg, int startpos) {
-    int count = 0;
     int len = msg.length();
     int idx = startpos;
-    if (idx < len) {
-      char ch = msg.charAt(idx);
-      while (isDigit(ch) && idx < len) {
-        count++;
-        idx++;
-        if (idx < len) {
-          ch = msg.charAt(idx);
-        }
-      }
+    while (idx < len && isDigit(msg.charAt(idx))) {
+      idx++;
     }
-    return count;
+    return idx - startpos;
   }
 
   static void illegalCharacter(char c) {
diff --git a/core/src/main/java/com/google/zxing/datamatrix/encoder/MinimalEncoder.java b/core/src/main/java/com/google/zxing/datamatrix/encoder/MinimalEncoder.java
new file mode 100755
index 0000000..edac497
--- /dev/null
+++ b/core/src/main/java/com/google/zxing/datamatrix/encoder/MinimalEncoder.java
@@ -0,0 +1,1044 @@
+/*
+ * Copyright 2021 ZXing authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.zxing.datamatrix.encoder;
+
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.List;
+
+import com.google.zxing.common.MinimalECIInput;
+
+/**
+ * Encoder that encodes minimally
+ *
+ * Algorithm:
+ *
+ * Uses Dijkstra to produce mathematically minimal encodings that are in some cases smaller than the results produced
+ * by the algorithm described in annex S in the specification ISO/IEC 16022:200(E). The biggest improvment of this
+ * algorithm over that one is the case when the algorithm enters the most inefficient mode, the B256 mode. The
+ * algorithm from the specification algorithm will exit this mode only if it encounters digits so that arbitrarily
+ * inefficient results can be produced if the postfix contains no digits.
+ *
+ * Multi ECI support and ECI switching:
+ *
+ * For multi language content the algorithm selects the most compact representation using ECI modes. Note that unlike
+ * the compaction algorithm used for QR-Codes, this implementation operates in two stages and therfore is not
+ * mathematically optimal. In the first stage, the input string is encoded minimally as a stream of ECI character set
+ * selectors and bytes encoded in the selected encoding. In this stage the algorithm might for example decide to
+ * encode ocurrences of the characters "\u0150\u015C" (O-double-acute, S-circumflex) in UTF-8 by a single ECI or
+ * alternatively by multiple ECIs that switch between IS0-8859-2 and ISO-8859-3 (e.g. in the case that the input
+ * contains many * characters from ISO-8859-2 (Latin 2) and few from ISO-8859-3 (Latin 3)).
+ * In a second stage this stream of ECIs and bytes is minimally encoded using the various Data Matrix encoding modes.
+ * While both stages encode mathematically minimally it is not ensured that the result is mathematically minimal since
+ * the size growth for inserting an ECI in the first stage can only be approximated as the first stage does not know
+ * in which mode the ECI will occur in the second stage (may, or may not require an extra latch to ASCII depending on
+ * the current mode). The reason for this shortcoming are difficulties in implementing it in a straightforward and
+ * readable manner.
+ *
+ * GS1 support
+ *
+ * FNC1 delimiters can be encoded in the input string by using the FNC1 character specified in the encoding function.
+ * When a FNC1 character is specified then a leading FNC1 will be encoded and all ocurrences of delimiter characters
+ * while result in FNC1 codewords in the symbol.
+ *
+ * @author Alex Geller
+ */
+public final class MinimalEncoder {
+
+  enum Mode {
+    ASCII,
+    C40,
+    TEXT,
+    X12,
+    EDF,
+    B256
+  }
+  static final char[] C40_SHIFT2_CHARS = {'!', '"', '#', '$', '%', '&', '\'', '(', ')', '*',  '+', ',', '-', '.', '/',
+                                          ':', ';', '<', '=', '>', '?',  '@', '[', '\\', ']', '^', '_' };
+
+
+  private MinimalEncoder() {
+  }
+
+  static boolean isExtendedASCII(char ch, int fnc1) {
+    return ch != fnc1 && ch >= 128 && ch <= 255;
+  }
+
+  private static boolean isInC40Shift1Set(char ch) {
+    return ch <= 31;
+  }
+
+  private static boolean isInC40Shift2Set(char ch, int fnc1) {
+    for (char c40Shift2Char : C40_SHIFT2_CHARS) {
+      if (c40Shift2Char == ch) {
+        return true;
+      }
+    }
+    return ch == fnc1;
+  }
+
+  private static boolean isInTextShift1Set(char ch) {
+    return isInC40Shift1Set(ch);
+  }
+
+  private static boolean isInTextShift2Set(char ch, int fnc1) {
+    return isInC40Shift2Set(ch, fnc1);
+  }
+
+  /**
+   * Performs message encoding of a DataMatrix message
+   *
+   * @param msg the message
+   * @return the encoded message (the char values range from 0 to 255)
+   */
+  public static String encodeHighLevel(String msg) {
+    return encodeHighLevel(msg, null, -1, SymbolShapeHint.FORCE_NONE);
+  }
+
+  /**
+   * Performs message encoding of a DataMatrix message
+   *
+   * @param msg the message
+   * @param priorityCharset The preferred {@link Charset}. When the value of the argument is null, the algorithm
+   *   chooses charsets that leads to a minimal representation. Otherwise the algorithm will use the priority
+   *   charset to encode any character in the input that can be encoded by it if the charset is among the
+   *   supported charsets.
+   * @param fnc1 denotes the character in the input that represents the FNC1 character or -1 if this is not a GS1
+   *   bar code. If the value is not -1 then a FNC1 is also prepended.
+   * @param shape requested shape.
+   * @return the encoded message (the char values range from 0 to 255)
+   */
+  public static String encodeHighLevel(String msg, Charset priorityCharset, int fnc1, SymbolShapeHint shape) {
+    int macroId = 0;
+    if (msg.startsWith(HighLevelEncoder.MACRO_05_HEADER) && msg.endsWith(HighLevelEncoder.MACRO_TRAILER)) {
+      macroId = 5;
+      msg = msg.substring(HighLevelEncoder.MACRO_05_HEADER.length(), msg.length() - 2);
+    } else if (msg.startsWith(HighLevelEncoder.MACRO_06_HEADER) && msg.endsWith(HighLevelEncoder.MACRO_TRAILER)) {
+      macroId = 6;
+      msg = msg.substring(HighLevelEncoder.MACRO_06_HEADER.length(), msg.length() - 2);
+    }
+    return new String(encode(msg, priorityCharset, fnc1, shape, macroId), StandardCharsets.ISO_8859_1);
+  }
+
+  /**
+   * Encodes input minimally and returns an array of the codewords
+   *
+   * @param input The string to encode
+   * @param priorityCharset The preferred {@link Charset}. When the value of the argument is null, the algorithm
+   *   chooses charsets that leads to a minimal representation. Otherwise the algorithm will use the priority
+   *   charset to encode any character in the input that can be encoded by it if the charset is among the
+   *   supported charsets.
+   * @param fnc1 denotes the character in the input that represents the FNC1 character or -1 if this is not a GS1
+   *   bar code. If the value is not -1 then a FNC1 is also prepended.
+   * @param shape requested shape.
+   * @param macroId Prepends the specified macro function in case that a value of 5 or 6 is specified.
+   * @return An array of bytes representing the codewords of a minimal encoding.
+   */
+  static byte[] encode(String input, Charset priorityCharset, int fnc1, SymbolShapeHint shape, int macroId) {
+    return encodeMinimally(new Input(input, priorityCharset, fnc1, shape, macroId)).getBytes();
+  }
+
+  static void addEdge(Edge[][] edges, Edge edge) {
+    int vertexIndex = edge.fromPosition + edge.characterLength;
+    if (edges[vertexIndex][edge.getEndMode().ordinal()] == null ||
+        edges[vertexIndex][edge.getEndMode().ordinal()].cachedTotalSize > edge.cachedTotalSize) {
+      edges[vertexIndex][edge.getEndMode().ordinal()] = edge;
+    }
+  }
+
+  /** @return the number of words in which the string starting at from can be encoded in c40 or text mode.
+   *  The number of characters encoded is returned in characterLength.
+   *  The number of characters encoded is also minimal in the sense that the algorithm stops as soon
+   *  as a character encoding fills a C40 word competely (three C40 values). An exception is at the
+   *  end of the string where two C40 values are allowed (according to the spec the third c40 value
+   *  is filled  with 0 (Shift 1) in this case).
+   */
+  static int getNumberOfC40Words(Input input, int from, boolean c40,int[] characterLength) {
+    int thirdsCount = 0;
+    for (int i = from; i < input.length(); i++) {
+      if (input.isECI(i)) {
+        characterLength[0] = 0;
+        return 0;
+      }
+      char ci = input.charAt(i);
+      if (c40 && HighLevelEncoder.isNativeC40(ci) || !c40 && HighLevelEncoder.isNativeText(ci)) {
+        thirdsCount++; //native
+      } else if (!isExtendedASCII(ci, input.getFNC1Character())) {
+        thirdsCount += 2; //shift
+      } else {
+        int asciiValue = ci & 0xff;
+        if (asciiValue >= 128 && (c40 && HighLevelEncoder.isNativeC40((char) (asciiValue - 128)) ||
+                                  !c40 && HighLevelEncoder.isNativeText((char) (asciiValue - 128)))) {
+          thirdsCount += 3; // shift, Upper shift
+        } else {
+          thirdsCount += 4; // shift, Upper shift, shift
+        }
+      }
+
+      if (thirdsCount % 3 == 0 || ((thirdsCount - 2) % 3 == 0 && i + 1 == input.length())) {
+        characterLength[0] = i - from + 1;
+        return (int) Math.ceil(((double) thirdsCount) / 3.0);
+      }
+    }
+    characterLength[0] = 0;
+    return 0;
+  }
+
+  static void addEdges(Input input, Edge[][] edges, int from, Edge previous) {
+
+    if (input.isECI(from)) {
+      addEdge(edges, new Edge(input, Mode.ASCII, from, 1, previous));
+      return;
+    }
+
+    char ch = input.charAt(from);
+    if (previous == null || previous.getEndMode() != Mode.EDF) { //not possible to unlatch a full EDF edge to something
+                                                                 //else
+      if (HighLevelEncoder.isDigit(ch) && input.haveNCharacters(from, 2) &&
+          HighLevelEncoder.isDigit(input.charAt(from + 1))) {
+        // two digits ASCII encoded
+        addEdge(edges, new Edge(input, Mode.ASCII, from, 2, previous));
+      } else {
+        // one ASCII encoded character or an extended character via Upper Shift
+        addEdge(edges, new Edge(input, Mode.ASCII, from, 1, previous));
+      }
+
+      Mode[] modes = {Mode.C40, Mode.TEXT};
+      for (Mode mode : modes) {
+        int[] characterLength = new int[1];
+        if (getNumberOfC40Words(input, from, mode == Mode.C40, characterLength) > 0) {
+          addEdge(edges, new Edge(input, mode, from, characterLength[0], previous));
+        }
+      }
+
+      if (input.haveNCharacters(from,3) &&
+          HighLevelEncoder.isNativeX12(input.charAt(from)) &&
+          HighLevelEncoder.isNativeX12(input.charAt(from + 1)) &&
+          HighLevelEncoder.isNativeX12(input.charAt(from + 2))) {
+        addEdge(edges, new Edge(input, Mode.X12, from, 3, previous));
+      }
+
+      addEdge(edges, new Edge(input, Mode.B256, from, 1, previous));
+    }
+
+    //We create 4 EDF edges,  with 1, 2 3 or 4 characters length. The fourth normally doesn't have a latch to ASCII
+    //unless it is 2 characters away from the end of the input.
+    int i;
+    for (i = 0; i < 3; i++) {
+      int pos = from + i;
+      if (input.haveNCharacters(pos,1) && HighLevelEncoder.isNativeEDIFACT(input.charAt(pos))) {
+        addEdge(edges, new Edge(input, Mode.EDF, from, i + 1, previous));
+      } else {
+        break;
+      }
+    }
+    if (i == 3 && input.haveNCharacters(from, 4) && HighLevelEncoder.isNativeEDIFACT(input.charAt(from + 3))) {
+      addEdge(edges, new Edge(input, Mode.EDF, from, 4, previous));
+    }
+  }
+  static Result encodeMinimally(Input input) {
+
+    @SuppressWarnings("checkstyle:lineLength")
+    /* The minimal encoding is computed by Dijkstra. The acyclic graph is modeled as follows:
+     * A vertex represents a combination of a position in the input and an encoding mode where position 0
+     * denotes the position left of the first character, 1 the position left of the second character and so on.
+     * Likewise the end vertices are located after the last character at position input.length().
+     * For any position there might be up to six vertices, one for each of the encoding types ASCII, C40, TEXT, X12,
+     * EDF and B256.
+     *
+     * As an example consider the input string "ABC123" then at position 0 there is only one vertex with the default
+     * ASCII encodation. At position 3 there might be vertices for the types ASCII, C40, X12, EDF and B256.
+     *
+     * An edge leading to such a vertex encodes one or more of the characters left of the position that the vertex
+     * represents. It encodes the characters in the encoding mode of the vertex that it ends on. In other words,
+     * all edges leading to a particular vertex encode the same characters (the length of the suffix can vary) using the same
+     * encoding mode.
+     * As an example consider the input string "ABC123" and the vertex (4,EDF). Possible edges leading to this vertex
+     * are:
+     *   (0,ASCII)  --EDF(ABC1)--> (4,EDF)
+     *   (1,ASCII)  --EDF(BC1)-->  (4,EDF)
+     *   (1,B256)   --EDF(BC1)-->  (4,EDF)
+     *   (1,EDF)    --EDF(BC1)-->  (4,EDF)
+     *   (2,ASCII)  --EDF(C1)-->   (4,EDF)
+     *   (2,B256)   --EDF(C1)-->   (4,EDF)
+     *   (2,EDF)    --EDF(C1)-->   (4,EDF)
+     *   (3,ASCII)  --EDF(1)-->    (4,EDF)
+     *   (3,B256)   --EDF(1)-->    (4,EDF)
+     *   (3,EDF)    --EDF(1)-->    (4,EDF)
+     *   (3,C40)    --EDF(1)-->    (4,EDF)
+     *   (3,X12)    --EDF(1)-->    (4,EDF)
+     *
+     * The edges leading to a vertex are stored in such a way that there is a fast way to enumerate the edges ending
+     * on a particular vertex.
+     *
+     * The algorithm processes the vertices in order of their position thereby performing the following:
+     *
+     * For every vertex at position i the algorithm enumerates the edges ending on the vertex and removes all but the
+     * shortest from that list.
+     * Then it processes the vertices for the position i+1. If i+1 == input.length() then the algorithm ends
+     * and chooses the the edge with the smallest size from any of the edges leading to vertices at this position.
+     * Otherwise the algorithm computes all possible outgoing edges for the vertices at the position i+1
+     *
+     * Examples:
+     * The process is illustrated by showing the graph (edges) after each iteration from left to right over the input:
+     * An edge is drawn as follows "(" + fromVertex + ") -- " + encodingMode + "(" + encodedInput + ") (" +
+     * accumulatedSize + ") --> (" + toVertex + ")"
+     *
+     * Example 1 encoding the string "ABCDEFG":
+     *
+     *
+     * Situation after adding edges to the start vertex (0,ASCII)
+     * (0,ASCII) ASCII(A) (1) --> (1,ASCII)
+     * (0,ASCII) B256(A) (3) --> (1,B256)
+     * (0,ASCII) EDF(AB) (4) --> (2,EDF)
+     * (0,ASCII) C40(ABC) (3) --> (3,C40)
+     * (0,ASCII) TEXT(ABC) (5) --> (3,TEXT)
+     * (0,ASCII) X12(ABC) (3) --> (3,X12)
+     * (0,ASCII) EDF(ABC) (4) --> (3,EDF)
+     * (0,ASCII) EDF(ABCD) (4) --> (4,EDF)
+     *
+     * Situation after adding edges to vertices at position 1
+     * (0,ASCII) ASCII(A) (1) --> (1,ASCII)
+     * (0,ASCII) B256(A) (3) --> (1,B256)
+     * (0,ASCII) EDF(AB) (4) --> (2,EDF)
+     * (0,ASCII) C40(ABC) (3) --> (3,C40)
+     * (0,ASCII) TEXT(ABC) (5) --> (3,TEXT)
+     * (0,ASCII) X12(ABC) (3) --> (3,X12)
+     * (0,ASCII) EDF(ABC) (4) --> (3,EDF)
+     * (0,ASCII) EDF(ABCD) (4) --> (4,EDF)
+     * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII)
+     * (0,ASCII) ASCII(A) (1) --> (1,ASCII) B256(B) (4) --> (2,B256)
+     * (0,ASCII) ASCII(A) (1) --> (1,ASCII) EDF(BC) (5) --> (3,EDF)
+     * (0,ASCII) ASCII(A) (1) --> (1,ASCII) C40(BCD) (4) --> (4,C40)
+     * (0,ASCII) ASCII(A) (1) --> (1,ASCII) TEXT(BCD) (6) --> (4,TEXT)
+     * (0,ASCII) ASCII(A) (1) --> (1,ASCII) X12(BCD) (4) --> (4,X12)
+     * (0,ASCII) ASCII(A) (1) --> (1,ASCII) EDF(BCD) (5) --> (4,EDF)
+     * (0,ASCII) ASCII(A) (1) --> (1,ASCII) EDF(BCDE) (5) --> (5,EDF)
+     * (0,ASCII) B256(A) (3) --> (1,B256) ASCII(B) (4) --> (2,ASCII)
+     * (0,ASCII) B256(A) (3) --> (1,B256) B256(B) (3) --> (2,B256)
+     * (0,ASCII) B256(A) (3) --> (1,B256) EDF(BC) (6) --> (3,EDF)
+     * (0,ASCII) B256(A) (3) --> (1,B256) C40(BCD) (5) --> (4,C40)
+     * (0,ASCII) B256(A) (3) --> (1,B256) TEXT(BCD) (7) --> (4,TEXT)
+     * (0,ASCII) B256(A) (3) --> (1,B256) X12(BCD) (5) --> (4,X12)
+     * (0,ASCII) B256(A) (3) --> (1,B256) EDF(BCD) (6) --> (4,EDF)
+     * (0,ASCII) B256(A) (3) --> (1,B256) EDF(BCDE) (6) --> (5,EDF)
+     *
+     * Edge "(1,ASCII) ASCII(B) (2) --> (2,ASCII)" is minimal for the vertex (2,ASCII) so that edge "(1,B256) ASCII(B) (4) --> (2,ASCII)" is removed.
+     * Edge "(1,B256) B256(B) (3) --> (2,B256)" is minimal for the vertext (2,B256) so that the edge "(1,ASCII) B256(B) (4) --> (2,B256)" is removed.
+     *
+     * Situation after adding edges to vertices at position 2
+     * (0,ASCII) ASCII(A) (1) --> (1,ASCII)
+     * (0,ASCII) B256(A) (3) --> (1,B256)
+     * (0,ASCII) EDF(AB) (4) --> (2,EDF)
+     * (0,ASCII) C40(ABC) (3) --> (3,C40)
+     * (0,ASCII) TEXT(ABC) (5) --> (3,TEXT)
+     * (0,ASCII) X12(ABC) (3) --> (3,X12)
+     * (0,ASCII) EDF(ABC) (4) --> (3,EDF)
+     * (0,ASCII) EDF(ABCD) (4) --> (4,EDF)
+     * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII)
+     * (0,ASCII) ASCII(A) (1) --> (1,ASCII) EDF(BC) (5) --> (3,EDF)
+     * (0,ASCII) ASCII(A) (1) --> (1,ASCII) C40(BCD) (4) --> (4,C40)
+     * (0,ASCII) ASCII(A) (1) --> (1,ASCII) TEXT(BCD) (6) --> (4,TEXT)
+     * (0,ASCII) ASCII(A) (1) --> (1,ASCII) X12(BCD) (4) --> (4,X12)
+     * (0,ASCII) ASCII(A) (1) --> (1,ASCII) EDF(BCD) (5) --> (4,EDF)
+     * (0,ASCII) ASCII(A) (1) --> (1,ASCII) EDF(BCDE) (5) --> (5,EDF)
+     * (0,ASCII) B256(A) (3) --> (1,B256) B256(B) (3) --> (2,B256)
+     * (0,ASCII) B256(A) (3) --> (1,B256) EDF(BC) (6) --> (3,EDF)
+     * (0,ASCII) B256(A) (3) --> (1,B256) C40(BCD) (5) --> (4,C40)
+     * (0,ASCII) B256(A) (3) --> (1,B256) TEXT(BCD) (7) --> (4,TEXT)
+     * (0,ASCII) B256(A) (3) --> (1,B256) X12(BCD) (5) --> (4,X12)
+     * (0,ASCII) B256(A) (3) --> (1,B256) EDF(BCD) (6) --> (4,EDF)
+     * (0,ASCII) B256(A) (3) --> (1,B256) EDF(BCDE) (6) --> (5,EDF)
+     * (0,ASCII) EDF(AB) (4) --> (2,EDF) ASCII(C) (5) --> (3,ASCII)
+     * (0,ASCII) EDF(AB) (4) --> (2,EDF) B256(C) (6) --> (3,B256)
+     * (0,ASCII) EDF(AB) (4) --> (2,EDF) EDF(CD) (7) --> (4,EDF)
+     * (0,ASCII) EDF(AB) (4) --> (2,EDF) C40(CDE) (6) --> (5,C40)
+     * (0,ASCII) EDF(AB) (4) --> (2,EDF) TEXT(CDE) (8) --> (5,TEXT)
+     * (0,ASCII) EDF(AB) (4) --> (2,EDF) X12(CDE) (6) --> (5,X12)
+     * (0,ASCII) EDF(AB) (4) --> (2,EDF) EDF(CDE) (7) --> (5,EDF)
+     * (0,ASCII) EDF(AB) (4) --> (2,EDF) EDF(CDEF) (7) --> (6,EDF)
+     * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII) ASCII(C) (3) --> (3,ASCII)
+     * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII) B256(C) (5) --> (3,B256)
+     * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII) EDF(CD) (6) --> (4,EDF)
+     * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII) C40(CDE) (5) --> (5,C40)
+     * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII) TEXT(CDE) (7) --> (5,TEXT)
+     * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII) X12(CDE) (5) --> (5,X12)
+     * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII) EDF(CDE) (6) --> (5,EDF)
+     * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII) EDF(CDEF) (6) --> (6,EDF)
+     * (0,ASCII) B256(A) (3) --> (1,B256) B256(B) (3) --> (2,B256) ASCII(C) (4) --> (3,ASCII)
+     * (0,ASCII) B256(A) (3) --> (1,B256) B256(B) (3) --> (2,B256) B256(C) (4) --> (3,B256)
+     * (0,ASCII) B256(A) (3) --> (1,B256) B256(B) (3) --> (2,B256) EDF(CD) (6) --> (4,EDF)
+     * (0,ASCII) B256(A) (3) --> (1,B256) B256(B) (3) --> (2,B256) C40(CDE) (5) --> (5,C40)
+     * (0,ASCII) B256(A) (3) --> (1,B256) B256(B) (3) --> (2,B256) TEXT(CDE) (7) --> (5,TEXT)
+     * (0,ASCII) B256(A) (3) --> (1,B256) B256(B) (3) --> (2,B256) X12(CDE) (5) --> (5,X12)
+     * (0,ASCII) B256(A) (3) --> (1,B256) B256(B) (3) --> (2,B256) EDF(CDE) (6) --> (5,EDF)
+     * (0,ASCII) B256(A) (3) --> (1,B256) B256(B) (3) --> (2,B256) EDF(CDEF) (6) --> (6,EDF)
+     *
+     * Edge "(2,ASCII) ASCII(C) (3) --> (3,ASCII)" is minimal for the vertex (3,ASCII) so that edges "(2,EDF) ASCII(C) (5) --> (3,ASCII)"
+     * and "(2,B256) ASCII(C) (4) --> (3,ASCII)" can be removed.
+     * Edge "(0,ASCII) EDF(ABC) (4) --> (3,EDF)" is minimal for the vertex (3,EDF) so that edges "(1,ASCII) EDF(BC) (5) --> (3,EDF)"
+     * and "(1,B256) EDF(BC) (6) --> (3,EDF)" can be removed.
+     * Edge "(2,B256) B256(C) (4) --> (3,B256)" is minimal for the vertex (3,B256) so that edges "(2,ASCII) B256(C) (5) --> (3,B256)"
+     * and "(2,EDF) B256(C) (6) --> (3,B256)" can be removed.
+     *
+     * This continues for vertices 3 thru 7
+     *
+     * Situation after adding edges to vertices at position 7
+     * (0,ASCII) ASCII(A) (1) --> (1,ASCII)
+     * (0,ASCII) B256(A) (3) --> (1,B256)
+     * (0,ASCII) EDF(AB) (4) --> (2,EDF)
+     * (0,ASCII) C40(ABC) (3) --> (3,C40)
+     * (0,ASCII) TEXT(ABC) (5) --> (3,TEXT)
+     * (0,ASCII) X12(ABC) (3) --> (3,X12)
+     * (0,ASCII) EDF(ABC) (4) --> (3,EDF)
+     * (0,ASCII) EDF(ABCD) (4) --> (4,EDF)
+     * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII)
+     * (0,ASCII) ASCII(A) (1) --> (1,ASCII) C40(BCD) (4) --> (4,C40)
+     * (0,ASCII) ASCII(A) (1) --> (1,ASCII) TEXT(BCD) (6) --> (4,TEXT)
+     * (0,ASCII) ASCII(A) (1) --> (1,ASCII) X12(BCD) (4) --> (4,X12)
+     * (0,ASCII) ASCII(A) (1) --> (1,ASCII) EDF(BCDE) (5) --> (5,EDF)
+     * (0,ASCII) B256(A) (3) --> (1,B256) B256(B) (3) --> (2,B256)
+     * (0,ASCII) C40(ABC) (3) --> (3,C40) C40(DEF) (5) --> (6,C40)
+     * (0,ASCII) X12(ABC) (3) --> (3,X12) X12(DEF) (5) --> (6,X12)
+     * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII) ASCII(C) (3) --> (3,ASCII)
+     * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII) C40(CDE) (5) --> (5,C40)
+     * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII) TEXT(CDE) (7) --> (5,TEXT)
+     * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII) X12(CDE) (5) --> (5,X12)
+     * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII) EDF(CDEF) (6) --> (6,EDF)
+     * (0,ASCII) ASCII(A) (1) --> (1,ASCII) C40(BCD) (4) --> (4,C40) C40(EFG) (6) --> (7,C40)    //Solution 1
+     * (0,ASCII) ASCII(A) (1) --> (1,ASCII) X12(BCD) (4) --> (4,X12) X12(EFG) (6) --> (7,X12)    //Solution 2
+     * (0,ASCII) B256(A) (3) --> (1,B256) B256(B) (3) --> (2,B256) B256(C) (4) --> (3,B256)
+     * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII) ASCII(C) (3) --> (3,ASCII) ASCII(D) (4) --> (4,ASCII)
+     * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII) ASCII(C) (3) --> (3,ASCII) TEXT(DEF) (8) --> (6,TEXT)
+     * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII) ASCII(C) (3) --> (3,ASCII) EDF(DEFG) (7) --> (7,EDF)
+     * (0,ASCII) B256(A) (3) --> (1,B256) B256(B) (3) --> (2,B256) B256(C) (4) --> (3,B256) B256(D) (5) --> (4,B256)
+     * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII) ASCII(C) (3) --> (3,ASCII) ASCII(D) (4) --> (4,ASCII) ASCII(E) (5) --> (5,ASCII)
+     * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII) ASCII(C) (3) --> (3,ASCII) ASCII(D) (4) --> (4,ASCII) TEXT(EFG) (9) --> (7,TEXT)
+     * (0,ASCII) B256(A) (3) --> (1,B256) B256(B) (3) --> (2,B256) B256(C) (4) --> (3,B256) B256(D) (5) --> (4,B256) B256(E) (6) --> (5,B256)
+     * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII) ASCII(C) (3) --> (3,ASCII) ASCII(D) (4) --> (4,ASCII) ASCII(E) (5) --> (5,ASCII) ASCII(F) (6) --> (6,ASCII)
+     * (0,ASCII) B256(A) (3) --> (1,B256) B256(B) (3) --> (2,B256) B256(C) (4) --> (3,B256) B256(D) (5) --> (4,B256) B256(E) (6) --> (5,B256) B256(F) (7) --> (6,B256)
+     * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII) ASCII(C) (3) --> (3,ASCII) ASCII(D) (4) --> (4,ASCII) ASCII(E) (5) --> (5,ASCII) ASCII(F) (6) --> (6,ASCII) ASCII(G) (7) --> (7,ASCII)
+     * (0,ASCII) B256(A) (3) --> (1,B256) B256(B) (3) --> (2,B256) B256(C) (4) --> (3,B256) B256(D) (5) --> (4,B256) B256(E) (6) --> (5,B256) B256(F) (7) --> (6,B256) B256(G) (8) --> (7,B256)
+     *
+     * Hence a minimal encoding of "ABCDEFG" is either ASCII(A),C40(BCDEFG) or ASCII(A), X12(BCDEFG) with a size of 5 bytes.
+     */
+
+    int inputLength = input.length();
+
+    // Array that represents vertices. There is a vertex for every character and mode.
+    // The last dimension in the array below encodes the 6 modes ASCII, C40, TEXT, X12, EDF and B256
+    Edge[][] edges = new Edge[inputLength + 1][6];
+    addEdges(input, edges, 0, null);
+
+    for (int i = 1; i <= inputLength; i++) {
+      for (int j = 0; j < 6; j++) {
+        if (edges[i][j] != null && i < inputLength) {
+          addEdges(input, edges, i, edges[i][j]);
+        }
+      }
+      //optimize memory by removing edges that have been passed.
+      for (int j = 0; j < 6; j++) {
+        edges[i - 1][j] = null;
+      }
+    }
+
+    int minimalJ = -1;
+    int minimalSize = Integer.MAX_VALUE;
+    for (int j = 0; j < 6; j++) {
+      if (edges[inputLength][j] != null) {
+        Edge edge = edges[inputLength][j];
+        int size = j >= 1 && j <= 3 ? edge.cachedTotalSize + 1 : edge.cachedTotalSize; //C40, TEXT and X12 need an
+                                                                                       // extra unlatch at the end
+        if (size < minimalSize) {
+          minimalSize = size;
+          minimalJ = j;
+        }
+      }
+    }
+
+    if (minimalJ < 0) {
+      throw new IllegalStateException("Failed to encode \"" + input + "\"");
+    }
+    return new Result(edges[inputLength][minimalJ]);
+  }
+
+  private static final class Edge {
+    private static final int[] allCodewordCapacities = {3, 5, 8, 10, 12, 16, 18, 22, 30, 32, 36, 44, 49, 62, 86, 114,
+                                                        144, 174, 204, 280, 368, 456, 576, 696, 816, 1050, 1304, 1558};
+    private static final int[] squareCodewordCapacities = {3, 5, 8, 12, 18, 22, 30, 36, 44, 62, 86, 114, 144, 174, 204,
+                                                           280, 368, 456, 576, 696, 816, 1050, 1304, 1558};
+    private static final int[] rectangularCodewordCapacities = {5, 10, 16, 33, 32, 49};
+    private final Input input;
+    private final Mode mode; //the mode at the start of this edge.
+    private final int fromPosition;
+    private final int characterLength;
+    private final Edge previous;
+    private final int cachedTotalSize;
+
+    private Edge(Input input, Mode mode, int fromPosition, int characterLength, Edge previous) {
+      this.input = input;
+      this.mode = mode;
+      this.fromPosition = fromPosition;
+      this.characterLength = characterLength;
+      this.previous = previous;
+      assert fromPosition + characterLength <= input.length();
+
+      int size = previous != null ? previous.cachedTotalSize : 0;
+
+      Mode previousMode = getPreviousMode();
+
+     /*
+      * Switching modes
+      * ASCII -> C40: latch 230
+      * ASCII -> TEXT: latch 239
+      * ASCII -> X12: latch 238
+      * ASCII -> EDF: latch 240
+      * ASCII -> B256: latch 231
+      * C40 -> ASCII: word(c1,c2,c3), 254
+      * TEXT -> ASCII: word(c1,c2,c3), 254
+      * X12 -> ASCII: word(c1,c2,c3), 254
+      * EDIFACT -> ASCII: Unlatch character,0,0,0 or c1,Unlatch character,0,0 or c1,c2,Unlatch character,0 or
+      * c1,c2,c3,Unlatch character
+      * B256 -> ASCII: without latch after n bytes
+      */
+      switch (mode) {
+        case ASCII:
+          size++;
+          if (input.isECI(fromPosition) || isExtendedASCII(input.charAt(fromPosition), input.getFNC1Character())) {
+            size++;
+          }
+          if (previousMode == Mode.C40 ||
+              previousMode == Mode.TEXT ||
+              previousMode == Mode.X12) {
+            size++; // unlatch 254 to ASCII
+          }
+          break;
+        case B256:
+          size++;
+          if (previousMode != Mode.B256) {
+            size++; //byte count
+          } else if (getB256Size() == 250) {
+            size++; //extra byte count
+          }
+          if (previousMode == Mode.ASCII) {
+            size++; //latch to B256
+          } else if (previousMode == Mode.C40 ||
+                     previousMode == Mode.TEXT ||
+                     previousMode == Mode.X12) {
+            size += 2; //unlatch to ASCII, latch to B256
+          }
+          break;
+        case C40:
+        case TEXT:
+        case X12:
+          if (mode == Mode.X12) {
+            size += 2;
+          } else {
+            int[] charLen = new int[1];
+            size += getNumberOfC40Words(input, fromPosition, mode == Mode.C40, charLen) * 2;
+          }
+
+          if (previousMode == Mode.ASCII || previousMode == Mode.B256) {
+            size++; //additional byte for latch from ASCII to this mode
+          } else if (previousMode != mode && (previousMode == Mode.C40 ||
+                                             previousMode == Mode.TEXT ||
+                                             previousMode == Mode.X12)) {
+            size += 2; //unlatch 254 to ASCII followed by latch to this mode
+          }
+          break;
+        case EDF:
+          size += 3;
+          if (previousMode == Mode.ASCII || previousMode == Mode.B256) {
+            size++; //additional byte for latch from ASCII to this mode
+          } else if (previousMode == Mode.C40 ||
+                    previousMode == Mode.TEXT ||
+                    previousMode == Mode.X12) {
+            size += 2; //unlatch 254 to ASCII followed by latch to this mode
+          }
+          break;
+      }
+      cachedTotalSize = size;
+    }
+
+    // does not count beyond 250
+    int getB256Size() {
+      int cnt = 0;
+      Edge current = this;
+      while (current != null && current.mode == Mode.B256 && cnt <= 250) {
+        cnt++;
+        current = current.previous;
+      }
+      return cnt;
+    }
+
+    Mode getPreviousStartMode() {
+      return  previous == null ? Mode.ASCII : previous.mode;
+    }
+
+    Mode getPreviousMode() {
+      return  previous == null ? Mode.ASCII : previous.getEndMode();
+    }
+
+    /** Returns Mode.ASCII in case that:
+     *  - Mode is EDIFACT and characterLength is less than 4 or the remaining characters can be encoded in at most 2
+     *    ASCII bytes.
+     *  - Mode is C40, TEXT or X12 and the remaining characters can be encoded in at most 1 ASCII byte.
+     *  Returns mode in all other cases.
+     * */
+    Mode getEndMode() {
+      if (mode == Mode.EDF) {
+        if (characterLength < 4) {
+          return Mode.ASCII;
+        }
+        int lastASCII = getLastASCII(); // see 5.2.8.2 EDIFACT encodation Rules
+        if (lastASCII > 0 && getCodewordsRemaining(cachedTotalSize + lastASCII) <= 2 - lastASCII) {
+          return Mode.ASCII;
+        }
+      }
+      if (mode == Mode.C40 ||
+          mode == Mode.TEXT ||
+          mode == Mode.X12) {
+
+        // see 5.2.5.2 C40 encodation rules and 5.2.7.2 ANSI X12 encodation rules
+        if (fromPosition + characterLength >= input.length() && getCodewordsRemaining(cachedTotalSize) == 0) {
+          return Mode.ASCII;
+        }
+        int lastASCII = getLastASCII();
+        if (lastASCII == 1 && getCodewordsRemaining(cachedTotalSize + 1) == 0) {
+          return Mode.ASCII;
+        }
+      }
+      return mode;
+    }
+
+    Mode getMode() {
+      return mode;
+    }
+
+    /** Peeks ahead and returns 1 if the postfix consists of exactly two digits, 2 if the postfix consists of exactly
+     *  two consecutive digits and a non extended character or of 4 digits.
+     *  Returns 0 in any other case
+     **/
+    int getLastASCII() {
+      int length = input.length();
+      int from = fromPosition + characterLength;
+      if (length - from > 4 || from >= length) {
+        return 0;
+      }
+      if (length - from == 1) {
+        if (isExtendedASCII(input.charAt(from), input.getFNC1Character())) {
+          return 0;
+        }
+        return 1;
+      }
+      if (length - from == 2) {
+        if (isExtendedASCII(input.charAt(from), input.getFNC1Character()) || isExtendedASCII(input.charAt(from + 1),
+            input.getFNC1Character())) {
+          return 0;
+        }
+        if (HighLevelEncoder.isDigit(input.charAt(from)) && HighLevelEncoder.isDigit(input.charAt(from + 1))) {
+          return 1;
+        }
+        return 2;
+      }
+      if (length - from == 3) {
+        if (HighLevelEncoder.isDigit(input.charAt(from)) && HighLevelEncoder.isDigit(input.charAt(from + 1))
+            && !isExtendedASCII(input.charAt(from + 2), input.getFNC1Character())) {
+          return 2;
+        }
+        if (HighLevelEncoder.isDigit(input.charAt(from + 1)) && HighLevelEncoder.isDigit(input.charAt(from + 2))
+            && !isExtendedASCII(input.charAt(from), input.getFNC1Character())) {
+          return 2;
+        }
+        return 0;
+      }
+      if (HighLevelEncoder.isDigit(input.charAt(from)) && HighLevelEncoder.isDigit(input.charAt(from + 1))
+          && HighLevelEncoder.isDigit(input.charAt(from + 2)) && HighLevelEncoder.isDigit(input.charAt(from + 3))) {
+        return 2;
+      }
+      return 0;
+    }
+
+    /** Returns the capacity in codewords of the smallest symbol that has enough capacity to fit the given minimal
+     * number of codewords.
+     **/
+    int getMinSymbolSize(int minimum) {
+      switch (input.getShapeHint()) {
+        case FORCE_SQUARE:
+          for (int capacity : squareCodewordCapacities) {
+            if (capacity >= minimum) {
+              return capacity;
+            }
+          }
+          break;
+        case FORCE_RECTANGLE:
+          for (int capacity : rectangularCodewordCapacities) {
+            if (capacity >= minimum) {
+              return capacity;
+            }
+          }
+          break;
+      }
+      for (int capacity : allCodewordCapacities) {
+        if (capacity >= minimum) {
+          return capacity;
+        }
+      }
+      return allCodewordCapacities[allCodewordCapacities.length - 1];
+    }
+
+    /** Returns the remaining capacity in codewords of the smallest symbol that has enough capacity to fit the given
+     * minimal number of codewords.
+     **/
+    int getCodewordsRemaining(int minimum) {
+      return getMinSymbolSize(minimum) - minimum;
+    }
+
+    static byte[] getBytes(int c) {
+      byte[] result = new byte[1];
+      result[0] = (byte) c;
+      return result;
+    }
+
+    static byte[] getBytes(int c1,int c2) {
+      byte[] result = new byte[2];
+      result[0] = (byte) c1;
+      result[1] = (byte) c2;
+      return result;
+    }
+
+    static void setC40Word(byte[] bytes, int offset, int c1, int c2, int c3) {
+      int val16 = (1600 * (c1 & 0xff)) + (40 * (c2 & 0xff)) + (c3 & 0xff) + 1;
+      bytes[offset] = (byte) (val16 / 256);
+      bytes[offset + 1] = (byte) (val16 % 256);
+    }
+
+    private static int getX12Value(char c) {
+      return c == 13 ? 0 :
+             c == 42 ? 1 :
+             c == 62 ? 2 :
+             c == 32 ? 3 :
+             c >= 48 && c <= 57 ? c - 44 :
+             c >= 65 && c <= 90 ? c - 51 : c;
+    }
+
+    byte[] getX12Words() {
+      assert characterLength % 3 == 0;
+      byte[] result = new byte[characterLength / 3 * 2];
+      for (int i = 0; i < result.length; i += 2) {
+        setC40Word(result,i,getX12Value(input.charAt(fromPosition + i / 2 * 3)),
+                              getX12Value(input.charAt(fromPosition + i / 2 * 3 + 1)),
+                              getX12Value(input.charAt(fromPosition + i / 2 * 3 + 2)));
+      }
+      return result;
+    }
+
+    static int getShiftValue(char c, boolean c40, int fnc1) {
+      return (c40 && isInC40Shift1Set(c) ||
+             !c40 && isInTextShift1Set(c)) ? 0 :
+             (c40 && isInC40Shift2Set(c, fnc1) ||
+             !c40 && isInTextShift2Set(c, fnc1)) ? 1 : 2;
+    }
+
+    private static int getC40Value(boolean c40, int setIndex, char c, int fnc1) {
+      if (c == fnc1) {
+        assert setIndex ==  2;
+        return  27;
+      }
+      if (c40) {
+        return c <= 31 ? c :
+               c == 32 ? 3 :
+               c <= 47 ? c - 33 :
+               c <= 57 ? c - 44 :
+               c <= 64 ? c - 43 :
+               c <= 90 ? c - 51 :
+               c <= 95 ? c - 69 :
+               c <= 127 ? c - 96 : c;
+      } else {
+        return c == 0 ? 0 :
+               setIndex == 0 && c <= 3 ? c - 1 : //is this a bug in the spec?
+               setIndex == 1 && c <= 31 ? c :
+               c == 32 ? 3 :
+               c >= 33 && c <= 47 ? c - 33 :
+               c >= 48 && c <= 57 ? c - 44 :
+               c >= 58 && c <= 64 ? c - 43 :
+               c >= 65 && c <= 90 ? c - 64 :
+               c >= 91 && c <= 95 ? c - 69 :
+               c == 96 ? 0 :
+               c >= 97 && c <= 122 ? c - 83 :
+               c >= 123 && c <= 127 ? c - 96 : c;
+      }
+    }
+
+    byte[] getC40Words(boolean c40, int fnc1) {
+      List<Byte> c40Values = new ArrayList<>();
+      for (int i = 0; i < characterLength; i++) {
+        char ci = input.charAt(fromPosition + i);
+        if (c40 && HighLevelEncoder.isNativeC40(ci) || !c40 && HighLevelEncoder.isNativeText(ci)) {
+          c40Values.add((byte) getC40Value(c40, 0, ci, fnc1));
+        } else if (!isExtendedASCII(ci, fnc1)) {
+          int shiftValue = getShiftValue(ci, c40, fnc1);
+          c40Values.add((byte) shiftValue); //Shift[123]
+          c40Values.add((byte) getC40Value(c40, shiftValue, ci, fnc1));
+        } else {
+          char asciiValue = (char) ((ci & 0xff) - 128);
+          if (c40 && HighLevelEncoder.isNativeC40(asciiValue) ||
+              !c40 && HighLevelEncoder.isNativeText(asciiValue)) {
+            c40Values.add((byte) 1); //Shift 2
+            c40Values.add((byte) 30); //Upper Shift
+            c40Values.add((byte) getC40Value(c40, 0, asciiValue, fnc1));
+          } else {
+            c40Values.add((byte) 1); //Shift 2
+            c40Values.add((byte) 30); //Upper Shift
+            int shiftValue = getShiftValue(asciiValue, c40, fnc1);
+            c40Values.add((byte) shiftValue); // Shift[123]
+            c40Values.add((byte) getC40Value(c40, shiftValue, asciiValue, fnc1));
+          }
+        }
+      }
+
+      if ((c40Values.size() % 3) != 0) {
+        assert (c40Values.size() - 2) % 3 == 0 && fromPosition + characterLength == input.length();
+        c40Values.add((byte) 0); // pad with 0 (Shift 1)
+      }
+
+      byte[] result = new byte[c40Values.size() / 3 * 2];
+      int byteIndex = 0;
+      for (int i = 0; i < c40Values.size(); i += 3) {
+        setC40Word(result,byteIndex, c40Values.get(i) & 0xff, c40Values.get(i + 1) & 0xff, c40Values.get(i + 2) & 0xff);
+        byteIndex += 2;
+      }
+      return result;
+    }
+
+    byte[] getEDFBytes() {
+      int numberOfThirds = (int) Math.ceil(characterLength / 4.0);
+      byte[] result = new byte[numberOfThirds * 3];
+      int pos = fromPosition;
+      int endPos = Math.min(fromPosition + characterLength - 1 , input.length() - 1);
+      for (int i = 0; i < numberOfThirds; i += 3) {
+        int[] edfValues = new int[4];
+        for (int j = 0; j < 4; j++) {
+          if (pos <= endPos) {
+            edfValues[j] = input.charAt(pos++) & 0x3f;
+          } else {
+            edfValues[j] = pos == endPos + 1 ? 0x1f : 0;
+          }
+        }
+        int val24 = edfValues[0] << 18;
+        val24 |= edfValues[1] << 12;
+        val24 |= edfValues[2] << 6;
+        val24 |= edfValues[3];
+        result[i] = (byte) ((val24 >> 16) & 0xff);
+        result[i + 1] = (byte) ((val24 >> 8) & 0xff);
+        result[i + 2] = (byte) (val24 & 0xff);
+      }
+      return result;
+    }
+
+    byte[] getLatchBytes() {
+      switch (getPreviousMode()) {
+        case ASCII:
+        case B256: //after B256 ends (via length) we are back to ASCII
+          switch (mode) {
+            case B256:
+              return getBytes(231);
+            case C40:
+              return getBytes(230);
+            case TEXT:
+              return getBytes(239);
+            case X12:
+              return getBytes(238);
+            case EDF:
+              return getBytes(240);
+          }
+          break;
+        case C40:
+        case TEXT:
+        case X12:
+          if (mode != getPreviousMode()) {
+            switch (mode) {
+              case ASCII:
+                return getBytes(254);
+              case B256:
+                return getBytes(254, 231);
+              case C40:
+                return getBytes(254, 230);
+              case TEXT:
+                return getBytes(254, 239);
+              case X12:
+                return getBytes(254, 238);
+              case EDF:
+                return getBytes(254, 240);
+            }
+          }
+          break;
+        case EDF:
+          assert mode == Mode.EDF; //The rightmost EDIFACT edge always contains an unlatch character
+          break;
+      }
+      return new byte[0];
+    }
+
+    // Important: The function does not return the length bytes (one or two) in case of B256 encoding
+    byte[] getDataBytes() {
+      switch (mode) {
+        case ASCII:
+          if (input.isECI(fromPosition)) {
+            return getBytes(241,input.getECIValue(fromPosition) + 1);
+          } else if (isExtendedASCII(input.charAt(fromPosition), input.getFNC1Character())) {
+            return getBytes(235,input.charAt(fromPosition) - 127);
+          } else if (characterLength == 2) {
+            return getBytes((input.charAt(fromPosition) - '0') * 10 + input.charAt(fromPosition + 1) - '0' + 130);
+          } else if (input.isFNC1(fromPosition)) {
+            return getBytes(232);
+          } else {
+            return getBytes(input.charAt(fromPosition) + 1);
+          }
+        case B256:
+          return getBytes(input.charAt(fromPosition));
+        case C40:
+          return getC40Words(true, input.getFNC1Character());
+        case TEXT:
+          return getC40Words(false, input.getFNC1Character());
+        case X12:
+          return getX12Words();
+        case EDF:
+          return getEDFBytes();
+      }
+      assert false;
+      return new byte[0];
+    }
+  }
+
+  private static final class Result {
+
+    private final byte[] bytes;
+
+    Result(Edge solution) {
+      Input input = solution.input;
+      int size = 0;
+      List<Byte> bytesAL = new ArrayList<>();
+      List<Integer> randomizePostfixLength = new ArrayList<>();
+      List<Integer> randomizeLengths = new ArrayList<>();
+      if ((solution.mode == Mode.C40 ||
+           solution.mode == Mode.TEXT ||
+           solution.mode == Mode.X12) &&
+           solution.getEndMode() != Mode.ASCII) {
+        size += prepend(MinimalEncoder.Edge.getBytes(254),bytesAL);
+      }
+      Edge current = solution;
+      while (current != null) {
+        size += prepend(current.getDataBytes(),bytesAL);
+
+        if (current.previous == null || current.getPreviousStartMode() != current.getMode()) {
+          if (current.getMode() == Mode.B256) {
+            if (size <= 249) {
+              bytesAL.add(0, (byte) size);
+              size++;
+            } else {
+              bytesAL.add(0, (byte) (size % 250));
+              bytesAL.add(0, (byte) (size / 250 + 249));
+              size += 2;
+            }
+            randomizePostfixLength.add(bytesAL.size());
+            randomizeLengths.add(size);
+          }
+          prepend(current.getLatchBytes(), bytesAL);
+          size = 0;
+        }
+
+        current = current.previous;
+      }
+      if (input.getMacroId() == 5) {
+        size += prepend(MinimalEncoder.Edge.getBytes(236), bytesAL);
+      } else if (input.getMacroId() == 6) {
+        size += prepend(MinimalEncoder.Edge.getBytes(237), bytesAL);
+      }
+
+      if (input.getFNC1Character() > 0) {
+        size += prepend(MinimalEncoder.Edge.getBytes(232), bytesAL);
+      }
+      for (int i = 0; i < randomizePostfixLength.size(); i++) {
+        applyRandomPattern(bytesAL,bytesAL.size() - randomizePostfixLength.get(i), randomizeLengths.get(i));
+      }
+      //add padding
+      int capacity = solution.getMinSymbolSize(bytesAL.size());
+      if (bytesAL.size() < capacity) {
+        bytesAL.add((byte) 129);
+      }
+      while (bytesAL.size() < capacity) {
+        bytesAL.add((byte) randomize253State(bytesAL.size() + 1));
+      }
+
+      bytes = new byte[bytesAL.size()];
+      for (int i = 0; i < bytes.length; i++) {
+        bytes[i] = bytesAL.get(i);
+      }
+    }
+
+    static int prepend(byte[] bytes, List<Byte> into) {
+      for (int i = bytes.length - 1; i >= 0; i--) {
+        into.add(0, bytes[i]);
+      }
+      return bytes.length;
+    }
+
+    private static int randomize253State(int codewordPosition) {
+      int pseudoRandom = ((149 * codewordPosition) % 253) + 1;
+      int tempVariable = 129 + pseudoRandom;
+      return tempVariable <= 254 ? tempVariable : tempVariable - 254;
+    }
+
+    static void applyRandomPattern(List<Byte> bytesAL,int startPosition, int length) {
+      for (int i = 0; i < length; i++) {
+        //See "B.1 253-state algorithm
+        int Pad_codeword_position = startPosition + i;
+        int Pad_codeword_value = bytesAL.get(Pad_codeword_position) & 0xff;
+        int pseudo_random_number = ((149 * (Pad_codeword_position + 1)) % 255) + 1;
+        int temp_variable = Pad_codeword_value + pseudo_random_number;
+        bytesAL.set(Pad_codeword_position, (byte) (temp_variable <= 255 ? temp_variable : temp_variable - 256));
+      }
+    }
+
+    public byte[] getBytes() {
+      return bytes;
+    }
+
+  }
+
+  private static final class Input extends MinimalECIInput {
+
+    private final SymbolShapeHint shape;
+    private final int macroId;
+
+    private Input(String stringToEncode, Charset priorityCharset, int fnc1, SymbolShapeHint shape, int macroId) {
+      super(stringToEncode, priorityCharset, fnc1);
+      this.shape = shape;
+      this.macroId = macroId;
+    }
+
+    private int getMacroId() {
+      return macroId;
+    }
+
+    private SymbolShapeHint getShapeHint() {
+      return shape;
+    }
+  }
+}
diff --git a/core/src/main/java/com/google/zxing/datamatrix/encoder/TextEncoder.java b/core/src/main/java/com/google/zxing/datamatrix/encoder/TextEncoder.java
index 1a990d5..24286ac 100644
--- a/core/src/main/java/com/google/zxing/datamatrix/encoder/TextEncoder.java
+++ b/core/src/main/java/com/google/zxing/datamatrix/encoder/TextEncoder.java
@@ -59,7 +59,7 @@ final class TextEncoder extends C40Encoder {
     }
     if (c == '`') {
       sb.append('\2'); //Shift 3 Set
-      sb.append((char) (c - 96));
+      sb.append((char) 0); // '`' - 96 == 0
       return 2;
     }
     if (c <= 'Z') {
diff --git a/core/src/main/java/com/google/zxing/maxicode/MaxiCodeReader.java b/core/src/main/java/com/google/zxing/maxicode/MaxiCodeReader.java
index bf52da7..0cb32ff 100644
--- a/core/src/main/java/com/google/zxing/maxicode/MaxiCodeReader.java
+++ b/core/src/main/java/com/google/zxing/maxicode/MaxiCodeReader.java
@@ -98,9 +98,13 @@ public final class MaxiCodeReader implements Reader {
     // Now just read off the bits
     BitMatrix bits = new BitMatrix(MATRIX_WIDTH, MATRIX_HEIGHT);
     for (int y = 0; y < MATRIX_HEIGHT; y++) {
-      int iy = top + (y * height + height / 2) / MATRIX_HEIGHT;
+      int iy = Math.min(top + (y * height + height / 2) / MATRIX_HEIGHT, height - 1);
       for (int x = 0; x < MATRIX_WIDTH; x++) {
-        int ix = left + (x * width + width / 2 + (y & 0x01) *  width / 2) / MATRIX_WIDTH;
+        // srowen: I don't quite understand why the formula below is necessary, but it
+        // can walk off the image if left + width = the right boundary. So cap it.
+        int ix = left + Math.min(
+            (x * width + width / 2 + (y & 0x01) * width / 2) / MATRIX_WIDTH,
+            width - 1);
         if (image.get(ix, iy)) {
           bits.set(x, y);
         }
diff --git a/core/src/main/java/com/google/zxing/maxicode/decoder/BitMatrixParser.java b/core/src/main/java/com/google/zxing/maxicode/decoder/BitMatrixParser.java
index be18a7e..fe154b3 100644
--- a/core/src/main/java/com/google/zxing/maxicode/decoder/BitMatrixParser.java
+++ b/core/src/main/java/com/google/zxing/maxicode/decoder/BitMatrixParser.java
@@ -24,6 +24,7 @@ import com.google.zxing.common.BitMatrix;
  */
 final class BitMatrixParser {
 
+  @SuppressWarnings("checkstyle:lineLength")
   private static final int[][] BITNR = {
     {121,120,127,126,133,132,139,138,145,144,151,150,157,156,163,162,169,168,175,174,181,180,187,186,193,192,199,198, -2, -2},
     {123,122,129,128,135,134,141,140,147,146,153,152,159,158,165,164,171,170,177,176,183,182,189,188,195,194,201,200,816, -3},
diff --git a/core/src/main/java/com/google/zxing/maxicode/decoder/DecodedBitStreamParser.java b/core/src/main/java/com/google/zxing/maxicode/decoder/DecodedBitStreamParser.java
index 0e59dbd..9ebf7e8 100644
--- a/core/src/main/java/com/google/zxing/maxicode/decoder/DecodedBitStreamParser.java
+++ b/core/src/main/java/com/google/zxing/maxicode/decoder/DecodedBitStreamParser.java
@@ -16,6 +16,7 @@
 
 package com.google.zxing.maxicode.decoder;
 
+import com.google.zxing.FormatException;
 import com.google.zxing.common.DecoderResult;
 import java.text.DecimalFormat;
 import java.text.NumberFormat;
@@ -45,15 +46,29 @@ final class DecodedBitStreamParser {
   private static final char FS = '\u001C';
   private static final char GS = '\u001D';
   private static final char RS = '\u001E';
+  private static final byte[] COUNTRY_BYTES = { 53, 54, 43, 44, 45, 46, 47, 48, 37, 38 };
+  private static final byte[] SERVICE_CLASS_BYTES = { 55, 56, 57, 58, 59, 60, 49, 50, 51, 52 };
+  private static final byte[] POSTCODE_2_LENGTH_BYTES = { 39, 40, 41, 42, 31, 32 };
+  private static final byte[] POSTCODE_2_BYTES = { 33, 34, 35, 36, 25, 26, 27, 28, 29, 30, 19,
+      20, 21, 22, 23, 24, 13, 14, 15, 16, 17, 18, 7, 8, 9, 10, 11, 12, 1, 2 };
+  private static final byte[][] POSTCODE_3_BYTES = {
+      { 39, 40, 41, 42, 31, 32},
+      { 33, 34, 35, 36, 25, 26},
+      { 27, 28, 29, 30, 19, 20},
+      { 21, 22, 23, 24, 13, 14},
+      { 15, 16, 17, 18,  7,  8},
+      {  9, 10, 11, 12,  1,  2}
+  };
 
+  @SuppressWarnings("checkstyle:lineLength")
   private static final String[] SETS = {
-    "\nABCDEFGHIJKLMNOPQRSTUVWXYZ" + ECI + FS + GS + RS + NS + ' ' + PAD +
+    "\rABCDEFGHIJKLMNOPQRSTUVWXYZ" + ECI + FS + GS + RS + NS + ' ' + PAD +
         "\"#$%&'()*+,-./0123456789:" + SHIFTB + SHIFTC + SHIFTD + SHIFTE + LATCHB,
     "`abcdefghijklmnopqrstuvwxyz" + ECI + FS + GS + RS + NS + '{' + PAD +
         "}~\u007F;<=>?[\\]^_ ,./:@!|" + PAD + TWOSHIFTA + THREESHIFTA + PAD +
         SHIFTA + SHIFTC + SHIFTD + SHIFTE + LATCHA,
     "\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u00D0\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA" +
-        ECI + FS + GS + RS +
+        ECI + FS + GS + RS + NS +
         "\u00DB\u00DC\u00DD\u00DE\u00DF\u00AA\u00AC\u00B1\u00B2\u00B3\u00B5\u00B9\u00BA\u00BC\u00BD\u00BE\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089" +
         LATCHA + ' ' + LOCK + SHIFTD + SHIFTE + LATCHB,
     "\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA" +
@@ -64,13 +79,12 @@ final class DecodedBitStreamParser {
         ECI + PAD + PAD + '\u001B' + NS + FS + GS + RS +
         "\u001F\u009F\u00A0\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A9\u00AD\u00AE\u00B6\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E" +
         LATCHA + ' ' + SHIFTC + SHIFTD + LOCK + LATCHB,
-    "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u0009\n\u000B\u000C\r\u000E\u000F\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001F\u0020\u0021\"\u0023\u0024\u0025\u0026\u0027\u0028\u0029\u002A\u002B\u002C\u002D\u002E\u002F\u0030\u0031\u0032\u0033\u0034\u0035\u0036\u0037\u0038\u0039\u003A\u003B\u003C\u003D\u003E\u003F"
   };
 
   private DecodedBitStreamParser() {
   }
 
-  static DecoderResult decode(byte[] bytes, int mode) {
+  static DecoderResult decode(byte[] bytes, int mode) throws FormatException {
     StringBuilder result = new StringBuilder(144);
     switch (mode) {
       case 2:
@@ -78,7 +92,11 @@ final class DecodedBitStreamParser {
         String postcode;
         if (mode == 2) {
           int pc = getPostCode2(bytes);
-          NumberFormat df = new DecimalFormat("0000000000".substring(0, getPostCode2Length(bytes)));
+          int ps2Length = getPostCode2Length(bytes);
+          if (ps2Length > 10) {
+            throw FormatException.getFormatInstance();
+          }
+          NumberFormat df = new DecimalFormat("0000000000".substring(0, ps2Length));
           postcode = df.format(pc);
         } else {
           postcode = getPostCode3(bytes);
@@ -109,9 +127,6 @@ final class DecodedBitStreamParser {
   }
 
   private static int getInt(byte[] bytes, byte[] x) {
-    if (x.length == 0) {
-      throw new IllegalArgumentException();
-    }
     int val = 0;
     for (int i = 0; i < x.length; i++) {
       val += getBit(x[i], bytes) << (x.length - i - 1);
@@ -120,33 +135,27 @@ final class DecodedBitStreamParser {
   }
 
   private static int getCountry(byte[] bytes) {
-    return getInt(bytes, new byte[] {53, 54, 43, 44, 45, 46, 47, 48, 37, 38});
+    return getInt(bytes, COUNTRY_BYTES);
   }
 
   private static int getServiceClass(byte[] bytes) {
-    return getInt(bytes, new byte[] {55, 56, 57, 58, 59, 60, 49, 50, 51, 52});
+    return getInt(bytes, SERVICE_CLASS_BYTES);
   }
 
   private static int getPostCode2Length(byte[] bytes) {
-    return getInt(bytes, new byte[] {39, 40, 41, 42, 31, 32});
+    return getInt(bytes, POSTCODE_2_LENGTH_BYTES);
   }
 
   private static int getPostCode2(byte[] bytes) {
-    return getInt(bytes, new byte[] {33, 34, 35, 36, 25, 26, 27, 28, 29, 30, 19,
-        20, 21, 22, 23, 24, 13, 14, 15, 16, 17, 18, 7, 8, 9, 10, 11, 12, 1, 2});
+    return getInt(bytes, POSTCODE_2_BYTES);
   }
 
   private static String getPostCode3(byte[] bytes) {
-    return String.valueOf(
-       new char[] {
-         SETS[0].charAt(getInt(bytes, new byte[] {39, 40, 41, 42, 31, 32})),
-         SETS[0].charAt(getInt(bytes, new byte[] {33, 34, 35, 36, 25, 26})),
-         SETS[0].charAt(getInt(bytes, new byte[] {27, 28, 29, 30, 19, 20})),
-         SETS[0].charAt(getInt(bytes, new byte[] {21, 22, 23, 24, 13, 14})),
-         SETS[0].charAt(getInt(bytes, new byte[] {15, 16, 17, 18,  7,  8})),
-         SETS[0].charAt(getInt(bytes, new byte[] { 9, 10, 11, 12,  1,  2})),
-       }
-    );
+    StringBuilder sb = new StringBuilder(POSTCODE_3_BYTES.length);
+    for (byte[] p3bytes : POSTCODE_3_BYTES) {
+      sb.append(SETS[0].charAt(getInt(bytes, p3bytes)));
+    }
+    return sb.toString();
   }
 
   private static String getMessage(byte[] bytes, int start, int len) {
diff --git a/core/src/main/java/com/google/zxing/multi/qrcode/detector/MultiFinderPatternFinder.java b/core/src/main/java/com/google/zxing/multi/qrcode/detector/MultiFinderPatternFinder.java
index e38d93c..b4e96a6 100644
--- a/core/src/main/java/com/google/zxing/multi/qrcode/detector/MultiFinderPatternFinder.java
+++ b/core/src/main/java/com/google/zxing/multi/qrcode/detector/MultiFinderPatternFinder.java
@@ -97,7 +97,12 @@ public final class MultiFinderPatternFinder extends FinderPatternFinder {
    * @throws NotFoundException if 3 such finder patterns do not exist
    */
   private FinderPattern[][] selectMultipleBestPatterns() throws NotFoundException {
-    List<FinderPattern> possibleCenters = getPossibleCenters();
+    List<FinderPattern> possibleCenters = new ArrayList<>();
+    for (FinderPattern fp : getPossibleCenters()) {
+      if (fp.getCount() >= 2) {
+        possibleCenters.add(fp);
+      }
+    }
     int size = possibleCenters.size();
 
     if (size < 3) {
@@ -130,7 +135,7 @@ public final class MultiFinderPatternFinder extends FinderPatternFinder {
      * So, if the layout seems right, lets have the decoder try to decode.
      */
 
-     List<FinderPattern[]> results = new ArrayList<>(); // holder for the results
+    List<FinderPattern[]> results = new ArrayList<>(); // holder for the results
 
     for (int i1 = 0; i1 < (size - 2); i1++) {
       FinderPattern p1 = possibleCenters.get(i1);
diff --git a/core/src/main/java/com/google/zxing/oned/CodaBarReader.java b/core/src/main/java/com/google/zxing/oned/CodaBarReader.java
index 0ba9f1e..a5e230d 100644
--- a/core/src/main/java/com/google/zxing/oned/CodaBarReader.java
+++ b/core/src/main/java/com/google/zxing/oned/CodaBarReader.java
@@ -20,6 +20,7 @@ import com.google.zxing.BarcodeFormat;
 import com.google.zxing.DecodeHintType;
 import com.google.zxing.NotFoundException;
 import com.google.zxing.Result;
+import com.google.zxing.ResultMetadataType;
 import com.google.zxing.ResultPoint;
 import com.google.zxing.common.BitArray;
 
@@ -152,13 +153,16 @@ public final class CodaBarReader extends OneDReader {
       runningCount += counters[i];
     }
     float right = runningCount;
-    return new Result(
+
+    Result result = new Result(
         decodeRowResult.toString(),
         null,
         new ResultPoint[]{
             new ResultPoint(left, rowNumber),
             new ResultPoint(right, rowNumber)},
         BarcodeFormat.CODABAR);
+    result.putMetadata(ResultMetadataType.SYMBOLOGY_IDENTIFIER, "]F0");
+    return result;
   }
 
   private void validatePattern(int start) throws NotFoundException {
@@ -170,7 +174,7 @@ public final class CodaBarReader extends OneDReader {
     // We break out of this loop in the middle, in order to handle
     // inter-character spaces properly.
     int pos = start;
-    for (int i = 0; true; i++) {
+    for (int i = 0; i <= end; i++) {
       int pattern = CHARACTER_ENCODINGS[decodeRowResult.charAt(i)];
       for (int j = 6; j >= 0; j--) {
         // Even j = bars, while odd j = spaces. Categories 2 and 3 are for
@@ -180,9 +184,6 @@ public final class CodaBarReader extends OneDReader {
         counts[category]++;
         pattern >>= 1;
       }
-      if (i >= end) {
-        break;
-      }
       // We ignore the inter-character space - it could be of any size.
       pos += 8;
     }
@@ -202,7 +203,7 @@ public final class CodaBarReader extends OneDReader {
 
     // Now verify that all of the stripes are within the thresholds.
     pos = start;
-    for (int i = 0; true; i++) {
+    for (int i = 0; i <= end; i++) {
       int pattern = CHARACTER_ENCODINGS[decodeRowResult.charAt(i)];
       for (int j = 6; j >= 0; j--) {
         // Even j = bars, while odd j = spaces. Categories 2 and 3 are for
@@ -214,9 +215,6 @@ public final class CodaBarReader extends OneDReader {
         }
         pattern >>= 1;
       }
-      if (i >= end) {
-        break;
-      }
       pos += 8;
     }
   }
diff --git a/core/src/main/java/com/google/zxing/oned/Code128Reader.java b/core/src/main/java/com/google/zxing/oned/Code128Reader.java
index a9d2bc2..a6322a3 100644
--- a/core/src/main/java/com/google/zxing/oned/Code128Reader.java
+++ b/core/src/main/java/com/google/zxing/oned/Code128Reader.java
@@ -22,6 +22,7 @@ import com.google.zxing.DecodeHintType;
 import com.google.zxing.FormatException;
 import com.google.zxing.NotFoundException;
 import com.google.zxing.Result;
+import com.google.zxing.ResultMetadataType;
 import com.google.zxing.ResultPoint;
 import com.google.zxing.common.BitArray;
 
@@ -238,6 +239,8 @@ public final class Code128Reader extends OneDReader {
 
     boolean convertFNC1 = hints != null && hints.containsKey(DecodeHintType.ASSUME_GS1);
 
+    int symbologyModifier = 0;
+
     int[] startPatternInfo = findStartPattern(row);
     int startCode = startPatternInfo[2];
 
@@ -339,6 +342,11 @@ public final class Code128Reader extends OneDReader {
             }
             switch (code) {
               case CODE_FNC_1:
+                if (result.length() == 0) { // FNC1 at first or second character determines the symbology
+                  symbologyModifier = 1;
+                } else if (result.length() == 1) {
+                  symbologyModifier = 2;
+                }
                 if (convertFNC1) {
                   if (result.length() == 0) {
                     // GS1 specification 5.4.3.7. and 5.4.6.4. If the first char after the start code
@@ -351,6 +359,8 @@ public final class Code128Reader extends OneDReader {
                 }
                 break;
               case CODE_FNC_2:
+                symbologyModifier = 4;
+                break;
               case CODE_FNC_3:
                 // do nothing?
                 break;
@@ -395,6 +405,11 @@ public final class Code128Reader extends OneDReader {
             }
             switch (code) {
               case CODE_FNC_1:
+                if (result.length() == 0) { // FNC1 at first or second character determines the symbology
+                  symbologyModifier = 1;
+                } else if (result.length() == 1) {
+                  symbologyModifier = 2;
+                }
                 if (convertFNC1) {
                   if (result.length() == 0) {
                     // GS1 specification 5.4.3.7. and 5.4.6.4. If the first char after the start code
@@ -407,6 +422,8 @@ public final class Code128Reader extends OneDReader {
                 }
                 break;
               case CODE_FNC_2:
+                symbologyModifier = 4;
+                break;
               case CODE_FNC_3:
                 // do nothing?
                 break;
@@ -449,6 +466,11 @@ public final class Code128Reader extends OneDReader {
             }
             switch (code) {
               case CODE_FNC_1:
+                if (result.length() == 0) { // FNC1 at first or second character determines the symbology
+                  symbologyModifier = 1;
+                } else if (result.length() == 1) {
+                  symbologyModifier = 2;
+                }
                 if (convertFNC1) {
                   if (result.length() == 0) {
                     // GS1 specification 5.4.3.7. and 5.4.6.4. If the first char after the start code
@@ -525,14 +547,15 @@ public final class Code128Reader extends OneDReader {
     for (int i = 0; i < rawCodesSize; i++) {
       rawBytes[i] = rawCodes.get(i);
     }
-
-    return new Result(
+    Result resultObject = new Result(
         result.toString(),
         rawBytes,
         new ResultPoint[]{
             new ResultPoint(left, rowNumber),
             new ResultPoint(right, rowNumber)},
         BarcodeFormat.CODE_128);
+    resultObject.putMetadata(ResultMetadataType.SYMBOLOGY_IDENTIFIER, "]C" + symbologyModifier);
+    return resultObject;
 
   }
 
diff --git a/core/src/main/java/com/google/zxing/oned/Code128Writer.java b/core/src/main/java/com/google/zxing/oned/Code128Writer.java
index 58499f2..fe13696 100644
--- a/core/src/main/java/com/google/zxing/oned/Code128Writer.java
+++ b/core/src/main/java/com/google/zxing/oned/Code128Writer.java
@@ -17,11 +17,13 @@
 package com.google.zxing.oned;
 
 import com.google.zxing.BarcodeFormat;
+import com.google.zxing.EncodeHintType;
 import com.google.zxing.common.BitMatrix;
 
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.Map;
 
 /**
  * This object renders a CODE128 code as a {@link BitMatrix}.
@@ -65,28 +67,93 @@ public final class Code128Writer extends OneDimensionalCodeWriter {
 
   @Override
   public boolean[] encode(String contents) {
+    return encode(contents, null);
+  }
+
+  @Override
+  protected boolean[] encode(String contents, Map<EncodeHintType,?> hints) {
+
+    int forcedCodeSet = check(contents, hints);
+
+    boolean hasCompactionHint = hints != null && hints.containsKey(EncodeHintType.CODE128_COMPACT) &&
+        Boolean.parseBoolean(hints.get(EncodeHintType.CODE128_COMPACT).toString());
+
+    return hasCompactionHint ? new MinimalEncoder().encode(contents) : encodeFast(contents, forcedCodeSet);
+  }
+
+  private static int check(String contents, Map<EncodeHintType,?> hints) {
     int length = contents.length();
     // Check length
     if (length < 1 || length > 80) {
       throw new IllegalArgumentException(
           "Contents length should be between 1 and 80 characters, but got " + length);
     }
+
+    // Check for forced code set hint.
+    int forcedCodeSet = -1;
+    if (hints != null && hints.containsKey(EncodeHintType.FORCE_CODE_SET)) {
+      String codeSetHint = hints.get(EncodeHintType.FORCE_CODE_SET).toString();
+      switch (codeSetHint) {
+        case "A":
+          forcedCodeSet = CODE_CODE_A;
+          break;
+        case "B":
+          forcedCodeSet = CODE_CODE_B;
+          break;
+        case "C":
+          forcedCodeSet = CODE_CODE_C;
+          break;
+        default:
+          throw new IllegalArgumentException("Unsupported code set hint: " + codeSetHint);
+      }
+    }
+
     // Check content
     for (int i = 0; i < length; i++) {
       char c = contents.charAt(i);
+      // check for non ascii characters that are not special GS1 characters
       switch (c) {
+        // special function characters
         case ESCAPE_FNC_1:
         case ESCAPE_FNC_2:
         case ESCAPE_FNC_3:
         case ESCAPE_FNC_4:
           break;
+        // non ascii characters
         default:
           if (c > 127) {
-            // support for FNC4 isn't implemented, no full Latin-1 character set available at the moment
-            throw new IllegalArgumentException("Bad character in input: " + c);
+            // no full Latin-1 character set available at the moment
+            // shift and manual code change are not supported
+            throw new IllegalArgumentException("Bad character in input: ASCII value=" + (int) c);
+          }
+      }
+      // check characters for compatibility with forced code set
+      switch (forcedCodeSet) {
+        case CODE_CODE_A:
+          // allows no ascii above 95 (no lower caps, no special symbols)
+          if (c > 95 && c <= 127) {
+            throw new IllegalArgumentException("Bad character in input for forced code set A: ASCII value=" + (int) c);
+          }
+          break;
+        case CODE_CODE_B:
+          // allows no ascii below 32 (terminal symbols)
+          if (c <= 32) {
+            throw new IllegalArgumentException("Bad character in input for forced code set B: ASCII value=" + (int) c);
+          }
+          break;
+        case CODE_CODE_C:
+          // allows only numbers and no FNC 2/3/4
+          if (c < 48 || (c > 57 && c <= 127) || c == ESCAPE_FNC_2 || c == ESCAPE_FNC_3 || c == ESCAPE_FNC_4) {
+            throw new IllegalArgumentException("Bad character in input for forced code set C: ASCII value=" + (int) c);
           }
+          break;
       }
     }
+    return forcedCodeSet;
+  }
+
+  private static boolean[] encodeFast(String contents, int forcedCodeSet) {
+    int length = contents.length();
 
     Collection<int[]> patterns = new ArrayList<>(); // temporary storage for patterns
     int checkSum = 0;
@@ -96,7 +163,12 @@ public final class Code128Writer extends OneDimensionalCodeWriter {
 
     while (position < length) {
       //Select code to use
-      int newCodeSet = chooseCode(contents, position, codeSet);
+      int newCodeSet;
+      if (forcedCodeSet == -1) {
+        newCodeSet = chooseCode(contents, position, codeSet);
+      } else {
+        newCodeSet = forcedCodeSet;
+      }
 
       //Get the pattern index
       int patternIndex;
@@ -135,6 +207,10 @@ public final class Code128Writer extends OneDimensionalCodeWriter {
                 break;
               default:
                 // CODE_CODE_C
+                if (position + 1 == length) {
+                  // this is the last character, but the encoding is C, which always encodes two characers
+                  throw new IllegalArgumentException("Bad number of characters for digit only encoding.");
+                }
                 patternIndex = Integer.parseInt(contents.substring(position, position + 2));
                 position++; // Also incremented below
                 break;
@@ -173,7 +249,10 @@ public final class Code128Writer extends OneDimensionalCodeWriter {
         checkWeight++;
       }
     }
+    return produceResult(patterns, checkSum);
+  }
 
+  static boolean[] produceResult(Collection<int[]> patterns, int checkSum) {
     // Compute and append checksum
     checkSum %= 103;
     patterns.add(Code128Reader.CODE_PATTERNS[checkSum]);
@@ -224,10 +303,10 @@ public final class Code128Writer extends OneDimensionalCodeWriter {
   private static int chooseCode(CharSequence value, int start, int oldCode) {
     CType lookahead = findCType(value, start);
     if (lookahead == CType.ONE_DIGIT) {
-       if (oldCode == CODE_CODE_A) {
-         return CODE_CODE_A;
-       }
-       return CODE_CODE_B;
+      if (oldCode == CODE_CODE_A) {
+        return CODE_CODE_A;
+      }
+      return CODE_CODE_B;
     }
     if (lookahead == CType.UNCODABLE) {
       if (start < value.length()) {
@@ -283,4 +362,205 @@ public final class Code128Writer extends OneDimensionalCodeWriter {
     return CODE_CODE_B;
   }
 
+  /**
+   * Encodes minimally using Divide-And-Conquer with Memoization
+   **/
+  private static final class MinimalEncoder {
+
+    private enum Charset { A, B, C, NONE }
+    private enum Latch { A, B, C, SHIFT, NONE }
+
+    static final String A = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_\u0000\u0001\u0002" +
+                            "\u0003\u0004\u0005\u0006\u0007\u0008\u0009\n\u000B\u000C\r\u000E\u000F\u0010\u0011" +
+                            "\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001F" +
+                            "\u00FF";
+    static final String B = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqr" +
+                            "stuvwxyz{|}~\u007F\u00FF";
+
+    private static final int CODE_SHIFT = 98;
+
+    private int[][] memoizedCost;
+    private Latch[][] minPath;
+
+    private boolean[] encode(String contents) {
+      memoizedCost = new int[4][contents.length()];
+      minPath = new Latch[4][contents.length()];
+
+      encode(contents, Charset.NONE, 0);
+
+      Collection<int[]> patterns = new ArrayList<>();
+      int[] checkSum = new int[] {0};
+      int[] checkWeight = new int[] {1};
+      int length = contents.length();
+      Charset charset = Charset.NONE;
+      for (int i = 0; i < length; i++) {
+        Latch latch = minPath[charset.ordinal()][i];
+        switch (latch) {
+          case A:
+            charset = Charset.A;
+            addPattern(patterns, i == 0 ? CODE_START_A : CODE_CODE_A, checkSum, checkWeight, i);
+            break;
+          case B:
+            charset = Charset.B;
+            addPattern(patterns, i == 0 ? CODE_START_B : CODE_CODE_B, checkSum, checkWeight, i);
+            break;
+          case C:
+            charset = Charset.C;
+            addPattern(patterns, i == 0 ? CODE_START_C : CODE_CODE_C, checkSum, checkWeight, i);
+            break;
+          case SHIFT:
+            addPattern(patterns, CODE_SHIFT, checkSum, checkWeight, i);
+            break;
+        }
+        if (charset == Charset.C) {
+          if (contents.charAt(i) == ESCAPE_FNC_1) {
+            addPattern(patterns, CODE_FNC_1, checkSum, checkWeight, i);
+          } else {
+            addPattern(patterns, Integer.parseInt(contents.substring(i, i + 2)), checkSum, checkWeight, i);
+            assert i + 1 < length; //the algorithm never leads to a single trailing digit in character set C
+            if (i + 1 < length) {
+              i++;
+            }
+          }
+        } else { // charset A or B
+          int patternIndex;
+          switch (contents.charAt(i)) {
+            case ESCAPE_FNC_1:
+              patternIndex = CODE_FNC_1;
+              break;
+            case ESCAPE_FNC_2:
+              patternIndex = CODE_FNC_2;
+              break;
+            case ESCAPE_FNC_3:
+              patternIndex = CODE_FNC_3;
+              break;
+            case ESCAPE_FNC_4:
+              if (charset == Charset.A && latch != Latch.SHIFT ||
+                  charset == Charset.B && latch == Latch.SHIFT) {
+                patternIndex = CODE_FNC_4_A;
+              } else {
+                patternIndex = CODE_FNC_4_B;
+              }
+              break;
+            default:
+              patternIndex = contents.charAt(i) - ' ';
+          }
+          if ((charset == Charset.A && latch != Latch.SHIFT ||
+               charset == Charset.B && latch == Latch.SHIFT) &&
+               patternIndex < 0) {
+            patternIndex += '`';
+          }
+          addPattern(patterns, patternIndex, checkSum, checkWeight, i);
+        }
+      }
+      memoizedCost = null;
+      minPath = null;
+      return produceResult(patterns, checkSum[0]);
+    }
+
+    private static void addPattern(Collection<int[]> patterns,
+                                  int patternIndex,
+                                  int[] checkSum,
+                                  int[] checkWeight,
+                                  int position) {
+      patterns.add(Code128Reader.CODE_PATTERNS[patternIndex]);
+      if (position != 0) {
+        checkWeight[0]++;
+      }
+      checkSum[0] += patternIndex * checkWeight[0];
+    }
+
+    private static boolean isDigit(char c) {
+      return c >= '0' && c <= '9';
+    }
+
+    private boolean canEncode(CharSequence contents, Charset charset,int position) {
+      char c = contents.charAt(position);
+      switch (charset) {
+        case A: return c == ESCAPE_FNC_1 ||
+                       c == ESCAPE_FNC_2 ||
+                       c == ESCAPE_FNC_3 ||
+                       c == ESCAPE_FNC_4 ||
+                       A.indexOf(c) >= 0;
+        case B: return c == ESCAPE_FNC_1 ||
+                       c == ESCAPE_FNC_2 ||
+                       c == ESCAPE_FNC_3 ||
+                       c == ESCAPE_FNC_4 ||
+                       B.indexOf(c) >= 0;
+        case C: return c == ESCAPE_FNC_1 ||
+                       (position + 1 < contents.length() &&
+                        isDigit(c) &&
+                        isDigit(contents.charAt(position + 1)));
+        default: return false;
+      }
+    }
+
+    /**
+     * Encode the string starting at position position starting with the character set charset
+     **/
+    private int encode(CharSequence contents, Charset charset, int position) {
+      assert position < contents.length();
+      int mCost = memoizedCost[charset.ordinal()][position];
+      if (mCost > 0) {
+        return mCost;
+      }
+
+      int minCost = Integer.MAX_VALUE;
+      Latch minLatch = Latch.NONE;
+      boolean atEnd = position + 1 >= contents.length();
+
+      Charset[] sets = new Charset[] { Charset.A, Charset.B };
+      for (int i = 0; i <= 1; i++) {
+        if (canEncode(contents, sets[i], position)) {
+          int cost =  1;
+          Latch latch = Latch.NONE;
+          if (charset != sets[i]) {
+            cost++;
+            latch = Latch.valueOf(sets[i].toString());
+          }
+          if (!atEnd) {
+            cost += encode(contents, sets[i], position + 1);
+          }
+          if (cost < minCost) {
+            minCost = cost;
+            minLatch = latch;
+          }
+          cost = 1;
+          if (charset == sets[(i + 1) % 2]) {
+            cost++;
+            latch = Latch.SHIFT;
+            if (!atEnd) {
+              cost += encode(contents, charset, position + 1);
+            }
+            if (cost < minCost) {
+              minCost = cost;
+              minLatch = latch;
+            }
+          }
+        }
+      }
+      if (canEncode(contents, Charset.C, position)) {
+        int cost = 1;
+        Latch latch = Latch.NONE;
+        if (charset != Charset.C) {
+          cost++;
+          latch = Latch.C;
+        }
+        int advance = contents.charAt(position) == ESCAPE_FNC_1 ? 1 : 2;
+        if (position + advance < contents.length()) {
+          cost += encode(contents, Charset.C, position + advance);
+        }
+        if (cost < minCost) {
+          minCost = cost;
+          minLatch = latch;
+        }
+      }
+      if (minCost == Integer.MAX_VALUE) {
+        throw new IllegalArgumentException("Bad character in input: ASCII value=" + (int) contents.charAt(position));
+      }
+      memoizedCost[charset.ordinal()][position] = minCost;
+      minPath[charset.ordinal()][position] = minLatch;
+      return minCost;
+    }
+  }
 }
diff --git a/core/src/main/java/com/google/zxing/oned/Code39Reader.java b/core/src/main/java/com/google/zxing/oned/Code39Reader.java
index 4b13859..35dfb7a 100644
--- a/core/src/main/java/com/google/zxing/oned/Code39Reader.java
+++ b/core/src/main/java/com/google/zxing/oned/Code39Reader.java
@@ -22,6 +22,7 @@ import com.google.zxing.DecodeHintType;
 import com.google.zxing.FormatException;
 import com.google.zxing.NotFoundException;
 import com.google.zxing.Result;
+import com.google.zxing.ResultMetadataType;
 import com.google.zxing.ResultPoint;
 import com.google.zxing.common.BitArray;
 
@@ -165,14 +166,16 @@ public final class Code39Reader extends OneDReader {
 
     float left = (start[1] + start[0]) / 2.0f;
     float right = lastStart + lastPatternSize / 2.0f;
-    return new Result(
+
+    Result resultObject = new Result(
         resultString,
         null,
         new ResultPoint[]{
             new ResultPoint(left, rowNumber),
             new ResultPoint(right, rowNumber)},
         BarcodeFormat.CODE_39);
-
+    resultObject.putMetadata(ResultMetadataType.SYMBOLOGY_IDENTIFIER, "]A0");
+    return resultObject;
   }
 
   private static int[] findAsteriskPattern(BitArray row, int[] counters) throws NotFoundException {
diff --git a/core/src/main/java/com/google/zxing/oned/Code39Writer.java b/core/src/main/java/com/google/zxing/oned/Code39Writer.java
index aab57a6..e46fc7c 100644
--- a/core/src/main/java/com/google/zxing/oned/Code39Writer.java
+++ b/core/src/main/java/com/google/zxing/oned/Code39Writer.java
@@ -48,8 +48,8 @@ public final class Code39Writer extends OneDimensionalCodeWriter {
         contents = tryToConvertToExtendedMode(contents);
         length = contents.length();
         if (length > 80) {
-          throw new IllegalArgumentException(
-              "Requested contents should be less than 80 digits long, but got " + length + " (extended full ASCII mode)");
+          throw new IllegalArgumentException("Requested contents should be less than 80 digits long, but got " +
+              length + " (extended full ASCII mode)");
         }
         break;
       }
@@ -82,57 +82,57 @@ public final class Code39Writer extends OneDimensionalCodeWriter {
   }
 
   private static String tryToConvertToExtendedMode(String contents) {
-     int length = contents.length();
-     StringBuilder extendedContent = new StringBuilder();
-     for (int i = 0; i < length; i++) {
-       char character = contents.charAt(i);
-       switch (character) {
-         case '\u0000':
-           extendedContent.append("%U");
-           break;
-         case ' ':
-         case '-':
-         case '.':
-           extendedContent.append(character);
-           break;
-         case '@':
-           extendedContent.append("%V");
-           break;
-         case '`':
-           extendedContent.append("%W");
-           break;
-         default:
-           if (character <= 26) {
-             extendedContent.append('$');
-             extendedContent.append((char) ('A' + (character - 1)));
-           } else if (character < ' ') {
-             extendedContent.append('%');
-             extendedContent.append((char) ('A' + (character - 27)));
-           } else if (character <= ',' || character == '/' || character == ':') {
-             extendedContent.append('/');
-             extendedContent.append((char) ('A' + (character - 33)));
-           } else if (character <= '9') {
-             extendedContent.append((char) ('0' + (character - 48)));
-           } else if (character <= '?') {
-             extendedContent.append('%');
-             extendedContent.append((char) ('F' + (character - 59)));
-           } else if (character <= 'Z') {
-             extendedContent.append((char) ('A' + (character - 65)));
-           } else if (character <= '_') {
-             extendedContent.append('%');
-             extendedContent.append((char) ('K' + (character - 91)));
-           } else if (character <= 'z') {
-             extendedContent.append('+');
-             extendedContent.append((char) ('A' + (character - 97)));
-           } else if (character <= 127) {
-             extendedContent.append('%');
-             extendedContent.append((char) ('P' + (character - 123)));
-           } else {
-             throw new IllegalArgumentException(
-               "Requested content contains a non-encodable character: '" + contents.charAt(i) + "'");
-           }
-           break;
-       }
+    int length = contents.length();
+    StringBuilder extendedContent = new StringBuilder();
+    for (int i = 0; i < length; i++) {
+      char character = contents.charAt(i);
+      switch (character) {
+        case '\u0000':
+          extendedContent.append("%U");
+          break;
+        case ' ':
+        case '-':
+        case '.':
+          extendedContent.append(character);
+          break;
+        case '@':
+          extendedContent.append("%V");
+          break;
+        case '`':
+          extendedContent.append("%W");
+          break;
+        default:
+          if (character <= 26) {
+            extendedContent.append('$');
+            extendedContent.append((char) ('A' + (character - 1)));
+          } else if (character < ' ') {
+            extendedContent.append('%');
+            extendedContent.append((char) ('A' + (character - 27)));
+          } else if (character <= ',' || character == '/' || character == ':') {
+            extendedContent.append('/');
+            extendedContent.append((char) ('A' + (character - 33)));
+          } else if (character <= '9') {
+            extendedContent.append((char) ('0' + (character - 48)));
+          } else if (character <= '?') {
+            extendedContent.append('%');
+            extendedContent.append((char) ('F' + (character - 59)));
+          } else if (character <= 'Z') {
+            extendedContent.append((char) ('A' + (character - 65)));
+          } else if (character <= '_') {
+            extendedContent.append('%');
+            extendedContent.append((char) ('K' + (character - 91)));
+          } else if (character <= 'z') {
+            extendedContent.append('+');
+            extendedContent.append((char) ('A' + (character - 97)));
+          } else if (character <= 127) {
+            extendedContent.append('%');
+            extendedContent.append((char) ('P' + (character - 123)));
+          } else {
+            throw new IllegalArgumentException(
+                "Requested content contains a non-encodable character: '" + contents.charAt(i) + "'");
+          }
+          break;
+      }
     }
 
     return extendedContent.toString();
diff --git a/core/src/main/java/com/google/zxing/oned/Code93Reader.java b/core/src/main/java/com/google/zxing/oned/Code93Reader.java
index c2dddbc..5aa203f 100644
--- a/core/src/main/java/com/google/zxing/oned/Code93Reader.java
+++ b/core/src/main/java/com/google/zxing/oned/Code93Reader.java
@@ -22,6 +22,7 @@ import com.google.zxing.DecodeHintType;
 import com.google.zxing.FormatException;
 import com.google.zxing.NotFoundException;
 import com.google.zxing.Result;
+import com.google.zxing.ResultMetadataType;
 import com.google.zxing.ResultPoint;
 import com.google.zxing.common.BitArray;
 
@@ -118,14 +119,16 @@ public final class Code93Reader extends OneDReader {
 
     float left = (start[1] + start[0]) / 2.0f;
     float right = lastStart + lastPatternSize / 2.0f;
-    return new Result(
+
+    Result resultObject = new Result(
         resultString,
         null,
         new ResultPoint[]{
             new ResultPoint(left, rowNumber),
             new ResultPoint(right, rowNumber)},
         BarcodeFormat.CODE_93);
-
+    resultObject.putMetadata(ResultMetadataType.SYMBOLOGY_IDENTIFIER, "]G0");
+    return resultObject;
   }
 
   private int[] findAsteriskPattern(BitArray row) throws NotFoundException {
diff --git a/core/src/main/java/com/google/zxing/oned/Code93Writer.java b/core/src/main/java/com/google/zxing/oned/Code93Writer.java
index a4bf84d..716c8b7 100644
--- a/core/src/main/java/com/google/zxing/oned/Code93Writer.java
+++ b/core/src/main/java/com/google/zxing/oned/Code93Writer.java
@@ -39,8 +39,8 @@ public class Code93Writer extends OneDimensionalCodeWriter {
     contents = convertToExtended(contents);
     int length = contents.length();
     if (length > 80) {
-      throw new IllegalArgumentException(
-        "Requested contents should be less than 80 digits long after converting to extended encoding, but got " + length);
+      throw new IllegalArgumentException("Requested contents should be less than 80 digits long after " +
+          "converting to extended encoding, but got " + length);
     }
 
     //length of code + 2 start/stop characters + 2 checksums, each of 9 bits, plus a termination bar
diff --git a/core/src/main/java/com/google/zxing/oned/ITFReader.java b/core/src/main/java/com/google/zxing/oned/ITFReader.java
index 528e59e..a4e6ec3 100644
--- a/core/src/main/java/com/google/zxing/oned/ITFReader.java
+++ b/core/src/main/java/com/google/zxing/oned/ITFReader.java
@@ -21,6 +21,7 @@ import com.google.zxing.DecodeHintType;
 import com.google.zxing.FormatException;
 import com.google.zxing.NotFoundException;
 import com.google.zxing.Result;
+import com.google.zxing.ResultMetadataType;
 import com.google.zxing.ResultPoint;
 import com.google.zxing.common.BitArray;
 
@@ -139,12 +140,14 @@ public final class ITFReader extends OneDReader {
       throw FormatException.getFormatInstance();
     }
 
-    return new Result(
+    Result resultObject = new Result(
         resultString,
         null, // no natural byte representation for these barcodes
         new ResultPoint[] {new ResultPoint(startRange[1], rowNumber),
                            new ResultPoint(endRange[0], rowNumber)},
         BarcodeFormat.ITF);
+    resultObject.putMetadata(ResultMetadataType.SYMBOLOGY_IDENTIFIER, "]I0");
+    return resultObject;
   }
 
   /**
diff --git a/core/src/main/java/com/google/zxing/oned/MultiFormatOneDReader.java b/core/src/main/java/com/google/zxing/oned/MultiFormatOneDReader.java
index fd25f63..1dd3394 100644
--- a/core/src/main/java/com/google/zxing/oned/MultiFormatOneDReader.java
+++ b/core/src/main/java/com/google/zxing/oned/MultiFormatOneDReader.java
@@ -64,13 +64,13 @@ public final class MultiFormatOneDReader extends OneDReader {
         readers.add(new Code128Reader());
       }
       if (possibleFormats.contains(BarcodeFormat.ITF)) {
-         readers.add(new ITFReader());
+        readers.add(new ITFReader());
       }
       if (possibleFormats.contains(BarcodeFormat.CODABAR)) {
-         readers.add(new CodaBarReader());
+        readers.add(new CodaBarReader());
       }
       if (possibleFormats.contains(BarcodeFormat.RSS_14)) {
-         readers.add(new RSS14Reader());
+        readers.add(new RSS14Reader());
       }
       if (possibleFormats.contains(BarcodeFormat.RSS_EXPANDED)) {
         readers.add(new RSSExpandedReader());
diff --git a/core/src/main/java/com/google/zxing/oned/OneDimensionalCodeWriter.java b/core/src/main/java/com/google/zxing/oned/OneDimensionalCodeWriter.java
index 3ad398e..d277d2e 100644
--- a/core/src/main/java/com/google/zxing/oned/OneDimensionalCodeWriter.java
+++ b/core/src/main/java/com/google/zxing/oned/OneDimensionalCodeWriter.java
@@ -33,6 +33,25 @@ import java.util.regex.Pattern;
 public abstract class OneDimensionalCodeWriter implements Writer {
   private static final Pattern NUMERIC = Pattern.compile("[0-9]+");
 
+  /**
+   * Encode the contents to boolean array expression of one-dimensional barcode.
+   * Start code and end code should be included in result, and side margins should not be included.
+   *
+   * @param contents barcode contents to encode
+   * @return a {@code boolean[]} of horizontal pixels (false = white, true = black)
+   */
+  public abstract boolean[] encode(String contents);
+
+  /**
+   * Can be overwritten if the encode requires to read the hints map. Otherwise it defaults to {@code encode}.
+   * @param contents barcode contents to encode
+   * @param hints encoding hints
+   * @return a {@code boolean[]} of horizontal pixels (false = white, true = black)
+   */
+  protected boolean[] encode(String contents, Map<EncodeHintType,?> hints) {
+    return encode(contents);
+  }
+
   @Override
   public final BitMatrix encode(String contents, BarcodeFormat format, int width, int height) {
     return encode(contents, format, width, height, null);
@@ -70,7 +89,7 @@ public abstract class OneDimensionalCodeWriter implements Writer {
       sidesMargin = Integer.parseInt(hints.get(EncodeHintType.MARGIN).toString());
     }
 
-    boolean[] code = encode(contents);
+    boolean[] code = encode(contents, hints);
     return renderResult(code, width, height, sidesMargin);
   }
 
@@ -135,14 +154,5 @@ public abstract class OneDimensionalCodeWriter implements Writer {
     // This seems like a decent idea for a default for all formats.
     return 10;
   }
-
-  /**
-   * Encode the contents to boolean array expression of one-dimensional barcode.
-   * Start code and end code should be included in result, and side margins should not be included.
-   *
-   * @param contents barcode contents to encode
-   * @return a {@code boolean[]} of horizontal pixels (false = white, true = black)
-   */
-  public abstract boolean[] encode(String contents);
 }
 
diff --git a/core/src/main/java/com/google/zxing/oned/UPCEANReader.java b/core/src/main/java/com/google/zxing/oned/UPCEANReader.java
index 8e271ee..f2a00bb 100644
--- a/core/src/main/java/com/google/zxing/oned/UPCEANReader.java
+++ b/core/src/main/java/com/google/zxing/oned/UPCEANReader.java
@@ -153,6 +153,7 @@ public abstract class UPCEANReader extends OneDReader {
 
     ResultPointCallback resultPointCallback = hints == null ? null :
         (ResultPointCallback) hints.get(DecodeHintType.NEED_RESULT_POINT_CALLBACK);
+    int symbologyIdentifier = 0;
 
     if (resultPointCallback != null) {
       resultPointCallback.foundPossibleResultPoint(new ResultPoint(
@@ -239,6 +240,11 @@ public abstract class UPCEANReader extends OneDReader {
         decodeResult.putMetadata(ResultMetadataType.POSSIBLE_COUNTRY, countryID);
       }
     }
+    if (format == BarcodeFormat.EAN_8) {
+      symbologyIdentifier = 4;
+    }
+
+    decodeResult.putMetadata(ResultMetadataType.SYMBOLOGY_IDENTIFIER, "]E" + symbologyIdentifier);
 
     return decodeResult;
   }
diff --git a/core/src/main/java/com/google/zxing/oned/rss/RSS14Reader.java b/core/src/main/java/com/google/zxing/oned/rss/RSS14Reader.java
index bb20d62..4042244 100644
--- a/core/src/main/java/com/google/zxing/oned/rss/RSS14Reader.java
+++ b/core/src/main/java/com/google/zxing/oned/rss/RSS14Reader.java
@@ -20,6 +20,7 @@ import com.google.zxing.BarcodeFormat;
 import com.google.zxing.DecodeHintType;
 import com.google.zxing.NotFoundException;
 import com.google.zxing.Result;
+import com.google.zxing.ResultMetadataType;
 import com.google.zxing.ResultPoint;
 import com.google.zxing.ResultPointCallback;
 import com.google.zxing.common.BitArray;
@@ -131,19 +132,16 @@ public final class RSS14Reader extends AbstractRSSReader {
 
     ResultPoint[] leftPoints = leftPair.getFinderPattern().getResultPoints();
     ResultPoint[] rightPoints = rightPair.getFinderPattern().getResultPoints();
-    return new Result(
+    Result result = new Result(
         buffer.toString(),
         null,
         new ResultPoint[] { leftPoints[0], leftPoints[1], rightPoints[0], rightPoints[1], },
         BarcodeFormat.RSS_14);
+    result.putMetadata(ResultMetadataType.SYMBOLOGY_IDENTIFIER, "]e0");
+    return result;
   }
 
   private static boolean checkChecksum(Pair leftPair, Pair rightPair) {
-    //int leftFPValue = leftPair.getFinderPattern().getValue();
-    //int rightFPValue = rightPair.getFinderPattern().getValue();
-    //if ((leftFPValue == 0 && rightFPValue == 8) ||
-    //    (leftFPValue == 8 && rightFPValue == 0)) {
-    //}
     int checkValue = (leftPair.getChecksumPortion() + 16 * rightPair.getChecksumPortion()) % 79;
     int targetCheckValue =
         9 * leftPair.getFinderPattern().getValue() + rightPair.getFinderPattern().getValue();
@@ -162,7 +160,7 @@ public final class RSS14Reader extends AbstractRSSReader {
       FinderPattern pattern = parseFoundFinderPattern(row, rowNumber, right, startEnd);
 
       ResultPointCallback resultPointCallback = hints == null ? null :
-        (ResultPointCallback) hints.get(DecodeHintType.NEED_RESULT_POINT_CALLBACK);
+          (ResultPointCallback) hints.get(DecodeHintType.NEED_RESULT_POINT_CALLBACK);
 
       if (resultPointCallback != null) {
         startEnd = pattern.getStartEnd();
diff --git a/core/src/main/java/com/google/zxing/oned/rss/expanded/ExpandedRow.java b/core/src/main/java/com/google/zxing/oned/rss/expanded/ExpandedRow.java
index b826c0e..38048f4 100644
--- a/core/src/main/java/com/google/zxing/oned/rss/expanded/ExpandedRow.java
+++ b/core/src/main/java/com/google/zxing/oned/rss/expanded/ExpandedRow.java
@@ -26,13 +26,10 @@ final class ExpandedRow {
 
   private final List<ExpandedPair> pairs;
   private final int rowNumber;
-  /** Did this row of the image have to be reversed (mirrored) to recognize the pairs? */
-  private final boolean wasReversed;
 
-  ExpandedRow(List<ExpandedPair> pairs, int rowNumber, boolean wasReversed) {
+  ExpandedRow(List<ExpandedPair> pairs, int rowNumber) {
     this.pairs = new ArrayList<>(pairs);
     this.rowNumber = rowNumber;
-    this.wasReversed = wasReversed;
   }
 
   List<ExpandedPair> getPairs() {
@@ -61,12 +58,12 @@ final class ExpandedRow {
       return false;
     }
     ExpandedRow that = (ExpandedRow) o;
-    return this.pairs.equals(that.pairs) && wasReversed == that.wasReversed;
+    return this.pairs.equals(that.pairs);
   }
 
   @Override
   public int hashCode() {
-    return pairs.hashCode() ^ Boolean.valueOf(wasReversed).hashCode();
+    return pairs.hashCode();
   }
 
 }
diff --git a/core/src/main/java/com/google/zxing/oned/rss/expanded/RSSExpandedReader.java b/core/src/main/java/com/google/zxing/oned/rss/expanded/RSSExpandedReader.java
index bce3526..6171885 100644
--- a/core/src/main/java/com/google/zxing/oned/rss/expanded/RSSExpandedReader.java
+++ b/core/src/main/java/com/google/zxing/oned/rss/expanded/RSSExpandedReader.java
@@ -31,6 +31,7 @@ import com.google.zxing.DecodeHintType;
 import com.google.zxing.FormatException;
 import com.google.zxing.NotFoundException;
 import com.google.zxing.Result;
+import com.google.zxing.ResultMetadataType;
 import com.google.zxing.ResultPoint;
 import com.google.zxing.common.BitArray;
 import com.google.zxing.common.detector.MathUtils;
@@ -100,6 +101,7 @@ public final class RSSExpandedReader extends AbstractRSSReader {
   private static final int FINDER_PAT_E = 4;
   private static final int FINDER_PAT_F = 5;
 
+  @SuppressWarnings("checkstyle:lineLength")
   private static final int[][] FINDER_PATTERN_SEQUENCES = {
     { FINDER_PAT_A, FINDER_PAT_A },
     { FINDER_PAT_A, FINDER_PAT_B, FINDER_PAT_B },
@@ -290,7 +292,7 @@ public final class RSSExpandedReader extends AbstractRSSReader {
       return;
     }
 
-    this.rows.add(insertPos, new ExpandedRow(this.pairs, rowNumber, false));
+    this.rows.add(insertPos, new ExpandedRow(this.pairs, rowNumber));
 
     removePartialRows(this.pairs, this.rows);
   }
@@ -355,12 +357,14 @@ public final class RSSExpandedReader extends AbstractRSSReader {
     ResultPoint[] firstPoints = pairs.get(0).getFinderPattern().getResultPoints();
     ResultPoint[] lastPoints  = pairs.get(pairs.size() - 1).getFinderPattern().getResultPoints();
 
-    return new Result(
+    Result result = new Result(
           resultingString,
           null,
           new ResultPoint[]{firstPoints[0], firstPoints[1], lastPoints[0], lastPoints[1]},
           BarcodeFormat.RSS_EXPANDED
       );
+    result.putMetadata(ResultMetadataType.SYMBOLOGY_IDENTIFIER, "]e0");
+    return result;
   }
 
   private boolean checkChecksum() {
diff --git a/core/src/main/java/com/google/zxing/oned/rss/expanded/decoders/AI01393xDecoder.java b/core/src/main/java/com/google/zxing/oned/rss/expanded/decoders/AI01393xDecoder.java
index 153b425..0767a96 100644
--- a/core/src/main/java/com/google/zxing/oned/rss/expanded/decoders/AI01393xDecoder.java
+++ b/core/src/main/java/com/google/zxing/oned/rss/expanded/decoders/AI01393xDecoder.java
@@ -60,7 +60,7 @@ final class AI01393xDecoder extends AI01decoder {
     buf.append(')');
 
     int firstThreeDigits = this.getGeneralDecoder().extractNumericValueFromBitArray(
-      HEADER_SIZE + GTIN_SIZE + LAST_DIGIT_SIZE, FIRST_THREE_DIGITS_SIZE);
+        HEADER_SIZE + GTIN_SIZE + LAST_DIGIT_SIZE, FIRST_THREE_DIGITS_SIZE);
     if (firstThreeDigits / 100 == 0) {
       buf.append('0');
     }
@@ -70,7 +70,7 @@ final class AI01393xDecoder extends AI01decoder {
     buf.append(firstThreeDigits);
 
     DecodedInformation generalInformation = this.getGeneralDecoder().decodeGeneralPurposeField(
-      HEADER_SIZE + GTIN_SIZE + LAST_DIGIT_SIZE + FIRST_THREE_DIGITS_SIZE, null);
+        HEADER_SIZE + GTIN_SIZE + LAST_DIGIT_SIZE + FIRST_THREE_DIGITS_SIZE, null);
     buf.append(generalInformation.getNewString());
 
     return buf.toString();
diff --git a/core/src/main/java/com/google/zxing/oned/rss/expanded/decoders/AI01decoder.java b/core/src/main/java/com/google/zxing/oned/rss/expanded/decoders/AI01decoder.java
index 795015c..0034500 100644
--- a/core/src/main/java/com/google/zxing/oned/rss/expanded/decoders/AI01decoder.java
+++ b/core/src/main/java/com/google/zxing/oned/rss/expanded/decoders/AI01decoder.java
@@ -60,7 +60,7 @@ abstract class AI01decoder extends AbstractExpandedDecoder {
       buf.append(currentBlock);
     }
 
-      appendCheckDigit(buf, initialBufferPosition);
+    appendCheckDigit(buf, initialBufferPosition);
   }
 
   private static void appendCheckDigit(StringBuilder buf, int currentPos) {
diff --git a/core/src/main/java/com/google/zxing/oned/rss/expanded/decoders/BlockParsedResult.java b/core/src/main/java/com/google/zxing/oned/rss/expanded/decoders/BlockParsedResult.java
index a959355..bff40b4 100644
--- a/core/src/main/java/com/google/zxing/oned/rss/expanded/decoders/BlockParsedResult.java
+++ b/core/src/main/java/com/google/zxing/oned/rss/expanded/decoders/BlockParsedResult.java
@@ -35,8 +35,8 @@ final class BlockParsedResult {
   private final DecodedInformation decodedInformation;
   private final boolean finished;
 
-  BlockParsedResult(boolean finished) {
-    this(null, finished);
+  BlockParsedResult() {
+    this(null, false);
   }
 
   BlockParsedResult(DecodedInformation information, boolean finished) {
diff --git a/core/src/main/java/com/google/zxing/oned/rss/expanded/decoders/FieldParser.java b/core/src/main/java/com/google/zxing/oned/rss/expanded/decoders/FieldParser.java
index cb9396d..13206bc 100644
--- a/core/src/main/java/com/google/zxing/oned/rss/expanded/decoders/FieldParser.java
+++ b/core/src/main/java/com/google/zxing/oned/rss/expanded/decoders/FieldParser.java
@@ -28,164 +28,106 @@ package com.google.zxing.oned.rss.expanded.decoders;
 
 import com.google.zxing.NotFoundException;
 
+import java.util.HashMap;
+import java.util.Map;
+
 /**
  * @author Pablo Orduña, University of Deusto (pablo.orduna@deusto.es)
  * @author Eduardo Castillejo, University of Deusto (eduardo.castillejo@deusto.es)
  */
 final class FieldParser {
 
-  private static final Object VARIABLE_LENGTH = new Object();
-
-  private static final Object [][] TWO_DIGIT_DATA_LENGTH = {
-    // "DIGITS", new Integer(LENGTH)
-    //    or
-    // "DIGITS", VARIABLE_LENGTH, new Integer(MAX_SIZE)
-
-    { "00", 18},
-    { "01", 14},
-    { "02", 14},
-
-    { "10", VARIABLE_LENGTH, 20},
-    { "11", 6},
-    { "12", 6},
-    { "13", 6},
-    { "15", 6},
-    { "17", 6},
+  private static final Map<String,DataLength> TWO_DIGIT_DATA_LENGTH = new HashMap<>();
+  static {
+    TWO_DIGIT_DATA_LENGTH.put("00", DataLength.fixed(18));
+    TWO_DIGIT_DATA_LENGTH.put("01", DataLength.fixed(14));
+    TWO_DIGIT_DATA_LENGTH.put("02", DataLength.fixed(14));
+    TWO_DIGIT_DATA_LENGTH.put("10", DataLength.variable(20));
+    TWO_DIGIT_DATA_LENGTH.put("11", DataLength.fixed(6));
+    TWO_DIGIT_DATA_LENGTH.put("12", DataLength.fixed(6));
+    TWO_DIGIT_DATA_LENGTH.put("13", DataLength.fixed(6));
+    TWO_DIGIT_DATA_LENGTH.put("15", DataLength.fixed(6));
+    TWO_DIGIT_DATA_LENGTH.put("17", DataLength.fixed(6));
+    TWO_DIGIT_DATA_LENGTH.put("20", DataLength.fixed(2));
+    TWO_DIGIT_DATA_LENGTH.put("21", DataLength.variable(20));
+    TWO_DIGIT_DATA_LENGTH.put("22", DataLength.variable(29));
+    TWO_DIGIT_DATA_LENGTH.put("30", DataLength.variable(8));
+    TWO_DIGIT_DATA_LENGTH.put("37", DataLength.variable(8));
+    //internal company codes
+    for (int i = 90; i <= 99; i++) {
+      TWO_DIGIT_DATA_LENGTH.put(String.valueOf(i), DataLength.variable(30));
+    }
+  }
 
-    { "20", 2},
-    { "21", VARIABLE_LENGTH, 20},
-    { "22", VARIABLE_LENGTH, 29},
+  private static final Map<String,DataLength> THREE_DIGIT_DATA_LENGTH = new HashMap<>();
+  static {
+    THREE_DIGIT_DATA_LENGTH.put("240", DataLength.variable(30));
+    THREE_DIGIT_DATA_LENGTH.put("241", DataLength.variable(30));
+    THREE_DIGIT_DATA_LENGTH.put("242", DataLength.variable(6));
+    THREE_DIGIT_DATA_LENGTH.put("250", DataLength.variable(30));
+    THREE_DIGIT_DATA_LENGTH.put("251", DataLength.variable(30));
+    THREE_DIGIT_DATA_LENGTH.put("253", DataLength.variable(17));
+    THREE_DIGIT_DATA_LENGTH.put("254", DataLength.variable(20));
+    THREE_DIGIT_DATA_LENGTH.put("400", DataLength.variable(30));
+    THREE_DIGIT_DATA_LENGTH.put("401", DataLength.variable(30));
+    THREE_DIGIT_DATA_LENGTH.put("402", DataLength.fixed(17));
+    THREE_DIGIT_DATA_LENGTH.put("403", DataLength.variable(30));
+    THREE_DIGIT_DATA_LENGTH.put("410", DataLength.fixed(13));
+    THREE_DIGIT_DATA_LENGTH.put("411", DataLength.fixed(13));
+    THREE_DIGIT_DATA_LENGTH.put("412", DataLength.fixed(13));
+    THREE_DIGIT_DATA_LENGTH.put("413", DataLength.fixed(13));
+    THREE_DIGIT_DATA_LENGTH.put("414", DataLength.fixed(13));
+    THREE_DIGIT_DATA_LENGTH.put("420", DataLength.variable(20));
+    THREE_DIGIT_DATA_LENGTH.put("421", DataLength.variable(15));
+    THREE_DIGIT_DATA_LENGTH.put("422", DataLength.fixed(3));
+    THREE_DIGIT_DATA_LENGTH.put("423", DataLength.variable(15));
+    THREE_DIGIT_DATA_LENGTH.put("424", DataLength.fixed(3));
+    THREE_DIGIT_DATA_LENGTH.put("425", DataLength.fixed(3));
+    THREE_DIGIT_DATA_LENGTH.put("426", DataLength.fixed(3));
+  }
 
-    { "30", VARIABLE_LENGTH, 8},
-    { "37", VARIABLE_LENGTH, 8},
+  private static final Map<String,DataLength> THREE_DIGIT_PLUS_DIGIT_DATA_LENGTH = new HashMap<>();
+  static {
+    for (int i = 310; i <= 316; i++) {
+      THREE_DIGIT_PLUS_DIGIT_DATA_LENGTH.put(String.valueOf(i), DataLength.fixed(6));
+    }
+    for (int i = 320; i <= 336; i++) {
+      THREE_DIGIT_PLUS_DIGIT_DATA_LENGTH.put(String.valueOf(i), DataLength.fixed(6));
+    }
+    for (int i = 340; i <= 357; i++) {
+      THREE_DIGIT_PLUS_DIGIT_DATA_LENGTH.put(String.valueOf(i), DataLength.fixed(6));
+    }
+    for (int i = 360; i <= 369; i++) {
+      THREE_DIGIT_PLUS_DIGIT_DATA_LENGTH.put(String.valueOf(i), DataLength.fixed(6));
+    }
+    THREE_DIGIT_PLUS_DIGIT_DATA_LENGTH.put("390", DataLength.variable(15));
+    THREE_DIGIT_PLUS_DIGIT_DATA_LENGTH.put("391", DataLength.variable(18));
+    THREE_DIGIT_PLUS_DIGIT_DATA_LENGTH.put("392", DataLength.variable(15));
+    THREE_DIGIT_PLUS_DIGIT_DATA_LENGTH.put("393", DataLength.variable(18));
+    THREE_DIGIT_PLUS_DIGIT_DATA_LENGTH.put("703", DataLength.variable(30));
+  }
 
-    //internal company codes
-    { "90", VARIABLE_LENGTH, 30},
-    { "91", VARIABLE_LENGTH, 30},
-    { "92", VARIABLE_LENGTH, 30},
-    { "93", VARIABLE_LENGTH, 30},
-    { "94", VARIABLE_LENGTH, 30},
-    { "95", VARIABLE_LENGTH, 30},
-    { "96", VARIABLE_LENGTH, 30},
-    { "97", VARIABLE_LENGTH, 30},
-    { "98", VARIABLE_LENGTH, 30},
-    { "99", VARIABLE_LENGTH, 30},
-  };
-
-  private static final Object [][] THREE_DIGIT_DATA_LENGTH = {
-    // Same format as above
-
-    { "240", VARIABLE_LENGTH, 30},
-    { "241", VARIABLE_LENGTH, 30},
-    { "242", VARIABLE_LENGTH, 6},
-    { "250", VARIABLE_LENGTH, 30},
-    { "251", VARIABLE_LENGTH, 30},
-    { "253", VARIABLE_LENGTH, 17},
-    { "254", VARIABLE_LENGTH, 20},
-
-    { "400", VARIABLE_LENGTH, 30},
-    { "401", VARIABLE_LENGTH, 30},
-    { "402", 17},
-    { "403", VARIABLE_LENGTH, 30},
-    { "410", 13},
-    { "411", 13},
-    { "412", 13},
-    { "413", 13},
-    { "414", 13},
-    { "420", VARIABLE_LENGTH, 20},
-    { "421", VARIABLE_LENGTH, 15},
-    { "422", 3},
-    { "423", VARIABLE_LENGTH, 15},
-    { "424", 3},
-    { "425", 3},
-    { "426", 3},
-  };
-
-  private static final Object [][] THREE_DIGIT_PLUS_DIGIT_DATA_LENGTH = {
-    // Same format as above
-
-    { "310", 6},
-    { "311", 6},
-    { "312", 6},
-    { "313", 6},
-    { "314", 6},
-    { "315", 6},
-    { "316", 6},
-    { "320", 6},
-    { "321", 6},
-    { "322", 6},
-    { "323", 6},
-    { "324", 6},
-    { "325", 6},
-    { "326", 6},
-    { "327", 6},
-    { "328", 6},
-    { "329", 6},
-    { "330", 6},
-    { "331", 6},
-    { "332", 6},
-    { "333", 6},
-    { "334", 6},
-    { "335", 6},
-    { "336", 6},
-    { "340", 6},
-    { "341", 6},
-    { "342", 6},
-    { "343", 6},
-    { "344", 6},
-    { "345", 6},
-    { "346", 6},
-    { "347", 6},
-    { "348", 6},
-    { "349", 6},
-    { "350", 6},
-    { "351", 6},
-    { "352", 6},
-    { "353", 6},
-    { "354", 6},
-    { "355", 6},
-    { "356", 6},
-    { "357", 6},
-    { "360", 6},
-    { "361", 6},
-    { "362", 6},
-    { "363", 6},
-    { "364", 6},
-    { "365", 6},
-    { "366", 6},
-    { "367", 6},
-    { "368", 6},
-    { "369", 6},
-    { "390", VARIABLE_LENGTH, 15},
-    { "391", VARIABLE_LENGTH, 18},
-    { "392", VARIABLE_LENGTH, 15},
-    { "393", VARIABLE_LENGTH, 18},
-    { "703", VARIABLE_LENGTH, 30},
-  };
-
-  private static final Object [][] FOUR_DIGIT_DATA_LENGTH = {
-    // Same format as above
-
-    { "7001", 13},
-    { "7002", VARIABLE_LENGTH, 30},
-    { "7003", 10},
-
-    { "8001", 14},
-    { "8002", VARIABLE_LENGTH, 20},
-    { "8003", VARIABLE_LENGTH, 30},
-    { "8004", VARIABLE_LENGTH, 30},
-    { "8005", 6},
-    { "8006", 18},
-    { "8007", VARIABLE_LENGTH, 30},
-    { "8008", VARIABLE_LENGTH, 12},
-    { "8018", 18},
-    { "8020", VARIABLE_LENGTH, 25},
-    { "8100", 6},
-    { "8101", 10},
-    { "8102", 2},
-    { "8110", VARIABLE_LENGTH, 70},
-    { "8200", VARIABLE_LENGTH, 70},
-  };
+  private static final Map<String,DataLength> FOUR_DIGIT_DATA_LENGTH = new HashMap<>();
+  static {
+    FOUR_DIGIT_DATA_LENGTH.put("7001", DataLength.fixed(13));
+    FOUR_DIGIT_DATA_LENGTH.put("7002", DataLength.variable(30));
+    FOUR_DIGIT_DATA_LENGTH.put("7003", DataLength.fixed(10));
+    FOUR_DIGIT_DATA_LENGTH.put("8001", DataLength.fixed(14));
+    FOUR_DIGIT_DATA_LENGTH.put("8002", DataLength.variable(20));
+    FOUR_DIGIT_DATA_LENGTH.put("8003", DataLength.variable(30));
+    FOUR_DIGIT_DATA_LENGTH.put("8004", DataLength.variable(30));
+    FOUR_DIGIT_DATA_LENGTH.put("8005", DataLength.fixed(6));
+    FOUR_DIGIT_DATA_LENGTH.put("8006", DataLength.fixed(18));
+    FOUR_DIGIT_DATA_LENGTH.put("8007", DataLength.variable(30));
+    FOUR_DIGIT_DATA_LENGTH.put("8008", DataLength.variable(12));
+    FOUR_DIGIT_DATA_LENGTH.put("8018", DataLength.fixed(18));
+    FOUR_DIGIT_DATA_LENGTH.put("8020", DataLength.variable(25));
+    FOUR_DIGIT_DATA_LENGTH.put("8100", DataLength.fixed(6));
+    FOUR_DIGIT_DATA_LENGTH.put("8101", DataLength.fixed(10));
+    FOUR_DIGIT_DATA_LENGTH.put("8102", DataLength.fixed(2));
+    FOUR_DIGIT_DATA_LENGTH.put("8110", DataLength.variable(70));
+    FOUR_DIGIT_DATA_LENGTH.put("8200", DataLength.variable(70));
+  }
 
   private FieldParser() {
   }
@@ -201,15 +143,12 @@ final class FieldParser {
       throw NotFoundException.getNotFoundInstance();
     }
 
-    String firstTwoDigits = rawInformation.substring(0, 2);
-
-    for (Object[] dataLength : TWO_DIGIT_DATA_LENGTH) {
-      if (dataLength[0].equals(firstTwoDigits)) {
-        if (dataLength[1] == VARIABLE_LENGTH) {
-          return processVariableAI(2, (Integer) dataLength[2], rawInformation);
-        }
-        return processFixedAI(2, (Integer) dataLength[1], rawInformation);
+    DataLength twoDigitDataLength = TWO_DIGIT_DATA_LENGTH.get(rawInformation.substring(0, 2));
+    if (twoDigitDataLength != null) {
+      if (twoDigitDataLength.variable) {
+        return processVariableAI(2, twoDigitDataLength.length, rawInformation);
       }
+      return processFixedAI(2, twoDigitDataLength.length, rawInformation);
     }
 
     if (rawInformation.length() < 3) {
@@ -217,39 +156,32 @@ final class FieldParser {
     }
 
     String firstThreeDigits = rawInformation.substring(0, 3);
-
-    for (Object[] dataLength : THREE_DIGIT_DATA_LENGTH) {
-      if (dataLength[0].equals(firstThreeDigits)) {
-        if (dataLength[1] == VARIABLE_LENGTH) {
-          return processVariableAI(3, (Integer) dataLength[2], rawInformation);
-        }
-        return processFixedAI(3, (Integer) dataLength[1], rawInformation);
-      }
-    }
-
-
-    for (Object[] dataLength : THREE_DIGIT_PLUS_DIGIT_DATA_LENGTH) {
-      if (dataLength[0].equals(firstThreeDigits)) {
-        if (dataLength[1] == VARIABLE_LENGTH) {
-          return processVariableAI(4, (Integer) dataLength[2], rawInformation);
-        }
-        return processFixedAI(4, (Integer) dataLength[1], rawInformation);
+    DataLength threeDigitDataLength = THREE_DIGIT_DATA_LENGTH.get(firstThreeDigits);
+    if (threeDigitDataLength != null) {
+      if (threeDigitDataLength.variable) {
+        return processVariableAI(3, threeDigitDataLength.length, rawInformation);
       }
+      return processFixedAI(3, threeDigitDataLength.length, rawInformation);
     }
 
     if (rawInformation.length() < 4) {
       throw NotFoundException.getNotFoundInstance();
     }
 
-    String firstFourDigits = rawInformation.substring(0, 4);
+    DataLength threeDigitPlusDigitDataLength = THREE_DIGIT_PLUS_DIGIT_DATA_LENGTH.get(firstThreeDigits);
+    if (threeDigitPlusDigitDataLength != null) {
+      if (threeDigitPlusDigitDataLength.variable) {
+        return processVariableAI(4, threeDigitPlusDigitDataLength.length, rawInformation);
+      }
+      return processFixedAI(4, threeDigitPlusDigitDataLength.length, rawInformation);
+    }
 
-    for (Object[] dataLength : FOUR_DIGIT_DATA_LENGTH) {
-      if (dataLength[0].equals(firstFourDigits)) {
-        if (dataLength[1] == VARIABLE_LENGTH) {
-          return processVariableAI(4, (Integer) dataLength[2], rawInformation);
-        }
-        return processFixedAI(4, (Integer) dataLength[1], rawInformation);
+    DataLength firstFourDigitLength = FOUR_DIGIT_DATA_LENGTH.get(rawInformation.substring(0, 4));
+    if (firstFourDigitLength != null) {
+      if (firstFourDigitLength.variable) {
+        return processVariableAI(4, firstFourDigitLength.length, rawInformation);
       }
+      return processFixedAI(4, firstFourDigitLength.length, rawInformation);
     }
 
     throw NotFoundException.getNotFoundInstance();
@@ -283,4 +215,25 @@ final class FieldParser {
     String parsedAI = parseFieldsInGeneralPurpose(remaining);
     return parsedAI == null ? result : result + parsedAI;
   }
+
+  private static final class DataLength {
+
+    final boolean variable;
+    final int length;
+
+    private DataLength(boolean variable, int length) {
+      this.variable = variable;
+      this.length = length;
+    }
+
+    static DataLength fixed(int length) {
+      return new DataLength(false, length);
+    }
+
+    static DataLength variable(int length) {
+      return new DataLength(true, length);
+    }
+
+  }
+
 }
diff --git a/core/src/main/java/com/google/zxing/oned/rss/expanded/decoders/GeneralAppIdDecoder.java b/core/src/main/java/com/google/zxing/oned/rss/expanded/decoders/GeneralAppIdDecoder.java
index eb8ecf8..a128860 100644
--- a/core/src/main/java/com/google/zxing/oned/rss/expanded/decoders/GeneralAppIdDecoder.java
+++ b/core/src/main/java/com/google/zxing/oned/rss/expanded/decoders/GeneralAppIdDecoder.java
@@ -185,7 +185,7 @@ final class GeneralAppIdDecoder {
       current.setAlpha();
       current.incrementPosition(4);
     }
-    return new BlockParsedResult(false);
+    return new BlockParsedResult();
   }
 
   private BlockParsedResult parseIsoIec646Block() throws FormatException {
@@ -212,7 +212,7 @@ final class GeneralAppIdDecoder {
 
       current.setAlpha();
     }
-    return new BlockParsedResult(false);
+    return new BlockParsedResult();
   }
 
   private BlockParsedResult parseAlphaBlock() {
@@ -240,7 +240,7 @@ final class GeneralAppIdDecoder {
 
       current.setIsoIec646();
     }
-    return new BlockParsedResult(false);
+    return new BlockParsedResult();
   }
 
   private boolean isStillIsoIec646(int pos) {
diff --git a/core/src/main/java/com/google/zxing/pdf417/PDF417Reader.java b/core/src/main/java/com/google/zxing/pdf417/PDF417Reader.java
index 145d606..142e3be 100644
--- a/core/src/main/java/com/google/zxing/pdf417/PDF417Reader.java
+++ b/core/src/main/java/com/google/zxing/pdf417/PDF417Reader.java
@@ -81,7 +81,7 @@ public final class PDF417Reader implements Reader, MultipleBarcodeReader {
     }
   }
 
-  private static Result[] decode(BinaryBitmap image, Map<DecodeHintType, ?> hints, boolean multiple) 
+  private static Result[] decode(BinaryBitmap image, Map<DecodeHintType, ?> hints, boolean multiple)
       throws NotFoundException, FormatException, ChecksumException {
     List<Result> results = new ArrayList<>();
     PDF417DetectorResult detectorResult = Detector.detect(image, hints, multiple);
@@ -94,6 +94,8 @@ public final class PDF417Reader implements Reader, MultipleBarcodeReader {
       if (pdf417ResultMetadata != null) {
         result.putMetadata(ResultMetadataType.PDF417_EXTRA_METADATA, pdf417ResultMetadata);
       }
+      result.putMetadata(ResultMetadataType.ORIENTATION, detectorResult.getRotation());
+      result.putMetadata(ResultMetadataType.SYMBOLOGY_IDENTIFIER, "]L" + decoderResult.getSymbologyModifier());
       results.add(result);
     }
     return results.toArray(EMPTY_RESULT_ARRAY);
diff --git a/core/src/main/java/com/google/zxing/pdf417/PDF417Writer.java b/core/src/main/java/com/google/zxing/pdf417/PDF417Writer.java
index 273e092..80e6ff7 100644
--- a/core/src/main/java/com/google/zxing/pdf417/PDF417Writer.java
+++ b/core/src/main/java/com/google/zxing/pdf417/PDF417Writer.java
@@ -57,6 +57,7 @@ public final class PDF417Writer implements Writer {
     PDF417 encoder = new PDF417();
     int margin = WHITE_SPACE;
     int errorCorrectionLevel = DEFAULT_ERROR_CORRECTION_LEVEL;
+    boolean autoECI = false;
 
     if (hints != null) {
       if (hints.containsKey(EncodeHintType.PDF417_COMPACT)) {
@@ -82,9 +83,11 @@ public final class PDF417Writer implements Writer {
         Charset encoding = Charset.forName(hints.get(EncodeHintType.CHARACTER_SET).toString());
         encoder.setEncoding(encoding);
       }
+      autoECI = hints.containsKey(EncodeHintType.PDF417_AUTO_ECI) &&
+          Boolean.parseBoolean(hints.get(EncodeHintType.PDF417_AUTO_ECI).toString());
     }
 
-    return bitMatrixFromEncoder(encoder, contents, errorCorrectionLevel, width, height, margin);
+    return bitMatrixFromEncoder(encoder, contents, errorCorrectionLevel, width, height, margin, autoECI);
   }
 
   @Override
@@ -103,8 +106,9 @@ public final class PDF417Writer implements Writer {
                                                 int errorCorrectionLevel,
                                                 int width,
                                                 int height,
-                                                int margin) throws WriterException {
-    encoder.generateBarcodeLogic(contents, errorCorrectionLevel);
+                                                int margin,
+                                                boolean autoECI) throws WriterException {
+    encoder.generateBarcodeLogic(contents, errorCorrectionLevel, autoECI);
 
     int aspectRatio = 4;
     byte[][] originalScale = encoder.getBarcodeMatrix().getScaledMatrix(1, aspectRatio);
diff --git a/core/src/main/java/com/google/zxing/pdf417/decoder/DecodedBitStreamParser.java b/core/src/main/java/com/google/zxing/pdf417/decoder/DecodedBitStreamParser.java
index 86e070c..b86a147 100644
--- a/core/src/main/java/com/google/zxing/pdf417/decoder/DecodedBitStreamParser.java
+++ b/core/src/main/java/com/google/zxing/pdf417/decoder/DecodedBitStreamParser.java
@@ -17,14 +17,11 @@
 package com.google.zxing.pdf417.decoder;
 
 import com.google.zxing.FormatException;
-import com.google.zxing.common.CharacterSetECI;
+import com.google.zxing.common.ECIStringBuilder;
 import com.google.zxing.common.DecoderResult;
 import com.google.zxing.pdf417.PDF417ResultMetadata;
 
-import java.io.ByteArrayOutputStream;
 import java.math.BigInteger;
-import java.nio.charset.Charset;
-import java.nio.charset.StandardCharsets;
 import java.util.Arrays;
 
 /**
@@ -101,20 +98,18 @@ final class DecodedBitStreamParser {
   }
 
   static DecoderResult decode(int[] codewords, String ecLevel) throws FormatException {
-    StringBuilder result = new StringBuilder(codewords.length * 2);
-    Charset encoding = StandardCharsets.ISO_8859_1;
-    // Get compaction mode
-    int codeIndex = 1;
-    int code = codewords[codeIndex++];
+    ECIStringBuilder result = new ECIStringBuilder(codewords.length * 2);
+    int codeIndex = textCompaction(codewords, 1, result);
     PDF417ResultMetadata resultMetadata = new PDF417ResultMetadata();
     while (codeIndex < codewords[0]) {
+      int code = codewords[codeIndex++];
       switch (code) {
         case TEXT_COMPACTION_MODE_LATCH:
           codeIndex = textCompaction(codewords, codeIndex, result);
           break;
         case BYTE_COMPACTION_MODE_LATCH:
         case BYTE_COMPACTION_MODE_LATCH_6:
-          codeIndex = byteCompaction(code, codewords, encoding, codeIndex, result);
+          codeIndex = byteCompaction(code, codewords, codeIndex, result);
           break;
         case MODE_SHIFT_TO_BYTE_COMPACTION_MODE:
           result.append((char) codewords[codeIndex++]);
@@ -123,9 +118,7 @@ final class DecodedBitStreamParser {
           codeIndex = numericCompaction(codewords, codeIndex, result);
           break;
         case ECI_CHARSET:
-          CharacterSetECI charsetECI =
-              CharacterSetECI.getCharacterSetECIByValue(codewords[codeIndex++]);
-          encoding = Charset.forName(charsetECI.name());
+          result.appendECI(codewords[codeIndex++]);
           break;
         case ECI_GENERAL_PURPOSE:
           // Can't do anything with generic ECI; skip its 2 characters
@@ -150,13 +143,8 @@ final class DecodedBitStreamParser {
           codeIndex = textCompaction(codewords, codeIndex, result);
           break;
       }
-      if (codeIndex < codewords.length) {
-        code = codewords[codeIndex++];
-      } else {
-        throw FormatException.getFormatInstance();
-      }
     }
-    if (result.length() == 0) {
+    if (result.isEmpty() && resultMetadata.getFileId() == null) {
       throw FormatException.getFormatInstance();
     }
     DecoderResult decoderResult = new DecoderResult(null, result.toString(), null, ecLevel);
@@ -175,11 +163,33 @@ final class DecodedBitStreamParser {
     for (int i = 0; i < NUMBER_OF_SEQUENCE_CODEWORDS; i++, codeIndex++) {
       segmentIndexArray[i] = codewords[codeIndex];
     }
-    resultMetadata.setSegmentIndex(Integer.parseInt(decodeBase900toBase10(segmentIndexArray,
-        NUMBER_OF_SEQUENCE_CODEWORDS)));
+    String segmentIndexString = decodeBase900toBase10(segmentIndexArray, NUMBER_OF_SEQUENCE_CODEWORDS);
+    if (segmentIndexString.isEmpty()) {
+      resultMetadata.setSegmentIndex(0);
+    } else {
+      try {
+        resultMetadata.setSegmentIndex(Integer.parseInt(segmentIndexString));
+      } catch (NumberFormatException nfe) {
+        // too large; bad input?
+        throw FormatException.getFormatInstance();
+      }
+    }
 
+    // Decoding the fileId codewords as 0-899 numbers, each 0-filled to width 3. This follows the spec
+    // (See ISO/IEC 15438:2015 Annex H.6) and preserves all info, but some generators (e.g. TEC-IT) write
+    // the fileId using text compaction, so in those cases the fileId will appear mangled.
     StringBuilder fileId = new StringBuilder();
-    codeIndex = textCompaction(codewords, codeIndex, fileId);
+    while (codeIndex < codewords[0] &&
+           codeIndex < codewords.length &&
+           codewords[codeIndex] != MACRO_PDF417_TERMINATOR &&
+           codewords[codeIndex] != BEGIN_MACRO_PDF417_OPTIONAL_FIELD) {
+      fileId.append(String.format("%03d", codewords[codeIndex]));
+      codeIndex++;
+    }
+    if (fileId.length() == 0) {
+      // at least one fileId codeword is required (Annex H.2)
+      throw FormatException.getFormatInstance();
+    }
     resultMetadata.setFileId(fileId.toString());
 
     int optionalFieldsStart = -1;
@@ -193,39 +203,55 @@ final class DecodedBitStreamParser {
           codeIndex++;
           switch (codewords[codeIndex]) {
             case MACRO_PDF417_OPTIONAL_FIELD_FILE_NAME:
-              StringBuilder fileName = new StringBuilder();
+              ECIStringBuilder fileName = new ECIStringBuilder();
               codeIndex = textCompaction(codewords, codeIndex + 1, fileName);
               resultMetadata.setFileName(fileName.toString());
               break;
             case MACRO_PDF417_OPTIONAL_FIELD_SENDER:
-              StringBuilder sender = new StringBuilder();
+              ECIStringBuilder sender = new ECIStringBuilder();
               codeIndex = textCompaction(codewords, codeIndex + 1, sender);
               resultMetadata.setSender(sender.toString());
               break;
             case MACRO_PDF417_OPTIONAL_FIELD_ADDRESSEE:
-              StringBuilder addressee = new StringBuilder();
+              ECIStringBuilder addressee = new ECIStringBuilder();
               codeIndex = textCompaction(codewords, codeIndex + 1, addressee);
               resultMetadata.setAddressee(addressee.toString());
               break;
             case MACRO_PDF417_OPTIONAL_FIELD_SEGMENT_COUNT:
-              StringBuilder segmentCount = new StringBuilder();
+              ECIStringBuilder segmentCount = new ECIStringBuilder();
               codeIndex = numericCompaction(codewords, codeIndex + 1, segmentCount);
-              resultMetadata.setSegmentCount(Integer.parseInt(segmentCount.toString()));
+              try {
+                resultMetadata.setSegmentCount(Integer.parseInt(segmentCount.toString()));
+              } catch (NumberFormatException nfe) {
+                throw FormatException.getFormatInstance();
+              }
               break;
             case MACRO_PDF417_OPTIONAL_FIELD_TIME_STAMP:
-              StringBuilder timestamp = new StringBuilder();
+              ECIStringBuilder timestamp = new ECIStringBuilder();
               codeIndex = numericCompaction(codewords, codeIndex + 1, timestamp);
-              resultMetadata.setTimestamp(Long.parseLong(timestamp.toString()));
+              try {
+                resultMetadata.setTimestamp(Long.parseLong(timestamp.toString()));
+              } catch (NumberFormatException nfe) {
+                throw FormatException.getFormatInstance();
+              }
               break;
             case MACRO_PDF417_OPTIONAL_FIELD_CHECKSUM:
-              StringBuilder checksum = new StringBuilder();
+              ECIStringBuilder checksum = new ECIStringBuilder();
               codeIndex = numericCompaction(codewords, codeIndex + 1, checksum);
-              resultMetadata.setChecksum(Integer.parseInt(checksum.toString()));
+              try {
+                resultMetadata.setChecksum(Integer.parseInt(checksum.toString()));
+              } catch (NumberFormatException nfe) {
+                throw FormatException.getFormatInstance();
+              }
               break;
             case MACRO_PDF417_OPTIONAL_FIELD_FILE_SIZE:
-              StringBuilder fileSize = new StringBuilder();
+              ECIStringBuilder fileSize = new ECIStringBuilder();
               codeIndex = numericCompaction(codewords, codeIndex + 1, fileSize);
-              resultMetadata.setFileSize(Long.parseLong(fileSize.toString()));
+              try {
+                resultMetadata.setFileSize(Long.parseLong(fileSize.toString()));
+              } catch (NumberFormatException nfe) {
+                throw FormatException.getFormatInstance();
+              }
               break;
             default:
               throw FormatException.getFormatInstance();
@@ -247,7 +273,10 @@ final class DecodedBitStreamParser {
         // do not include terminator
         optionalFieldsLength--;
       }
-      resultMetadata.setOptionalData(Arrays.copyOfRange(codewords, optionalFieldsStart, optionalFieldsStart + optionalFieldsLength));
+      if (optionalFieldsLength > 0) {
+        resultMetadata.setOptionalData(Arrays.copyOfRange(codewords,
+            optionalFieldsStart, optionalFieldsStart + optionalFieldsLength));
+      }
     }
 
     return codeIndex;
@@ -263,7 +292,7 @@ final class DecodedBitStreamParser {
    * @param result    The decoded data is appended to the result.
    * @return The next index into the codeword array.
    */
-  private static int textCompaction(int[] codewords, int codeIndex, StringBuilder result) {
+  private static int textCompaction(int[] codewords, int codeIndex, ECIStringBuilder result) throws FormatException {
     // 2 character per codeword
     int[] textCompactionData = new int[(codewords[0] - codeIndex) * 2];
     // Used to hold the byte compaction value if there is a mode shift
@@ -271,6 +300,7 @@ final class DecodedBitStreamParser {
 
     int index = 0;
     boolean end = false;
+    Mode subMode = Mode.ALPHA;
     while ((codeIndex < codewords[0]) && !end) {
       int code = codewords[codeIndex++];
       if (code < TEXT_COMPACTION_MODE_LATCH) {
@@ -304,10 +334,20 @@ final class DecodedBitStreamParser {
             byteCompactionData[index] = code;
             index++;
             break;
+          case ECI_CHARSET:
+            subMode = decodeTextCompaction(textCompactionData, byteCompactionData, index, result, subMode);
+            result.appendECI(codewords[codeIndex++]);
+            if (codeIndex > codewords[0]) {
+              throw FormatException.getFormatInstance();
+            }
+            textCompactionData = new int[(codewords[0] - codeIndex) * 2];
+            byteCompactionData = new int[(codewords[0] - codeIndex) * 2];
+            index = 0;
+            break;
         }
       }
     }
-    decodeTextCompaction(textCompactionData, byteCompactionData, index, result);
+    decodeTextCompaction(textCompactionData, byteCompactionData, index, result, subMode);
     return codeIndex;
   }
 
@@ -326,17 +366,21 @@ final class DecodedBitStreamParser {
    *                           was a mode shift.
    * @param length             The size of the text compaction and byte compaction data.
    * @param result             The decoded data is appended to the result.
+   * @param startMode          The mode in which decoding starts
+   * @return The mode in which decoding ended
    */
-  private static void decodeTextCompaction(int[] textCompactionData,
+  private static Mode decodeTextCompaction(int[] textCompactionData,
                                            int[] byteCompactionData,
                                            int length,
-                                           StringBuilder result) {
-    // Beginning from an initial state of the Alpha sub-mode
+                                           ECIStringBuilder result,
+                                           Mode startMode) {
+    // Beginning from an initial state
     // The default compaction mode for PDF417 in effect at the start of each symbol shall always be Text
     // Compaction mode Alpha sub-mode (uppercase alphabetic). A latch codeword from another mode to the Text
     // Compaction mode shall always switch to the Text Compaction Alpha sub-mode.
-    Mode subMode = Mode.ALPHA;
-    Mode priorToShiftMode = Mode.ALPHA;
+    Mode subMode = startMode;
+    Mode priorToShiftMode = startMode;
+    Mode latchedMode = startMode;
     int i = 0;
     while (i < length) {
       int subModeCh = textCompactionData[i];
@@ -354,9 +398,11 @@ final class DecodedBitStreamParser {
                 break;
               case LL:
                 subMode = Mode.LOWER;
+                latchedMode = subMode;
                 break;
               case ML:
                 subMode = Mode.MIXED;
+                latchedMode = subMode;
                 break;
               case PS:
                 // Shift to punctuation
@@ -368,6 +414,7 @@ final class DecodedBitStreamParser {
                 break;
               case TEXT_COMPACTION_MODE_LATCH:
                 subMode = Mode.ALPHA;
+                latchedMode = subMode;
                 break;
             }
           }
@@ -389,6 +436,7 @@ final class DecodedBitStreamParser {
                 break;
               case ML:
                 subMode = Mode.MIXED;
+                latchedMode = subMode;
                 break;
               case PS:
                 // Shift to punctuation
@@ -396,11 +444,11 @@ final class DecodedBitStreamParser {
                 subMode = Mode.PUNCT_SHIFT;
                 break;
               case MODE_SHIFT_TO_BYTE_COMPACTION_MODE:
-                // TODO Does this need to use the current character encoding? See other occurrences below
                 result.append((char) byteCompactionData[i]);
                 break;
               case TEXT_COMPACTION_MODE_LATCH:
                 subMode = Mode.ALPHA;
+                latchedMode = subMode;
                 break;
             }
           }
@@ -414,16 +462,19 @@ final class DecodedBitStreamParser {
             switch (subModeCh) {
               case PL:
                 subMode = Mode.PUNCT;
+                latchedMode = subMode;
                 break;
               case 26:
                 ch = ' ';
                 break;
               case LL:
                 subMode = Mode.LOWER;
+                latchedMode = subMode;
                 break;
               case AL:
               case TEXT_COMPACTION_MODE_LATCH:
                 subMode = Mode.ALPHA;
+                latchedMode = subMode;
                 break;
               case PS:
                 // Shift to punctuation
@@ -446,6 +497,7 @@ final class DecodedBitStreamParser {
               case PAL:
               case TEXT_COMPACTION_MODE_LATCH:
                 subMode = Mode.ALPHA;
+                latchedMode = subMode;
                 break;
               case MODE_SHIFT_TO_BYTE_COMPACTION_MODE:
                 result.append((char) byteCompactionData[i]);
@@ -497,6 +549,7 @@ final class DecodedBitStreamParser {
       }
       i++;
     }
+    return latchedMode;
   }
 
   /**
@@ -506,109 +559,57 @@ final class DecodedBitStreamParser {
    *
    * @param mode      The byte compaction mode i.e. 901 or 924
    * @param codewords The array of codewords (data + error)
-   * @param encoding  Currently active character encoding
    * @param codeIndex The current index into the codeword array.
    * @param result    The decoded data is appended to the result.
    * @return The next index into the codeword array.
    */
   private static int byteCompaction(int mode,
                                     int[] codewords,
-                                    Charset encoding,
                                     int codeIndex,
-                                    StringBuilder result) {
-    ByteArrayOutputStream decodedBytes = new ByteArrayOutputStream();
-    int count = 0;
-    long value = 0;
+                                    ECIStringBuilder result) throws FormatException {
     boolean end = false;
 
-    switch (mode) {
-      case BYTE_COMPACTION_MODE_LATCH:
-        // Total number of Byte Compaction characters to be encoded
-        // is not a multiple of 6
-
-        int[] byteCompactedCodewords = new int[6];
-        int nextCode = codewords[codeIndex++];
-        while ((codeIndex < codewords[0]) && !end) {
-          byteCompactedCodewords[count++] = nextCode;
-          // Base 900
-          value = 900 * value + nextCode;
-          nextCode = codewords[codeIndex++];
-          // perhaps it should be ok to check only nextCode >= TEXT_COMPACTION_MODE_LATCH
-          switch (nextCode) {
-            case TEXT_COMPACTION_MODE_LATCH:
-            case BYTE_COMPACTION_MODE_LATCH:
-            case NUMERIC_COMPACTION_MODE_LATCH:
-            case BYTE_COMPACTION_MODE_LATCH_6:
-            case BEGIN_MACRO_PDF417_CONTROL_BLOCK:
-            case BEGIN_MACRO_PDF417_OPTIONAL_FIELD:
-            case MACRO_PDF417_TERMINATOR:
-              codeIndex--;
-              end = true;
-              break;
-            default:
-              if ((count % 5 == 0) && (count > 0)) {
-                // Decode every 5 codewords
-                // Convert to Base 256
-                for (int j = 0; j < 6; ++j) {
-                  decodedBytes.write((byte) (value >> (8 * (5 - j))));
-                }
-                value = 0;
-                count = 0;
-              }
-              break;
-          }
-        }
-
-        // if the end of all codewords is reached the last codeword needs to be added
-        if (codeIndex == codewords[0] && nextCode < TEXT_COMPACTION_MODE_LATCH) {
-          byteCompactedCodewords[count++] = nextCode;
-        }
-
-        // If Byte Compaction mode is invoked with codeword 901,
-        // the last group of codewords is interpreted directly
-        // as one byte per codeword, without compaction.
-        for (int i = 0; i < count; i++) {
-          decodedBytes.write((byte) byteCompactedCodewords[i]);
-        }
+    while (codeIndex < codewords[0] && !end) {
+      //handle leading ECIs
+      while (codeIndex < codewords[0] && codewords[codeIndex] == ECI_CHARSET) {
+        result.appendECI(codewords[++codeIndex]);
+        codeIndex++;
+      }
 
-        break;
-
-      case BYTE_COMPACTION_MODE_LATCH_6:
-        // Total number of Byte Compaction characters to be encoded
-        // is an integer multiple of 6
-        while (codeIndex < codewords[0] && !end) {
-          int code = codewords[codeIndex++];
-          if (code < TEXT_COMPACTION_MODE_LATCH) {
-            count++;
-            // Base 900
-            value = 900 * value + code;
-          } else {
-            switch (code) {
-              case TEXT_COMPACTION_MODE_LATCH:
-              case BYTE_COMPACTION_MODE_LATCH:
-              case NUMERIC_COMPACTION_MODE_LATCH:
-              case BYTE_COMPACTION_MODE_LATCH_6:
-              case BEGIN_MACRO_PDF417_CONTROL_BLOCK:
-              case BEGIN_MACRO_PDF417_OPTIONAL_FIELD:
-              case MACRO_PDF417_TERMINATOR:
-                codeIndex--;
-                end = true;
-                break;
-            }
+      if (codeIndex >= codewords[0] || codewords[codeIndex] >= TEXT_COMPACTION_MODE_LATCH) {
+        end = true;
+      } else {
+        //decode one block of 5 codewords to 6 bytes
+        long value = 0;
+        int count = 0;
+        do {
+          value = 900 * value + codewords[codeIndex++];
+          count++;
+        } while (count < 5 &&
+                 codeIndex < codewords[0] &&
+                 codewords[codeIndex] < TEXT_COMPACTION_MODE_LATCH);
+        if (count == 5 && (mode == BYTE_COMPACTION_MODE_LATCH_6 ||
+                           codeIndex < codewords[0] &&
+                           codewords[codeIndex] < TEXT_COMPACTION_MODE_LATCH)) {
+          for (int i = 0; i < 6; i++) {
+            result.append((byte) (value >> (8 * (5 - i))));
           }
-          if ((count % 5 == 0) && (count > 0)) {
-            // Decode every 5 codewords
-            // Convert to Base 256
-            for (int j = 0; j < 6; ++j) {
-              decodedBytes.write((byte) (value >> (8 * (5 - j))));
+        } else {
+          codeIndex -= count;
+          while ((codeIndex < codewords[0]) && !end) {
+            int code = codewords[codeIndex++];
+            if (code < TEXT_COMPACTION_MODE_LATCH) {
+              result.append((byte) code);
+            } else if (code == ECI_CHARSET) {
+              result.appendECI(codewords[codeIndex++]);
+            } else {
+              codeIndex--;
+              end = true;
             }
-            value = 0;
-            count = 0;
           }
         }
-        break;
+      }
     }
-    result.append(new String(decodedBytes.toByteArray(), encoding));
     return codeIndex;
   }
 
@@ -620,7 +621,7 @@ final class DecodedBitStreamParser {
    * @param result    The decoded data is appended to the result.
    * @return The next index into the codeword array.
    */
-  private static int numericCompaction(int[] codewords, int codeIndex, StringBuilder result) throws FormatException {
+  private static int numericCompaction(int[] codewords, int codeIndex, ECIStringBuilder result) throws FormatException {
     int count = 0;
     boolean end = false;
 
@@ -642,6 +643,7 @@ final class DecodedBitStreamParser {
           case BEGIN_MACRO_PDF417_CONTROL_BLOCK:
           case BEGIN_MACRO_PDF417_OPTIONAL_FIELD:
           case MACRO_PDF417_TERMINATOR:
+          case ECI_CHARSET:
             codeIndex--;
             end = true;
             break;
diff --git a/core/src/main/java/com/google/zxing/pdf417/decoder/DetectionResult.java b/core/src/main/java/com/google/zxing/pdf417/decoder/DetectionResult.java
index 0eeba30..685475b 100644
--- a/core/src/main/java/com/google/zxing/pdf417/decoder/DetectionResult.java
+++ b/core/src/main/java/com/google/zxing/pdf417/decoder/DetectionResult.java
@@ -130,7 +130,9 @@ final class DetectionResult {
       }
       int rowIndicatorRowNumber = codewords[codewordsRow].getRowNumber();
       int invalidRowCounts = 0;
-      for (int barcodeColumn = barcodeColumnCount + 1; barcodeColumn > 0 && invalidRowCounts < ADJUST_ROW_NUMBER_SKIP; barcodeColumn--) {
+      for (int barcodeColumn = barcodeColumnCount + 1;
+           barcodeColumn > 0 && invalidRowCounts < ADJUST_ROW_NUMBER_SKIP;
+           barcodeColumn--) {
         Codeword codeword = detectionResultColumns[barcodeColumn].getCodewords()[codewordsRow];
         if (codeword != null) {
           invalidRowCounts = adjustRowNumberIfValid(rowIndicatorRowNumber, invalidRowCounts, codeword);
@@ -155,7 +157,9 @@ final class DetectionResult {
       }
       int rowIndicatorRowNumber = codewords[codewordsRow].getRowNumber();
       int invalidRowCounts = 0;
-      for (int barcodeColumn = 1; barcodeColumn < barcodeColumnCount + 1 && invalidRowCounts < ADJUST_ROW_NUMBER_SKIP; barcodeColumn++) {
+      for (int barcodeColumn = 1;
+           barcodeColumn < barcodeColumnCount + 1 && invalidRowCounts < ADJUST_ROW_NUMBER_SKIP;
+           barcodeColumn++) {
         Codeword codeword = detectionResultColumns[barcodeColumn].getCodewords()[codewordsRow];
         if (codeword != null) {
           invalidRowCounts = adjustRowNumberIfValid(rowIndicatorRowNumber, invalidRowCounts, codeword);
diff --git a/core/src/main/java/com/google/zxing/pdf417/decoder/DetectionResultRowIndicatorColumn.java b/core/src/main/java/com/google/zxing/pdf417/decoder/DetectionResultRowIndicatorColumn.java
index 89fd929..becaf37 100644
--- a/core/src/main/java/com/google/zxing/pdf417/decoder/DetectionResultRowIndicatorColumn.java
+++ b/core/src/main/java/com/google/zxing/pdf417/decoder/DetectionResultRowIndicatorColumn.java
@@ -64,14 +64,6 @@ final class DetectionResultRowIndicatorColumn extends DetectionResultColumn {
       }
       Codeword codeword = codewords[codewordsRow];
 
-      //      float expectedRowNumber = (codewordsRow - firstRow) / averageRowHeight;
-      //      if (Math.abs(codeword.getRowNumber() - expectedRowNumber) > 2) {
-      //        SimpleLog.log(LEVEL.WARNING,
-      //            "Removing codeword, rowNumberSkew too high, codeword[" + codewordsRow + "]: Expected Row: " +
-      //                expectedRowNumber + ", RealRow: " + codeword.getRowNumber() + ", value: " + codeword.getValue());
-      //        codewords[codewordsRow] = null;
-      //      }
-
       int rowDifference = codeword.getRowNumber() - barcodeRow;
 
       // TODO improve handling with case where first row indicator doesn't start with 0
@@ -207,8 +199,10 @@ final class DetectionResultRowIndicatorColumn extends DetectionResultColumn {
         (barcodeRowCountLowerPart.getValue().length == 0) ||
         (barcodeECLevel.getValue().length == 0) ||
         barcodeColumnCount.getValue()[0] < 1 ||
-        barcodeRowCountUpperPart.getValue()[0] + barcodeRowCountLowerPart.getValue()[0] < PDF417Common.MIN_ROWS_IN_BARCODE ||
-        barcodeRowCountUpperPart.getValue()[0] + barcodeRowCountLowerPart.getValue()[0] > PDF417Common.MAX_ROWS_IN_BARCODE) {
+        barcodeRowCountUpperPart.getValue()[0] + barcodeRowCountLowerPart.getValue()[0] <
+            PDF417Common.MIN_ROWS_IN_BARCODE ||
+        barcodeRowCountUpperPart.getValue()[0] + barcodeRowCountLowerPart.getValue()[0] >
+            PDF417Common.MAX_ROWS_IN_BARCODE) {
       return null;
     }
     BarcodeMetadata barcodeMetadata = new BarcodeMetadata(barcodeColumnCount.getValue()[0],
diff --git a/core/src/main/java/com/google/zxing/pdf417/decoder/PDF417ScanningDecoder.java b/core/src/main/java/com/google/zxing/pdf417/decoder/PDF417ScanningDecoder.java
index e3298b0..50ad6b4 100644
--- a/core/src/main/java/com/google/zxing/pdf417/decoder/PDF417ScanningDecoder.java
+++ b/core/src/main/java/com/google/zxing/pdf417/decoder/PDF417ScanningDecoder.java
@@ -55,7 +55,8 @@ public final class PDF417ScanningDecoder {
                                      ResultPoint imageTopRight,
                                      ResultPoint imageBottomRight,
                                      int minCodewordWidth,
-                                     int maxCodewordWidth) throws NotFoundException, FormatException, ChecksumException {
+                                     int maxCodewordWidth)
+      throws NotFoundException, FormatException, ChecksumException {
     BoundingBox boundingBox = new BoundingBox(image, imageTopLeft, imageBottomLeft, imageTopRight, imageBottomRight);
     DetectionResultRowIndicatorColumn leftRowIndicatorColumn = null;
     DetectionResultRowIndicatorColumn rightRowIndicatorColumn = null;
@@ -243,11 +244,11 @@ public final class PDF417ScanningDecoder {
         throw NotFoundException.getNotFoundInstance();
       }
       barcodeMatrix01.setValue(calculatedNumberOfCodewords);
-    } else if (numberOfCodewords[0] != calculatedNumberOfCodewords) {
-      if (calculatedNumberOfCodewords >= 1 && calculatedNumberOfCodewords <= PDF417Common.MAX_CODEWORDS_IN_BARCODE) {
-        // The calculated one is more reliable as it is derived from the row indicator columns
-        barcodeMatrix01.setValue(calculatedNumberOfCodewords);
-      }
+    } else if (numberOfCodewords[0] != calculatedNumberOfCodewords &&
+        calculatedNumberOfCodewords >= 1 &&
+        calculatedNumberOfCodewords <= PDF417Common.MAX_CODEWORDS_IN_BARCODE) {
+      // The calculated one is more reliable as it is derived from the row indicator columns
+      barcodeMatrix01.setValue(calculatedNumberOfCodewords);
     }
   }
 
diff --git a/core/src/main/java/com/google/zxing/pdf417/decoder/ec/ErrorCorrection.java b/core/src/main/java/com/google/zxing/pdf417/decoder/ec/ErrorCorrection.java
index e34cb7f..06bd06d 100644
--- a/core/src/main/java/com/google/zxing/pdf417/decoder/ec/ErrorCorrection.java
+++ b/core/src/main/java/com/google/zxing/pdf417/decoder/ec/ErrorCorrection.java
@@ -166,6 +166,9 @@ public final class ErrorCorrection {
                                     ModulusPoly errorLocator,
                                     int[] errorLocations) {
     int errorLocatorDegree = errorLocator.getDegree();
+    if (errorLocatorDegree < 1) {
+      return new int[0];
+    }
     int[] formalDerivativeCoefficients = new int[errorLocatorDegree];
     for (int i = 1; i <= errorLocatorDegree; i++) {
       formalDerivativeCoefficients[errorLocatorDegree - i] =
diff --git a/core/src/main/java/com/google/zxing/pdf417/decoder/ec/ModulusPoly.java b/core/src/main/java/com/google/zxing/pdf417/decoder/ec/ModulusPoly.java
index afb7dd0..acc49b7 100644
--- a/core/src/main/java/com/google/zxing/pdf417/decoder/ec/ModulusPoly.java
+++ b/core/src/main/java/com/google/zxing/pdf417/decoder/ec/ModulusPoly.java
@@ -200,34 +200,6 @@ final class ModulusPoly {
     return new ModulusPoly(field, product);
   }
 
-  /*
-  ModulusPoly[] divide(ModulusPoly other) {
-    if (!field.equals(other.field)) {
-      throw new IllegalArgumentException("ModulusPolys do not have same ModulusGF field");
-    }
-    if (other.isZero()) {
-      throw new IllegalArgumentException("Divide by 0");
-    }
-
-    ModulusPoly quotient = field.getZero();
-    ModulusPoly remainder = this;
-
-    int denominatorLeadingTerm = other.getCoefficient(other.getDegree());
-    int inverseDenominatorLeadingTerm = field.inverse(denominatorLeadingTerm);
-
-    while (remainder.getDegree() >= other.getDegree() && !remainder.isZero()) {
-      int degreeDifference = remainder.getDegree() - other.getDegree();
-      int scale = field.multiply(remainder.getCoefficient(remainder.getDegree()), inverseDenominatorLeadingTerm);
-      ModulusPoly term = other.multiplyByMonomial(degreeDifference, scale);
-      ModulusPoly iterationQuotient = field.buildMonomial(degreeDifference, scale);
-      quotient = quotient.add(iterationQuotient);
-      remainder = remainder.subtract(term);
-    }
-
-    return new ModulusPoly[] { quotient, remainder };
-  }
-   */
-
   @Override
   public String toString() {
     StringBuilder result = new StringBuilder(8 * getDegree());
diff --git a/core/src/main/java/com/google/zxing/pdf417/detector/Detector.java b/core/src/main/java/com/google/zxing/pdf417/detector/Detector.java
index 1156398..8b771a5 100644
--- a/core/src/main/java/com/google/zxing/pdf417/detector/Detector.java
+++ b/core/src/main/java/com/google/zxing/pdf417/detector/Detector.java
@@ -52,16 +52,18 @@ public final class Detector {
   // if we set the value too low, then we don't detect the correct height of the bar if the start patterns are damaged.
   // if we set the value too high, then we might detect the start pattern from a neighbor barcode.
   private static final int SKIPPED_ROW_COUNT_MAX = 25;
-  // A PDF471 barcode should have at least 3 rows, with each row being >= 3 times the module width. Therefore it should be at least
-  // 9 pixels tall. To be conservative, we use about half the size to ensure we don't miss it.
+  // A PDF471 barcode should have at least 3 rows, with each row being >= 3 times the module width.
+  // Therefore it should be at least 9 pixels tall. To be conservative, we use about half the size to
+  // ensure we don't miss it.
   private static final int ROW_STEP = 5;
   private static final int BARCODE_MIN_HEIGHT = 10;
+  private static final int[] ROTATIONS = {0, 180, 270, 90};
 
   private Detector() {
   }
 
   /**
-   * <p>Detects a PDF417 Code in an image. Only checks 0 and 180 degree rotations.</p>
+   * <p>Detects a PDF417 Code in an image. Checks 0, 90, 180, and 270 degree rotations.</p>
    *
    * @param image barcode image to decode
    * @param hints optional hints to detector
@@ -76,15 +78,31 @@ public final class Detector {
     // different binarizers
     //boolean tryHarder = hints != null && hints.containsKey(DecodeHintType.TRY_HARDER);
 
-    BitMatrix bitMatrix = image.getBlackMatrix();
+    BitMatrix originalMatrix = image.getBlackMatrix();
+    for (int rotation : ROTATIONS) {
+      BitMatrix bitMatrix = applyRotation(originalMatrix, rotation);
+      List<ResultPoint[]> barcodeCoordinates = detect(multiple, bitMatrix);
+      if (!barcodeCoordinates.isEmpty()) {
+        return new PDF417DetectorResult(bitMatrix, barcodeCoordinates, rotation);
+      }
+    }
+    return new PDF417DetectorResult(originalMatrix, new ArrayList<>(), 0);
+  }
 
-    List<ResultPoint[]> barcodeCoordinates = detect(multiple, bitMatrix);
-    if (barcodeCoordinates.isEmpty()) {
-      bitMatrix = bitMatrix.clone();
-      bitMatrix.rotate180();
-      barcodeCoordinates = detect(multiple, bitMatrix);
+  /**
+   * Applies a rotation to the supplied BitMatrix.
+   * @param matrix bit matrix to apply rotation to
+   * @param rotation the degrees of rotation to apply
+   * @return BitMatrix with applied rotation
+   */
+  private static BitMatrix applyRotation(BitMatrix matrix, int rotation) {
+    if (rotation % 360 == 0) {
+      return matrix;
     }
-    return new PDF417DetectorResult(bitMatrix, barcodeCoordinates);
+
+    BitMatrix newMatrix = matrix.clone();
+    newMatrix.rotate(rotation);
+    return newMatrix;
   }
 
   /**
diff --git a/core/src/main/java/com/google/zxing/pdf417/detector/PDF417DetectorResult.java b/core/src/main/java/com/google/zxing/pdf417/detector/PDF417DetectorResult.java
index 081b778..7aa82c5 100644
--- a/core/src/main/java/com/google/zxing/pdf417/detector/PDF417DetectorResult.java
+++ b/core/src/main/java/com/google/zxing/pdf417/detector/PDF417DetectorResult.java
@@ -28,10 +28,16 @@ public final class PDF417DetectorResult {
 
   private final BitMatrix bits;
   private final List<ResultPoint[]> points;
+  private final int rotation;
 
-  public PDF417DetectorResult(BitMatrix bits, List<ResultPoint[]> points) {
+  public PDF417DetectorResult(BitMatrix bits, List<ResultPoint[]> points, int rotation) {
     this.bits = bits;
     this.points = points;
+    this.rotation = rotation;
+  }
+
+  public PDF417DetectorResult(BitMatrix bits, List<ResultPoint[]> points) {
+    this(bits, points, 0);
   }
 
   public BitMatrix getBits() {
@@ -42,4 +48,8 @@ public final class PDF417DetectorResult {
     return points;
   }
 
+  public int getRotation() {
+    return rotation;
+  }
+
 }
diff --git a/core/src/main/java/com/google/zxing/pdf417/encoder/BarcodeMatrix.java b/core/src/main/java/com/google/zxing/pdf417/encoder/BarcodeMatrix.java
index cf1c11b..b4f6980 100644
--- a/core/src/main/java/com/google/zxing/pdf417/encoder/BarcodeMatrix.java
+++ b/core/src/main/java/com/google/zxing/pdf417/encoder/BarcodeMatrix.java
@@ -47,12 +47,6 @@ public final class BarcodeMatrix {
     matrix[y].set(x, value);
   }
 
-  /*
-  void setMatrix(int x, int y, boolean black) {
-    set(x, y, (byte) (black ? 1 : 0));
-  }
-   */
-
   void startRow() {
     ++currentRow;
   }
@@ -65,12 +59,6 @@ public final class BarcodeMatrix {
     return getScaledMatrix(1, 1);
   }
 
-  /*
-  public byte[][] getScaledMatrix(int scale) {
-    return getScaledMatrix(scale, scale);
-  }
-   */
-
   public byte[][] getScaledMatrix(int xScale, int yScale) {
     byte[][] matrixOut = new byte[height * yScale][width * xScale];
     int yMax = height * yScale;
diff --git a/core/src/main/java/com/google/zxing/pdf417/encoder/BarcodeRow.java b/core/src/main/java/com/google/zxing/pdf417/encoder/BarcodeRow.java
index c4d6772..ad93d27 100644
--- a/core/src/main/java/com/google/zxing/pdf417/encoder/BarcodeRow.java
+++ b/core/src/main/java/com/google/zxing/pdf417/encoder/BarcodeRow.java
@@ -63,12 +63,6 @@ final class BarcodeRow {
     }
   }
 
-  /*
-  byte[] getRow() {
-    return row;
-  }
-   */
-
   /**
    * This function scales the row
    *
diff --git a/core/src/main/java/com/google/zxing/pdf417/encoder/PDF417.java b/core/src/main/java/com/google/zxing/pdf417/encoder/PDF417.java
index 3b24897..a9d63dc 100644
--- a/core/src/main/java/com/google/zxing/pdf417/encoder/PDF417.java
+++ b/core/src/main/java/com/google/zxing/pdf417/encoder/PDF417.java
@@ -643,10 +643,20 @@ public final class PDF417 {
    * @throws WriterException if the contents cannot be encoded in this format
    */
   public void generateBarcodeLogic(String msg, int errorCorrectionLevel) throws WriterException {
+    generateBarcodeLogic(msg, errorCorrectionLevel, false);
+  }
+
+  /**
+   * @param msg message to encode
+   * @param errorCorrectionLevel PDF417 error correction level to use
+   * @param autoECI automatically insert ECIs if needed
+   * @throws WriterException if the contents cannot be encoded in this format
+   */
+  public void generateBarcodeLogic(String msg, int errorCorrectionLevel, boolean autoECI) throws WriterException {
 
     //1. step: High-level encoding
     int errorCorrectionCodeWords = PDF417ErrorCorrection.getErrorCorrectionCodewordCount(errorCorrectionLevel);
-    String highLevel = PDF417HighLevelEncoder.encodeHighLevel(msg, compaction, encoding);
+    String highLevel = PDF417HighLevelEncoder.encodeHighLevel(msg, compaction, encoding, autoECI);
     int sourceCodeWords = highLevel.length();
 
     int[] dimension = determineDimensions(sourceCodeWords, errorCorrectionCodeWords);
@@ -713,13 +723,13 @@ public final class PDF417 {
       dimension = new int[] {cols, rows};
     }
 
-     // Handle case when min values were larger than necessary
-     if (dimension == null) {
-       int rows = calculateNumberOfRows(sourceCodeWords, errorCorrectionCodeWords, minCols);
-       if (rows < minRows) {
-         dimension = new int[]{minCols, minRows};
-       }
-     }
+    // Handle case when min values were larger than necessary
+    if (dimension == null) {
+      int rows = calculateNumberOfRows(sourceCodeWords, errorCorrectionCodeWords, minCols);
+      if (rows < minRows) {
+        dimension = new int[]{minCols, minRows};
+      }
+    }
 
     if (dimension == null) {
       throw new WriterException("Unable to fit message in columns");
diff --git a/core/src/main/java/com/google/zxing/pdf417/encoder/PDF417HighLevelEncoder.java b/core/src/main/java/com/google/zxing/pdf417/encoder/PDF417HighLevelEncoder.java
index 3ed0ecf..564d7c9 100644
--- a/core/src/main/java/com/google/zxing/pdf417/encoder/PDF417HighLevelEncoder.java
+++ b/core/src/main/java/com/google/zxing/pdf417/encoder/PDF417HighLevelEncoder.java
@@ -22,6 +22,8 @@ package com.google.zxing.pdf417.encoder;
 
 import com.google.zxing.WriterException;
 import com.google.zxing.common.CharacterSetECI;
+import com.google.zxing.common.ECIInput;
+import com.google.zxing.common.MinimalECIInput;
 
 import java.math.BigInteger;
 import java.nio.charset.Charset;
@@ -159,71 +161,116 @@ final class PDF417HighLevelEncoder {
    * @param compaction compaction mode to use
    * @param encoding character encoding used to encode in default or byte compaction
    *  or {@code null} for default / not applicable
+   * @param autoECI encode input minimally using multiple ECIs if needed
+   *   If autoECI encoding is specified and additionally {@code encoding} is specified, then the encoder
+   *   will use the specified {@link Charset} for any character that can be encoded by it, regardless
+   *   if a different encoding would lead to a more compact encoding. When no {@code encoding} is specified
+   *   then charsets will be chosen so that the byte representation is minimal.
    * @return the encoded message (the char values range from 0 to 928)
    */
-  static String encodeHighLevel(String msg, Compaction compaction, Charset encoding) throws WriterException {
+  static String encodeHighLevel(String msg, Compaction compaction, Charset encoding, boolean autoECI)
+      throws WriterException {
+
+    if (msg.isEmpty()) {
+      throw new WriterException("Empty message not allowed");
+    }
 
+    if (encoding == null && !autoECI) {
+      for (int i = 0; i < msg.length(); i++) {
+        if (msg.charAt(i) > 255) {
+          throw new WriterException("Non-encodable character detected: " + msg.charAt(i) + " (Unicode: " +
+              (int) msg.charAt(i) +
+              "). Consider specifying EncodeHintType.PDF417_AUTO_ECI and/or EncodeTypeHint.CHARACTER_SET.");
+        }
+      }
+    }
     //the codewords 0..928 are encoded as Unicode characters
     StringBuilder sb = new StringBuilder(msg.length());
 
-    if (encoding == null) {
-      encoding = DEFAULT_ENCODING;
-    } else if (!DEFAULT_ENCODING.equals(encoding)) {
-      CharacterSetECI eci = CharacterSetECI.getCharacterSetECIByName(encoding.name());
-      if (eci != null) {
-        encodingECI(eci.getValue(), sb);
+    ECIInput input;
+    if (autoECI) {
+      input = new MinimalECIInput(msg, encoding, -1);
+    } else {
+      input = new NoECIInput(msg);
+      if (encoding == null) {
+        encoding = DEFAULT_ENCODING;
+      } else if (!DEFAULT_ENCODING.equals(encoding)) {
+        CharacterSetECI eci = CharacterSetECI.getCharacterSetECI(encoding);
+        if (eci != null) {
+          encodingECI(eci.getValue(), sb);
+        }
       }
     }
 
-    int len = msg.length();
+    int len = input.length();
     int p = 0;
     int textSubMode = SUBMODE_ALPHA;
 
     // User selected encoding mode
     switch (compaction) {
       case TEXT:
-        encodeText(msg, p, len, sb, textSubMode);
+        encodeText(input, p, len, sb, textSubMode);
         break;
       case BYTE:
-        byte[] msgBytes = msg.getBytes(encoding);
-        encodeBinary(msgBytes, p, msgBytes.length, BYTE_COMPACTION, sb);
+        if (autoECI) {
+          encodeMultiECIBinary(input, 0, input.length(), TEXT_COMPACTION, sb);
+        } else {
+          byte[] msgBytes = input.toString().getBytes(encoding);
+          encodeBinary(msgBytes, p, msgBytes.length, BYTE_COMPACTION, sb);
+        }
         break;
       case NUMERIC:
         sb.append((char) LATCH_TO_NUMERIC);
-        encodeNumeric(msg, p, len, sb);
+        encodeNumeric(input, p, len, sb);
         break;
       default:
         int encodingMode = TEXT_COMPACTION; //Default mode, see 4.4.2.1
         while (p < len) {
-          int n = determineConsecutiveDigitCount(msg, p);
+          while (p < len && input.isECI(p)) {
+            encodingECI(input.getECIValue(p), sb);
+            p++;
+          }
+          if (p >= len) {
+            break;
+          }
+          int n = determineConsecutiveDigitCount(input, p);
           if (n >= 13) {
             sb.append((char) LATCH_TO_NUMERIC);
             encodingMode = NUMERIC_COMPACTION;
             textSubMode = SUBMODE_ALPHA; //Reset after latch
-            encodeNumeric(msg, p, n, sb);
+            encodeNumeric(input, p, n, sb);
             p += n;
           } else {
-            int t = determineConsecutiveTextCount(msg, p);
+            int t = determineConsecutiveTextCount(input, p);
             if (t >= 5 || n == len) {
               if (encodingMode != TEXT_COMPACTION) {
                 sb.append((char) LATCH_TO_TEXT);
                 encodingMode = TEXT_COMPACTION;
                 textSubMode = SUBMODE_ALPHA; //start with submode alpha after latch
               }
-              textSubMode = encodeText(msg, p, t, sb, textSubMode);
+              textSubMode = encodeText(input, p, t, sb, textSubMode);
               p += t;
             } else {
-              int b = determineConsecutiveBinaryCount(msg, p, encoding);
+              int b = determineConsecutiveBinaryCount(input, p, autoECI ? null : encoding);
               if (b == 0) {
                 b = 1;
               }
-              byte[] bytes = msg.substring(p, p + b).getBytes(encoding);
-              if (bytes.length == 1 && encodingMode == TEXT_COMPACTION) {
+              byte[] bytes = autoECI ? null : input.subSequence(p, p + b).toString().getBytes(encoding);
+              if (((bytes == null && b == 1) || (bytes != null && bytes.length == 1))
+                  && encodingMode == TEXT_COMPACTION) {
                 //Switch for one byte (instead of latch)
-                encodeBinary(bytes, 0, 1, TEXT_COMPACTION, sb);
+                if (autoECI) {
+                  encodeMultiECIBinary(input, p, 1, TEXT_COMPACTION, sb);
+                } else {
+                  encodeBinary(bytes, 0, 1, TEXT_COMPACTION, sb);
+                }
               } else {
                 //Mode latch performed by encodeBinary()
-                encodeBinary(bytes, 0, bytes.length, encodingMode, sb);
+                if (autoECI) {
+                  encodeMultiECIBinary(input, p, p + b, encodingMode, sb);
+                } else {
+                  encodeBinary(bytes, 0, bytes.length, encodingMode, sb);
+                }
                 encodingMode = BYTE_COMPACTION;
                 textSubMode = SUBMODE_ALPHA; //Reset after latch
               }
@@ -241,109 +288,113 @@ final class PDF417HighLevelEncoder {
    * Encode parts of the message using Text Compaction as described in ISO/IEC 15438:2001(E),
    * chapter 4.4.2.
    *
-   * @param msg            the message
+   * @param input          the input
    * @param startpos       the start position within the message
    * @param count          the number of characters to encode
    * @param sb             receives the encoded codewords
    * @param initialSubmode should normally be SUBMODE_ALPHA
    * @return the text submode in which this method ends
    */
-  private static int encodeText(CharSequence msg,
+  private static int encodeText(ECIInput input,
                                 int startpos,
                                 int count,
                                 StringBuilder sb,
-                                int initialSubmode) {
+                                int initialSubmode) throws WriterException {
     StringBuilder tmp = new StringBuilder(count);
     int submode = initialSubmode;
     int idx = 0;
     while (true) {
-      char ch = msg.charAt(startpos + idx);
-      switch (submode) {
-        case SUBMODE_ALPHA:
-          if (isAlphaUpper(ch)) {
-            if (ch == ' ') {
-              tmp.append((char) 26); //space
+      if (input.isECI(startpos + idx)) {
+        encodingECI(input.getECIValue(startpos + idx), sb);
+        idx++;
+      } else {
+        char ch = input.charAt(startpos + idx);
+        switch (submode) {
+          case SUBMODE_ALPHA:
+            if (isAlphaUpper(ch)) {
+              if (ch == ' ') {
+                tmp.append((char) 26); //space
+              } else {
+                tmp.append((char) (ch - 65));
+              }
             } else {
-              tmp.append((char) (ch - 65));
+              if (isAlphaLower(ch)) {
+                submode = SUBMODE_LOWER;
+                tmp.append((char) 27); //ll
+                continue;
+              } else if (isMixed(ch)) {
+                submode = SUBMODE_MIXED;
+                tmp.append((char) 28); //ml
+                continue;
+              } else {
+                tmp.append((char) 29); //ps
+                tmp.append((char) PUNCTUATION[ch]);
+                break;
+              }
             }
-          } else {
+            break;
+          case SUBMODE_LOWER:
             if (isAlphaLower(ch)) {
-              submode = SUBMODE_LOWER;
-              tmp.append((char) 27); //ll
-              continue;
-            } else if (isMixed(ch)) {
-              submode = SUBMODE_MIXED;
-              tmp.append((char) 28); //ml
-              continue;
-            } else {
-              tmp.append((char) 29); //ps
-              tmp.append((char) PUNCTUATION[ch]);
-              break;
-            }
-          }
-          break;
-        case SUBMODE_LOWER:
-          if (isAlphaLower(ch)) {
-            if (ch == ' ') {
-              tmp.append((char) 26); //space
+              if (ch == ' ') {
+                tmp.append((char) 26); //space
+              } else {
+                tmp.append((char) (ch - 97));
+              }
             } else {
-              tmp.append((char) (ch - 97));
+              if (isAlphaUpper(ch)) {
+                tmp.append((char) 27); //as
+                tmp.append((char) (ch - 65));
+                //space cannot happen here, it is also in "Lower"
+                break;
+              } else if (isMixed(ch)) {
+                submode = SUBMODE_MIXED;
+                tmp.append((char) 28); //ml
+                continue;
+              } else {
+                tmp.append((char) 29); //ps
+                tmp.append((char) PUNCTUATION[ch]);
+                break;
+              }
             }
-          } else {
-            if (isAlphaUpper(ch)) {
-              tmp.append((char) 27); //as
-              tmp.append((char) (ch - 65));
-              //space cannot happen here, it is also in "Lower"
-              break;
-            } else if (isMixed(ch)) {
-              submode = SUBMODE_MIXED;
-              tmp.append((char) 28); //ml
-              continue;
+            break;
+          case SUBMODE_MIXED:
+            if (isMixed(ch)) {
+              tmp.append((char) MIXED[ch]);
             } else {
-              tmp.append((char) 29); //ps
-              tmp.append((char) PUNCTUATION[ch]);
-              break;
-            }
-          }
-          break;
-        case SUBMODE_MIXED:
-          if (isMixed(ch)) {
-            tmp.append((char) MIXED[ch]);
-          } else {
-            if (isAlphaUpper(ch)) {
-              submode = SUBMODE_ALPHA;
-              tmp.append((char) 28); //al
-              continue;
-            } else if (isAlphaLower(ch)) {
-              submode = SUBMODE_LOWER;
-              tmp.append((char) 27); //ll
-              continue;
-            } else {
-              if (startpos + idx + 1 < count) {
-                char next = msg.charAt(startpos + idx + 1);
-                if (isPunctuation(next)) {
+              if (isAlphaUpper(ch)) {
+                submode = SUBMODE_ALPHA;
+                tmp.append((char) 28); //al
+                continue;
+              } else if (isAlphaLower(ch)) {
+                submode = SUBMODE_LOWER;
+                tmp.append((char) 27); //ll
+                continue;
+              } else {
+                if (startpos + idx + 1 < count &&
+                    !input.isECI(startpos + idx + 1) &&
+                    isPunctuation(input.charAt(startpos + idx + 1))) {
                   submode = SUBMODE_PUNCTUATION;
                   tmp.append((char) 25); //pl
                   continue;
                 }
+                tmp.append((char) 29); //ps
+                tmp.append((char) PUNCTUATION[ch]);
               }
-              tmp.append((char) 29); //ps
+            }
+            break;
+          default: //SUBMODE_PUNCTUATION
+            if (isPunctuation(ch)) {
               tmp.append((char) PUNCTUATION[ch]);
+            } else {
+              submode = SUBMODE_ALPHA;
+              tmp.append((char) 29); //al
+              continue;
             }
-          }
+        }
+        idx++;
+        if (idx >= count) {
           break;
-        default: //SUBMODE_PUNCTUATION
-          if (isPunctuation(ch)) {
-            tmp.append((char) PUNCTUATION[ch]);
-          } else {
-            submode = SUBMODE_ALPHA;
-            tmp.append((char) 29); //al
-            continue;
-          }
-      }
-      idx++;
-      if (idx >= count) {
-        break;
+        }
       }
     }
     char h = 0;
@@ -363,6 +414,56 @@ final class PDF417HighLevelEncoder {
     return submode;
   }
 
+  /**
+   * Encode all of the message using Byte Compaction as described in ISO/IEC 15438:2001(E)
+   *
+   * @param input     the input
+   * @param startpos  the start position within the message
+   * @param count     the number of bytes to encode
+   * @param startmode the mode from which this method starts
+   * @param sb        receives the encoded codewords
+   */
+  private static void encodeMultiECIBinary(ECIInput input,
+                                          int startpos,
+                                          int count,
+                                          int startmode,
+                                          StringBuilder sb) throws WriterException {
+    final int end = Math.min(startpos + count, input.length());
+    int localStart = startpos;
+    while (true) {
+      //encode all leading ECIs and advance localStart
+      while (localStart < end && input.isECI(localStart)) {
+        encodingECI(input.getECIValue(localStart), sb);
+        localStart++;
+      }
+      int localEnd = localStart;
+      //advance end until before the next ECI
+      while (localEnd < end && !input.isECI(localEnd)) {
+        localEnd++;
+      }
+
+      final int localCount = localEnd - localStart;
+      if (localCount <= 0) {
+        //done
+        break;
+      } else {
+        //encode the segment
+        encodeBinary(subBytes(input, localStart, localEnd),
+            0, localCount, localStart == startpos ? startmode : BYTE_COMPACTION, sb);
+        localStart = localEnd;
+      }
+    }
+  }
+
+  static byte[] subBytes(ECIInput input, int start, int end) {
+    final int count = end - start;
+    byte[] result = new byte[count];
+    for (int i = start; i < end; i++) {
+      result[i - start] = (byte) (input.charAt(i) & 0xff);
+    }
+    return result;
+  }
+
   /**
    * Encode parts of the message using Byte Compaction as described in ISO/IEC 15438:2001(E),
    * chapter 4.4.3. The Unicode characters will be converted to binary using the cp437
@@ -416,7 +517,7 @@ final class PDF417HighLevelEncoder {
     }
   }
 
-  private static void encodeNumeric(String msg, int startpos, int count, StringBuilder sb) {
+  private static void encodeNumeric(ECIInput input, int startpos, int count, StringBuilder sb) {
     int idx = 0;
     StringBuilder tmp = new StringBuilder(count / 3 + 1);
     BigInteger num900 = BigInteger.valueOf(900);
@@ -424,7 +525,7 @@ final class PDF417HighLevelEncoder {
     while (idx < count) {
       tmp.setLength(0);
       int len = Math.min(44, count - idx);
-      String part = '1' + msg.substring(startpos + idx, startpos + idx + len);
+      String part = "1" + input.subSequence(startpos + idx, startpos + idx + len);
       BigInteger bigint = new BigInteger(part);
       do {
         tmp.append((char) bigint.mod(num900).intValue());
@@ -467,22 +568,18 @@ final class PDF417HighLevelEncoder {
   /**
    * Determines the number of consecutive characters that are encodable using numeric compaction.
    *
-   * @param msg      the message
-   * @param startpos the start position within the message
+   * @param input      the input
+   * @param startpos the start position within the input
    * @return the requested character count
    */
-  private static int determineConsecutiveDigitCount(CharSequence msg, int startpos) {
+  private static int determineConsecutiveDigitCount(ECIInput input, int startpos) {
     int count = 0;
-    int len = msg.length();
+    final int len = input.length();
     int idx = startpos;
     if (idx < len) {
-      char ch = msg.charAt(idx);
-      while (isDigit(ch) && idx < len) {
+      while (idx < len && !input.isECI(idx) && isDigit(input.charAt(idx))) {
         count++;
         idx++;
-        if (idx < len) {
-          ch = msg.charAt(idx);
-        }
       }
     }
     return count;
@@ -491,22 +588,18 @@ final class PDF417HighLevelEncoder {
   /**
    * Determines the number of consecutive characters that are encodable using text compaction.
    *
-   * @param msg      the message
-   * @param startpos the start position within the message
+   * @param input      the input
+   * @param startpos the start position within the input
    * @return the requested character count
    */
-  private static int determineConsecutiveTextCount(CharSequence msg, int startpos) {
-    int len = msg.length();
+  private static int determineConsecutiveTextCount(ECIInput input, int startpos) {
+    final int len = input.length();
     int idx = startpos;
     while (idx < len) {
-      char ch = msg.charAt(idx);
       int numericCount = 0;
-      while (numericCount < 13 && isDigit(ch) && idx < len) {
+      while (numericCount < 13 && idx < len && !input.isECI(idx) && isDigit(input.charAt(idx))) {
         numericCount++;
         idx++;
-        if (idx < len) {
-          ch = msg.charAt(idx);
-        }
       }
       if (numericCount >= 13) {
         return idx - startpos - numericCount;
@@ -515,10 +608,9 @@ final class PDF417HighLevelEncoder {
         //Heuristic: All text-encodable chars or digits are binary encodable
         continue;
       }
-      ch = msg.charAt(idx);
 
       //Check if character is encodable
-      if (!isText(ch)) {
+      if (input.isECI(idx) || !isText(input.charAt(idx))) {
         break;
       }
       idx++;
@@ -529,35 +621,35 @@ final class PDF417HighLevelEncoder {
   /**
    * Determines the number of consecutive characters that are encodable using binary compaction.
    *
-   * @param msg      the message
+   * @param input    the input
    * @param startpos the start position within the message
    * @param encoding the charset used to convert the message to a byte array
    * @return the requested character count
    */
-  private static int determineConsecutiveBinaryCount(String msg, int startpos, Charset encoding)
+  private static int determineConsecutiveBinaryCount(ECIInput input, int startpos, Charset encoding)
       throws WriterException {
-    CharsetEncoder encoder = encoding.newEncoder();
-    int len = msg.length();
+    CharsetEncoder encoder = encoding == null ? null : encoding.newEncoder();
+    int len = input.length();
     int idx = startpos;
     while (idx < len) {
-      char ch = msg.charAt(idx);
       int numericCount = 0;
 
-      while (numericCount < 13 && isDigit(ch)) {
+      int i = idx;
+      while (numericCount < 13 && !input.isECI(i) && isDigit(input.charAt(i))) {
         numericCount++;
         //textCount++;
-        int i = idx + numericCount;
+        i = idx + numericCount;
         if (i >= len) {
           break;
         }
-        ch = msg.charAt(i);
       }
       if (numericCount >= 13) {
         return idx - startpos;
       }
-      ch = msg.charAt(idx);
 
-      if (!encoder.canEncode(ch)) {
+      if (encoder != null && !encoder.canEncode(input.charAt(idx))) {
+        assert input instanceof NoECIInput;
+        char ch = input.charAt(idx);
         throw new WriterException("Non-encodable character detected: " + ch + " (Unicode: " + (int) ch + ')');
       }
       idx++;
@@ -581,4 +673,40 @@ final class PDF417HighLevelEncoder {
     }
   }
 
+  private static final class NoECIInput implements ECIInput {
+
+    String input;
+
+    private NoECIInput(String input) {
+      this.input = input;
+    }
+
+    public int length() {
+      return input.length();
+    }
+
+    public char charAt(int index) {
+      return input.charAt(index);
+    }
+
+    public boolean isECI(int index) {
+      return false;
+    }
+
+    public int getECIValue(int index) {
+      return -1;
+    }
+
+    public boolean haveNCharacters(int index, int n) {
+      return index + n <= input.length();
+    }
+
+    public CharSequence subSequence(int start, int end) {
+      return input.subSequence(start, end);
+    }
+
+    public String toString() {
+      return input;
+    }
+  }
 }
diff --git a/core/src/main/java/com/google/zxing/pdf417/encoder/PDF417HighLevelEncoderTestAdapter.java b/core/src/main/java/com/google/zxing/pdf417/encoder/PDF417HighLevelEncoderTestAdapter.java
new file mode 100644
index 0000000..6ba7992
--- /dev/null
+++ b/core/src/main/java/com/google/zxing/pdf417/encoder/PDF417HighLevelEncoderTestAdapter.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2022 ZXing authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.zxing.pdf417.encoder;
+
+import com.google.zxing.WriterException;
+
+import java.nio.charset.Charset;
+
+/**
+ * Test adapter for PDF417HighLevelEncoder to be called solely from unit tests.
+ */
+
+public final class PDF417HighLevelEncoderTestAdapter {
+
+  private PDF417HighLevelEncoderTestAdapter() {
+  }
+
+  public static String encodeHighLevel(String msg, 
+                                       Compaction compaction,
+                                       Charset encoding,
+                                       boolean autoECI) throws WriterException {
+    return PDF417HighLevelEncoder.encodeHighLevel(msg, compaction, encoding, autoECI);
+  }
+}
diff --git a/core/src/main/java/com/google/zxing/qrcode/QRCodeReader.java b/core/src/main/java/com/google/zxing/qrcode/QRCodeReader.java
index a4475af..f6a765f 100644
--- a/core/src/main/java/com/google/zxing/qrcode/QRCodeReader.java
+++ b/core/src/main/java/com/google/zxing/qrcode/QRCodeReader.java
@@ -99,6 +99,7 @@ public class QRCodeReader implements Reader {
       result.putMetadata(ResultMetadataType.STRUCTURED_APPEND_PARITY,
                          decoderResult.getStructuredAppendParity());
     }
+    result.putMetadata(ResultMetadataType.SYMBOLOGY_IDENTIFIER, "]Q" + decoderResult.getSymbologyModifier());
     return result;
   }
 
diff --git a/core/src/main/java/com/google/zxing/qrcode/decoder/DecodedBitStreamParser.java b/core/src/main/java/com/google/zxing/qrcode/decoder/DecodedBitStreamParser.java
index 0bfaf23..6aa9553 100644
--- a/core/src/main/java/com/google/zxing/qrcode/decoder/DecodedBitStreamParser.java
+++ b/core/src/main/java/com/google/zxing/qrcode/decoder/DecodedBitStreamParser.java
@@ -23,7 +23,7 @@ import com.google.zxing.common.CharacterSetECI;
 import com.google.zxing.common.DecoderResult;
 import com.google.zxing.common.StringUtils;
 
-import java.io.UnsupportedEncodingException;
+import java.nio.charset.Charset;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
@@ -58,10 +58,13 @@ final class DecodedBitStreamParser {
     List<byte[]> byteSegments = new ArrayList<>(1);
     int symbolSequence = -1;
     int parityData = -1;
+    int symbologyModifier;
 
     try {
       CharacterSetECI currentCharacterSetECI = null;
       boolean fc1InEffect = false;
+      boolean hasFNC1first = false;
+      boolean hasFNC1second = false;
       Mode mode;
       do {
         // While still another segment to read...
@@ -75,7 +78,12 @@ final class DecodedBitStreamParser {
           case TERMINATOR:
             break;
           case FNC1_FIRST_POSITION:
+            hasFNC1first = true; // symbology detection
+            // We do little with FNC1 except alter the parsed result a bit according to the spec
+            fc1InEffect = true;
+            break;
           case FNC1_SECOND_POSITION:
+            hasFNC1second = true; // symbology detection
             // We do little with FNC1 except alter the parsed result a bit according to the spec
             fc1InEffect = true;
             break;
@@ -128,6 +136,25 @@ final class DecodedBitStreamParser {
             break;
         }
       } while (mode != Mode.TERMINATOR);
+
+      if (currentCharacterSetECI != null) {
+        if (hasFNC1first) {
+          symbologyModifier = 4;
+        } else if (hasFNC1second) {
+          symbologyModifier = 6;
+        } else {
+          symbologyModifier = 2;
+        }
+      } else {
+        if (hasFNC1first) {
+          symbologyModifier = 3;
+        } else if (hasFNC1second) {
+          symbologyModifier = 5;
+        } else {
+          symbologyModifier = 1;
+        }
+      }
+
     } catch (IllegalArgumentException iae) {
       // from readBits() calls
       throw FormatException.getFormatInstance();
@@ -138,7 +165,8 @@ final class DecodedBitStreamParser {
                              byteSegments.isEmpty() ? null : byteSegments,
                              ecLevel == null ? null : ecLevel.toString(),
                              symbolSequence,
-                             parityData);
+                             parityData,
+                             symbologyModifier);
   }
 
   /**
@@ -147,6 +175,10 @@ final class DecodedBitStreamParser {
   private static void decodeHanziSegment(BitSource bits,
                                          StringBuilder result,
                                          int count) throws FormatException {
+    if (StringUtils.GB2312_CHARSET == null) {
+      // Not supported without charset support
+      throw FormatException.getFormatInstance();
+    }
     // Don't crash trying to read more bits than we have available.
     if (count * 13 > bits.available()) {
       throw FormatException.getFormatInstance();
@@ -173,11 +205,7 @@ final class DecodedBitStreamParser {
       count--;
     }
 
-    try {
-      result.append(new String(buffer, StringUtils.GB2312));
-    } catch (UnsupportedEncodingException ignored) {
-      throw FormatException.getFormatInstance();
-    }
+    result.append(new String(buffer, StringUtils.GB2312_CHARSET));
   }
 
   private static void decodeKanjiSegment(BitSource bits,
@@ -208,12 +236,7 @@ final class DecodedBitStreamParser {
       offset += 2;
       count--;
     }
-    // Shift_JIS may not be supported in some environments:
-    try {
-      result.append(new String(buffer, StringUtils.SHIFT_JIS));
-    } catch (UnsupportedEncodingException ignored) {
-      throw FormatException.getFormatInstance();
-    }
+    result.append(new String(buffer, StringUtils.SHIFT_JIS_CHARSET));
   }
 
   private static void decodeByteSegment(BitSource bits,
@@ -231,22 +254,18 @@ final class DecodedBitStreamParser {
     for (int i = 0; i < count; i++) {
       readBytes[i] = (byte) bits.readBits(8);
     }
-    String encoding;
+    Charset encoding;
     if (currentCharacterSetECI == null) {
       // The spec isn't clear on this mode; see
       // section 6.4.5: t does not say which encoding to assuming
       // upon decoding. I have seen ISO-8859-1 used as well as
       // Shift_JIS -- without anything like an ECI designator to
       // give a hint.
-      encoding = StringUtils.guessEncoding(readBytes, hints);
+      encoding = StringUtils.guessCharset(readBytes, hints);
     } else {
-      encoding = currentCharacterSetECI.name();
-    }
-    try {
-      result.append(new String(readBytes, encoding));
-    } catch (UnsupportedEncodingException ignored) {
-      throw FormatException.getFormatInstance();
+      encoding = currentCharacterSetECI.getCharset();
     }
+    result.append(new String(readBytes, encoding));
     byteSegments.add(readBytes);
   }
 
diff --git a/core/src/main/java/com/google/zxing/qrcode/detector/FinderPattern.java b/core/src/main/java/com/google/zxing/qrcode/detector/FinderPattern.java
index a64e7c2..7d43833 100644
--- a/core/src/main/java/com/google/zxing/qrcode/detector/FinderPattern.java
+++ b/core/src/main/java/com/google/zxing/qrcode/detector/FinderPattern.java
@@ -44,16 +44,10 @@ public final class FinderPattern extends ResultPoint {
     return estimatedModuleSize;
   }
 
-  int getCount() {
+  public int getCount() {
     return count;
   }
 
-  /*
-  void incrementCount() {
-    this.count++;
-  }
-   */
-
   /**
    * <p>Determines if this finder pattern "about equals" a finder pattern at the stated
    * position and size -- meaning, it is at nearly the same center with nearly the same size.</p>
diff --git a/core/src/main/java/com/google/zxing/qrcode/detector/FinderPatternFinder.java b/core/src/main/java/com/google/zxing/qrcode/detector/FinderPatternFinder.java
index fdf4a62..3800dc4 100755
--- a/core/src/main/java/com/google/zxing/qrcode/detector/FinderPatternFinder.java
+++ b/core/src/main/java/com/google/zxing/qrcode/detector/FinderPatternFinder.java
@@ -26,6 +26,7 @@ import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Comparator;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
@@ -621,6 +622,12 @@ public class FinderPatternFinder {
       throw NotFoundException.getNotFoundInstance();
     }
 
+    for (Iterator<FinderPattern> it = possibleCenters.iterator(); it.hasNext();) {
+      if (it.next().getCount() < CENTER_QUORUM) {
+        it.remove();
+      }
+    }
+
     possibleCenters.sort(moduleComparator);
 
     double distortion = Double.MAX_VALUE;
@@ -696,7 +703,7 @@ public class FinderPatternFinder {
     }
 
     if (distortion == Double.MAX_VALUE) {
-        throw NotFoundException.getNotFoundInstance();
+      throw NotFoundException.getNotFoundInstance();
     }
 
     return bestPatterns;
diff --git a/core/src/main/java/com/google/zxing/qrcode/encoder/Encoder.java b/core/src/main/java/com/google/zxing/qrcode/encoder/Encoder.java
index 3a80c70..cc09320 100644
--- a/core/src/main/java/com/google/zxing/qrcode/encoder/Encoder.java
+++ b/core/src/main/java/com/google/zxing/qrcode/encoder/Encoder.java
@@ -19,6 +19,7 @@ package com.google.zxing.qrcode.encoder;
 import com.google.zxing.EncodeHintType;
 import com.google.zxing.WriterException;
 import com.google.zxing.common.BitArray;
+import com.google.zxing.common.StringUtils;
 import com.google.zxing.common.CharacterSetECI;
 import com.google.zxing.common.reedsolomon.GenericGF;
 import com.google.zxing.common.reedsolomon.ReedSolomonEncoder;
@@ -26,7 +27,8 @@ import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
 import com.google.zxing.qrcode.decoder.Mode;
 import com.google.zxing.qrcode.decoder.Version;
 
-import java.io.UnsupportedEncodingException;
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Map;
@@ -47,7 +49,7 @@ public final class Encoder {
       25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, -1,  // 0x50-0x5f
   };
 
-  static final String DEFAULT_BYTE_MODE_ENCODING = "ISO-8859-1";
+  static final Charset DEFAULT_BYTE_MODE_ENCODING = StandardCharsets.ISO_8859_1;
 
   private Encoder() {
   }
@@ -76,64 +78,84 @@ public final class Encoder {
                               ErrorCorrectionLevel ecLevel,
                               Map<EncodeHintType,?> hints) throws WriterException {
 
+    Version version;
+    BitArray headerAndDataBits;
+    Mode mode;
+
+    boolean hasGS1FormatHint = hints != null && hints.containsKey(EncodeHintType.GS1_FORMAT) &&
+        Boolean.parseBoolean(hints.get(EncodeHintType.GS1_FORMAT).toString());
+    boolean hasCompactionHint = hints != null && hints.containsKey(EncodeHintType.QR_COMPACT) &&
+        Boolean.parseBoolean(hints.get(EncodeHintType.QR_COMPACT).toString());
+
     // Determine what character encoding has been specified by the caller, if any
-    String encoding = DEFAULT_BYTE_MODE_ENCODING;
+    Charset encoding = DEFAULT_BYTE_MODE_ENCODING;
     boolean hasEncodingHint = hints != null && hints.containsKey(EncodeHintType.CHARACTER_SET);
     if (hasEncodingHint) {
-      encoding = hints.get(EncodeHintType.CHARACTER_SET).toString();
-    }
-
-    // Pick an encoding mode appropriate for the content. Note that this will not attempt to use
-    // multiple modes / segments even if that were more efficient. Twould be nice.
-    Mode mode = chooseMode(content, encoding);
-
-    // This will store the header information, like mode and
-    // length, as well as "header" segments like an ECI segment.
-    BitArray headerBits = new BitArray();
-
-    // Append ECI segment if applicable
-    if (mode == Mode.BYTE && hasEncodingHint) {
-      CharacterSetECI eci = CharacterSetECI.getCharacterSetECIByName(encoding);
-      if (eci != null) {
-        appendECI(eci, headerBits);
-      }
+      encoding = Charset.forName(hints.get(EncodeHintType.CHARACTER_SET).toString());
     }
 
-    // Append the FNC1 mode header for GS1 formatted data if applicable
-    boolean hasGS1FormatHint = hints != null && hints.containsKey(EncodeHintType.GS1_FORMAT);
-    if (hasGS1FormatHint && Boolean.parseBoolean(hints.get(EncodeHintType.GS1_FORMAT).toString())) {
-      // GS1 formatted codes are prefixed with a FNC1 in first position mode header
-      appendModeInfo(Mode.FNC1_FIRST_POSITION, headerBits);
-    }
+    if (hasCompactionHint) {
+      mode = Mode.BYTE;
 
-    // (With ECI in place,) Write the mode marker
-    appendModeInfo(mode, headerBits);
+      Charset priorityEncoding = encoding.equals(DEFAULT_BYTE_MODE_ENCODING) ? null : encoding;
+      MinimalEncoder.ResultList rn = MinimalEncoder.encode(content, null, priorityEncoding, hasGS1FormatHint, ecLevel);
 
-    // Collect data within the main segment, separately, to count its size if needed. Don't add it to
-    // main payload yet.
-    BitArray dataBits = new BitArray();
-    appendBytes(content, mode, dataBits, encoding);
+      headerAndDataBits = new BitArray();
+      rn.getBits(headerAndDataBits);
+      version = rn.getVersion();
 
-    Version version;
-    if (hints != null && hints.containsKey(EncodeHintType.QR_VERSION)) {
-      int versionNumber = Integer.parseInt(hints.get(EncodeHintType.QR_VERSION).toString());
-      version = Version.getVersionForNumber(versionNumber);
-      int bitsNeeded = calculateBitsNeeded(mode, headerBits, dataBits, version);
-      if (!willFit(bitsNeeded, version, ecLevel)) {
-        throw new WriterException("Data too big for requested version");
-      }
     } else {
-      version = recommendVersion(ecLevel, mode, headerBits, dataBits);
+    
+      // Pick an encoding mode appropriate for the content. Note that this will not attempt to use
+      // multiple modes / segments even if that were more efficient.
+      mode = chooseMode(content, encoding);
+  
+      // This will store the header information, like mode and
+      // length, as well as "header" segments like an ECI segment.
+      BitArray headerBits = new BitArray();
+  
+      // Append ECI segment if applicable
+      if (mode == Mode.BYTE && hasEncodingHint) {
+        CharacterSetECI eci = CharacterSetECI.getCharacterSetECI(encoding);
+        if (eci != null) {
+          appendECI(eci, headerBits);
+        }
+      }
+  
+      // Append the FNC1 mode header for GS1 formatted data if applicable
+      if (hasGS1FormatHint) {
+        // GS1 formatted codes are prefixed with a FNC1 in first position mode header
+        appendModeInfo(Mode.FNC1_FIRST_POSITION, headerBits);
+      }
+    
+      // (With ECI in place,) Write the mode marker
+      appendModeInfo(mode, headerBits);
+  
+      // Collect data within the main segment, separately, to count its size if needed. Don't add it to
+      // main payload yet.
+      BitArray dataBits = new BitArray();
+      appendBytes(content, mode, dataBits, encoding);
+  
+      if (hints != null && hints.containsKey(EncodeHintType.QR_VERSION)) {
+        int versionNumber = Integer.parseInt(hints.get(EncodeHintType.QR_VERSION).toString());
+        version = Version.getVersionForNumber(versionNumber);
+        int bitsNeeded = calculateBitsNeeded(mode, headerBits, dataBits, version);
+        if (!willFit(bitsNeeded, version, ecLevel)) {
+          throw new WriterException("Data too big for requested version");
+        }
+      } else {
+        version = recommendVersion(ecLevel, mode, headerBits, dataBits);
+      }
+    
+      headerAndDataBits = new BitArray();
+      headerAndDataBits.appendBitArray(headerBits);
+      // Find "length" of main segment and write it
+      int numLetters = mode == Mode.BYTE ? dataBits.getSizeInBytes() : content.length();
+      appendLengthInfo(numLetters, version, mode, headerAndDataBits);
+      // Put data together into the overall payload
+      headerAndDataBits.appendBitArray(dataBits);
     }
 
-    BitArray headerAndDataBits = new BitArray();
-    headerAndDataBits.appendBitArray(headerBits);
-    // Find "length" of main segment and write it
-    int numLetters = mode == Mode.BYTE ? dataBits.getSizeInBytes() : content.length();
-    appendLengthInfo(numLetters, version, mode, headerAndDataBits);
-    // Put data together into the overall payload
-    headerAndDataBits.appendBitArray(dataBits);
-
     Version.ECBlocks ecBlocks = version.getECBlocksForLevel(ecLevel);
     int numDataBytes = version.getTotalCodewords() - ecBlocks.getTotalECCodewords();
 
@@ -221,8 +243,8 @@ public final class Encoder {
    * Choose the best mode by examining the content. Note that 'encoding' is used as a hint;
    * if it is Shift_JIS, and the input is only double-byte Kanji, then we return {@link Mode#KANJI}.
    */
-  private static Mode chooseMode(String content, String encoding) {
-    if ("Shift_JIS".equals(encoding) && isOnlyDoubleByteKanji(content)) {
+  private static Mode chooseMode(String content, Charset encoding) {
+    if (StringUtils.SHIFT_JIS_CHARSET.equals(encoding) && isOnlyDoubleByteKanji(content)) {
       // Choose Kanji mode if all input are double-byte characters
       return Mode.KANJI;
     }
@@ -247,13 +269,8 @@ public final class Encoder {
     return Mode.BYTE;
   }
 
-  private static boolean isOnlyDoubleByteKanji(String content) {
-    byte[] bytes;
-    try {
-      bytes = content.getBytes("Shift_JIS");
-    } catch (UnsupportedEncodingException ignored) {
-      return false;
-    }
+  static boolean isOnlyDoubleByteKanji(String content) {
+    byte[] bytes = content.getBytes(StringUtils.SHIFT_JIS_CHARSET);
     int length = bytes.length;
     if (length % 2 != 0) {
       return false;
@@ -300,17 +317,17 @@ public final class Encoder {
    * @return true if the number of input bits will fit in a code with the specified version and
    * error correction level.
    */
-  private static boolean willFit(int numInputBits, Version version, ErrorCorrectionLevel ecLevel) {
-      // In the following comments, we use numbers of Version 7-H.
-      // numBytes = 196
-      int numBytes = version.getTotalCodewords();
-      // getNumECBytes = 130
-      Version.ECBlocks ecBlocks = version.getECBlocksForLevel(ecLevel);
-      int numEcBytes = ecBlocks.getTotalECCodewords();
-      // getNumDataBytes = 196 - 130 = 66
-      int numDataBytes = numBytes - numEcBytes;
-      int totalInputBytes = (numInputBits + 7) / 8;
-      return numDataBytes >= totalInputBytes;
+  static boolean willFit(int numInputBits, Version version, ErrorCorrectionLevel ecLevel) {
+    // In the following comments, we use numbers of Version 7-H.
+    // numBytes = 196
+    int numBytes = version.getTotalCodewords();
+    // getNumECBytes = 130
+    Version.ECBlocks ecBlocks = version.getECBlocksForLevel(ecLevel);
+    int numEcBytes = ecBlocks.getTotalECCodewords();
+    // getNumDataBytes = 196 - 130 = 66
+    int numDataBytes = numBytes - numEcBytes;
+    int totalInputBytes = (numInputBits + 7) / 8;
+    return numDataBytes >= totalInputBytes;
   }
 
   /**
@@ -322,6 +339,7 @@ public final class Encoder {
       throw new WriterException("data bits cannot fit in the QR Code" + bits.getSize() + " > " +
           capacity);
     }
+    // Append Mode.TERMINATE if there is enough space (value is 0000)
     for (int i = 0; i < 4 && bits.getSize() < capacity; ++i) {
       bits.appendBit(false);
     }
@@ -512,7 +530,7 @@ public final class Encoder {
   static void appendBytes(String content,
                           Mode mode,
                           BitArray bits,
-                          String encoding) throws WriterException {
+                          Charset encoding) throws WriterException {
     switch (mode) {
       case NUMERIC:
         appendNumericBytes(content, bits);
@@ -579,26 +597,15 @@ public final class Encoder {
     }
   }
 
-  static void append8BitBytes(String content, BitArray bits, String encoding)
-      throws WriterException {
-    byte[] bytes;
-    try {
-      bytes = content.getBytes(encoding);
-    } catch (UnsupportedEncodingException uee) {
-      throw new WriterException(uee);
-    }
+  static void append8BitBytes(String content, BitArray bits, Charset encoding) {
+    byte[] bytes = content.getBytes(encoding);
     for (byte b : bytes) {
       bits.appendBits(b, 8);
     }
   }
 
   static void appendKanjiBytes(String content, BitArray bits) throws WriterException {
-    byte[] bytes;
-    try {
-      bytes = content.getBytes("Shift_JIS");
-    } catch (UnsupportedEncodingException uee) {
-      throw new WriterException(uee);
-    }
+    byte[] bytes = content.getBytes(StringUtils.SHIFT_JIS_CHARSET);
     if (bytes.length % 2 != 0) {
       throw new WriterException("Kanji byte size not even");
     }
diff --git a/core/src/main/java/com/google/zxing/qrcode/encoder/MaskUtil.java b/core/src/main/java/com/google/zxing/qrcode/encoder/MaskUtil.java
index 11d7804..568f6ff 100644
--- a/core/src/main/java/com/google/zxing/qrcode/encoder/MaskUtil.java
+++ b/core/src/main/java/com/google/zxing/qrcode/encoder/MaskUtil.java
@@ -104,8 +104,9 @@ final class MaskUtil {
   }
 
   private static boolean isWhiteHorizontal(byte[] rowArray, int from, int to) {
-    from = Math.max(from, 0);
-    to = Math.min(to, rowArray.length);
+    if (from < 0 || rowArray.length < to) {
+      return false;
+    }
     for (int i = from; i < to; i++) {
       if (rowArray[i] == 1) {
         return false;
@@ -115,8 +116,9 @@ final class MaskUtil {
   }
 
   private static boolean isWhiteVertical(byte[][] array, int col, int from, int to) {
-    from = Math.max(from, 0);
-    to = Math.min(to, array.length);
+    if (from < 0 || array.length < to) {
+      return false;
+    }
     for (int i = from; i < to; i++) {
       if (array[i][col] == 1) {
         return false;
diff --git a/core/src/main/java/com/google/zxing/qrcode/encoder/MinimalEncoder.java b/core/src/main/java/com/google/zxing/qrcode/encoder/MinimalEncoder.java
new file mode 100644
index 0000000..4de1d0b
--- /dev/null
+++ b/core/src/main/java/com/google/zxing/qrcode/encoder/MinimalEncoder.java
@@ -0,0 +1,667 @@
+/*
+ * Copyright 2021 ZXing authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.zxing.qrcode.encoder;
+
+import com.google.zxing.qrcode.decoder.Mode;
+import com.google.zxing.qrcode.decoder.Version;
+import com.google.zxing.common.BitArray;
+import com.google.zxing.common.ECIEncoderSet;
+import com.google.zxing.WriterException;
+import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
+
+import java.nio.charset.Charset;
+import java.util.ArrayList;
+import java.util.List;
+
+
+/**
+ * Encoder that encodes minimally
+ *
+ * Algorithm:
+ *
+ * The eleventh commandment was "Thou Shalt Compute" or "Thou Shalt Not Compute" - I forget which (Alan Perilis).
+ *
+ * This implementation computes. As an alternative, the QR-Code specification suggests heuristics like this one:
+ *
+ * If initial input data is in the exclusive subset of the Alphanumeric character set AND if there are less than
+ * [6,7,8] characters followed by data from the remainder of the 8-bit byte character set, THEN select the 8-
+ * bit byte mode ELSE select Alphanumeric mode;
+ *
+ * This is probably right for 99.99% of cases but there is at least this one counter example: The string "AAAAAAa"
+ * encodes 2 bits smaller as ALPHANUMERIC(AAAAAA), BYTE(a) than by encoding it as BYTE(AAAAAAa).
+ * Perhaps that is the only counter example but without having proof, it remains unclear.
+ *
+ * ECI switching:
+ *
+ * In multi language content the algorithm selects the most compact representation using ECI modes.
+ * For example the most compact representation of the string "\u0150\u015C" (O-double-acute, S-circumflex) is
+ * ECI(UTF-8), BYTE(\u0150\u015C) while prepending one or more times the same leading character as in
+ * "\u0150\u0150\u015C", the most compact representation uses two ECIs so that the string is encoded as
+ * ECI(ISO-8859-2), BYTE(\u0150\u0150), ECI(ISO-8859-3), BYTE(\u015C).
+ *
+ * @author Alex Geller
+ */
+final class MinimalEncoder {
+
+  private enum VersionSize {
+    SMALL("version 1-9"),
+    MEDIUM("version 10-26"),
+    LARGE("version 27-40");
+
+    private final String description;
+
+    VersionSize(String description) {
+      this.description = description;
+    }
+
+    public String toString() {
+      return description;
+    }
+  }
+
+  private final String stringToEncode;
+  private final boolean isGS1;
+  private final ECIEncoderSet encoders;
+  private final ErrorCorrectionLevel ecLevel;
+
+  /**
+   * Creates a MinimalEncoder
+   *
+   * @param stringToEncode The string to encode
+   * @param priorityCharset The preferred {@link Charset}. When the value of the argument is null, the algorithm
+   *   chooses charsets that leads to a minimal representation. Otherwise the algorithm will use the priority
+   *   charset to encode any character in the input that can be encoded by it if the charset is among the
+   *   supported charsets.
+   * @param isGS1 {@code true} if a FNC1 is to be prepended; {@code false} otherwise
+   * @param ecLevel The error correction level.
+   * @see ResultList#getVersion
+   */
+  MinimalEncoder(String stringToEncode, Charset priorityCharset, boolean isGS1, ErrorCorrectionLevel ecLevel) {
+    this.stringToEncode = stringToEncode;
+    this.isGS1 = isGS1;
+    this.encoders = new ECIEncoderSet(stringToEncode, priorityCharset, -1);
+    this.ecLevel = ecLevel;
+  }
+
+  /**
+   * Encodes the string minimally
+   *
+   * @param stringToEncode The string to encode
+   * @param version The preferred {@link Version}. A minimal version is computed (see
+   *   {@link ResultList#getVersion method} when the value of the argument is null
+   * @param priorityCharset The preferred {@link Charset}. When the value of the argument is null, the algorithm
+   *   chooses charsets that leads to a minimal representation. Otherwise the algorithm will use the priority
+   *   charset to encode any character in the input that can be encoded by it if the charset is among the
+   *   supported charsets.
+   * @param isGS1 {@code true} if a FNC1 is to be prepended; {@code false} otherwise
+   * @param ecLevel The error correction level.
+   * @return An instance of {@code ResultList} representing the minimal solution.
+   * @see ResultList#getBits
+   * @see ResultList#getVersion
+   * @see ResultList#getSize
+   */
+  static ResultList encode(String stringToEncode, Version version, Charset priorityCharset, boolean isGS1,
+      ErrorCorrectionLevel ecLevel) throws WriterException {
+    return new MinimalEncoder(stringToEncode, priorityCharset, isGS1, ecLevel).encode(version);
+  }
+
+  ResultList encode(Version version) throws WriterException {
+    if (version == null) { // compute minimal encoding trying the three version sizes.
+      Version[] versions = { getVersion(VersionSize.SMALL),
+                             getVersion(VersionSize.MEDIUM),
+                             getVersion(VersionSize.LARGE) };
+      ResultList[] results = { encodeSpecificVersion(versions[0]),
+                               encodeSpecificVersion(versions[1]),
+                               encodeSpecificVersion(versions[2]) };
+      int smallestSize = Integer.MAX_VALUE;
+      int smallestResult = -1;
+      for (int i = 0; i < 3; i++) {
+        int size = results[i].getSize();
+        if (Encoder.willFit(size, versions[i], ecLevel) && size < smallestSize) {
+          smallestSize = size;
+          smallestResult = i;
+        }
+      }
+      if (smallestResult < 0) {
+        throw new WriterException("Data too big for any version");
+      }
+      return results[smallestResult];
+    } else { // compute minimal encoding for a given version
+      ResultList result = encodeSpecificVersion(version);
+      if (!Encoder.willFit(result.getSize(), getVersion(getVersionSize(result.getVersion())), ecLevel)) {
+        throw new WriterException("Data too big for version" + version);
+      }
+      return result;
+    }
+  }
+
+  static VersionSize getVersionSize(Version version) {
+    return version.getVersionNumber() <= 9 ? VersionSize.SMALL : version.getVersionNumber() <= 26 ?
+      VersionSize.MEDIUM : VersionSize.LARGE;
+  }
+
+  static Version getVersion(VersionSize versionSize) {
+    switch (versionSize) {
+      case SMALL:
+        return Version.getVersionForNumber(9);
+      case MEDIUM:
+        return Version.getVersionForNumber(26);
+      case LARGE:
+      default:
+        return Version.getVersionForNumber(40);
+    }
+  }
+
+  static boolean isNumeric(char c) {
+    return c >= '0' && c <= '9';
+  }
+
+  static boolean isDoubleByteKanji(char c) {
+    return Encoder.isOnlyDoubleByteKanji(String.valueOf(c));
+  }
+
+  static boolean isAlphanumeric(char c) {
+    return Encoder.getAlphanumericCode(c) != -1;
+  }
+
+  boolean canEncode(Mode mode, char c) {
+    switch (mode) {
+      case KANJI: return isDoubleByteKanji(c);
+      case ALPHANUMERIC: return isAlphanumeric(c);
+      case NUMERIC: return isNumeric(c);
+      case BYTE: return true; // any character can be encoded as byte(s). Up to the caller to manage splitting into
+                              // multiple bytes when String.getBytes(Charset) return more than one byte.
+      default:
+        return false;
+    }
+  }
+
+  static int getCompactedOrdinal(Mode mode) {
+    if (mode == null) {
+      return 0;
+    }
+    switch (mode) {
+      case KANJI:
+        return 0;
+      case ALPHANUMERIC:
+        return 1;
+      case NUMERIC:
+        return 2;
+      case BYTE:
+        return 3;
+      default:
+        throw new IllegalStateException("Illegal mode " + mode);
+    }
+  }
+
+  void addEdge(Edge[][][] edges, int position, Edge edge) {
+    int vertexIndex = position + edge.characterLength;
+    Edge[] modeEdges = edges[vertexIndex][edge.charsetEncoderIndex];
+    int modeOrdinal = getCompactedOrdinal(edge.mode);
+    if (modeEdges[modeOrdinal] == null || modeEdges[modeOrdinal].cachedTotalSize > edge.cachedTotalSize) {
+      modeEdges[modeOrdinal] = edge;
+    }
+  }
+
+  void addEdges(Version version, Edge[][][] edges, int from, Edge previous) {
+    int start = 0;
+    int end = encoders.length();
+    int priorityEncoderIndex = encoders.getPriorityEncoderIndex();
+    if (priorityEncoderIndex >= 0 && encoders.canEncode(stringToEncode.charAt(from),priorityEncoderIndex)) {
+      start = priorityEncoderIndex;
+      end = priorityEncoderIndex + 1;
+    }
+
+    for (int i = start; i < end; i++) {
+      if (encoders.canEncode(stringToEncode.charAt(from), i)) {
+        addEdge(edges, from, new Edge(Mode.BYTE, from, i, 1, previous, version));
+      }
+    }
+
+    if (canEncode(Mode.KANJI, stringToEncode.charAt(from))) {
+      addEdge(edges, from, new Edge(Mode.KANJI, from, 0, 1, previous, version));
+    }
+
+    int inputLength = stringToEncode.length();
+    if (canEncode(Mode.ALPHANUMERIC, stringToEncode.charAt(from))) {
+      addEdge(edges, from, new Edge(Mode.ALPHANUMERIC, from, 0, from + 1 >= inputLength ||
+          !canEncode(Mode.ALPHANUMERIC, stringToEncode.charAt(from + 1)) ? 1 : 2, previous, version));
+    }
+
+    if (canEncode(Mode.NUMERIC, stringToEncode.charAt(from))) {
+      addEdge(edges, from, new Edge(Mode.NUMERIC, from, 0, from + 1 >= inputLength ||
+          !canEncode(Mode.NUMERIC, stringToEncode.charAt(from + 1)) ? 1 : from + 2 >= inputLength ||
+          !canEncode(Mode.NUMERIC, stringToEncode.charAt(from + 2)) ? 2 : 3, previous, version));
+    }
+  }
+  ResultList encodeSpecificVersion(Version version) throws WriterException {
+
+    @SuppressWarnings("checkstyle:lineLength")
+    /* A vertex represents a tuple of a position in the input, a mode and a character encoding where position 0
+     * denotes the position left of the first character, 1 the position left of the second character and so on.
+     * Likewise the end vertices are located after the last character at position stringToEncode.length().
+     *
+     * An edge leading to such a vertex encodes one or more of the characters left of the position that the vertex
+     * represents and encodes it in the same encoding and mode as the vertex on which the edge ends. In other words,
+     * all edges leading to a particular vertex encode the same characters in the same mode with the same character
+     * encoding. They differ only by their source vertices who are all located at i+1 minus the number of encoded
+     * characters.
+     *
+     * The edges leading to a vertex are stored in such a way that there is a fast way to enumerate the edges ending
+     * on a particular vertex.
+     *
+     * The algorithm processes the vertices in order of their position thereby performing the following:
+     *
+     * For every vertex at position i the algorithm enumerates the edges ending on the vertex and removes all but the
+     * shortest from that list.
+     * Then it processes the vertices for the position i+1. If i+1 == stringToEncode.length() then the algorithm ends
+     * and chooses the the edge with the smallest size from any of the edges leading to vertices at this position.
+     * Otherwise the algorithm computes all possible outgoing edges for the vertices at the position i+1
+     *
+     * Examples:
+     * The process is illustrated by showing the graph (edges) after each iteration from left to right over the input:
+     * An edge is drawn as follows "(" + fromVertex + ") -- " + encodingMode + "(" + encodedInput + ") (" +
+     * accumulatedSize + ") --> (" + toVertex + ")"
+     *
+     * Example 1 encoding the string "ABCDE":
+     * Note: This example assumes that alphanumeric encoding is only possible in multiples of two characters so that
+     * the example is both short and showing the principle. In reality this restriction does not exist.
+     *
+     * Initial situation
+     * (initial) -- BYTE(A) (20) --> (1_BYTE)
+     * (initial) -- ALPHANUMERIC(AB)                     (24) --> (2_ALPHANUMERIC)
+     *
+     * Situation after adding edges to vertices at position 1
+     * (initial) -- BYTE(A) (20) --> (1_BYTE) -- BYTE(B) (28) --> (2_BYTE)
+     *                               (1_BYTE) -- ALPHANUMERIC(BC)                             (44) --> (3_ALPHANUMERIC)
+     * (initial) -- ALPHANUMERIC(AB)                     (24) --> (2_ALPHANUMERIC)
+     *
+     * Situation after adding edges to vertices at position 2
+     * (initial) -- BYTE(A) (20) --> (1_BYTE)
+     * (initial) -- ALPHANUMERIC(AB)                     (24) --> (2_ALPHANUMERIC)
+     * (initial) -- BYTE(A) (20) --> (1_BYTE) -- BYTE(B) (28) --> (2_BYTE)
+                                   * (1_BYTE) -- ALPHANUMERIC(BC)                             (44) --> (3_ALPHANUMERIC)
+     * (initial) -- ALPHANUMERIC(AB)                     (24) --> (2_ALPHANUMERIC) -- BYTE(C) (44) --> (3_BYTE)
+     *                                                            (2_ALPHANUMERIC) -- ALPHANUMERIC(CD)                             (35) --> (4_ALPHANUMERIC)
+     *
+     * Situation after adding edges to vertices at position 3
+     * (initial) -- BYTE(A) (20) --> (1_BYTE) -- BYTE(B) (28) --> (2_BYTE) -- BYTE(C)         (36) --> (3_BYTE)
+     *                               (1_BYTE) -- ALPHANUMERIC(BC)                             (44) --> (3_ALPHANUMERIC) -- BYTE(D) (64) --> (4_BYTE)
+     *                                                                                                 (3_ALPHANUMERIC) -- ALPHANUMERIC(DE)                             (55) --> (5_ALPHANUMERIC)
+     * (initial) -- ALPHANUMERIC(AB)                     (24) --> (2_ALPHANUMERIC) -- ALPHANUMERIC(CD)                             (35) --> (4_ALPHANUMERIC)
+     *                                                            (2_ALPHANUMERIC) -- ALPHANUMERIC(CD)                             (35) --> (4_ALPHANUMERIC)
+     *
+     * Situation after adding edges to vertices at position 4
+     * (initial) -- BYTE(A) (20) --> (1_BYTE) -- BYTE(B) (28) --> (2_BYTE) -- BYTE(C)         (36) --> (3_BYTE) -- BYTE(D) (44) --> (4_BYTE)
+     *                               (1_BYTE) -- ALPHANUMERIC(BC)                             (44) --> (3_ALPHANUMERIC) -- ALPHANUMERIC(DE)                             (55) --> (5_ALPHANUMERIC)
+     * (initial) -- ALPHANUMERIC(AB)                     (24) --> (2_ALPHANUMERIC) -- ALPHANUMERIC(CD)                             (35) --> (4_ALPHANUMERIC) -- BYTE(E) (55) --> (5_BYTE)
+     *
+     * Situation after adding edges to vertices at position 5
+     * (initial) -- BYTE(A) (20) --> (1_BYTE) -- BYTE(B) (28) --> (2_BYTE) -- BYTE(C)         (36) --> (3_BYTE) -- BYTE(D)         (44) --> (4_BYTE) -- BYTE(E)         (52) --> (5_BYTE)
+     *                               (1_BYTE) -- ALPHANUMERIC(BC)                             (44) --> (3_ALPHANUMERIC) -- ALPHANUMERIC(DE)                             (55) --> (5_ALPHANUMERIC)
+     * (initial) -- ALPHANUMERIC(AB)                     (24) --> (2_ALPHANUMERIC) -- ALPHANUMERIC(CD)                             (35) --> (4_ALPHANUMERIC)
+     *
+     * Encoding as BYTE(ABCDE) has the smallest size of 52 and is hence chosen. The encodation ALPHANUMERIC(ABCD),
+     * BYTE(E) is longer with a size of 55.
+     *
+     * Example 2 encoding the string "XXYY" where X denotes a character unique to character set ISO-8859-2 and Y a
+     * character unique to ISO-8859-3. Both characters encode as double byte in UTF-8:
+     *
+     * Initial situation
+     * (initial) -- BYTE(X) (32) --> (1_BYTE_ISO-8859-2)
+     * (initial) -- BYTE(X) (40) --> (1_BYTE_UTF-8)
+     * (initial) -- BYTE(X) (40) --> (1_BYTE_UTF-16BE)
+     *
+     * Situation after adding edges to vertices at position 1
+     * (initial) -- BYTE(X) (32) --> (1_BYTE_ISO-8859-2) -- BYTE(X) (40) --> (2_BYTE_ISO-8859-2)
+     *                               (1_BYTE_ISO-8859-2) -- BYTE(X) (72) --> (2_BYTE_UTF-8)
+     *                               (1_BYTE_ISO-8859-2) -- BYTE(X) (72) --> (2_BYTE_UTF-16BE)
+     * (initial) -- BYTE(X) (40) --> (1_BYTE_UTF-8)
+     * (initial) -- BYTE(X) (40) --> (1_BYTE_UTF-16BE)
+     *
+     * Situation after adding edges to vertices at position 2
+     * (initial) -- BYTE(X) (32) --> (1_BYTE_ISO-8859-2) -- BYTE(X) (40) --> (2_BYTE_ISO-8859-2)
+     *                                                                       (2_BYTE_ISO-8859-2) -- BYTE(Y) (72) --> (3_BYTE_ISO-8859-3)
+     *                                                                       (2_BYTE_ISO-8859-2) -- BYTE(Y) (80) --> (3_BYTE_UTF-8)
+     *                                                                       (2_BYTE_ISO-8859-2) -- BYTE(Y) (80) --> (3_BYTE_UTF-16BE)
+     * (initial) -- BYTE(X) (40) --> (1_BYTE_UTF-8) -- BYTE(X) (56) --> (2_BYTE_UTF-8)
+     * (initial) -- BYTE(X) (40) --> (1_BYTE_UTF-16BE) -- BYTE(X) (56) --> (2_BYTE_UTF-16BE)
+     *
+     * Situation after adding edges to vertices at position 3
+     * (initial) -- BYTE(X) (32) --> (1_BYTE_ISO-8859-2) -- BYTE(X) (40) --> (2_BYTE_ISO-8859-2) -- BYTE(Y) (72) --> (3_BYTE_ISO-8859-3)
+     *                                                                                                               (3_BYTE_ISO-8859-3) -- BYTE(Y) (80) --> (4_BYTE_ISO-8859-3)
+     *                                                                                                               (3_BYTE_ISO-8859-3) -- BYTE(Y) (112) --> (4_BYTE_UTF-8)
+     *                                                                                                               (3_BYTE_ISO-8859-3) -- BYTE(Y) (112) --> (4_BYTE_UTF-16BE)
+     * (initial) -- BYTE(X) (40) --> (1_BYTE_UTF-8) -- BYTE(X) (56) --> (2_BYTE_UTF-8) -- BYTE(Y) (72) --> (3_BYTE_UTF-8)
+     * (initial) -- BYTE(X) (40) --> (1_BYTE_UTF-16BE) -- BYTE(X) (56) --> (2_BYTE_UTF-16BE) -- BYTE(Y) (72) --> (3_BYTE_UTF-16BE)
+     *
+     * Situation after adding edges to vertices at position 4
+     * (initial) -- BYTE(X) (32) --> (1_BYTE_ISO-8859-2) -- BYTE(X) (40) --> (2_BYTE_ISO-8859-2) -- BYTE(Y) (72) --> (3_BYTE_ISO-8859-3) -- BYTE(Y) (80) --> (4_BYTE_ISO-8859-3)
+     *                                                                                                               (3_BYTE_UTF-8) -- BYTE(Y) (88) --> (4_BYTE_UTF-8)
+     *                                                                                                               (3_BYTE_UTF-16BE) -- BYTE(Y) (88) --> (4_BYTE_UTF-16BE)
+     * (initial) -- BYTE(X) (40) --> (1_BYTE_UTF-8) -- BYTE(X) (56) --> (2_BYTE_UTF-8) -- BYTE(Y) (72) --> (3_BYTE_UTF-8)
+     * (initial) -- BYTE(X) (40) --> (1_BYTE_UTF-16BE) -- BYTE(X) (56) --> (2_BYTE_UTF-16BE) -- BYTE(Y) (72) --> (3_BYTE_UTF-16BE)
+     *
+     * Encoding as ECI(ISO-8859-2),BYTE(XX),ECI(ISO-8859-3),BYTE(YY) has the smallest size of 80 and is hence chosen.
+     * The encodation ECI(UTF-8),BYTE(XXYY) is longer with a size of 88.
+     */
+
+    int inputLength = stringToEncode.length();
+
+    // Array that represents vertices. There is a vertex for every character, encoding and mode. The vertex contains
+    // a list of all edges that lead to it that have the same encoding and mode.
+    // The lists are created lazily
+
+    // The last dimension in the array below encodes the 4 modes KANJI, ALPHANUMERIC, NUMERIC and BYTE via the
+    // function getCompactedOrdinal(Mode)
+    Edge[][][] edges = new Edge[inputLength + 1][encoders.length()][4];
+    addEdges(version, edges, 0, null);
+
+    for (int i = 1; i <= inputLength; i++) {
+      for (int j = 0; j < encoders.length(); j++) {
+        for (int k = 0; k < 4; k++) {
+          if (edges[i][j][k] != null && i < inputLength) {
+            addEdges(version, edges, i, edges[i][j][k]);
+          }
+        }
+      }
+
+    }
+    int minimalJ = -1;
+    int minimalK = -1;
+    int minimalSize = Integer.MAX_VALUE;
+    for (int j = 0; j < encoders.length(); j++) {
+      for (int k = 0; k < 4; k++) {
+        if (edges[inputLength][j][k] != null) {
+          Edge edge = edges[inputLength][j][k];
+          if (edge.cachedTotalSize < minimalSize) {
+            minimalSize = edge.cachedTotalSize;
+            minimalJ = j;
+            minimalK = k;
+          }
+        }
+      }
+    }
+    if (minimalJ < 0) {
+      throw new WriterException("Internal error: failed to encode \"" + stringToEncode + "\"");
+    }
+    return new ResultList(version, edges[inputLength][minimalJ][minimalK]);
+  }
+
+  private final class Edge {
+    private final Mode mode;
+    private final int fromPosition;
+    private final int charsetEncoderIndex;
+    private final int characterLength;
+    private final Edge previous;
+    private final int cachedTotalSize;
+
+    private Edge(Mode mode, int fromPosition, int charsetEncoderIndex, int characterLength, Edge previous,
+                 Version version) {
+      this.mode = mode;
+      this.fromPosition = fromPosition;
+      this.charsetEncoderIndex = mode == Mode.BYTE || previous == null ? charsetEncoderIndex :
+          previous.charsetEncoderIndex; // inherit the encoding if not of type BYTE
+      this.characterLength = characterLength;
+      this.previous = previous;
+
+      int size = previous != null ? previous.cachedTotalSize : 0;
+
+      boolean needECI = mode == Mode.BYTE &&
+          (previous == null && this.charsetEncoderIndex != 0) || // at the beginning and charset is not ISO-8859-1
+          (previous != null && this.charsetEncoderIndex != previous.charsetEncoderIndex);
+
+      if (previous == null || mode != previous.mode || needECI) {
+        size += 4 + mode.getCharacterCountBits(version);
+      }
+      switch (mode) {
+        case KANJI:
+          size += 13;
+          break;
+        case ALPHANUMERIC:
+          size += characterLength == 1 ? 6 : 11;
+          break;
+        case NUMERIC:
+          size += characterLength == 1 ? 4 : characterLength == 2 ? 7 : 10;
+          break;
+        case BYTE:
+          size += 8 * encoders.encode(stringToEncode.substring(fromPosition, fromPosition + characterLength),
+              charsetEncoderIndex).length;
+          if (needECI) {
+            size += 4 + 8; // the ECI assignment numbers for ISO-8859-x, UTF-8 and UTF-16 are all 8 bit long
+          }
+          break;
+      }
+      cachedTotalSize = size;
+    }
+  }
+
+  final class ResultList {
+
+    private final List<ResultList.ResultNode> list = new ArrayList<>();
+    private final Version version;
+
+    ResultList(Version version, Edge solution) {
+      int length = 0;
+      Edge current = solution;
+      boolean containsECI = false;
+
+      while (current != null) {
+        length += current.characterLength;
+        Edge previous = current.previous;
+
+        boolean needECI = current.mode == Mode.BYTE &&
+            (previous == null && current.charsetEncoderIndex != 0) || // at the beginning and charset is not ISO-8859-1
+            (previous != null && current.charsetEncoderIndex != previous.charsetEncoderIndex);
+
+        if (needECI) {
+          containsECI = true;
+        }
+
+        if (previous == null || previous.mode != current.mode || needECI) {
+          list.add(0, new ResultNode(current.mode, current.fromPosition, current.charsetEncoderIndex, length));
+          length = 0;
+        }
+
+        if (needECI) {
+          list.add(0, new ResultNode(Mode.ECI, current.fromPosition, current.charsetEncoderIndex, 0));
+        }
+        current = previous;
+      }
+
+      // prepend FNC1 if needed. If the bits contain an ECI then the FNC1 must be preceeded by an ECI.
+      // If there is no ECI at the beginning then we put an ECI to the default charset (ISO-8859-1)
+      if (isGS1) {
+        ResultNode first = list.get(0);
+        if (first != null && first.mode != Mode.ECI && containsECI) {
+          // prepend a default character set ECI
+          list.add(0, new ResultNode(Mode.ECI, 0, 0, 0));
+        }
+        first = list.get(0);
+        // prepend or insert a FNC1_FIRST_POSITION after the ECI (if any)
+        list.add(first.mode != Mode.ECI ? 0 : 1, new ResultNode(Mode.FNC1_FIRST_POSITION, 0, 0, 0));
+      }
+
+      // set version to smallest version into which the bits fit.
+      int versionNumber = version.getVersionNumber();
+      int lowerLimit;
+      int upperLimit;
+      switch (getVersionSize(version)) {
+        case SMALL:
+          lowerLimit = 1;
+          upperLimit = 9;
+          break;
+        case MEDIUM:
+          lowerLimit = 10;
+          upperLimit = 26;
+          break;
+        case LARGE:
+        default:
+          lowerLimit = 27;
+          upperLimit = 40;
+          break;
+      }
+      int size = getSize(version);
+      // increase version if needed
+      while (versionNumber < upperLimit && !Encoder.willFit(size, Version.getVersionForNumber(versionNumber),
+        ecLevel)) {
+        versionNumber++;
+      }
+      // shrink version if possible
+      while (versionNumber > lowerLimit && Encoder.willFit(size, Version.getVersionForNumber(versionNumber - 1),
+        ecLevel)) {
+        versionNumber--;
+      }
+      this.version = Version.getVersionForNumber(versionNumber);
+    }
+
+    /**
+     * returns the size in bits
+     */
+    int getSize() {
+      return getSize(version);
+    }
+
+    private int getSize(Version version) {
+      int result = 0;
+      for (ResultNode resultNode : list) {
+        result += resultNode.getSize(version);
+      }
+      return result;
+    }
+
+    /**
+     * appends the bits
+     */
+    void getBits(BitArray bits) throws WriterException {
+      for (ResultNode resultNode : list) {
+        resultNode.getBits(bits);
+      }
+    }
+
+    Version getVersion() {
+      return version;
+    }
+
+    public String toString() {
+      StringBuilder result = new StringBuilder();
+      ResultNode previous = null;
+      for (ResultNode current : list) {
+        if (previous != null) {
+          result.append(",");
+        }
+        result.append(current.toString());
+        previous = current;
+      }
+      return result.toString();
+    }
+
+    final class ResultNode {
+
+      private final Mode mode;
+      private final int fromPosition;
+      private final int charsetEncoderIndex;
+      private final int characterLength;
+
+      ResultNode(Mode mode, int fromPosition, int charsetEncoderIndex, int characterLength) {
+        this.mode = mode;
+        this.fromPosition = fromPosition;
+        this.charsetEncoderIndex = charsetEncoderIndex;
+        this.characterLength = characterLength;
+      }
+
+      /**
+       * returns the size in bits
+       */
+      private int getSize(Version version) {
+        int size = 4 + mode.getCharacterCountBits(version);
+        switch (mode) {
+          case KANJI:
+            size += 13 * characterLength;
+            break;
+          case ALPHANUMERIC:
+            size += (characterLength / 2) * 11;
+            size += (characterLength % 2) == 1 ? 6 : 0;
+            break;
+          case NUMERIC:
+            size += (characterLength / 3) * 10;
+            int rest = characterLength % 3;
+            size += rest == 1 ? 4 : rest == 2 ? 7 : 0;
+            break;
+          case BYTE:
+            size += 8 * getCharacterCountIndicator();
+            break;
+          case ECI:
+            size += 8; // the ECI assignment numbers for ISO-8859-x, UTF-8 and UTF-16 are all 8 bit long
+        }
+        return size;
+      }
+
+      /**
+       * returns the length in characters according to the specification (differs from getCharacterLength() in BYTE mode
+       * for multi byte encoded characters)
+       */
+      private int getCharacterCountIndicator() {
+        return mode == Mode.BYTE ?
+            encoders.encode(stringToEncode.substring(fromPosition, fromPosition + characterLength),
+            charsetEncoderIndex).length : characterLength;
+      }
+
+      /**
+       * appends the bits
+       */
+      private void getBits(BitArray bits) throws WriterException {
+        bits.appendBits(mode.getBits(), 4);
+        if (characterLength > 0) {
+          int length = getCharacterCountIndicator();
+          bits.appendBits(length, mode.getCharacterCountBits(version));
+        }
+        if (mode == Mode.ECI) {
+          bits.appendBits(encoders.getECIValue(charsetEncoderIndex), 8);
+        } else if (characterLength > 0) {
+          // append data
+          Encoder.appendBytes(stringToEncode.substring(fromPosition, fromPosition + characterLength), mode, bits,
+              encoders.getCharset(charsetEncoderIndex));
+        }
+      }
+
+      public String toString() {
+        StringBuilder result = new StringBuilder();
+        result.append(mode).append('(');
+        if (mode == Mode.ECI) {
+          result.append(encoders.getCharset(charsetEncoderIndex).displayName());
+        } else {
+          result.append(makePrintable(stringToEncode.substring(fromPosition, fromPosition + characterLength)));
+        }
+        result.append(')');
+        return result.toString();
+      }
+
+      private String makePrintable(String s) {
+        StringBuilder result = new StringBuilder();
+        for (int i = 0; i < s.length(); i++) {
+          if (s.charAt(i) < 32 || s.charAt(i) > 126) {
+            result.append('.');
+          } else {
+            result.append(s.charAt(i));
+          }
+        }
+        return result.toString();
+      }
+    }
+  }
+}
diff --git a/core/src/main/java/com/google/zxing/qrcode/encoder/QRCode.java b/core/src/main/java/com/google/zxing/qrcode/encoder/QRCode.java
index b560de9..4298703 100644
--- a/core/src/main/java/com/google/zxing/qrcode/encoder/QRCode.java
+++ b/core/src/main/java/com/google/zxing/qrcode/encoder/QRCode.java
@@ -38,6 +38,9 @@ public final class QRCode {
     maskPattern = -1;
   }
 
+  /**
+   * @return the mode. Not relevant if {@link com.google.zxing.EncodeHintType#QR_COMPACT} is selected.
+   */
   public Mode getMode() {
     return mode;
   }
diff --git a/core/src/test/java/com/google/zxing/InvertedLuminanceSourceTestCase.java b/core/src/test/java/com/google/zxing/InvertedLuminanceSourceTestCase.java
new file mode 100644
index 0000000..932a7e2
--- /dev/null
+++ b/core/src/test/java/com/google/zxing/InvertedLuminanceSourceTestCase.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2020 ZXing authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.zxing;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.awt.image.BufferedImage;
+
+/**
+ * Tests {@link InvertedLuminanceSource}.
+ */
+public final class InvertedLuminanceSourceTestCase extends Assert {
+
+  @Test
+  public void testInverted() {
+    BufferedImage image = new BufferedImage(2, 1, BufferedImage.TYPE_INT_RGB);
+    image.setRGB(0, 0, 0xFFFFFF);
+    LuminanceSource source = new BufferedImageLuminanceSource(image);
+    assertArrayEquals(new byte[] { (byte) 0xFF, 0 }, source.getRow(0, null));
+    LuminanceSource inverted = new InvertedLuminanceSource(source);
+    assertArrayEquals(new byte[] { 0, (byte) 0xFF }, inverted.getRow(0, null));
+  }
+
+}
diff --git a/core/src/test/java/com/google/zxing/PlanarYUVLuminanceSourceTestCase.java b/core/src/test/java/com/google/zxing/PlanarYUVLuminanceSourceTestCase.java
index e48c4a2..4d5912a 100644
--- a/core/src/test/java/com/google/zxing/PlanarYUVLuminanceSourceTestCase.java
+++ b/core/src/test/java/com/google/zxing/PlanarYUVLuminanceSourceTestCase.java
@@ -25,9 +25,9 @@ import org.junit.Test;
 public final class PlanarYUVLuminanceSourceTestCase extends Assert {
 
   private static final byte[] YUV = {
-       0,  1,  1,  2,  3,  5,
-       8, 13, 21, 34, 55, 89,
-       0,  -1,  -1,  -2,  -3,  -5,
+      0,  1,  1,  2,  3,  5,
+      8, 13, 21, 34, 55, 89,
+      0,  -1,  -1,  -2,  -3,  -5,
       -8, -13, -21, -34, -55, -89,
       127, 127, 127, 127, 127, 127,
       127, 127, 127, 127, 127, 127,
diff --git a/core/src/test/java/com/google/zxing/aztec/AztecBlackBox1TestCase.java b/core/src/test/java/com/google/zxing/aztec/AztecBlackBox1TestCase.java
index 18c822f..029abf2 100644
--- a/core/src/test/java/com/google/zxing/aztec/AztecBlackBox1TestCase.java
+++ b/core/src/test/java/com/google/zxing/aztec/AztecBlackBox1TestCase.java
@@ -26,10 +26,10 @@ public final class AztecBlackBox1TestCase extends AbstractBlackBoxTestCase {
 
   public AztecBlackBox1TestCase() {
     super("src/test/resources/blackbox/aztec-1", new AztecReader(), BarcodeFormat.AZTEC);
-    addTest(13, 13, 0.0f);
-    addTest(13, 13, 90.0f);
-    addTest(13, 13, 180.0f);
-    addTest(13, 13, 270.0f);
+    addTest(14, 14, 0.0f);
+    addTest(14, 14, 90.0f);
+    addTest(14, 14, 180.0f);
+    addTest(14, 14, 270.0f);
   }
 
 }
diff --git a/core/src/test/java/com/google/zxing/aztec/decoder/DecoderTest.java b/core/src/test/java/com/google/zxing/aztec/decoder/DecoderTest.java
index 9cca45a..e7cafa2 100644
--- a/core/src/test/java/com/google/zxing/aztec/decoder/DecoderTest.java
+++ b/core/src/test/java/com/google/zxing/aztec/decoder/DecoderTest.java
@@ -15,9 +15,12 @@
  */
 package com.google.zxing.aztec.decoder;
 
+import com.google.zxing.aztec.encoder.EncoderTest;
+
 import com.google.zxing.FormatException;
 import com.google.zxing.ResultPoint;
 import com.google.zxing.aztec.AztecDetectorResult;
+import com.google.zxing.common.BitArray;
 import com.google.zxing.common.BitMatrix;
 import com.google.zxing.common.DecoderResult;
 import org.junit.Test;
@@ -29,7 +32,37 @@ import org.junit.Assert;
 public final class DecoderTest extends Assert {
 
   private static final ResultPoint[] NO_POINTS = new ResultPoint[0];
-  
+
+  @Test
+  public void testHighLevelDecode() throws FormatException {
+    // no ECI codes
+    testHighLevelDecodeString("A. b.",
+        // 'A'  P/S   '. ' L/L    b    D/L    '.'
+        "...X. ..... ...XX XXX.. ...XX XXXX. XX.X");
+
+    // initial ECI code 26 (switch to UTF-8)
+    testHighLevelDecodeString("Ça",
+        // P/S FLG(n) 2  '2'  '6'  B/S   2     0xc3     0x87     L/L   'a'
+        "..... ..... .X. .X.. X... XXXXX ...X. XX....XX X....XXX XXX.. ...X.");
+
+    // initial character without ECI (must be interpreted as ISO_8859_1)
+    // followed by ECI code 26 (= UTF-8) and UTF-8 text
+    testHighLevelDecodeString("±Ça",
+        // B/S 1     0xb1     P/S   FLG(n) 2  '2'  '6'  B/S   2     0xc3     0x87     L/L   'a'
+        "XXXXX ....X X.XX...X ..... ..... .X. .X.. X... XXXXX ...X. XX....XX X....XXX XXX.. ...X.");
+
+    // GS1 data
+    testHighLevelDecodeString("101233742",
+        // P/S FLG(n) 0  D/L   1    0    1    2    3    P/S  FLG(n) 0  3    7    4    2
+        "..... ..... ... XXXX. ..XX ..X. ..XX .X.. .X.X .... ..... ... .X.X X..X .XX. .X..");
+  }
+
+  private static void testHighLevelDecodeString(String expectedString, String b) throws FormatException {
+    BitArray bits = EncoderTest.toBitArray(EncoderTest.stripSpace(b));
+    assertEquals("highLevelDecode() failed for input bits: " + b,
+                 expectedString, Decoder.highLevelDecode(EncoderTest.toBooleanArray(bits)));
+  }
+
   @Test
   public void testAztecResult() throws FormatException {
     BitMatrix matrix = BitMatrix.parse(
@@ -68,6 +101,34 @@ public final class DecoderTest extends Assert {
     assertEquals(180, result.getNumBits());
   }
 
+  @Test
+  public void testAztecResultECI() throws FormatException {
+    BitMatrix matrix = BitMatrix.parse(
+        "      X     X X X   X           X     \n" +
+        "    X X   X X   X X X X X X X   X     \n" +
+        "    X X                         X   X \n" +
+        "  X X X X X X X X X X X X X X X X X   \n" +
+        "      X                       X       \n" +
+        "      X   X X X X X X X X X   X   X   \n" +
+        "  X X X   X               X   X X X   \n" +
+        "  X   X   X   X X X X X   X   X X X   \n" +
+        "      X   X   X       X   X   X X X   \n" +
+        "  X   X   X   X   X   X   X   X   X   \n" +
+        "X   X X   X   X       X   X   X     X \n" +
+        "  X X X   X   X X X X X   X   X X     \n" +
+        "      X   X               X   X X   X \n" +
+        "      X   X X X X X X X X X   X   X X \n" +
+        "  X   X                       X       \n" +
+        "X X   X X X X X X X X X X X X X X X   \n" +
+        "X X     X   X         X X X       X X \n" +
+        "  X   X   X   X X X X X     X X   X   \n" +
+        "X     X       X X   X X X       X     \n",
+        "X ", "  ");
+    AztecDetectorResult r = new AztecDetectorResult(matrix, NO_POINTS, false, 15, 1);
+    DecoderResult result = new Decoder().decode(r);
+    assertEquals("Français", result.getText());
+  }
+
   @Test(expected = FormatException.class)
   public void testDecodeTooManyErrors() throws FormatException {
     BitMatrix matrix = BitMatrix.parse(""
diff --git a/core/src/test/java/com/google/zxing/aztec/detector/DetectorTest.java b/core/src/test/java/com/google/zxing/aztec/detector/DetectorTest.java
index 11963c6..6d3afa6 100644
--- a/core/src/test/java/com/google/zxing/aztec/detector/DetectorTest.java
+++ b/core/src/test/java/com/google/zxing/aztec/detector/DetectorTest.java
@@ -27,7 +27,6 @@ import com.google.zxing.common.DecoderResult;
 import org.junit.Assert;
 import org.junit.Test;
 
-import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -62,7 +61,7 @@ public final class DetectorTest extends Assert {
 
   // Test that we can tolerate errors in the parameter locator bits
   private static void testErrorInParameterLocator(String data) throws Exception {
-    AztecCode aztec = Encoder.encode(data.getBytes(StandardCharsets.ISO_8859_1), 25, Encoder.DEFAULT_AZTEC_LAYERS);
+    AztecCode aztec = Encoder.encode(data, 25, Encoder.DEFAULT_AZTEC_LAYERS);
     Random random = new Random(aztec.getMatrix().hashCode());   // pseudo-random, but deterministic
     int layers = aztec.getLayers();
     boolean compact = aztec.isCompact();
diff --git a/core/src/test/java/com/google/zxing/aztec/encoder/EncoderTest.java b/core/src/test/java/com/google/zxing/aztec/encoder/EncoderTest.java
index 5e24a36..b8aa838 100644
--- a/core/src/test/java/com/google/zxing/aztec/encoder/EncoderTest.java
+++ b/core/src/test/java/com/google/zxing/aztec/encoder/EncoderTest.java
@@ -44,6 +44,12 @@ import java.util.regex.Pattern;
  */
 public final class EncoderTest extends Assert {
 
+  private static final Charset ISO_8859_1 = StandardCharsets.ISO_8859_1;
+  private static final Charset UTF_8 = StandardCharsets.UTF_8;
+  private static final Charset SHIFT_JIS = Charset.forName("Shift_JIS");
+  private static final Charset ISO_8859_15 = Charset.forName("ISO-8859-15");
+  private static final Charset WINDOWS_1252 = Charset.forName("Windows-1252");
+
   private static final Pattern DOTX = Pattern.compile("[^.X]");
   private static final Pattern SPACES = Pattern.compile("\\s+");
   private static final ResultPoint[] NO_POINTS = new ResultPoint[0];
@@ -128,17 +134,20 @@ public final class EncoderTest extends Assert {
 
   @Test
   public void testAztecWriter() throws Exception {
-    testWriter("\u20AC 1 sample data.", "ISO-8859-1", 25, true, 2);
-    testWriter("\u20AC 1 sample data.", "ISO-8859-15", 25, true, 2);
-    testWriter("\u20AC 1 sample data.", "UTF-8", 25, true, 2);
-    testWriter("\u20AC 1 sample data.", "UTF-8", 100, true, 3);
-    testWriter("\u20AC 1 sample data.", "UTF-8", 300, true, 4);
-    testWriter("\u20AC 1 sample data.", "UTF-8", 500, false, 5);
+    testWriter("Espa\u00F1ol", null, 25, true, 1);                   // Without ECI (implicit ISO-8859-1)
+    testWriter("Espa\u00F1ol", ISO_8859_1, 25, true, 1);             // Explicit ISO-8859-1
+    testWriter("\u20AC 1 sample data.", WINDOWS_1252, 25, true, 2);  // ISO-8859-1 can't encode Euro; Windows-1252 can
+    testWriter("\u20AC 1 sample data.", ISO_8859_15, 25, true, 2);
+    testWriter("\u20AC 1 sample data.", UTF_8, 25, true, 2);
+    testWriter("\u20AC 1 sample data.", UTF_8, 100, true, 3);
+    testWriter("\u20AC 1 sample data.", UTF_8, 300, true, 4);
+    testWriter("\u20AC 1 sample data.", UTF_8, 500, false, 5);
+    testWriter("The capital of Japan is named \u6771\u4EAC.", SHIFT_JIS, 25, true, 3);
     // Test AztecWriter defaults
     String data = "In ut magna vel mauris malesuada";
     AztecWriter writer = new AztecWriter();
     BitMatrix matrix = writer.encode(data, BarcodeFormat.AZTEC, 0, 0);
-    AztecCode aztec = Encoder.encode(data.getBytes(StandardCharsets.ISO_8859_1),
+    AztecCode aztec = Encoder.encode(data,
         Encoder.DEFAULT_EC_PERCENT, Encoder.DEFAULT_AZTEC_LAYERS);
     BitMatrix expectedMatrix = aztec.getMatrix();
     assertEquals(matrix, expectedMatrix);
@@ -211,42 +220,42 @@ public final class EncoderTest extends Assert {
   @Test
   public void testEncodeDecode31() throws Exception {
     testEncodeDecode("In ut magna vel mauris malesuada dictum. Nulla ullamcorper metus quis diam" +
-      " cursus facilisis. Sed mollis quam id justo rutrum sagittis. Donec laoreet rutrum" +
-      " est, nec convallis mauris condimentum sit amet. Phasellus gravida, justo et congue" +
-      " auctor, nisi ipsum viverra erat, eget hendrerit felis turpis nec lorem. Nulla" +
-      " ultrices, elit pellentesque aliquet laoreet, justo erat pulvinar nisi, id" +
-      " elementum sapien dolor et diam. Donec ac nunc sodales elit placerat eleifend." +
-      " Sed ornare luctus ornare. Vestibulum vehicula, massa at pharetra fringilla, risus" +
-      " justo faucibus erat, nec porttitor nibh tellus sed est. Ut justo diam, lobortis eu" +
-      " tristique ac, p.In ut magna vel mauris malesuada dictum. Nulla ullamcorper metus" +
-      " quis diam cursus facilisis. Sed mollis quam id justo rutrum sagittis. Donec" +
-      " laoreet rutrum est, nec convallis mauris condimentum sit amet. Phasellus gravida," +
-      " justo et congue auctor, nisi ipsum viverra erat, eget hendrerit felis turpis nec" +
-      " lorem. Nulla ultrices, elit pellentesque aliquet laoreet, justo erat pulvinar" +
-      " nisi, id elementum sapien dolor et diam. Donec ac nunc sodales elit placerat" +
-      " eleifend. Sed ornare luctus ornare. Vestibulum vehicula, massa at pharetra" +
-      " fringilla, risus justo faucibus erat, nec porttitor nibh tellus sed est. Ut justo" +
-      " diam, lobortis eu tristique ac, p. In ut magna vel mauris malesuada dictum. Nulla" +
-      " ullamcorper metus quis diam cursus facilisis. Sed mollis quam id justo rutrum" +
-      " sagittis. Donec laoreet rutrum est, nec convallis mauris condimentum sit amet." +
-      " Phasellus gravida, justo et congue auctor, nisi ipsum viverra erat, eget hendrerit" +
-      " felis turpis nec lorem. Nulla ultrices, elit pellentesque aliquet laoreet, justo" +
-      " erat pulvinar nisi, id elementum sapien dolor et diam. Donec ac nunc sodales elit" +
-      " placerat eleifend. Sed ornare luctus ornare. Vestibulum vehicula, massa at" +
-      " pharetra fringilla, risus justo faucibus erat, nec porttitor nibh tellus sed est." +
-      " Ut justo diam, lobortis eu tristique ac, p.In ut magna vel mauris malesuada" +
-      " dictum. Nulla ullamcorper metus quis diam cursus facilisis. Sed mollis quam id" +
-      " justo rutrum sagittis. Donec laoreet rutrum est, nec convallis mauris condimentum" +
-      " sit amet. Phasellus gravida, justo et congue auctor, nisi ipsum viverra erat," +
-      " eget hendrerit felis turpis nec lorem. Nulla ultrices, elit pellentesque aliquet" +
-      " laoreet, justo erat pulvinar nisi, id elementum sapien dolor et diam. Donec ac" +
-      " nunc sodales elit placerat eleifend. Sed ornare luctus ornare. Vestibulum vehicula," +
-      " massa at pharetra fringilla, risus justo faucibus erat, nec porttitor nibh tellus" +
-      " sed est. Ut justo diam, lobortis eu tris. In ut magna vel mauris malesuada dictum." +
-      " Nulla ullamcorper metus quis diam cursus facilisis. Sed mollis quam id justo rutrum" +
-      " sagittis. Donec laoreet rutrum est, nec convallis mauris condimentum sit amet." +
-      " Phasellus gravida, justo et congue auctor, nisi ipsum viverra erat, eget" +
-      " hendrerit felis turpis nec lorem.", false, 31);
+        " cursus facilisis. Sed mollis quam id justo rutrum sagittis. Donec laoreet rutrum" +
+        " est, nec convallis mauris condimentum sit amet. Phasellus gravida, justo et congue" +
+        " auctor, nisi ipsum viverra erat, eget hendrerit felis turpis nec lorem. Nulla" +
+        " ultrices, elit pellentesque aliquet laoreet, justo erat pulvinar nisi, id" +
+        " elementum sapien dolor et diam. Donec ac nunc sodales elit placerat eleifend." +
+        " Sed ornare luctus ornare. Vestibulum vehicula, massa at pharetra fringilla, risus" +
+        " justo faucibus erat, nec porttitor nibh tellus sed est. Ut justo diam, lobortis eu" +
+        " tristique ac, p.In ut magna vel mauris malesuada dictum. Nulla ullamcorper metus" +
+        " quis diam cursus facilisis. Sed mollis quam id justo rutrum sagittis. Donec" +
+        " laoreet rutrum est, nec convallis mauris condimentum sit amet. Phasellus gravida," +
+        " justo et congue auctor, nisi ipsum viverra erat, eget hendrerit felis turpis nec" +
+        " lorem. Nulla ultrices, elit pellentesque aliquet laoreet, justo erat pulvinar" +
+        " nisi, id elementum sapien dolor et diam. Donec ac nunc sodales elit placerat" +
+        " eleifend. Sed ornare luctus ornare. Vestibulum vehicula, massa at pharetra" +
+        " fringilla, risus justo faucibus erat, nec porttitor nibh tellus sed est. Ut justo" +
+        " diam, lobortis eu tristique ac, p. In ut magna vel mauris malesuada dictum. Nulla" +
+        " ullamcorper metus quis diam cursus facilisis. Sed mollis quam id justo rutrum" +
+        " sagittis. Donec laoreet rutrum est, nec convallis mauris condimentum sit amet." +
+        " Phasellus gravida, justo et congue auctor, nisi ipsum viverra erat, eget hendrerit" +
+        " felis turpis nec lorem. Nulla ultrices, elit pellentesque aliquet laoreet, justo" +
+        " erat pulvinar nisi, id elementum sapien dolor et diam. Donec ac nunc sodales elit" +
+        " placerat eleifend. Sed ornare luctus ornare. Vestibulum vehicula, massa at" +
+        " pharetra fringilla, risus justo faucibus erat, nec porttitor nibh tellus sed est." +
+        " Ut justo diam, lobortis eu tristique ac, p.In ut magna vel mauris malesuada" +
+        " dictum. Nulla ullamcorper metus quis diam cursus facilisis. Sed mollis quam id" +
+        " justo rutrum sagittis. Donec laoreet rutrum est, nec convallis mauris condimentum" +
+        " sit amet. Phasellus gravida, justo et congue auctor, nisi ipsum viverra erat," +
+        " eget hendrerit felis turpis nec lorem. Nulla ultrices, elit pellentesque aliquet" +
+        " laoreet, justo erat pulvinar nisi, id elementum sapien dolor et diam. Donec ac" +
+        " nunc sodales elit placerat eleifend. Sed ornare luctus ornare. Vestibulum vehicula," +
+        " massa at pharetra fringilla, risus justo faucibus erat, nec porttitor nibh tellus" +
+        " sed est. Ut justo diam, lobortis eu tris. In ut magna vel mauris malesuada dictum." +
+        " Nulla ullamcorper metus quis diam cursus facilisis. Sed mollis quam id justo rutrum" +
+        " sagittis. Donec laoreet rutrum est, nec convallis mauris condimentum sit amet." +
+        " Phasellus gravida, justo et congue auctor, nisi ipsum viverra erat, eget" +
+        " hendrerit felis turpis nec lorem.", false, 31);
   }
 
   @Test
@@ -277,7 +286,7 @@ public final class EncoderTest extends Assert {
   }
 
   @Test
-  public void testHighLevelEncode() {
+  public void testHighLevelEncode() throws FormatException {
     testHighLevelEncodeString("A. b.",
         // 'A'  P/S   '. ' L/L    b    D/L    '.'
         "...X. ..... ...XX XXX.. ...XX XXXX. XX.X");
@@ -307,7 +316,7 @@ public final class EncoderTest extends Assert {
   }
 
   @Test
-  public void testHighLevelEncodeBinary() {
+  public void testHighLevelEncodeBinary() throws FormatException {
     // binary short form single byte
     testHighLevelEncodeString("N\0N",
         // 'N'  B/S    =1   '\0'      N
@@ -394,7 +403,7 @@ public final class EncoderTest extends Assert {
   }
 
   @Test
-  public void testHighLevelEncodePairs() {
+  public void testHighLevelEncodePairs() throws FormatException {
     // Typical usage
     testHighLevelEncodeString("ABC. DEF\r\n",
         //  A     B    C    P/S   .<sp>   D    E     F    P/S   \r\n
@@ -408,17 +417,25 @@ public final class EncoderTest extends Assert {
     // Latch to DIGIT rather than shift to PUNCT
     testHighLevelEncodeString("A. 1234",
         // 'A'  D/L   '.'  ' '  '1' '2'   '3'  '4'
-        "...X. XXXX. XX.X ...X ..XX .X.. .X.X .X X."
-        );
+        "...X. XXXX. XX.X ...X ..XX .X.. .X.X .X X.");
     // Don't bother leaving Binary Shift.
     testHighLevelEncodeString("A\200. \200",
         // 'A'  B/S    =2    \200      "."     " "     \200
         "...X. XXXXX ..X.. X....... ..X.XXX. ..X..... X.......");
   }
 
-  @Test
+  @Test(expected = IllegalArgumentException.class)
   public void testUserSpecifiedLayers() {
-    byte[] alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".getBytes(StandardCharsets.ISO_8859_1);
+    doTestUserSpecifiedLayers(33);
+  }
+
+  @Test(expected = IllegalArgumentException.class)
+  public void testUserSpecifiedLayers2() {
+    doTestUserSpecifiedLayers(-1);
+  }
+
+  private void doTestUserSpecifiedLayers(int userSpecifiedLayers) {
+    String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
     AztecCode aztec = Encoder.encode(alphabet, 25, -2);
     assertEquals(2, aztec.getLayers());
     assertTrue(aztec.isCompact());
@@ -427,19 +444,17 @@ public final class EncoderTest extends Assert {
     assertEquals(32, aztec.getLayers());
     assertFalse(aztec.isCompact());
 
-    try {
-      Encoder.encode(alphabet, 25, 33);
-      fail("Encode should have failed.  No such thing as 33 layers");
-    } catch (IllegalArgumentException expected) {
-      // continue
-    }
+    Encoder.encode(alphabet, 25, userSpecifiedLayers);
+  }
 
-    try {
-      Encoder.encode(alphabet, 25, -1);
-      fail("Encode should have failed.  Text can't fit in 1-layer compact");
-    } catch (IllegalArgumentException expected) {
-      // continue
-    }
+  @Test(expected = IllegalArgumentException.class)
+  public void testBorderCompact4CaseFailed() {
+    // Compact(4) con hold 608 bits of information, but at most 504 can be data.  Rest must
+    // be error correction
+    String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+    // encodes as 26 * 5 * 4 = 520 bits of data
+    String alphabet4 = alphabet + alphabet + alphabet + alphabet;
+    Encoder.encode(alphabet4, 0, -4);
   }
 
   @Test
@@ -449,22 +464,15 @@ public final class EncoderTest extends Assert {
     String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
     // encodes as 26 * 5 * 4 = 520 bits of data
     String alphabet4 = alphabet + alphabet + alphabet + alphabet;
-    byte[] data = alphabet4.getBytes(StandardCharsets.ISO_8859_1);
-    try {
-      Encoder.encode(data, 0, -4);
-      fail("Encode should have failed.  Text can't fit in 1-layer compact");
-    } catch (IllegalArgumentException expected) {
-      // continue
-    }
 
     // If we just try to encode it normally, it will go to a non-compact 4 layer
-    AztecCode aztecCode = Encoder.encode(data, 0, Encoder.DEFAULT_AZTEC_LAYERS);
+    AztecCode aztecCode = Encoder.encode(alphabet4, 0, Encoder.DEFAULT_AZTEC_LAYERS);
     assertFalse(aztecCode.isCompact());
     assertEquals(4, aztecCode.getLayers());
 
     // But shortening the string to 100 bytes (500 bits of data), compact works fine, even if we
     // include more error checking.
-    aztecCode = Encoder.encode(alphabet4.substring(0, 100).getBytes(StandardCharsets.ISO_8859_1), 10, Encoder.DEFAULT_AZTEC_LAYERS);
+    aztecCode = Encoder.encode(alphabet4.substring(0, 100), 10, Encoder.DEFAULT_AZTEC_LAYERS);
     assertTrue(aztecCode.isCompact());
     assertEquals(4, aztecCode.getLayers());
   }
@@ -472,7 +480,7 @@ public final class EncoderTest extends Assert {
   // Helper routines
 
   private static void testEncode(String data, boolean compact, int layers, String expected) {
-    AztecCode aztec = Encoder.encode(data.getBytes(StandardCharsets.ISO_8859_1), 33, Encoder.DEFAULT_AZTEC_LAYERS);
+    AztecCode aztec = Encoder.encode(data, 33, Encoder.DEFAULT_AZTEC_LAYERS);
     assertEquals("Unexpected symbol format (compact)", compact, aztec.isCompact());
     assertEquals("Unexpected nr. of layers", layers, aztec.getLayers());
     BitMatrix matrix = aztec.getMatrix();
@@ -480,7 +488,7 @@ public final class EncoderTest extends Assert {
   }
 
   private static void testEncodeDecode(String data, boolean compact, int layers) throws Exception {
-    AztecCode aztec = Encoder.encode(data.getBytes(StandardCharsets.ISO_8859_1), 25, Encoder.DEFAULT_AZTEC_LAYERS);
+    AztecCode aztec = Encoder.encode(data, 25, Encoder.DEFAULT_AZTEC_LAYERS);
     assertEquals("Unexpected symbol format (compact)", compact, aztec.isCompact());
     assertEquals("Unexpected nr. of layers", layers, aztec.getLayers());
     BitMatrix matrix = aztec.getMatrix();
@@ -500,20 +508,20 @@ public final class EncoderTest extends Assert {
   }
 
   private static void testWriter(String data,
-                                 String charset,
+                                 Charset charset,
                                  int eccPercent,
                                  boolean compact,
                                  int layers) throws FormatException {
-    // 1. Perform an encode-decode round-trip because it can be lossy.
-    // 2. Aztec Decoder currently always decodes the data with a LATIN-1 charset:
-    String expectedData = new String(data.getBytes(Charset.forName(charset)), StandardCharsets.ISO_8859_1);
+    // Perform an encode-decode round-trip because it can be lossy.
     Map<EncodeHintType,Object> hints = new EnumMap<>(EncodeHintType.class);
-    hints.put(EncodeHintType.CHARACTER_SET, charset);
+    if (null != charset) {
+      hints.put(EncodeHintType.CHARACTER_SET, charset.name());
+    }
     hints.put(EncodeHintType.ERROR_CORRECTION, eccPercent);
     AztecWriter writer = new AztecWriter();
     BitMatrix matrix = writer.encode(data, BarcodeFormat.AZTEC, 0, 0, hints);
-    AztecCode aztec = Encoder.encode(data.getBytes(Charset.forName(charset)), eccPercent,
-        Encoder.DEFAULT_AZTEC_LAYERS);
+    AztecCode aztec = Encoder.encode(data, eccPercent,
+        Encoder.DEFAULT_AZTEC_LAYERS, charset);
     assertEquals("Unexpected symbol format (compact)", compact, aztec.isCompact());
     assertEquals("Unexpected nr. of layers", layers, aztec.getLayers());
     BitMatrix matrix2 = aztec.getMatrix();
@@ -521,7 +529,7 @@ public final class EncoderTest extends Assert {
     AztecDetectorResult r =
         new AztecDetectorResult(matrix, NO_POINTS, aztec.isCompact(), aztec.getCodeWords(), aztec.getLayers());
     DecoderResult res = new Decoder().decode(r);
-    assertEquals(expectedData, res.getText());
+    assertEquals(data, res.getText());
     // Check error correction by introducing up to eccPercent/2 errors
     int ecWords = aztec.getCodeWords() * eccPercent / 100 / 2;
     Random random = getPseudoRandom();
@@ -537,7 +545,7 @@ public final class EncoderTest extends Assert {
     }
     r = new AztecDetectorResult(matrix, NO_POINTS, aztec.isCompact(), aztec.getCodeWords(), aztec.getLayers());
     res = new Decoder().decode(r);
-    assertEquals(expectedData, res.getText());
+    assertEquals(data, res.getText());
   }
 
   private static Random getPseudoRandom() {
@@ -556,7 +564,7 @@ public final class EncoderTest extends Assert {
                  stripSpace(expected), stripSpace(stuffed.toString()));
   }
 
-  private static BitArray toBitArray(CharSequence bits) {
+  public static BitArray toBitArray(CharSequence bits) {
     BitArray in = new BitArray();
     char[] str = DOTX.matcher(bits).replaceAll("").toCharArray();
     for (char aStr : str) {
@@ -565,7 +573,7 @@ public final class EncoderTest extends Assert {
     return in;
   }
 
-  private static boolean[] toBooleanArray(BitArray bitArray) {
+  public static boolean[] toBooleanArray(BitArray bitArray) {
     boolean[] result = new boolean[bitArray.getSize()];
     for (int i = 0; i < result.length; i++) {
       result[i] = bitArray.get(i);
@@ -573,14 +581,14 @@ public final class EncoderTest extends Assert {
     return result;
   }
 
-  private static void testHighLevelEncodeString(String s, String expectedBits) {
+  private static void testHighLevelEncodeString(String s, String expectedBits) throws FormatException {
     BitArray bits = new HighLevelEncoder(s.getBytes(StandardCharsets.ISO_8859_1)).encode();
     String receivedBits = stripSpace(bits.toString());
     assertEquals("highLevelEncode() failed for input string: " + s, stripSpace(expectedBits), receivedBits);
     assertEquals(s, Decoder.highLevelDecode(toBooleanArray(bits)));
   }
 
-  private static void testHighLevelEncodeString(String s, int expectedReceivedBits) {
+  private static void testHighLevelEncodeString(String s, int expectedReceivedBits) throws FormatException {
     BitArray bits = new HighLevelEncoder(s.getBytes(StandardCharsets.ISO_8859_1)).encode();
     int receivedBitCount = stripSpace(bits.toString()).length();
     assertEquals("highLevelEncode() failed for input string: " + s,
@@ -588,7 +596,7 @@ public final class EncoderTest extends Assert {
     assertEquals(s, Decoder.highLevelDecode(toBooleanArray(bits)));
   }
 
-  private static String stripSpace(String s) {
+  public static String stripSpace(String s) {
     return SPACES.matcher(s).replaceAll("");
   }
 
diff --git a/core/src/test/java/com/google/zxing/client/result/AddressBookParsedResultTestCase.java b/core/src/test/java/com/google/zxing/client/result/AddressBookParsedResultTestCase.java
index 87e2713..2e090a5 100644
--- a/core/src/test/java/com/google/zxing/client/result/AddressBookParsedResultTestCase.java
+++ b/core/src/test/java/com/google/zxing/client/result/AddressBookParsedResultTestCase.java
@@ -30,7 +30,8 @@ public final class AddressBookParsedResultTestCase extends Assert {
 
   @Test
   public void testAddressBookDocomo() {
-    doTest("MECARD:N:Sean Owen;;", null, new String[] {"Sean Owen"}, null, null, null, null, null, null, null, null, null);
+    doTest("MECARD:N:Sean Owen;;", null, new String[] {"Sean Owen"},
+        null, null, null, null, null, null, null, null, null);
     doTest("MECARD:NOTE:ZXing Team;N:Sean Owen;URL:google.com;EMAIL:srowen@example.org;;",
         null, new String[] {"Sean Owen"}, null, null, new String[] {"srowen@example.org"}, null, null, null,
         new String[] {"google.com"}, null, "ZXing Team");
@@ -45,7 +46,8 @@ public final class AddressBookParsedResultTestCase extends Assert {
   @Test
   public void testVCard() {
     doTest("BEGIN:VCARD\r\nADR;HOME:123 Main St\r\nVERSION:2.1\r\nN:Owen;Sean\r\nEND:VCARD",
-           null, new String[] {"Sean Owen"}, null, new String[] {"123 Main St"}, null, null, null, null, null, null, null);
+           null, new String[] {"Sean Owen"}, null, new String[] {"123 Main St"},
+           null, null, null, null, null, null, null);
   }
 
   @Test
@@ -69,13 +71,15 @@ public final class AddressBookParsedResultTestCase extends Assert {
   @Test
   public void testVCardCaseInsensitive() {
     doTest("begin:vcard\r\nadr;HOME:123 Main St\r\nVersion:2.1\r\nn:Owen;Sean\r\nEND:VCARD",
-           null, new String[] {"Sean Owen"}, null, new String[] {"123 Main St"}, null, null, null, null, null, null, null);
+           null, new String[] {"Sean Owen"}, null, new String[] {"123 Main St"},
+           null, null, null, null, null, null, null);
   }
 
   @Test
   public void testEscapedVCard() {
     doTest("BEGIN:VCARD\r\nADR;HOME:123\\;\\\\ Main\\, St\\nHome\r\nVERSION:2.1\r\nN:Owen;Sean\r\nEND:VCARD",
-           null, new String[] {"Sean Owen"}, null, new String[] {"123;\\ Main, St\nHome"}, null, null, null, null, null, null, null);
+           null, new String[] {"Sean Owen"}, null, new String[] {"123;\\ Main, St\nHome"},
+           null, null, null, null, null, null, null);
   }
 
   @Test
@@ -162,4 +166,4 @@ public final class AddressBookParsedResultTestCase extends Assert {
     assertEquals(note, addressResult.getNote());
   }
 
-}
\ No newline at end of file
+}
diff --git a/core/src/test/java/com/google/zxing/client/result/ParsedReaderResultTestCase.java b/core/src/test/java/com/google/zxing/client/result/ParsedReaderResultTestCase.java
index 024c201..1363aee 100644
--- a/core/src/test/java/com/google/zxing/client/result/ParsedReaderResultTestCase.java
+++ b/core/src/test/java/com/google/zxing/client/result/ParsedReaderResultTestCase.java
@@ -45,7 +45,7 @@ public final class ParsedReaderResultTestCase extends Assert {
   public void testTextType() {
     doTestResult("", "", ParsedResultType.TEXT);
     doTestResult("foo", "foo", ParsedResultType.TEXT);
-    doTestResult("Hi.", "Hi.", ParsedResultType.TEXT);    
+    doTestResult("Hi.", "Hi.", ParsedResultType.TEXT);
     doTestResult("This is a test", "This is a test", ParsedResultType.TEXT);
     doTestResult("This is a test\nwith newlines", "This is a test\nwith newlines",
         ParsedResultType.TEXT);
@@ -267,7 +267,7 @@ public final class ParsedReaderResultTestCase extends Assert {
     doTestResult("SMS:+15551212", "+15551212", ParsedResultType.SMS);
     doTestResult("sms:+15551212;via=999333", "+15551212", ParsedResultType.SMS);
     doTestResult("sms:+15551212?subject=foo&body=bar", "+15551212\nfoo\nbar", ParsedResultType.SMS);
-    doTestResult("sms:+15551212,+12124440101", "+15551212\n+12124440101", ParsedResultType.SMS);    
+    doTestResult("sms:+15551212,+12124440101", "+15551212\n+12124440101", ParsedResultType.SMS);
   }
 
   @Test
@@ -292,7 +292,7 @@ public final class ParsedReaderResultTestCase extends Assert {
     doTestResult("MMS:+15551212", "+15551212", ParsedResultType.SMS);
     doTestResult("mms:+15551212;via=999333", "+15551212", ParsedResultType.SMS);
     doTestResult("mms:+15551212?subject=foo&body=bar", "+15551212\nfoo\nbar", ParsedResultType.SMS);
-    doTestResult("mms:+15551212,+12124440101", "+15551212\n+12124440101", ParsedResultType.SMS);        
+    doTestResult("mms:+15551212,+12124440101", "+15551212\n+12124440101", ParsedResultType.SMS);
   }
 
   @Test
@@ -308,42 +308,6 @@ public final class ParsedReaderResultTestCase extends Assert {
         "212-555-1212\nHere's a longer message. Should be fine.", ParsedResultType.SMS);
   }
 
-  /*
-  @Test
-  public void testNDEFText() {
-    doTestResult(new byte[] {(byte)0xD1,(byte)0x01,(byte)0x05,(byte)0x54,
-                             (byte)0x02,(byte)0x65,(byte)0x6E,(byte)0x68,
-                             (byte)0x69},
-                 ParsedResultType.TEXT);
-  }
-
-  @Test
-  public void testNDEFURI() {
-    doTestResult(new byte[] {(byte)0xD1,(byte)0x01,(byte)0x08,(byte)0x55,
-                             (byte)0x01,(byte)0x6E,(byte)0x66,(byte)0x63,
-                             (byte)0x2E,(byte)0x63,(byte)0x6F,(byte)0x6D},
-                 ParsedResultType.URI);
-  }
-
-  @Test
-  public void testNDEFSmartPoster() {
-    doTestResult(new byte[] {(byte)0xD1,(byte)0x02,(byte)0x2F,(byte)0x53,
-                             (byte)0x70,(byte)0x91,(byte)0x01,(byte)0x0E,
-                             (byte)0x55,(byte)0x01,(byte)0x6E,(byte)0x66,
-                             (byte)0x63,(byte)0x2D,(byte)0x66,(byte)0x6F,
-                             (byte)0x72,(byte)0x75,(byte)0x6D,(byte)0x2E,
-                             (byte)0x6F,(byte)0x72,(byte)0x67,(byte)0x11,
-                             (byte)0x03,(byte)0x01,(byte)0x61,(byte)0x63,
-                             (byte)0x74,(byte)0x00,(byte)0x51,(byte)0x01,
-                             (byte)0x12,(byte)0x54,(byte)0x05,(byte)0x65,
-                             (byte)0x6E,(byte)0x2D,(byte)0x55,(byte)0x53,
-                             (byte)0x48,(byte)0x65,(byte)0x6C,(byte)0x6C,
-                             (byte)0x6F,(byte)0x2C,(byte)0x20,(byte)0x77,
-                             (byte)0x6F,(byte)0x72,(byte)0x6C,(byte)0x64},
-                 ParsedResultType.NDEF_SMART_POSTER);
-  }
-   */
-
   private static void doTestResult(String contents,
                                    String goldenResult,
                                    ParsedResultType type) {
@@ -363,4 +327,4 @@ public final class ParsedReaderResultTestCase extends Assert {
     assertEquals(goldenResult, displayResult);
   }
 
-}
\ No newline at end of file
+}
diff --git a/core/src/test/java/com/google/zxing/client/result/URIParsedResultTestCase.java b/core/src/test/java/com/google/zxing/client/result/URIParsedResultTestCase.java
index b5af83e..168acbf 100644
--- a/core/src/test/java/com/google/zxing/client/result/URIParsedResultTestCase.java
+++ b/core/src/test/java/com/google/zxing/client/result/URIParsedResultTestCase.java
@@ -35,6 +35,7 @@ public final class URIParsedResultTestCase extends Assert {
     doTest("MEBKM:URL:google.com;TITLE:Google;", "http://google.com", "Google");
   }
 
+  @SuppressWarnings("checkstyle:lineLength")
   @Test
   public void testURI() {
     doTest("google.com", "http://google.com", null);
@@ -122,7 +123,7 @@ public final class URIParsedResultTestCase extends Assert {
     assertEquals(uri, uriResult.getURI());
     assertEquals(title, uriResult.getTitle());
   }
-  
+
   private static void doTestNotUri(String text) {
     Result fakeResult = new Result(text, null, null, BarcodeFormat.QR_CODE);
     ParsedResult result = ResultParser.parseResult(fakeResult);
@@ -136,4 +137,4 @@ public final class URIParsedResultTestCase extends Assert {
     assertSame(malicious ? ParsedResultType.TEXT : ParsedResultType.URI, result.getType());
   }
 
-}
\ No newline at end of file
+}
diff --git a/core/src/test/java/com/google/zxing/client/result/WifiParsedResultTestCase.java b/core/src/test/java/com/google/zxing/client/result/WifiParsedResultTestCase.java
index 5490388..66642d4 100644
--- a/core/src/test/java/com/google/zxing/client/result/WifiParsedResultTestCase.java
+++ b/core/src/test/java/com/google/zxing/client/result/WifiParsedResultTestCase.java
@@ -69,6 +69,7 @@ public final class WifiParsedResultTestCase extends Assert {
     doTest("WIFI:T:WPA;S:test;P:my_password\\\\;;", "test", "my_password\\", "WPA");
     doTest("WIFI:T:WPA;S:My_WiFi_SSID;P:abc123/;;", "My_WiFi_SSID", "abc123/", "WPA");
     doTest("WIFI:T:WPA;S:\"foo\\;bar\\\\baz\";;", "\"foo;bar\\baz\"", null, "WPA");
+    doTest("WIFI:T:WPA;S:test;P:\\\"abcd\\\";;", "test", "\"abcd\"", "WPA");
   }
 
   /**
diff --git a/core/src/test/java/com/google/zxing/common/AbstractBlackBoxTestCase.java b/core/src/test/java/com/google/zxing/common/AbstractBlackBoxTestCase.java
index cc23743..f295f31 100644
--- a/core/src/test/java/com/google/zxing/common/AbstractBlackBoxTestCase.java
+++ b/core/src/test/java/com/google/zxing/common/AbstractBlackBoxTestCase.java
@@ -62,6 +62,7 @@ public abstract class AbstractBlackBoxTestCase extends Assert {
   private final Reader barcodeReader;
   private final BarcodeFormat expectedFormat;
   private final List<TestResult> testResults;
+  private final EnumMap<DecodeHintType,Object> hints = new EnumMap<>(DecodeHintType.class);
 
   public static Path buildTestBase(String testBasePathSuffix) {
     // A little workaround to prevent aggravation in my IDE
@@ -92,6 +93,10 @@ public abstract class AbstractBlackBoxTestCase extends Assert {
     addTest(mustPassCount, tryHarderCount, 0, 0, rotation);
   }
 
+  protected void addHint(DecodeHintType hint) {
+    hints.put(hint, Boolean.TRUE);
+  }
+
   /**
    * Adds a new test for the current directory of images.
    *
@@ -252,7 +257,7 @@ public abstract class AbstractBlackBoxTestCase extends Assert {
 
     String suffix = String.format(" (%srotation: %d)", tryHarder ? "try harder, " : "", (int) rotation);
 
-    Map<DecodeHintType,Object> hints = new EnumMap<>(DecodeHintType.class);
+    Map<DecodeHintType,Object> hints = this.hints.clone();
     if (tryHarder) {
       hints.put(DecodeHintType.TRY_HARDER, Boolean.TRUE);
     }
diff --git a/core/src/test/java/com/google/zxing/common/BitMatrixTestCase.java b/core/src/test/java/com/google/zxing/common/BitMatrixTestCase.java
index 6c36655..49cd48e 100644
--- a/core/src/test/java/com/google/zxing/common/BitMatrixTestCase.java
+++ b/core/src/test/java/com/google/zxing/common/BitMatrixTestCase.java
@@ -19,6 +19,8 @@ package com.google.zxing.common;
 import org.junit.Assert;
 import org.junit.Test;
 
+import java.util.Arrays;
+
 /**
  * @author Sean Owen
  * @author dswitkin@google.com (Daniel Switkin)
@@ -157,6 +159,22 @@ public final class BitMatrixTestCase extends Assert {
     }
   }
 
+  @Test
+  public void testRotate90Simple() {
+    BitMatrix matrix = new BitMatrix(3, 3);
+    matrix.set(0, 0);
+    matrix.set(0, 1);
+    matrix.set(1, 2);
+    matrix.set(2, 1);
+
+    matrix.rotate90();
+
+    assertTrue(matrix.get(0, 2));
+    assertTrue(matrix.get(1, 2));
+    assertTrue(matrix.get(2, 1));
+    assertTrue(matrix.get(1, 0));
+  }
+
   @Test
   public void testRotate180Simple() {
     BitMatrix matrix = new BitMatrix(3, 3);
@@ -210,6 +228,24 @@ public final class BitMatrixTestCase extends Assert {
     assertEquals(centerMatrix, BitMatrix.parse(centerMatrix.toString("x", "."), "x", "."));
   }
 
+  @Test
+  public void testParseBoolean() {
+    BitMatrix emptyMatrix = new BitMatrix(3, 3);
+    BitMatrix fullMatrix = new BitMatrix(3, 3);
+    fullMatrix.setRegion(0, 0, 3, 3);
+    BitMatrix centerMatrix = new BitMatrix(3, 3);
+    centerMatrix.setRegion(1, 1, 1, 1);
+
+    boolean[][] matrix = new boolean[3][3];
+    assertEquals(emptyMatrix, BitMatrix.parse(matrix));
+    matrix[1][1] = true;
+    assertEquals(centerMatrix, BitMatrix.parse(matrix));
+    for (boolean[] arr : matrix) {
+      Arrays.fill(arr, true);
+    }
+    assertEquals(fullMatrix, BitMatrix.parse(matrix));
+  }
+
   @Test
   public void testUnset() {
     BitMatrix emptyMatrix = new BitMatrix(3, 3);
diff --git a/core/src/test/java/com/google/zxing/common/StringUtilsTestCase.java b/core/src/test/java/com/google/zxing/common/StringUtilsTestCase.java
index 578843b..f845148 100644
--- a/core/src/test/java/com/google/zxing/common/StringUtilsTestCase.java
+++ b/core/src/test/java/com/google/zxing/common/StringUtilsTestCase.java
@@ -20,42 +20,78 @@ import org.junit.Assert;
 import org.junit.Test;
 
 import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+import java.util.Random;
 
 /**
  * Tests {@link StringUtils}.
  */
 public final class StringUtilsTestCase extends Assert {
 
+  @Test
+  public void testRandom() {
+    Random r = new Random(1234L);
+    byte[] bytes = new byte[1000];
+    r.nextBytes(bytes);
+    assertEquals(Charset.defaultCharset(), StringUtils.guessCharset(bytes, null));
+  }
+
   @Test
   public void testShortShiftJIS1() {
-    // 金魚
-    doTest(new byte[] { (byte) 0x8b, (byte) 0xe0, (byte) 0x8b, (byte) 0x9b, }, "SJIS");
+    // 金魚
+    doTest(new byte[] { (byte) 0x8b, (byte) 0xe0, (byte) 0x8b, (byte) 0x9b, }, StringUtils.SHIFT_JIS_CHARSET, "SJIS");
   }
 
   @Test
   public void testShortISO885911() {
-    // båd
-    doTest(new byte[] { (byte) 0x62, (byte) 0xe5, (byte) 0x64, }, "ISO-8859-1");
+    // båd
+    doTest(new byte[] { (byte) 0x62, (byte) 0xe5, (byte) 0x64, }, StandardCharsets.ISO_8859_1, "ISO8859_1");
+  }
+
+  @Test
+  public void testShortUTF81() {
+    // Español
+    doTest(new byte[] { (byte) 0x45, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0xc3,
+                        (byte) 0xb1, (byte) 0x6f, (byte) 0x6c },
+           StandardCharsets.UTF_8, "UTF8");
   }
 
   @Test
   public void testMixedShiftJIS1() {
-    // Hello Èáë!
+    // Hello 金!
     doTest(new byte[] { (byte) 0x48, (byte) 0x65, (byte) 0x6c, (byte) 0x6c, (byte) 0x6f,
                         (byte) 0x20, (byte) 0x8b, (byte) 0xe0, (byte) 0x21, },
-           "SJIS");
+           StringUtils.SHIFT_JIS_CHARSET, "SJIS");
+  }
+
+  @Test
+  public void testUTF16BE() {
+    // 调压柜
+    doTest(new byte[] { (byte) 0xFE, (byte) 0xFF, (byte) 0x8c, (byte) 0x03, (byte) 0x53, (byte) 0x8b,
+                        (byte) 0x67, (byte) 0xdc, },
+           StandardCharsets.UTF_16,
+           StandardCharsets.UTF_16.name());
+  }
+
+  @Test
+  public void testUTF16LE() {
+    // 调压柜
+    doTest(new byte[] { (byte) 0xFF, (byte) 0xFE, (byte) 0x03, (byte) 0x8c, (byte) 0x8b, (byte) 0x53,
+                        (byte) 0xdc, (byte) 0x67, },
+           StandardCharsets.UTF_16,
+           StandardCharsets.UTF_16.name());
   }
 
-  private static void doTest(byte[] bytes, String charsetName) {
-    Charset charset = Charset.forName(charsetName);
-    String guessedName = StringUtils.guessEncoding(bytes, null);
-    Charset guessedEncoding = Charset.forName(guessedName);
-    assertEquals(charset, guessedEncoding);
+  private static void doTest(byte[] bytes, Charset charset, String encoding) {
+    Charset guessedCharset = StringUtils.guessCharset(bytes, null);
+    String guessedEncoding = StringUtils.guessEncoding(bytes, null);
+    assertEquals(charset, guessedCharset);
+    assertEquals(encoding, guessedEncoding);
   }
 
   /**
    * Utility for printing out a string in given encoding as a Java statement, since it's better
-   * to write that into the Java source file rather than risk character encoding issues in the 
+   * to write that into the Java source file rather than risk character encoding issues in the
    * source file itself.
    *
    * @param args command line arguments
@@ -67,7 +103,11 @@ public final class StringUtilsTestCase extends Assert {
     declaration.append("new byte[] { ");
     for (byte b : text.getBytes(charset)) {
       declaration.append("(byte) 0x");
-      declaration.append(Integer.toHexString(b & 0xFF));
+      int value = b & 0xFF;
+      if (value < 0x10) {
+        declaration.append('0');
+      }
+      declaration.append(Integer.toHexString(value));
       declaration.append(", ");
     }
     declaration.append('}');
diff --git a/core/src/test/java/com/google/zxing/common/reedsolomon/ReedSolomonTestCase.java b/core/src/test/java/com/google/zxing/common/reedsolomon/ReedSolomonTestCase.java
index a6fe1f4..5d62072 100644
--- a/core/src/test/java/com/google/zxing/common/reedsolomon/ReedSolomonTestCase.java
+++ b/core/src/test/java/com/google/zxing/common/reedsolomon/ReedSolomonTestCase.java
@@ -36,16 +36,19 @@ public final class ReedSolomonTestCase extends Assert {
     // real life test cases
     testEncodeDecode(GenericGF.DATA_MATRIX_FIELD_256,
         new int[] { 142, 164, 186 }, new int[] { 114, 25, 5, 88, 102 });
-    testEncodeDecode(GenericGF.DATA_MATRIX_FIELD_256, new int[] {
-        0x69, 0x75, 0x75, 0x71, 0x3B, 0x30, 0x30, 0x64,
-        0x70, 0x65, 0x66, 0x2F, 0x68, 0x70, 0x70, 0x68,
-        0x6D, 0x66, 0x2F, 0x64, 0x70, 0x6E, 0x30, 0x71,
-        0x30, 0x7B, 0x79, 0x6A, 0x6F, 0x68, 0x30, 0x81,
-        0xF0, 0x88, 0x1F, 0xB5 },
+    testEncodeDecode(GenericGF.DATA_MATRIX_FIELD_256,
+        new int[] {
+          0x69, 0x75, 0x75, 0x71, 0x3B, 0x30, 0x30, 0x64,
+          0x70, 0x65, 0x66, 0x2F, 0x68, 0x70, 0x70, 0x68,
+          0x6D, 0x66, 0x2F, 0x64, 0x70, 0x6E, 0x30, 0x71,
+          0x30, 0x7B, 0x79, 0x6A, 0x6F, 0x68, 0x30, 0x81,
+          0xF0, 0x88, 0x1F, 0xB5
+        },
         new int[] {
-        0x1C, 0x64, 0xEE, 0xEB, 0xD0, 0x1D, 0x00, 0x03,
-        0xF0, 0x1C, 0xF1, 0xD0, 0x6D, 0x00, 0x98, 0xDA,
-        0x80, 0x88, 0xBE, 0xFF, 0xB7, 0xFA, 0xA9, 0x95 });
+          0x1C, 0x64, 0xEE, 0xEB, 0xD0, 0x1D, 0x00, 0x03,
+          0xF0, 0x1C, 0xF1, 0xD0, 0x6D, 0x00, 0x98, 0xDA,
+          0x80, 0x88, 0xBE, 0xFF, 0xB7, 0xFA, 0xA9, 0x95
+        });
     // synthetic test cases
     testEncodeDecodeRandom(GenericGF.DATA_MATRIX_FIELD_256, 10, 240);
     testEncodeDecodeRandom(GenericGF.DATA_MATRIX_FIELD_256, 128, 127);
@@ -55,21 +58,27 @@ public final class ReedSolomonTestCase extends Assert {
   @Test
   public void testQRCode() {
     // Test case from example given in ISO 18004, Annex I
-    testEncodeDecode(GenericGF.QR_CODE_FIELD_256, new int[] {
-        0x10, 0x20, 0x0C, 0x56, 0x61, 0x80, 0xEC, 0x11,
-        0xEC, 0x11, 0xEC, 0x11, 0xEC, 0x11, 0xEC, 0x11 },
+    testEncodeDecode(GenericGF.QR_CODE_FIELD_256,
+        new int[] {
+          0x10, 0x20, 0x0C, 0x56, 0x61, 0x80, 0xEC, 0x11,
+          0xEC, 0x11, 0xEC, 0x11, 0xEC, 0x11, 0xEC, 0x11
+        },
         new int[] {
-        0xA5, 0x24, 0xD4, 0xC1, 0xED, 0x36, 0xC7, 0x87,
-        0x2C, 0x55 });
-    testEncodeDecode(GenericGF.QR_CODE_FIELD_256, new int[] {
-        0x72, 0x67, 0x2F, 0x77, 0x69, 0x6B, 0x69, 0x2F,
-        0x4D, 0x61, 0x69, 0x6E, 0x5F, 0x50, 0x61, 0x67,
-        0x65, 0x3B, 0x3B, 0x00, 0xEC, 0x11, 0xEC, 0x11,
-        0xEC, 0x11, 0xEC, 0x11, 0xEC, 0x11, 0xEC, 0x11 },
+          0xA5, 0x24, 0xD4, 0xC1, 0xED, 0x36, 0xC7, 0x87,
+          0x2C, 0x55
+        });
+    testEncodeDecode(GenericGF.QR_CODE_FIELD_256,
         new int[] {
-        0xD8, 0xB8, 0xEF, 0x14, 0xEC, 0xD0, 0xCC, 0x85,
-        0x73, 0x40, 0x0B, 0xB5, 0x5A, 0xB8, 0x8B, 0x2E,
-        0x08, 0x62 });
+          0x72, 0x67, 0x2F, 0x77, 0x69, 0x6B, 0x69, 0x2F,
+          0x4D, 0x61, 0x69, 0x6E, 0x5F, 0x50, 0x61, 0x67,
+          0x65, 0x3B, 0x3B, 0x00, 0xEC, 0x11, 0xEC, 0x11,
+          0xEC, 0x11, 0xEC, 0x11, 0xEC, 0x11, 0xEC, 0x11
+        },
+        new int[] {
+          0xD8, 0xB8, 0xEF, 0x14, 0xEC, 0xD0, 0xCC, 0x85,
+          0x73, 0x40, 0x0B, 0xB5, 0x5A, 0xB8, 0x8B, 0x2E,
+          0x08, 0x62
+        });
     // real life test cases
     // synthetic test cases
     testEncodeDecodeRandom(GenericGF.QR_CODE_FIELD_256, 10, 240);
@@ -89,298 +98,308 @@ public final class ReedSolomonTestCase extends Assert {
     testEncodeDecode(GenericGF.AZTEC_DATA_6, new int[] {
         0x9, 0x32, 0x1, 0x29, 0x2F, 0x2, 0x27, 0x25, 0x1, 0x1B },
         new int[] {
-        0x2C, 0x2, 0xD, 0xD, 0xA, 0x16, 0x28, 0x9, 0x22, 0xA, 0x14 });
-    testEncodeDecode(GenericGF.AZTEC_DATA_8, new int[] {
-        0xE0, 0x86, 0x42, 0x98, 0xE8, 0x4A, 0x96, 0xC6,
-        0xB9, 0xF0, 0x8C, 0xA7, 0x4A, 0xDA, 0xF8, 0xCE,
-        0xB7, 0xDE, 0x88, 0x64, 0x29, 0x8E, 0x84, 0xA9,
-        0x6C, 0x6B, 0x9F, 0x08, 0xCA, 0x74, 0xAD, 0xAF,
-        0x8C, 0xEB, 0x7C, 0x10, 0xC8, 0x53, 0x1D, 0x09,
-        0x52, 0xD8, 0xD7, 0x3E, 0x11, 0x94, 0xE9, 0x5B,
-        0x5F, 0x19, 0xD6, 0xFB, 0xD1, 0x0C, 0x85, 0x31,
-        0xD0, 0x95, 0x2D, 0x8D, 0x73, 0xE1, 0x19, 0x4E,
-        0x95, 0xB5, 0xF1, 0x9D, 0x6F },
+          0x2C, 0x2, 0xD, 0xD, 0xA, 0x16, 0x28, 0x9, 0x22, 0xA, 0x14
+        });
+    testEncodeDecode(GenericGF.AZTEC_DATA_8,
+        new int[] {
+          0xE0, 0x86, 0x42, 0x98, 0xE8, 0x4A, 0x96, 0xC6,
+          0xB9, 0xF0, 0x8C, 0xA7, 0x4A, 0xDA, 0xF8, 0xCE,
+          0xB7, 0xDE, 0x88, 0x64, 0x29, 0x8E, 0x84, 0xA9,
+          0x6C, 0x6B, 0x9F, 0x08, 0xCA, 0x74, 0xAD, 0xAF,
+          0x8C, 0xEB, 0x7C, 0x10, 0xC8, 0x53, 0x1D, 0x09,
+          0x52, 0xD8, 0xD7, 0x3E, 0x11, 0x94, 0xE9, 0x5B,
+          0x5F, 0x19, 0xD6, 0xFB, 0xD1, 0x0C, 0x85, 0x31,
+          0xD0, 0x95, 0x2D, 0x8D, 0x73, 0xE1, 0x19, 0x4E,
+          0x95, 0xB5, 0xF1, 0x9D, 0x6F
+        },
+        new int[] {
+          0x31, 0xD7, 0x04, 0x46, 0xB2, 0xC1, 0x06, 0x94,
+          0x17, 0xE5, 0x0C, 0x2B, 0xA3, 0x99, 0x15, 0x7F,
+          0x16, 0x3C, 0x66, 0xBA, 0x33, 0xD9, 0xE8, 0x87,
+          0x86, 0xBB, 0x4B, 0x15, 0x4E, 0x4A, 0xDE, 0xD4,
+          0xED, 0xA1, 0xF8, 0x47, 0x2A, 0x50, 0xA6, 0xBC,
+          0x53, 0x7D, 0x29, 0xFE, 0x06, 0x49, 0xF3, 0x73,
+          0x9F, 0xC1, 0x75
+        });
+    testEncodeDecode(GenericGF.AZTEC_DATA_10,
         new int[] {
-        0x31, 0xD7, 0x04, 0x46, 0xB2, 0xC1, 0x06, 0x94,
-        0x17, 0xE5, 0x0C, 0x2B, 0xA3, 0x99, 0x15, 0x7F,
-        0x16, 0x3C, 0x66, 0xBA, 0x33, 0xD9, 0xE8, 0x87,
-        0x86, 0xBB, 0x4B, 0x15, 0x4E, 0x4A, 0xDE, 0xD4,
-        0xED, 0xA1, 0xF8, 0x47, 0x2A, 0x50, 0xA6, 0xBC,
-        0x53, 0x7D, 0x29, 0xFE, 0x06, 0x49, 0xF3, 0x73,
-        0x9F, 0xC1, 0x75 });
-    testEncodeDecode(GenericGF.AZTEC_DATA_10, new int[] {
-        0x15C, 0x1E1, 0x2D5, 0x02E, 0x048, 0x1E2, 0x037, 0x0CD,
-        0x02E, 0x056, 0x26A, 0x281, 0x1C2, 0x1A6, 0x296, 0x045,
-        0x041, 0x0AA, 0x095, 0x2CE, 0x003, 0x38F, 0x2CD, 0x1A2,
-        0x036, 0x1AD, 0x04E, 0x090, 0x271, 0x0D3, 0x02E, 0x0D5,
-        0x2D4, 0x032, 0x2CA, 0x281, 0x0AA, 0x04E, 0x024, 0x2D3,
-        0x296, 0x281, 0x0E2, 0x08A, 0x1AA, 0x28A, 0x280, 0x07C,
-        0x286, 0x0A1, 0x1D0, 0x1AD, 0x154, 0x032, 0x2C2, 0x1C1,
-        0x145, 0x02B, 0x2D4, 0x2B0, 0x033, 0x2D5, 0x276, 0x1C1,
-        0x282, 0x10A, 0x2B5, 0x154, 0x003, 0x385, 0x20F, 0x0C4,
-        0x02D, 0x050, 0x266, 0x0D5, 0x033, 0x2D5, 0x276, 0x1C1,
-        0x0D4, 0x2A0, 0x08F, 0x0C4, 0x024, 0x20F, 0x2E2, 0x1AD,
-        0x154, 0x02E, 0x056, 0x26A, 0x281, 0x090, 0x1E5, 0x14E,
-        0x0CF, 0x2B6, 0x1C1, 0x28A, 0x2A1, 0x04E, 0x0D5, 0x003,
-        0x391, 0x122, 0x286, 0x1AD, 0x2D4, 0x028, 0x262, 0x2EA,
-        0x0A2, 0x004, 0x176, 0x295, 0x201, 0x0D5, 0x024, 0x20F,
-        0x116, 0x0C1, 0x056, 0x095, 0x213, 0x004, 0x1EA, 0x28A,
-        0x02A, 0x234, 0x2CE, 0x037, 0x157, 0x0D3, 0x262, 0x026,
-        0x262, 0x2A0, 0x086, 0x106, 0x2A1, 0x126, 0x1E5, 0x266,
-        0x26A, 0x2A1, 0x0E6, 0x1AA, 0x281, 0x2B6, 0x271, 0x154,
-        0x02F, 0x0C4, 0x02D, 0x213, 0x0CE, 0x003, 0x38F, 0x2CD,
-        0x1A2, 0x036, 0x1B5, 0x26A, 0x086, 0x280, 0x086, 0x1AA,
-        0x2A1, 0x226, 0x1AD, 0x0CF, 0x2A6, 0x292, 0x2C6, 0x022,
-        0x1AA, 0x256, 0x0D5, 0x02D, 0x050, 0x266, 0x0D5, 0x004,
-        0x176, 0x295, 0x201, 0x0D3, 0x055, 0x031, 0x2CD, 0x2EA,
-        0x1E2, 0x261, 0x1EA, 0x28A, 0x004, 0x145, 0x026, 0x1A6,
-        0x1C6, 0x1F5, 0x2CE, 0x034, 0x051, 0x146, 0x1E1, 0x0B0,
-        0x1B0, 0x261, 0x0D5, 0x025, 0x142, 0x1C0, 0x07C, 0x0B0,
-        0x1E6, 0x081, 0x044, 0x02F, 0x2CF, 0x081, 0x290, 0x0A2,
-        0x1A6, 0x281, 0x0CD, 0x155, 0x031, 0x1A2, 0x086, 0x262,
-        0x2A1, 0x0CD, 0x0CA, 0x0E6, 0x1E5, 0x003, 0x394, 0x0C5,
-        0x030, 0x26F, 0x053, 0x0C1, 0x1B6, 0x095, 0x2D4, 0x030,
-        0x26F, 0x053, 0x0C0, 0x07C, 0x2E6, 0x295, 0x143, 0x2CD,
-        0x2CE, 0x037, 0x0C9, 0x144, 0x2CD, 0x040, 0x08E, 0x054,
-        0x282, 0x022, 0x2A1, 0x229, 0x053, 0x0D5, 0x262, 0x027,
-        0x26A, 0x1E8, 0x14D, 0x1A2, 0x004, 0x26A, 0x296, 0x281,
-        0x176, 0x295, 0x201, 0x0E2, 0x2C4, 0x143, 0x2D4, 0x026,
-        0x262, 0x2A0, 0x08F, 0x0C4, 0x031, 0x213, 0x2B5, 0x155,
-        0x213, 0x02F, 0x143, 0x121, 0x2A6, 0x1AD, 0x2D4, 0x034,
-        0x0C5, 0x026, 0x295, 0x003, 0x396, 0x2A1, 0x176, 0x295,
-        0x201, 0x0AA, 0x04E, 0x004, 0x1B0, 0x070, 0x275, 0x154,
-        0x026, 0x2C1, 0x2B3, 0x154, 0x2AA, 0x256, 0x0C1, 0x044,
-        0x004, 0x23F },
+          0x15C, 0x1E1, 0x2D5, 0x02E, 0x048, 0x1E2, 0x037, 0x0CD,
+          0x02E, 0x056, 0x26A, 0x281, 0x1C2, 0x1A6, 0x296, 0x045,
+          0x041, 0x0AA, 0x095, 0x2CE, 0x003, 0x38F, 0x2CD, 0x1A2,
+          0x036, 0x1AD, 0x04E, 0x090, 0x271, 0x0D3, 0x02E, 0x0D5,
+          0x2D4, 0x032, 0x2CA, 0x281, 0x0AA, 0x04E, 0x024, 0x2D3,
+          0x296, 0x281, 0x0E2, 0x08A, 0x1AA, 0x28A, 0x280, 0x07C,
+          0x286, 0x0A1, 0x1D0, 0x1AD, 0x154, 0x032, 0x2C2, 0x1C1,
+          0x145, 0x02B, 0x2D4, 0x2B0, 0x033, 0x2D5, 0x276, 0x1C1,
+          0x282, 0x10A, 0x2B5, 0x154, 0x003, 0x385, 0x20F, 0x0C4,
+          0x02D, 0x050, 0x266, 0x0D5, 0x033, 0x2D5, 0x276, 0x1C1,
+          0x0D4, 0x2A0, 0x08F, 0x0C4, 0x024, 0x20F, 0x2E2, 0x1AD,
+          0x154, 0x02E, 0x056, 0x26A, 0x281, 0x090, 0x1E5, 0x14E,
+          0x0CF, 0x2B6, 0x1C1, 0x28A, 0x2A1, 0x04E, 0x0D5, 0x003,
+          0x391, 0x122, 0x286, 0x1AD, 0x2D4, 0x028, 0x262, 0x2EA,
+          0x0A2, 0x004, 0x176, 0x295, 0x201, 0x0D5, 0x024, 0x20F,
+          0x116, 0x0C1, 0x056, 0x095, 0x213, 0x004, 0x1EA, 0x28A,
+          0x02A, 0x234, 0x2CE, 0x037, 0x157, 0x0D3, 0x262, 0x026,
+          0x262, 0x2A0, 0x086, 0x106, 0x2A1, 0x126, 0x1E5, 0x266,
+          0x26A, 0x2A1, 0x0E6, 0x1AA, 0x281, 0x2B6, 0x271, 0x154,
+          0x02F, 0x0C4, 0x02D, 0x213, 0x0CE, 0x003, 0x38F, 0x2CD,
+          0x1A2, 0x036, 0x1B5, 0x26A, 0x086, 0x280, 0x086, 0x1AA,
+          0x2A1, 0x226, 0x1AD, 0x0CF, 0x2A6, 0x292, 0x2C6, 0x022,
+          0x1AA, 0x256, 0x0D5, 0x02D, 0x050, 0x266, 0x0D5, 0x004,
+          0x176, 0x295, 0x201, 0x0D3, 0x055, 0x031, 0x2CD, 0x2EA,
+          0x1E2, 0x261, 0x1EA, 0x28A, 0x004, 0x145, 0x026, 0x1A6,
+          0x1C6, 0x1F5, 0x2CE, 0x034, 0x051, 0x146, 0x1E1, 0x0B0,
+          0x1B0, 0x261, 0x0D5, 0x025, 0x142, 0x1C0, 0x07C, 0x0B0,
+          0x1E6, 0x081, 0x044, 0x02F, 0x2CF, 0x081, 0x290, 0x0A2,
+          0x1A6, 0x281, 0x0CD, 0x155, 0x031, 0x1A2, 0x086, 0x262,
+          0x2A1, 0x0CD, 0x0CA, 0x0E6, 0x1E5, 0x003, 0x394, 0x0C5,
+          0x030, 0x26F, 0x053, 0x0C1, 0x1B6, 0x095, 0x2D4, 0x030,
+          0x26F, 0x053, 0x0C0, 0x07C, 0x2E6, 0x295, 0x143, 0x2CD,
+          0x2CE, 0x037, 0x0C9, 0x144, 0x2CD, 0x040, 0x08E, 0x054,
+          0x282, 0x022, 0x2A1, 0x229, 0x053, 0x0D5, 0x262, 0x027,
+          0x26A, 0x1E8, 0x14D, 0x1A2, 0x004, 0x26A, 0x296, 0x281,
+          0x176, 0x295, 0x201, 0x0E2, 0x2C4, 0x143, 0x2D4, 0x026,
+          0x262, 0x2A0, 0x08F, 0x0C4, 0x031, 0x213, 0x2B5, 0x155,
+          0x213, 0x02F, 0x143, 0x121, 0x2A6, 0x1AD, 0x2D4, 0x034,
+          0x0C5, 0x026, 0x295, 0x003, 0x396, 0x2A1, 0x176, 0x295,
+          0x201, 0x0AA, 0x04E, 0x004, 0x1B0, 0x070, 0x275, 0x154,
+          0x026, 0x2C1, 0x2B3, 0x154, 0x2AA, 0x256, 0x0C1, 0x044,
+          0x004, 0x23F
+        },
         new int[] {
-        0x379, 0x099, 0x348, 0x010, 0x090, 0x196, 0x09C, 0x1FF,
-        0x1B0, 0x32D, 0x244, 0x0DE, 0x201, 0x386, 0x163, 0x11F,
-        0x39B, 0x344, 0x3FE, 0x02F, 0x188, 0x113, 0x3D9, 0x102,
-        0x04A, 0x2E1, 0x1D1, 0x18E, 0x077, 0x262, 0x241, 0x20D,
-        0x1B8, 0x11D, 0x0D0, 0x0A5, 0x29C, 0x24D, 0x3E7, 0x006,
-        0x2D0, 0x1B7, 0x337, 0x178, 0x0F1, 0x1E0, 0x00B, 0x01E,
-        0x0DA, 0x1C6, 0x2D9, 0x00D, 0x28B, 0x34A, 0x252, 0x27A,
-        0x057, 0x0CA, 0x2C2, 0x2E4, 0x3A6, 0x0E3, 0x22B, 0x307,
-        0x174, 0x292, 0x10C, 0x1ED, 0x2FD, 0x2D4, 0x0A7, 0x051,
-        0x34F, 0x07A, 0x1D5, 0x01D, 0x22E, 0x2C2, 0x1DF, 0x08F,
-        0x105, 0x3FE, 0x286, 0x2A2, 0x3B1, 0x131, 0x285, 0x362,
-        0x315, 0x13C, 0x0F9, 0x1A2, 0x28D, 0x246, 0x1B3, 0x12C,
-        0x2AD, 0x0F8, 0x222, 0x0EC, 0x39F, 0x358, 0x014, 0x229,
-        0x0C8, 0x360, 0x1C2, 0x031, 0x098, 0x041, 0x3E4, 0x046,
-        0x332, 0x318, 0x2E3, 0x24E, 0x3E2, 0x1E1, 0x0BE, 0x239,
-        0x306, 0x3A5, 0x352, 0x351, 0x275, 0x0ED, 0x045, 0x229,
-        0x0BF, 0x05D, 0x253, 0x1BE, 0x02E, 0x35A, 0x0E4, 0x2E9,
-        0x17A, 0x166, 0x03C, 0x007 });
-    testEncodeDecode(GenericGF.AZTEC_DATA_12, new int[] {
-        0x571, 0xE1B, 0x542, 0xE12, 0x1E2, 0x0DC, 0xCD0, 0xB85,
-        0x69A, 0xA81, 0x709, 0xA6A, 0x584, 0x510, 0x4AA, 0x256,
-        0xCE0, 0x0F8, 0xFB3, 0x5A2, 0x0D9, 0xAD1, 0x389, 0x09C,
-        0x4D3, 0x0B8, 0xD5B, 0x503, 0x2B2, 0xA81, 0x2A8, 0x4E0,
-        0x92D, 0x3A5, 0xA81, 0x388, 0x8A6, 0xAA8, 0xAA0, 0x07C,
-        0xA18, 0xA17, 0x41A, 0xD55, 0x032, 0xB09, 0xC15, 0x142,
-        0xBB5, 0x2B0, 0x0CE, 0xD59, 0xD9C, 0x1A0, 0x90A, 0xAD5,
-        0x540, 0x0F8, 0x583, 0xCC4, 0x0B4, 0x509, 0x98D, 0x50C,
-        0xED5, 0x9D9, 0xC13, 0x52A, 0x023, 0xCC4, 0x092, 0x0FB,
-        0x89A, 0xD55, 0x02E, 0x15A, 0x6AA, 0x049, 0x079, 0x54E,
-        0x33E, 0xB67, 0x068, 0xAA8, 0x44E, 0x354, 0x03E, 0x452,
-        0x2A1, 0x9AD, 0xB50, 0x289, 0x8AE, 0xA28, 0x804, 0x5DA,
-        0x958, 0x04D, 0x509, 0x20F, 0x458, 0xC11, 0x589, 0x584,
-        0xC04, 0x7AA, 0x8A0, 0xAA3, 0x4B3, 0x837, 0x55C, 0xD39,
-        0x882, 0x698, 0xAA0, 0x219, 0x06A, 0x852, 0x679, 0x666,
-        0x9AA, 0xA13, 0x99A, 0xAA0, 0x6B6, 0x9C5, 0x540, 0xBCC,
-        0x40B, 0x613, 0x338, 0x03E, 0x3EC, 0xD68, 0x836, 0x6D6,
-        0x6A2, 0x1A8, 0x021, 0x9AA, 0xA86, 0x266, 0xB4C, 0xFA9,
-        0xA92, 0xB18, 0x226, 0xAA5, 0x635, 0x42D, 0x142, 0x663,
-        0x540, 0x45D, 0xA95, 0x804, 0xD31, 0x543, 0x1B3, 0x6EA,
-        0x78A, 0x617, 0xAA8, 0xA01, 0x145, 0x099, 0xA67, 0x19F,
-        0x5B3, 0x834, 0x145, 0x467, 0x84B, 0x06C, 0x261, 0x354,
-        0x255, 0x09C, 0x01F, 0x0B0, 0x798, 0x811, 0x102, 0xFB3,
-        0xC81, 0xA40, 0xA26, 0x9A8, 0x133, 0x555, 0x0C5, 0xA22,
-        0x1A6, 0x2A8, 0x4CD, 0x328, 0xE67, 0x940, 0x3E5, 0x0C5,
-        0x0C2, 0x6F1, 0x4CC, 0x16D, 0x895, 0xB50, 0x309, 0xBC5,
-        0x330, 0x07C, 0xB9A, 0x955, 0x0EC, 0xDB3, 0x837, 0x325,
-        0x44B, 0x344, 0x023, 0x854, 0xA08, 0x22A, 0x862, 0x914,
-        0xCD5, 0x988, 0x279, 0xA9E, 0x853, 0x5A2, 0x012, 0x6AA,
-        0x5A8, 0x15D, 0xA95, 0x804, 0xE2B, 0x114, 0x3B5, 0x026,
-        0x98A, 0xA02, 0x3CC, 0x40C, 0x613, 0xAD5, 0x558, 0x4C2,
-        0xF50, 0xD21, 0xA99, 0xADB, 0x503, 0x431, 0x426, 0xA54,
-        0x03E, 0x5AA, 0x15D, 0xA95, 0x804, 0xAA1, 0x380, 0x46C,
-        0x070, 0x9D5, 0x540, 0x9AC, 0x1AC, 0xD54, 0xAAA, 0x563,
-        0x044, 0x401, 0x220, 0x9F1, 0x4F0, 0xDAA, 0x170, 0x90F,
-        0x106, 0xE66, 0x85C, 0x2B4, 0xD54, 0x0B8, 0x4D3, 0x52C,
-        0x228, 0x825, 0x512, 0xB67, 0x007, 0xC7D, 0x9AD, 0x106,
-        0xCD6, 0x89C, 0x484, 0xE26, 0x985, 0xC6A, 0xDA8, 0x195,
-        0x954, 0x095, 0x427, 0x049, 0x69D, 0x2D4, 0x09C, 0x445,
-        0x355, 0x455, 0x003, 0xE50, 0xC50, 0xBA0, 0xD6A, 0xA81,
-        0x958, 0x4E0, 0xA8A, 0x15D, 0xA95, 0x806, 0x76A, 0xCEC,
-        0xE0D, 0x048, 0x556, 0xAAA, 0x007, 0xC2C, 0x1E6, 0x205,
-        0xA28, 0x4CC, 0x6A8, 0x676, 0xACE, 0xCE0, 0x9A9, 0x501,
-        0x1E6, 0x204, 0x907, 0xDC4, 0xD6A, 0xA81, 0x70A, 0xD35,
-        0x502, 0x483, 0xCAA, 0x719, 0xF5B, 0x383, 0x455, 0x422,
-        0x71A, 0xA01, 0xF22, 0x915, 0x0CD, 0x6DA, 0x814, 0x4C5,
-        0x751, 0x440, 0x22E, 0xD4A, 0xC02, 0x6A8, 0x490, 0x7A2,
-        0xC60, 0x8AC, 0x4AC, 0x260, 0x23D, 0x545, 0x055, 0x1A5,
-        0x9C1, 0xBAA, 0xE69, 0xCC4, 0x134, 0xC55, 0x010, 0xC83,
-        0x542, 0x933, 0xCB3, 0x34D, 0x550, 0x9CC, 0xD55, 0x035,
-        0xB4E, 0x2AA, 0x05E, 0x620, 0x5B0, 0x999, 0xC01, 0xF1F,
-        0x66B, 0x441, 0xB36, 0xB35, 0x10D, 0x401, 0x0CD, 0x554,
-        0x313, 0x35A, 0x67D, 0x4D4, 0x958, 0xC11, 0x355, 0x2B1,
-        0xAA1, 0x68A, 0x133, 0x1AA, 0x022, 0xED4, 0xAC0, 0x269,
-        0x8AA, 0x18D, 0x9B7, 0x53C, 0x530, 0xBD5, 0x450, 0x08A,
-        0x284, 0xCD3, 0x38C, 0xFAD, 0x9C1, 0xA0A, 0x2A3, 0x3C2,
-        0x583, 0x613, 0x09A, 0xA12, 0xA84, 0xE00, 0xF85, 0x83C,
-        0xC40, 0x888, 0x17D, 0x9E4, 0x0D2, 0x051, 0x34D, 0x409,
-        0x9AA, 0xA86, 0x2D1, 0x10D, 0x315, 0x426, 0x699, 0x473,
-        0x3CA, 0x01F, 0x286, 0x286, 0x137, 0x8A6, 0x60B, 0x6C4,
-        0xADA, 0x818, 0x4DE, 0x299, 0x803, 0xE5C, 0xD4A, 0xA87,
-        0x66D, 0x9C1, 0xB99, 0x2A2, 0x59A, 0x201, 0x1C2, 0xA50,
-        0x411, 0x543, 0x148, 0xA66, 0xACC, 0x413, 0xCD4, 0xF42,
-        0x9AD, 0x100, 0x935, 0x52D, 0x40A, 0xED4, 0xAC0, 0x271,
-        0x588, 0xA1D, 0xA81, 0x34C, 0x550, 0x11E, 0x620, 0x630,
-        0x9D6, 0xAAA, 0xC26, 0x17A, 0x869, 0x0D4, 0xCD6, 0xDA8,
-        0x1A1, 0x8A1, 0x352, 0xA01, 0xF2D, 0x50A, 0xED4, 0xAC0,
-        0x255, 0x09C, 0x023, 0x603, 0x84E, 0xAAA, 0x04D, 0x60D,
-        0x66A, 0xA55, 0x52B, 0x182, 0x220, 0x091, 0x00F, 0x8A7,
-        0x86D, 0x50B, 0x848, 0x788, 0x373, 0x342, 0xE15, 0xA6A,
-        0xA05, 0xC26, 0x9A9, 0x611, 0x441, 0x2A8, 0x95B, 0x380,
-        0x3E3, 0xECD, 0x688, 0x366, 0xB44, 0xE24, 0x271, 0x34C,
-        0x2E3, 0x56D, 0x40C, 0xACA, 0xA04, 0xAA1, 0x382, 0x4B4,
-        0xE96, 0xA04, 0xE22, 0x29A, 0xAA2, 0xA80, 0x1F2, 0x862,
-        0x85D, 0x06B, 0x554, 0x0CA, 0xC27, 0x054, 0x50A, 0xED4,
-        0xAC0, 0x33B, 0x567, 0x670, 0x682, 0x42A, 0xB55, 0x500,
-        0x3E1, 0x60F, 0x310, 0x2D1, 0x426, 0x635, 0x433, 0xB56,
-        0x767, 0x04D, 0x4A8, 0x08F, 0x310, 0x248, 0x3EE, 0x26B,
-        0x554, 0x0B8, 0x569, 0xAA8, 0x124, 0x1E5, 0x538, 0xCFA,
-        0xD9C, 0x1A2, 0xAA1, 0x138, 0xD50, 0x0F9, 0x148, 0xA86,
-        0x6B6, 0xD40, 0xA26, 0x2BA, 0x8A2, 0x011, 0x76A, 0x560,
-        0x135, 0x424, 0x83D, 0x163, 0x045, 0x625, 0x613, 0x011,
-        0xEAA, 0x282, 0xA8D, 0x2CE, 0x0DD, 0x573, 0x4E6, 0x209,
-        0xA62, 0xA80, 0x864, 0x1AA, 0x149, 0x9E5, 0x99A, 0x6AA,
-        0x84E, 0x66A, 0xA81, 0xADA, 0x715, 0x502, 0xF31, 0x02D,
-        0x84C, 0xCE0, 0x0F8, 0xFB3, 0x5A2, 0x0D9, 0xB59, 0xA88,
-        0x6A0, 0x086, 0x6AA, 0xA18, 0x99A, 0xD33, 0xEA6, 0xA4A,
-        0xC60, 0x89A, 0xA95, 0x8D5, 0x0B4, 0x509, 0x98D, 0x501,
-        0x176, 0xA56, 0x013, 0x4C5, 0x50C, 0x6CD, 0xBA9, 0xE29,
-        0x85E, 0xAA2, 0x804, 0x514, 0x266, 0x99C, 0x67D, 0x6CE,
-        0x0D0, 0x515, 0x19E, 0x12C, 0x1B0, 0x984, 0xD50, 0x954,
-        0x270, 0x07C, 0x2C1, 0xE62, 0x044, 0x40B, 0xECF, 0x206,
-        0x902, 0x89A, 0x6A0, 0x4CD, 0x554, 0x316, 0x888, 0x698,
-        0xAA1, 0x334, 0xCA3, 0x99E, 0x500, 0xF94, 0x314, 0x309,
-        0xBC5, 0x330, 0x5B6, 0x256, 0xD40, 0xC26, 0xF14, 0xCC0,
-        0x1F2, 0xE6A, 0x554, 0x3B3, 0x6CE, 0x0DC, 0xC95, 0x12C,
-        0xD10, 0x08E, 0x152, 0x820, 0x8AA, 0x18A, 0x453, 0x356,
-        0x620, 0x9E6, 0xA7A, 0x14D, 0x688, 0x049, 0xAA9, 0x6A0,
-        0x576, 0xA56, 0x013, 0x8AC, 0x450, 0xED4, 0x09A, 0x62A,
-        0x808, 0xF31, 0x031, 0x84E, 0xB55, 0x561, 0x30B, 0xD43,
-        0x486, 0xA66, 0xB6D, 0x40D, 0x0C5, 0x09A, 0x950, 0x0F9,
-        0x6A8, 0x576, 0xA56, 0x012, 0xA84, 0xE01, 0x1B0, 0x1C2,
-        0x755, 0x502, 0x6B0, 0x6B3, 0x552, 0xAA9, 0x58C, 0x111,
-        0x004, 0x882, 0x7C5, 0x3C3, 0x6A8, 0x5C2, 0x43C, 0x41B,
-        0x99A, 0x170, 0xAD3, 0x550, 0x2E1, 0x34D, 0x4B0, 0x8A2,
-        0x095, 0x44A, 0xD9C, 0x01F, 0x1F6, 0x6B4, 0x41B, 0x35A,
-        0x271, 0x213, 0x89A, 0x617, 0x1AB, 0x6A0, 0x656, 0x550,
-        0x255, 0x09C, 0x125, 0xA74, 0xB50, 0x271, 0x114, 0xD55,
-        0x154, 0x00F, 0x943, 0x142, 0xE83, 0x5AA, 0xA06, 0x561,
-        0x382, 0xA28, 0x576, 0xA56, 0x019, 0xDAB, 0x3B3, 0x834,
-        0x121, 0x55A, 0xAA8, 0x01F, 0x0B0, 0x798, 0x816, 0x8A1,
-        0x331, 0xAA1, 0x9DA, 0xB3B, 0x382, 0x6A5, 0x404, 0x798,
-        0x812, 0x41F, 0x713, 0x5AA, 0xA05, 0xC2B, 0x4D5, 0x409,
-        0x20F, 0x2A9, 0xC67, 0xD6C, 0xE0D, 0x155, 0x089, 0xC6A,
-        0x807, 0xC8A, 0x454, 0x335, 0xB6A, 0x051, 0x315, 0xD45,
-        0x100, 0x8BB, 0x52B, 0x009, 0xAA1, 0x241, 0xE8B, 0x182,
-        0x2B1, 0x2B0, 0x980, 0x8F5, 0x514, 0x154, 0x696, 0x706,
-        0xEAB, 0x9A7, 0x310, 0x4D3, 0x154, 0x043, 0x20D, 0x50A,
-        0x4CF, 0x2CC, 0xD35, 0x542, 0x733, 0x554, 0x0D6, 0xD38,
-        0xAA8, 0x179, 0x881, 0x6C2, 0x667, 0x007, 0xC7D, 0x9AD,
-        0x106, 0xCDA, 0xCD4, 0x435, 0x004, 0x335, 0x550, 0xC4C,
-        0xD69, 0x9F5, 0x352, 0x563, 0x044, 0xD54, 0xAC6, 0xA85,
-        0xA28, 0x4CC, 0x6A8, 0x08B, 0xB52, 0xB00, 0x9A6, 0x2A8,
-        0x636, 0x6DD, 0x4F1, 0x4C2, 0xF55, 0x140, 0x228, 0xA13,
-        0x34C, 0xE33, 0xEB6, 0x706, 0x828, 0xA8C, 0xF09, 0x60D,
-        0x84C, 0x26A, 0x84A, 0xA13, 0x803, 0xE16, 0x0F3, 0x102,
-        0x220, 0x5F6, 0x790, 0x348, 0x144, 0xD35, 0x026, 0x6AA,
-        0xA18, 0xB44, 0x434, 0xC55, 0x099, 0xA65, 0x1CC, 0xF28,
-        0x07C, 0xA18, 0xA18, 0x4DE, 0x299, 0x82D, 0xB12, 0xB6A,
-        0x061, 0x378, 0xA66, 0x00F, 0x973, 0x52A, 0xA1D, 0x9B6,
-        0x706, 0xE64, 0xA89, 0x668, 0x804, 0x70A, 0x941, 0x045,
-        0x50C, 0x522, 0x99A, 0xB31, 0x04F, 0x353, 0xD0A, 0x6B4,
-        0x402, 0x4D5, 0x4B5, 0x02B, 0xB52, 0xB00, 0x9C5, 0x622,
-        0x876, 0xA04, 0xD31, 0x540, 0x479, 0x881, 0x8C2, 0x75A,
-        0xAAB, 0x098, 0x5EA, 0x1A4, 0x353, 0x35B, 0x6A0, 0x686,
-        0x284, 0xD4A, 0x807, 0xCB5, 0x42B, 0xB52, 0xB00, 0x954,
-        0x270, 0x08D, 0x80E, 0x13A, 0xAA8, 0x135, 0x835, 0x9AA,
-        0x801, 0xF14, 0xF0D, 0xAA1, 0x709, 0x0F1, 0x06E, 0x668,
-        0x5C2, 0xB4D, 0x540, 0xB84, 0xD35, 0x2C2, 0x288, 0x255,
-        0x12B, 0x670, 0x07C, 0x7D9, 0xAD1, 0x06C, 0xD68, 0x9C4,
-        0x84E, 0x269, 0x85C, 0x6AD, 0xA81, 0x959, 0x540, 0x954,
-        0x270, 0x496, 0x9D2, 0xD40, 0x9C4, 0x453, 0x554, 0x550,
-        0x03E, 0x50C, 0x50B, 0xA0D, 0x6AA, 0x819, 0x584, 0xE0A,
-        0x8A1, 0x5DA, 0x958, 0x067, 0x6AC, 0xECE, 0x0D0, 0x485,
-        0x56A, 0xAA0, 0x07C, 0x2C1, 0xE62, 0x05A, 0x284, 0xCC6,
-        0xA86, 0x76A, 0xCEC, 0xE09, 0xA95, 0x011, 0xE62, 0x049,
-        0x07D, 0xC4D, 0x6AA, 0x817, 0x0AD, 0x355, 0x024, 0x83C,
-        0xAA7, 0x19F, 0x5B3, 0x834, 0x554, 0x227, 0x1AA, 0x01F,
-        0x229, 0x150, 0xCD6, 0xDA8, 0x144, 0xC57, 0x514, 0x402,
-        0x2ED, 0x4AC, 0x026, 0xA84, 0x907, 0xA2C, 0x608, 0xAC4,
-        0xAC2, 0x602, 0x3D5, 0x450, 0x551, 0xA59, 0xC1B, 0xAAE,
-        0x69C, 0xC41, 0x34C, 0x550, 0x10C, 0x835, 0x429, 0x33C,
-        0xB33, 0x4D5, 0x509, 0xCCD, 0x550, 0x35B, 0x4E2, 0xAA0,
-        0x5E6, 0x205, 0xB09, 0x99C, 0x09F },
+          0x379, 0x099, 0x348, 0x010, 0x090, 0x196, 0x09C, 0x1FF,
+          0x1B0, 0x32D, 0x244, 0x0DE, 0x201, 0x386, 0x163, 0x11F,
+          0x39B, 0x344, 0x3FE, 0x02F, 0x188, 0x113, 0x3D9, 0x102,
+          0x04A, 0x2E1, 0x1D1, 0x18E, 0x077, 0x262, 0x241, 0x20D,
+          0x1B8, 0x11D, 0x0D0, 0x0A5, 0x29C, 0x24D, 0x3E7, 0x006,
+          0x2D0, 0x1B7, 0x337, 0x178, 0x0F1, 0x1E0, 0x00B, 0x01E,
+          0x0DA, 0x1C6, 0x2D9, 0x00D, 0x28B, 0x34A, 0x252, 0x27A,
+          0x057, 0x0CA, 0x2C2, 0x2E4, 0x3A6, 0x0E3, 0x22B, 0x307,
+          0x174, 0x292, 0x10C, 0x1ED, 0x2FD, 0x2D4, 0x0A7, 0x051,
+          0x34F, 0x07A, 0x1D5, 0x01D, 0x22E, 0x2C2, 0x1DF, 0x08F,
+          0x105, 0x3FE, 0x286, 0x2A2, 0x3B1, 0x131, 0x285, 0x362,
+          0x315, 0x13C, 0x0F9, 0x1A2, 0x28D, 0x246, 0x1B3, 0x12C,
+          0x2AD, 0x0F8, 0x222, 0x0EC, 0x39F, 0x358, 0x014, 0x229,
+          0x0C8, 0x360, 0x1C2, 0x031, 0x098, 0x041, 0x3E4, 0x046,
+          0x332, 0x318, 0x2E3, 0x24E, 0x3E2, 0x1E1, 0x0BE, 0x239,
+          0x306, 0x3A5, 0x352, 0x351, 0x275, 0x0ED, 0x045, 0x229,
+          0x0BF, 0x05D, 0x253, 0x1BE, 0x02E, 0x35A, 0x0E4, 0x2E9,
+          0x17A, 0x166, 0x03C, 0x007
+        });
+    testEncodeDecode(GenericGF.AZTEC_DATA_12,
         new int[] {
-        0xD54, 0x221, 0x154, 0x7CD, 0xBF3, 0x112, 0x89B, 0xC5E,
-        0x9CD, 0x07E, 0xFB6, 0x78F, 0x7FA, 0x16F, 0x377, 0x4B4,
-        0x62D, 0x475, 0xBC2, 0x861, 0xB72, 0x9D0, 0x76A, 0x5A1,
-        0x22A, 0xF74, 0xDBA, 0x8B1, 0x139, 0xDCD, 0x012, 0x293,
-        0x705, 0xA34, 0xDD5, 0x3D2, 0x7F8, 0x0A6, 0x89A, 0x346,
-        0xCE0, 0x690, 0x40E, 0xFF3, 0xC4D, 0x97F, 0x9C9, 0x016,
-        0x73A, 0x923, 0xBCE, 0xFA9, 0xE6A, 0xB92, 0x02A, 0x07C,
-        0x04B, 0x8D5, 0x753, 0x42E, 0x67E, 0x87C, 0xEE6, 0xD7D,
-        0x2BF, 0xFB2, 0xFF8, 0x42F, 0x4CB, 0x214, 0x779, 0x02D,
-        0x606, 0xA02, 0x08A, 0xD4F, 0xB87, 0xDDF, 0xC49, 0xB51,
-        0x0E9, 0xF89, 0xAEF, 0xC92, 0x383, 0x98D, 0x367, 0xBD3,
-        0xA55, 0x148, 0x9DB, 0x913, 0xC79, 0x6FF, 0x387, 0x6EA,
-        0x7FA, 0xC1B, 0x12D, 0x303, 0xBCA, 0x503, 0x0FB, 0xB14,
-        0x0D4, 0xAD1, 0xAFC, 0x9DD, 0x404, 0x145, 0x6E5, 0x8ED,
-        0xF94, 0xD72, 0x645, 0xA21, 0x1A8, 0xABF, 0xC03, 0x91E,
-        0xD53, 0x48C, 0x471, 0x4E4, 0x408, 0x33C, 0x5DF, 0x73D,
-        0xA2A, 0x454, 0xD77, 0xC48, 0x2F5, 0x96A, 0x9CF, 0x047,
-        0x611, 0xE92, 0xC2F, 0xA98, 0x56D, 0x919, 0x615, 0x535,
-        0x67A, 0x8C1, 0x2E2, 0xBC4, 0xBE8, 0x328, 0x04F, 0x257,
-        0x3F9, 0xFA5, 0x477, 0x12E, 0x94B, 0x116, 0xEF7, 0x65F,
-        0x6B3, 0x915, 0xC64, 0x9AF, 0xB6C, 0x6A2, 0x50D, 0xEA3,
-        0x26E, 0xC23, 0x817, 0xA42, 0x71A, 0x9DD, 0xDA8, 0x84D,
-        0x3F3, 0x85B, 0xB00, 0x1FC, 0xB0A, 0xC2F, 0x00C, 0x095,
-        0xC58, 0x0E3, 0x807, 0x962, 0xC4B, 0x29A, 0x6FC, 0x958,
-        0xD29, 0x59E, 0xB14, 0x95A, 0xEDE, 0xF3D, 0xFB8, 0x0E5,
-        0x348, 0x2E7, 0x38E, 0x56A, 0x410, 0x3B1, 0x4B0, 0x793,
-        0xAB7, 0x0BC, 0x648, 0x719, 0xE3E, 0xFB4, 0x3B4, 0xE5C,
-        0x950, 0xD2A, 0x50B, 0x76F, 0x8D2, 0x3C7, 0xECC, 0x87C,
-        0x53A, 0xBA7, 0x4C3, 0x148, 0x437, 0x820, 0xECD, 0x660,
-        0x095, 0x2F4, 0x661, 0x6A4, 0xB74, 0x5F3, 0x1D2, 0x7EC,
-        0x8E2, 0xA40, 0xA6F, 0xFC3, 0x3BE, 0x1E9, 0x52C, 0x233,
-        0x173, 0x4EF, 0xA7C, 0x40B, 0x14C, 0x88D, 0xF30, 0x8D9,
-        0xBDB, 0x0A6, 0x940, 0xD46, 0xB2B, 0x03E, 0x46A, 0x641,
-        0xF08, 0xAFF, 0x496, 0x68A, 0x7A4, 0x0BA, 0xD43, 0x515,
-        0xB26, 0xD8F, 0x05C, 0xD6E, 0xA2C, 0xF25, 0x628, 0x4E5,
-        0x81D, 0xA2A, 0x1FF, 0x302, 0xFBD, 0x6D9, 0x711, 0xD8B,
-        0xE5C, 0x5CF, 0x42E, 0x008, 0x863, 0xB6F, 0x1E1, 0x3DA,
-        0xACE, 0x82B, 0x2DB, 0x7EB, 0xC15, 0x79F, 0xA79, 0xDAF,
-        0x00D, 0x2F6, 0x0CE, 0x370, 0x7E8, 0x9E6, 0x89F, 0xAE9,
-        0x175, 0xA95, 0x06B, 0x9DF, 0xAFF, 0x45B, 0x823, 0xAA4,
-        0xC79, 0x773, 0x886, 0x854, 0x0A5, 0x6D1, 0xE55, 0xEBB,
-        0x518, 0xE50, 0xF8F, 0x8CC, 0x834, 0x388, 0xCD2, 0xFC1,
-        0xA55, 0x1F8, 0xD1F, 0xE08, 0xF93, 0x362, 0xA22, 0x9FA,
-        0xCE5, 0x3C3, 0xDD4, 0xC53, 0xB94, 0xAD0, 0x6EB, 0x68D,
-        0x660, 0x8FC, 0xBCD, 0x914, 0x16F, 0x4C0, 0x134, 0xE1A,
-        0x76F, 0x9CB, 0x660, 0xEA0, 0x320, 0x15A, 0xCE3, 0x7E8,
-        0x03E, 0xB9A, 0xC90, 0xA14, 0x256, 0x1A8, 0x639, 0x7C6,
-        0xA59, 0xA65, 0x956, 0x9E4, 0x592, 0x6A9, 0xCFF, 0x4DC,
-        0xAA3, 0xD2A, 0xFDE, 0xA87, 0xBF5, 0x9F0, 0xC32, 0x94F,
-        0x675, 0x9A6, 0x369, 0x648, 0x289, 0x823, 0x498, 0x574,
-        0x8D1, 0xA13, 0xD1A, 0xBB5, 0xA19, 0x7F7, 0x775, 0x138,
-        0x949, 0xA4C, 0xE36, 0x126, 0xC85, 0xE05, 0xFEE, 0x962,
-        0x36D, 0x08D, 0xC76, 0x1E1, 0x1EC, 0x8D7, 0x231, 0xB68,
-        0x03C, 0x1DE, 0x7DF, 0x2B1, 0x09D, 0xC81, 0xDA4, 0x8F7,
-        0x6B9, 0x947, 0x9B0 });
+          0x571, 0xE1B, 0x542, 0xE12, 0x1E2, 0x0DC, 0xCD0, 0xB85,
+          0x69A, 0xA81, 0x709, 0xA6A, 0x584, 0x510, 0x4AA, 0x256,
+          0xCE0, 0x0F8, 0xFB3, 0x5A2, 0x0D9, 0xAD1, 0x389, 0x09C,
+          0x4D3, 0x0B8, 0xD5B, 0x503, 0x2B2, 0xA81, 0x2A8, 0x4E0,
+          0x92D, 0x3A5, 0xA81, 0x388, 0x8A6, 0xAA8, 0xAA0, 0x07C,
+          0xA18, 0xA17, 0x41A, 0xD55, 0x032, 0xB09, 0xC15, 0x142,
+          0xBB5, 0x2B0, 0x0CE, 0xD59, 0xD9C, 0x1A0, 0x90A, 0xAD5,
+          0x540, 0x0F8, 0x583, 0xCC4, 0x0B4, 0x509, 0x98D, 0x50C,
+          0xED5, 0x9D9, 0xC13, 0x52A, 0x023, 0xCC4, 0x092, 0x0FB,
+          0x89A, 0xD55, 0x02E, 0x15A, 0x6AA, 0x049, 0x079, 0x54E,
+          0x33E, 0xB67, 0x068, 0xAA8, 0x44E, 0x354, 0x03E, 0x452,
+          0x2A1, 0x9AD, 0xB50, 0x289, 0x8AE, 0xA28, 0x804, 0x5DA,
+          0x958, 0x04D, 0x509, 0x20F, 0x458, 0xC11, 0x589, 0x584,
+          0xC04, 0x7AA, 0x8A0, 0xAA3, 0x4B3, 0x837, 0x55C, 0xD39,
+          0x882, 0x698, 0xAA0, 0x219, 0x06A, 0x852, 0x679, 0x666,
+          0x9AA, 0xA13, 0x99A, 0xAA0, 0x6B6, 0x9C5, 0x540, 0xBCC,
+          0x40B, 0x613, 0x338, 0x03E, 0x3EC, 0xD68, 0x836, 0x6D6,
+          0x6A2, 0x1A8, 0x021, 0x9AA, 0xA86, 0x266, 0xB4C, 0xFA9,
+          0xA92, 0xB18, 0x226, 0xAA5, 0x635, 0x42D, 0x142, 0x663,
+          0x540, 0x45D, 0xA95, 0x804, 0xD31, 0x543, 0x1B3, 0x6EA,
+          0x78A, 0x617, 0xAA8, 0xA01, 0x145, 0x099, 0xA67, 0x19F,
+          0x5B3, 0x834, 0x145, 0x467, 0x84B, 0x06C, 0x261, 0x354,
+          0x255, 0x09C, 0x01F, 0x0B0, 0x798, 0x811, 0x102, 0xFB3,
+          0xC81, 0xA40, 0xA26, 0x9A8, 0x133, 0x555, 0x0C5, 0xA22,
+          0x1A6, 0x2A8, 0x4CD, 0x328, 0xE67, 0x940, 0x3E5, 0x0C5,
+          0x0C2, 0x6F1, 0x4CC, 0x16D, 0x895, 0xB50, 0x309, 0xBC5,
+          0x330, 0x07C, 0xB9A, 0x955, 0x0EC, 0xDB3, 0x837, 0x325,
+          0x44B, 0x344, 0x023, 0x854, 0xA08, 0x22A, 0x862, 0x914,
+          0xCD5, 0x988, 0x279, 0xA9E, 0x853, 0x5A2, 0x012, 0x6AA,
+          0x5A8, 0x15D, 0xA95, 0x804, 0xE2B, 0x114, 0x3B5, 0x026,
+          0x98A, 0xA02, 0x3CC, 0x40C, 0x613, 0xAD5, 0x558, 0x4C2,
+          0xF50, 0xD21, 0xA99, 0xADB, 0x503, 0x431, 0x426, 0xA54,
+          0x03E, 0x5AA, 0x15D, 0xA95, 0x804, 0xAA1, 0x380, 0x46C,
+          0x070, 0x9D5, 0x540, 0x9AC, 0x1AC, 0xD54, 0xAAA, 0x563,
+          0x044, 0x401, 0x220, 0x9F1, 0x4F0, 0xDAA, 0x170, 0x90F,
+          0x106, 0xE66, 0x85C, 0x2B4, 0xD54, 0x0B8, 0x4D3, 0x52C,
+          0x228, 0x825, 0x512, 0xB67, 0x007, 0xC7D, 0x9AD, 0x106,
+          0xCD6, 0x89C, 0x484, 0xE26, 0x985, 0xC6A, 0xDA8, 0x195,
+          0x954, 0x095, 0x427, 0x049, 0x69D, 0x2D4, 0x09C, 0x445,
+          0x355, 0x455, 0x003, 0xE50, 0xC50, 0xBA0, 0xD6A, 0xA81,
+          0x958, 0x4E0, 0xA8A, 0x15D, 0xA95, 0x806, 0x76A, 0xCEC,
+          0xE0D, 0x048, 0x556, 0xAAA, 0x007, 0xC2C, 0x1E6, 0x205,
+          0xA28, 0x4CC, 0x6A8, 0x676, 0xACE, 0xCE0, 0x9A9, 0x501,
+          0x1E6, 0x204, 0x907, 0xDC4, 0xD6A, 0xA81, 0x70A, 0xD35,
+          0x502, 0x483, 0xCAA, 0x719, 0xF5B, 0x383, 0x455, 0x422,
+          0x71A, 0xA01, 0xF22, 0x915, 0x0CD, 0x6DA, 0x814, 0x4C5,
+          0x751, 0x440, 0x22E, 0xD4A, 0xC02, 0x6A8, 0x490, 0x7A2,
+          0xC60, 0x8AC, 0x4AC, 0x260, 0x23D, 0x545, 0x055, 0x1A5,
+          0x9C1, 0xBAA, 0xE69, 0xCC4, 0x134, 0xC55, 0x010, 0xC83,
+          0x542, 0x933, 0xCB3, 0x34D, 0x550, 0x9CC, 0xD55, 0x035,
+          0xB4E, 0x2AA, 0x05E, 0x620, 0x5B0, 0x999, 0xC01, 0xF1F,
+          0x66B, 0x441, 0xB36, 0xB35, 0x10D, 0x401, 0x0CD, 0x554,
+          0x313, 0x35A, 0x67D, 0x4D4, 0x958, 0xC11, 0x355, 0x2B1,
+          0xAA1, 0x68A, 0x133, 0x1AA, 0x022, 0xED4, 0xAC0, 0x269,
+          0x8AA, 0x18D, 0x9B7, 0x53C, 0x530, 0xBD5, 0x450, 0x08A,
+          0x284, 0xCD3, 0x38C, 0xFAD, 0x9C1, 0xA0A, 0x2A3, 0x3C2,
+          0x583, 0x613, 0x09A, 0xA12, 0xA84, 0xE00, 0xF85, 0x83C,
+          0xC40, 0x888, 0x17D, 0x9E4, 0x0D2, 0x051, 0x34D, 0x409,
+          0x9AA, 0xA86, 0x2D1, 0x10D, 0x315, 0x426, 0x699, 0x473,
+          0x3CA, 0x01F, 0x286, 0x286, 0x137, 0x8A6, 0x60B, 0x6C4,
+          0xADA, 0x818, 0x4DE, 0x299, 0x803, 0xE5C, 0xD4A, 0xA87,
+          0x66D, 0x9C1, 0xB99, 0x2A2, 0x59A, 0x201, 0x1C2, 0xA50,
+          0x411, 0x543, 0x148, 0xA66, 0xACC, 0x413, 0xCD4, 0xF42,
+          0x9AD, 0x100, 0x935, 0x52D, 0x40A, 0xED4, 0xAC0, 0x271,
+          0x588, 0xA1D, 0xA81, 0x34C, 0x550, 0x11E, 0x620, 0x630,
+          0x9D6, 0xAAA, 0xC26, 0x17A, 0x869, 0x0D4, 0xCD6, 0xDA8,
+          0x1A1, 0x8A1, 0x352, 0xA01, 0xF2D, 0x50A, 0xED4, 0xAC0,
+          0x255, 0x09C, 0x023, 0x603, 0x84E, 0xAAA, 0x04D, 0x60D,
+          0x66A, 0xA55, 0x52B, 0x182, 0x220, 0x091, 0x00F, 0x8A7,
+          0x86D, 0x50B, 0x848, 0x788, 0x373, 0x342, 0xE15, 0xA6A,
+          0xA05, 0xC26, 0x9A9, 0x611, 0x441, 0x2A8, 0x95B, 0x380,
+          0x3E3, 0xECD, 0x688, 0x366, 0xB44, 0xE24, 0x271, 0x34C,
+          0x2E3, 0x56D, 0x40C, 0xACA, 0xA04, 0xAA1, 0x382, 0x4B4,
+          0xE96, 0xA04, 0xE22, 0x29A, 0xAA2, 0xA80, 0x1F2, 0x862,
+          0x85D, 0x06B, 0x554, 0x0CA, 0xC27, 0x054, 0x50A, 0xED4,
+          0xAC0, 0x33B, 0x567, 0x670, 0x682, 0x42A, 0xB55, 0x500,
+          0x3E1, 0x60F, 0x310, 0x2D1, 0x426, 0x635, 0x433, 0xB56,
+          0x767, 0x04D, 0x4A8, 0x08F, 0x310, 0x248, 0x3EE, 0x26B,
+          0x554, 0x0B8, 0x569, 0xAA8, 0x124, 0x1E5, 0x538, 0xCFA,
+          0xD9C, 0x1A2, 0xAA1, 0x138, 0xD50, 0x0F9, 0x148, 0xA86,
+          0x6B6, 0xD40, 0xA26, 0x2BA, 0x8A2, 0x011, 0x76A, 0x560,
+          0x135, 0x424, 0x83D, 0x163, 0x045, 0x625, 0x613, 0x011,
+          0xEAA, 0x282, 0xA8D, 0x2CE, 0x0DD, 0x573, 0x4E6, 0x209,
+          0xA62, 0xA80, 0x864, 0x1AA, 0x149, 0x9E5, 0x99A, 0x6AA,
+          0x84E, 0x66A, 0xA81, 0xADA, 0x715, 0x502, 0xF31, 0x02D,
+          0x84C, 0xCE0, 0x0F8, 0xFB3, 0x5A2, 0x0D9, 0xB59, 0xA88,
+          0x6A0, 0x086, 0x6AA, 0xA18, 0x99A, 0xD33, 0xEA6, 0xA4A,
+          0xC60, 0x89A, 0xA95, 0x8D5, 0x0B4, 0x509, 0x98D, 0x501,
+          0x176, 0xA56, 0x013, 0x4C5, 0x50C, 0x6CD, 0xBA9, 0xE29,
+          0x85E, 0xAA2, 0x804, 0x514, 0x266, 0x99C, 0x67D, 0x6CE,
+          0x0D0, 0x515, 0x19E, 0x12C, 0x1B0, 0x984, 0xD50, 0x954,
+          0x270, 0x07C, 0x2C1, 0xE62, 0x044, 0x40B, 0xECF, 0x206,
+          0x902, 0x89A, 0x6A0, 0x4CD, 0x554, 0x316, 0x888, 0x698,
+          0xAA1, 0x334, 0xCA3, 0x99E, 0x500, 0xF94, 0x314, 0x309,
+          0xBC5, 0x330, 0x5B6, 0x256, 0xD40, 0xC26, 0xF14, 0xCC0,
+          0x1F2, 0xE6A, 0x554, 0x3B3, 0x6CE, 0x0DC, 0xC95, 0x12C,
+          0xD10, 0x08E, 0x152, 0x820, 0x8AA, 0x18A, 0x453, 0x356,
+          0x620, 0x9E6, 0xA7A, 0x14D, 0x688, 0x049, 0xAA9, 0x6A0,
+          0x576, 0xA56, 0x013, 0x8AC, 0x450, 0xED4, 0x09A, 0x62A,
+          0x808, 0xF31, 0x031, 0x84E, 0xB55, 0x561, 0x30B, 0xD43,
+          0x486, 0xA66, 0xB6D, 0x40D, 0x0C5, 0x09A, 0x950, 0x0F9,
+          0x6A8, 0x576, 0xA56, 0x012, 0xA84, 0xE01, 0x1B0, 0x1C2,
+          0x755, 0x502, 0x6B0, 0x6B3, 0x552, 0xAA9, 0x58C, 0x111,
+          0x004, 0x882, 0x7C5, 0x3C3, 0x6A8, 0x5C2, 0x43C, 0x41B,
+          0x99A, 0x170, 0xAD3, 0x550, 0x2E1, 0x34D, 0x4B0, 0x8A2,
+          0x095, 0x44A, 0xD9C, 0x01F, 0x1F6, 0x6B4, 0x41B, 0x35A,
+          0x271, 0x213, 0x89A, 0x617, 0x1AB, 0x6A0, 0x656, 0x550,
+          0x255, 0x09C, 0x125, 0xA74, 0xB50, 0x271, 0x114, 0xD55,
+          0x154, 0x00F, 0x943, 0x142, 0xE83, 0x5AA, 0xA06, 0x561,
+          0x382, 0xA28, 0x576, 0xA56, 0x019, 0xDAB, 0x3B3, 0x834,
+          0x121, 0x55A, 0xAA8, 0x01F, 0x0B0, 0x798, 0x816, 0x8A1,
+          0x331, 0xAA1, 0x9DA, 0xB3B, 0x382, 0x6A5, 0x404, 0x798,
+          0x812, 0x41F, 0x713, 0x5AA, 0xA05, 0xC2B, 0x4D5, 0x409,
+          0x20F, 0x2A9, 0xC67, 0xD6C, 0xE0D, 0x155, 0x089, 0xC6A,
+          0x807, 0xC8A, 0x454, 0x335, 0xB6A, 0x051, 0x315, 0xD45,
+          0x100, 0x8BB, 0x52B, 0x009, 0xAA1, 0x241, 0xE8B, 0x182,
+          0x2B1, 0x2B0, 0x980, 0x8F5, 0x514, 0x154, 0x696, 0x706,
+          0xEAB, 0x9A7, 0x310, 0x4D3, 0x154, 0x043, 0x20D, 0x50A,
+          0x4CF, 0x2CC, 0xD35, 0x542, 0x733, 0x554, 0x0D6, 0xD38,
+          0xAA8, 0x179, 0x881, 0x6C2, 0x667, 0x007, 0xC7D, 0x9AD,
+          0x106, 0xCDA, 0xCD4, 0x435, 0x004, 0x335, 0x550, 0xC4C,
+          0xD69, 0x9F5, 0x352, 0x563, 0x044, 0xD54, 0xAC6, 0xA85,
+          0xA28, 0x4CC, 0x6A8, 0x08B, 0xB52, 0xB00, 0x9A6, 0x2A8,
+          0x636, 0x6DD, 0x4F1, 0x4C2, 0xF55, 0x140, 0x228, 0xA13,
+          0x34C, 0xE33, 0xEB6, 0x706, 0x828, 0xA8C, 0xF09, 0x60D,
+          0x84C, 0x26A, 0x84A, 0xA13, 0x803, 0xE16, 0x0F3, 0x102,
+          0x220, 0x5F6, 0x790, 0x348, 0x144, 0xD35, 0x026, 0x6AA,
+          0xA18, 0xB44, 0x434, 0xC55, 0x099, 0xA65, 0x1CC, 0xF28,
+          0x07C, 0xA18, 0xA18, 0x4DE, 0x299, 0x82D, 0xB12, 0xB6A,
+          0x061, 0x378, 0xA66, 0x00F, 0x973, 0x52A, 0xA1D, 0x9B6,
+          0x706, 0xE64, 0xA89, 0x668, 0x804, 0x70A, 0x941, 0x045,
+          0x50C, 0x522, 0x99A, 0xB31, 0x04F, 0x353, 0xD0A, 0x6B4,
+          0x402, 0x4D5, 0x4B5, 0x02B, 0xB52, 0xB00, 0x9C5, 0x622,
+          0x876, 0xA04, 0xD31, 0x540, 0x479, 0x881, 0x8C2, 0x75A,
+          0xAAB, 0x098, 0x5EA, 0x1A4, 0x353, 0x35B, 0x6A0, 0x686,
+          0x284, 0xD4A, 0x807, 0xCB5, 0x42B, 0xB52, 0xB00, 0x954,
+          0x270, 0x08D, 0x80E, 0x13A, 0xAA8, 0x135, 0x835, 0x9AA,
+          0x801, 0xF14, 0xF0D, 0xAA1, 0x709, 0x0F1, 0x06E, 0x668,
+          0x5C2, 0xB4D, 0x540, 0xB84, 0xD35, 0x2C2, 0x288, 0x255,
+          0x12B, 0x670, 0x07C, 0x7D9, 0xAD1, 0x06C, 0xD68, 0x9C4,
+          0x84E, 0x269, 0x85C, 0x6AD, 0xA81, 0x959, 0x540, 0x954,
+          0x270, 0x496, 0x9D2, 0xD40, 0x9C4, 0x453, 0x554, 0x550,
+          0x03E, 0x50C, 0x50B, 0xA0D, 0x6AA, 0x819, 0x584, 0xE0A,
+          0x8A1, 0x5DA, 0x958, 0x067, 0x6AC, 0xECE, 0x0D0, 0x485,
+          0x56A, 0xAA0, 0x07C, 0x2C1, 0xE62, 0x05A, 0x284, 0xCC6,
+          0xA86, 0x76A, 0xCEC, 0xE09, 0xA95, 0x011, 0xE62, 0x049,
+          0x07D, 0xC4D, 0x6AA, 0x817, 0x0AD, 0x355, 0x024, 0x83C,
+          0xAA7, 0x19F, 0x5B3, 0x834, 0x554, 0x227, 0x1AA, 0x01F,
+          0x229, 0x150, 0xCD6, 0xDA8, 0x144, 0xC57, 0x514, 0x402,
+          0x2ED, 0x4AC, 0x026, 0xA84, 0x907, 0xA2C, 0x608, 0xAC4,
+          0xAC2, 0x602, 0x3D5, 0x450, 0x551, 0xA59, 0xC1B, 0xAAE,
+          0x69C, 0xC41, 0x34C, 0x550, 0x10C, 0x835, 0x429, 0x33C,
+          0xB33, 0x4D5, 0x509, 0xCCD, 0x550, 0x35B, 0x4E2, 0xAA0,
+          0x5E6, 0x205, 0xB09, 0x99C, 0x09F
+        },
+        new int[] {
+          0xD54, 0x221, 0x154, 0x7CD, 0xBF3, 0x112, 0x89B, 0xC5E,
+          0x9CD, 0x07E, 0xFB6, 0x78F, 0x7FA, 0x16F, 0x377, 0x4B4,
+          0x62D, 0x475, 0xBC2, 0x861, 0xB72, 0x9D0, 0x76A, 0x5A1,
+          0x22A, 0xF74, 0xDBA, 0x8B1, 0x139, 0xDCD, 0x012, 0x293,
+          0x705, 0xA34, 0xDD5, 0x3D2, 0x7F8, 0x0A6, 0x89A, 0x346,
+          0xCE0, 0x690, 0x40E, 0xFF3, 0xC4D, 0x97F, 0x9C9, 0x016,
+          0x73A, 0x923, 0xBCE, 0xFA9, 0xE6A, 0xB92, 0x02A, 0x07C,
+          0x04B, 0x8D5, 0x753, 0x42E, 0x67E, 0x87C, 0xEE6, 0xD7D,
+          0x2BF, 0xFB2, 0xFF8, 0x42F, 0x4CB, 0x214, 0x779, 0x02D,
+          0x606, 0xA02, 0x08A, 0xD4F, 0xB87, 0xDDF, 0xC49, 0xB51,
+          0x0E9, 0xF89, 0xAEF, 0xC92, 0x383, 0x98D, 0x367, 0xBD3,
+          0xA55, 0x148, 0x9DB, 0x913, 0xC79, 0x6FF, 0x387, 0x6EA,
+          0x7FA, 0xC1B, 0x12D, 0x303, 0xBCA, 0x503, 0x0FB, 0xB14,
+          0x0D4, 0xAD1, 0xAFC, 0x9DD, 0x404, 0x145, 0x6E5, 0x8ED,
+          0xF94, 0xD72, 0x645, 0xA21, 0x1A8, 0xABF, 0xC03, 0x91E,
+          0xD53, 0x48C, 0x471, 0x4E4, 0x408, 0x33C, 0x5DF, 0x73D,
+          0xA2A, 0x454, 0xD77, 0xC48, 0x2F5, 0x96A, 0x9CF, 0x047,
+          0x611, 0xE92, 0xC2F, 0xA98, 0x56D, 0x919, 0x615, 0x535,
+          0x67A, 0x8C1, 0x2E2, 0xBC4, 0xBE8, 0x328, 0x04F, 0x257,
+          0x3F9, 0xFA5, 0x477, 0x12E, 0x94B, 0x116, 0xEF7, 0x65F,
+          0x6B3, 0x915, 0xC64, 0x9AF, 0xB6C, 0x6A2, 0x50D, 0xEA3,
+          0x26E, 0xC23, 0x817, 0xA42, 0x71A, 0x9DD, 0xDA8, 0x84D,
+          0x3F3, 0x85B, 0xB00, 0x1FC, 0xB0A, 0xC2F, 0x00C, 0x095,
+          0xC58, 0x0E3, 0x807, 0x962, 0xC4B, 0x29A, 0x6FC, 0x958,
+          0xD29, 0x59E, 0xB14, 0x95A, 0xEDE, 0xF3D, 0xFB8, 0x0E5,
+          0x348, 0x2E7, 0x38E, 0x56A, 0x410, 0x3B1, 0x4B0, 0x793,
+          0xAB7, 0x0BC, 0x648, 0x719, 0xE3E, 0xFB4, 0x3B4, 0xE5C,
+          0x950, 0xD2A, 0x50B, 0x76F, 0x8D2, 0x3C7, 0xECC, 0x87C,
+          0x53A, 0xBA7, 0x4C3, 0x148, 0x437, 0x820, 0xECD, 0x660,
+          0x095, 0x2F4, 0x661, 0x6A4, 0xB74, 0x5F3, 0x1D2, 0x7EC,
+          0x8E2, 0xA40, 0xA6F, 0xFC3, 0x3BE, 0x1E9, 0x52C, 0x233,
+          0x173, 0x4EF, 0xA7C, 0x40B, 0x14C, 0x88D, 0xF30, 0x8D9,
+          0xBDB, 0x0A6, 0x940, 0xD46, 0xB2B, 0x03E, 0x46A, 0x641,
+          0xF08, 0xAFF, 0x496, 0x68A, 0x7A4, 0x0BA, 0xD43, 0x515,
+          0xB26, 0xD8F, 0x05C, 0xD6E, 0xA2C, 0xF25, 0x628, 0x4E5,
+          0x81D, 0xA2A, 0x1FF, 0x302, 0xFBD, 0x6D9, 0x711, 0xD8B,
+          0xE5C, 0x5CF, 0x42E, 0x008, 0x863, 0xB6F, 0x1E1, 0x3DA,
+          0xACE, 0x82B, 0x2DB, 0x7EB, 0xC15, 0x79F, 0xA79, 0xDAF,
+          0x00D, 0x2F6, 0x0CE, 0x370, 0x7E8, 0x9E6, 0x89F, 0xAE9,
+          0x175, 0xA95, 0x06B, 0x9DF, 0xAFF, 0x45B, 0x823, 0xAA4,
+          0xC79, 0x773, 0x886, 0x854, 0x0A5, 0x6D1, 0xE55, 0xEBB,
+          0x518, 0xE50, 0xF8F, 0x8CC, 0x834, 0x388, 0xCD2, 0xFC1,
+          0xA55, 0x1F8, 0xD1F, 0xE08, 0xF93, 0x362, 0xA22, 0x9FA,
+          0xCE5, 0x3C3, 0xDD4, 0xC53, 0xB94, 0xAD0, 0x6EB, 0x68D,
+          0x660, 0x8FC, 0xBCD, 0x914, 0x16F, 0x4C0, 0x134, 0xE1A,
+          0x76F, 0x9CB, 0x660, 0xEA0, 0x320, 0x15A, 0xCE3, 0x7E8,
+          0x03E, 0xB9A, 0xC90, 0xA14, 0x256, 0x1A8, 0x639, 0x7C6,
+          0xA59, 0xA65, 0x956, 0x9E4, 0x592, 0x6A9, 0xCFF, 0x4DC,
+          0xAA3, 0xD2A, 0xFDE, 0xA87, 0xBF5, 0x9F0, 0xC32, 0x94F,
+          0x675, 0x9A6, 0x369, 0x648, 0x289, 0x823, 0x498, 0x574,
+          0x8D1, 0xA13, 0xD1A, 0xBB5, 0xA19, 0x7F7, 0x775, 0x138,
+          0x949, 0xA4C, 0xE36, 0x126, 0xC85, 0xE05, 0xFEE, 0x962,
+          0x36D, 0x08D, 0xC76, 0x1E1, 0x1EC, 0x8D7, 0x231, 0xB68,
+          0x03C, 0x1DE, 0x7DF, 0x2B1, 0x09D, 0xC81, 0xDA4, 0x8F7,
+          0x6B9, 0x947, 0x9B0
+        });
     // synthetic test cases
     testEncodeDecodeRandom(GenericGF.AZTEC_PARAM, 2, 5); // compact mode message
     testEncodeDecodeRandom(GenericGF.AZTEC_PARAM, 4, 6); // full mode message
@@ -406,7 +425,7 @@ public final class ReedSolomonTestCase extends Assert {
       }
     }
   }
-  
+
   private static void testEncodeDecodeRandom(GenericGF field, int dataSize, int ecSize) {
     assertTrue("Invalid data size for " + field, dataSize > 0 && dataSize <= field.getSize() - 3);
     assertTrue("Invalid ECC size for " + field, ecSize > 0 && ecSize + dataSize <= field.getSize());
@@ -429,12 +448,12 @@ public final class ReedSolomonTestCase extends Assert {
       testDecoder(field, dataWords, ecWords);
     }
   }
-  
+
   private static void testEncodeDecode(GenericGF field, int[] dataWords, int[] ecWords) {
     testEncoder(field, dataWords, ecWords);
     testDecoder(field, dataWords, ecWords);
   }
-  
+
   private static void testEncoder(GenericGF field, int[] dataWords, int[] ecWords) {
     ReedSolomonEncoder encoder = new ReedSolomonEncoder(field);
     int[] messageExpected = new int[dataWords.length + ecWords.length];
@@ -443,7 +462,7 @@ public final class ReedSolomonTestCase extends Assert {
     System.arraycopy(ecWords, 0, messageExpected, dataWords.length, ecWords.length);
     System.arraycopy(dataWords, 0, message, 0, dataWords.length);
     encoder.encode(message, ecWords.length);
-    assertDataEquals("Encode in " + field + " (" + dataWords.length + ',' + ecWords.length + ") failed", 
+    assertDataEquals("Encode in " + field + " (" + dataWords.length + ',' + ecWords.length + ") failed",
                      messageExpected, message);
   }
 
@@ -456,7 +475,7 @@ public final class ReedSolomonTestCase extends Assert {
     for (int j = 0; j < iterations; j++) {
       for (int i = 0; i < ecWords.length; i++) {
         if (i > 10 && i < ecWords.length / 2 - 10) {
-          // performance improvement - skip intermediate cases in long-running tests 
+          // performance improvement - skip intermediate cases in long-running tests
           i += ecWords.length / 10;
         }
         System.arraycopy(dataWords, 0, message, 0, dataWords.length);
@@ -466,16 +485,16 @@ public final class ReedSolomonTestCase extends Assert {
           decoder.decode(message, ecWords.length);
         } catch (ReedSolomonException e) {
           // fail only if maxErrors exceeded
-          assertTrue("Decode in " + field + " (" + dataWords.length + ',' + ecWords.length + ") failed at " + 
+          assertTrue("Decode in " + field + " (" + dataWords.length + ',' + ecWords.length + ") failed at " +
                          i + " errors: " + e,
                      i > maxErrors);
           // else stop
           break;
         }
         if (i < maxErrors) {
-          assertDataEquals("Decode in " + field + " (" + dataWords.length + ',' + ecWords.length + ") failed at " + 
+          assertDataEquals("Decode in " + field + " (" + dataWords.length + ',' + ecWords.length + ") failed at " +
                            i + " errors",
-                           dataWords, 
+                           dataWords,
                            message);
         }
       }
@@ -485,12 +504,12 @@ public final class ReedSolomonTestCase extends Assert {
   private static void assertDataEquals(String message, int[] expected, int[] received) {
     for (int i = 0; i < expected.length; i++) {
       if (expected[i] != received[i]) {
-        fail(message + ". Mismatch at " + i + ". Expected " + arrayToString(expected) + ", got " + 
+        fail(message + ". Mismatch at " + i + ". Expected " + arrayToString(expected) + ", got " +
              arrayToString(Arrays.copyOf(received, expected.length)));
       }
     }
   }
-  
+
   private static String arrayToString(int[] data) {
     StringBuilder sb = new StringBuilder("{");
     for (int i = 0; i < data.length; i++) {
diff --git a/core/src/test/java/com/google/zxing/datamatrix/DataMatrixBlackBox3TestCase.java b/core/src/test/java/com/google/zxing/datamatrix/DataMatrixBlackBox3TestCase.java
new file mode 100644
index 0000000..2796426
--- /dev/null
+++ b/core/src/test/java/com/google/zxing/datamatrix/DataMatrixBlackBox3TestCase.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2008 ZXing authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.zxing.datamatrix;
+
+import com.google.zxing.BarcodeFormat;
+import com.google.zxing.MultiFormatReader;
+import com.google.zxing.common.AbstractBlackBoxTestCase;
+
+/**
+ * @author gitlost
+ */
+public final class DataMatrixBlackBox3TestCase extends AbstractBlackBoxTestCase {
+
+  public DataMatrixBlackBox3TestCase() {
+    super("src/test/resources/blackbox/datamatrix-3", new MultiFormatReader(), BarcodeFormat.DATA_MATRIX);
+    addTest(18, 18, 0.0f);
+    addTest(17, 17, 90.0f);
+    addTest(18, 18, 180.0f);
+    addTest(18, 18, 270.0f);
+  }
+
+}
diff --git a/core/src/test/java/com/google/zxing/datamatrix/encoder/HighLevelEncodeTestCase.java b/core/src/test/java/com/google/zxing/datamatrix/encoder/HighLevelEncodeTestCase.java
index df17af6..4388659 100644
--- a/core/src/test/java/com/google/zxing/datamatrix/encoder/HighLevelEncodeTestCase.java
+++ b/core/src/test/java/com/google/zxing/datamatrix/encoder/HighLevelEncodeTestCase.java
@@ -16,15 +16,13 @@
 
 package com.google.zxing.datamatrix.encoder;
 
-import java.nio.charset.StandardCharsets;
-
 import junit.framework.ComparisonFailure;
 import org.junit.Assert;
-import org.junit.Ignore;
 import org.junit.Test;
+import java.nio.charset.StandardCharsets;
 
 /**
- * Tests for {@link HighLevelEncoder}.
+ * Tests for {@link HighLevelEncoder} and {@link MinimalEncoder}
  */
 public final class HighLevelEncodeTestCase extends Assert {
 
@@ -68,7 +66,7 @@ public final class HighLevelEncodeTestCase extends Assert {
     //230 shifts to C40 encodation, 254 unlatches, "else" case
   }
 
-  @Test  
+  @Test
   public void testC40EncodationBasic2() {
 
     String visualized = encodeHighLevel("AIMAIAB");
@@ -100,25 +98,25 @@ public final class HighLevelEncodeTestCase extends Assert {
     //"else" case
   }
 
-  @Test  
+  @Test
   public void testC40EncodationSpecExample() {
     //Example in Figure 1 in the spec
     String visualized = encodeHighLevel("A1B2C3D4E5F6G7H8I9J0K1L2");
     assertEquals("230 88 88 40 8 107 147 59 67 126 206 78 126 144 121 35 47 254", visualized);
   }
 
-  @Test  
+  @Test
   public void testC40EncodationSpecialCases1() {
 
     //Special tests avoiding ultra-long test strings because these tests are only used
     //with the 16x48 symbol (47 data codewords)
     useTestSymbols();
 
-    String visualized = encodeHighLevel("AIMAIMAIMAIMAIMAIM");
+    String visualized = encodeHighLevel("AIMAIMAIMAIMAIMAIM", false);
     assertEquals("230 91 11 91 11 91 11 91 11 91 11 91 11", visualized);
     //case "a": Unlatch is not required
 
-    visualized = encodeHighLevel("AIMAIMAIMAIMAIMAI");
+    visualized = encodeHighLevel("AIMAIMAIMAIMAIMAI", false);
     assertEquals("230 91 11 91 11 91 11 91 11 91 11 90 241", visualized);
     //case "b": Add trailing shift 0 and Unlatch is not required
 
@@ -136,7 +134,7 @@ public final class HighLevelEncodeTestCase extends Assert {
     //case "d": Skip Unlatch and write last character in ASCII
   }
 
-  @Test  
+  @Test
   public void testC40EncodationSpecialCases2() {
 
     String visualized = encodeHighLevel("AIMAIMAIMAIMAIMAIMAI");
@@ -144,7 +142,7 @@ public final class HighLevelEncodeTestCase extends Assert {
     //available > 2, rest = 2 --> unlatch and encode as ASCII
   }
 
-  @Test  
+  @Test
   public void testTextEncodation() {
 
     String visualized = encodeHighLevel("aimaimaim");
@@ -163,10 +161,10 @@ public final class HighLevelEncodeTestCase extends Assert {
     assertEquals("239 91 11 91 11 91 11 254 67 129", visualized);
 
     visualized = encodeHighLevel("aimaimaim{txt}\u0004");
-    assertEquals("239 91 11 91 11 91 11 16 218 236 107 181 69 254 129 237", visualized);
+    assertEquals("239 91 11 91 11 91 11 254 124 117 121 117 126 5 129 237", visualized);
   }
 
-  @Test  
+  @Test
   public void testX12Encodation() {
 
     //238 shifts to X12 encodation, 254 unlatches
@@ -188,7 +186,7 @@ public final class HighLevelEncodeTestCase extends Assert {
 
   }
 
-  @Test  
+  @Test
   public void testEDIFACTEncodation() {
 
     //240 shifts to EDIFACT encodation
@@ -223,7 +221,7 @@ public final class HighLevelEncodeTestCase extends Assert {
                  visualized);
   }
 
-  @Test  
+  @Test
   public void testBase256Encodation() {
 
     //231 shifts to Base256 encodation
@@ -239,10 +237,10 @@ public final class HighLevelEncodeTestCase extends Assert {
     assertEquals("33 153 235 36 129", visualized);
 
     visualized = encodeHighLevel("\u00ABäöüé\u00BB 234"); //Mixed Base256 + ASCII
-    assertEquals("231 51 108 59 226 126 1 104 99 153 53 129", visualized);
+    assertEquals("231 50 108 59 226 126 1 104 33 153 53 129", visualized);
 
     visualized = encodeHighLevel("\u00ABäöüé\u00BB 23£ 1234567890123456789");
-    assertEquals("231 55 108 59 226 126 1 104 99 10 161 167 185 142 164 186 208"
+    assertEquals("231 54 108 59 226 126 1 104 99 10 161 167 33 142 164 186 208"
                      + " 220 142 164 186 208 58 129 59 209 104 254 150 45", visualized);
 
     visualized = encodeHighLevel(createBinaryMessage(20));
@@ -283,46 +281,46 @@ public final class HighLevelEncodeTestCase extends Assert {
     }
   }
 
-  @Test  
+  @Test
   public void testUnlatchingFromC40() {
 
     String visualized = encodeHighLevel("AIMAIMAIMAIMaimaimaim");
     assertEquals("230 91 11 91 11 91 11 254 66 74 78 239 91 11 91 11 91 11", visualized);
   }
 
-  @Test  
+  @Test
   public void testUnlatchingFromText() {
 
     String visualized = encodeHighLevel("aimaimaimaim12345678");
     assertEquals("239 91 11 91 11 91 11 91 11 254 142 164 186 208 129 237", visualized);
   }
 
-  @Test  
+  @Test
   public void testHelloWorld() {
 
     String visualized = encodeHighLevel("Hello World!");
     assertEquals("73 239 116 130 175 123 148 64 158 233 254 34", visualized);
   }
 
-  @Test  
+  @Test
   public void testBug1664266() {
     //There was an exception and the encoder did not handle the unlatching from
     //EDIFACT encoding correctly
 
     String visualized = encodeHighLevel("CREX-TAN:h");
-    assertEquals("240 13 33 88 181 64 78 124 59 105", visualized);
+    assertEquals("68 83 70 89 46 85 66 79 59 105", visualized);
 
     visualized = encodeHighLevel("CREX-TAN:hh");
-    assertEquals("240 13 33 88 181 64 78 124 59 105 105 129", visualized);
+    assertEquals("68 83 70 89 46 85 66 79 59 105 105 129", visualized);
 
     visualized = encodeHighLevel("CREX-TAN:hhh");
-    assertEquals("240 13 33 88 181 64 78 124 59 105 105 105", visualized);
+    assertEquals("68 83 70 89 46 85 66 79 59 105 105 105", visualized);
   }
 
   @Test
   public void testX12Unlatch() {
     String visualized = encodeHighLevel("*DTCP01");
-    assertEquals("238 9 10 104 141 254 50 129", visualized);
+    assertEquals("43 69 85 68 81 131 129 56", visualized);
   }
 
   @Test
@@ -331,17 +329,17 @@ public final class HighLevelEncodeTestCase extends Assert {
     assertEquals("238 9 10 104 141", visualized);
   }
 
-  @Test  
+  @Test
   public void testBug3048549() {
     //There was an IllegalArgumentException for an illegal character here because
     //of an encoding problem of the character 0x0060 in Java source code.
 
     String visualized = encodeHighLevel("fiykmj*Rh2`,e6");
-    assertEquals("239 122 87 154 40 7 171 115 207 12 130 71 155 254 129 237", visualized);
+    assertEquals("103 106 122 108 110 107 43 83 105 51 97 45 102 55 129 237", visualized);
 
   }
 
-  @Test  
+  @Test
   public void testMacroCharacters() {
 
     String visualized = encodeHighLevel("[)>\u001E05\u001D5555\u001C6666\u001E\u0004");
@@ -353,31 +351,197 @@ public final class HighLevelEncodeTestCase extends Assert {
   public void testEncodingWithStartAsX12AndLatchToEDIFACTInTheMiddle() {
 
     String visualized = encodeHighLevel("*MEMANT-1F-MESTECH");
-    assertEquals("238 10 99 164 204 254 240 82 220 70 180 209 83 80 80 200", visualized);
+    assertEquals("240 168 209 77 4 229 45 196 107 77 21 53 5 12 135 192", visualized);
   }
 
-  @Ignore
-  @Test  
-  public void testDataURL() {
+  @Test
+  public void testX12AndEDIFACTSpecErrors() {
+    //X12 encoding error with spec conform float point comparisons in lookAheadTest()
+    String visualized = encodeHighLevel("AAAAAAAAAAA**\u00FCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
+    assertEquals("230 89 191 89 191 89 191 89 178 56 114 10 243 177 63 89 191 89 191 89 191 89 191 89 191 89 191 89 " +
+        "191 89 191 89 191 254 66 129", visualized);
+    //X12 encoding error with integer comparisons in lookAheadTest()
+    visualized = encodeHighLevel("AAAAAAAAAAAA0+****AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
+    assertEquals("238 89 191 89 191 89 191 89 191 254 240 194 186 170 170 160 65 4 16 65 4 16 65 4 16 65 4 16 65 4 " +
+        "16 65 4 16 65 4 16 65 124 129 167 62 212 107", visualized);
+    //EDIFACT encoding error with spec conform float point comparisons in lookAheadTest()
+    visualized = encodeHighLevel("AAAAAAAAAAA++++\u00FCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
+    assertEquals("230 89 191 89 191 89 191 254 66 66 44 44 44 44 235 125 230 89 191 89 191 89 191 89 191 89 191 89 " +
+        "191 89 191 89 191 89 191 89 191 254 129 17 167 62 212 107", visualized);
+    //EDIFACT encoding error with integer comparisons in lookAheadTest()
+    visualized = encodeHighLevel("++++++++++AAa0 0++++++++++++++++++++++++++++++");
+    assertEquals("240 174 186 235 174 186 235 174 176 65 124 98 240 194 12 43 174 186 235 174 186 235 174 186 235 " +
+        "174 186 235 174 186 235 174 186 235 174 186 235 173 240 129 167 62 212 107", visualized);
+    visualized = encodeHighLevel("AAAAAAAAAAAA*+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
+    assertEquals("230 89 191 89 191 89 191 89 191 7 170 64 191 89 191 89 191 89 191 89 191 89 191 89 191 89 191 89 " +
+        "191 89 191 66", visualized);
+    visualized = encodeHighLevel("AAAAAAAAAAA*0a0 *AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
+    assertEquals("230 89 191 89 191 89 191 89 178 56 227 6 228 7 183 89 191 89 191 89 191 89 191 89 191 89 191 89 " +
+        "191 89 191 89 191 254 66 66", visualized);
+
+  }
+  @Test
+  public void testSizes() {
+    int[] sizes = new int[2];
+    encodeHighLevel("A", sizes);
+    assertEquals(3, sizes[0]);
+    assertEquals(3, sizes[1]);
 
-    byte[] data = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A,
-        0x7E, 0x7F, (byte) 0x80, (byte) 0x81, (byte) 0x82};
-    String expected = encodeHighLevel(new String(data, StandardCharsets.ISO_8859_1));
-    String visualized = encodeHighLevel("url(data:text/plain;charset=iso-8859-1,"
-                                            + "%00%01%02%03%04%05%06%07%08%09%0A%7E%7F%80%81%82)");
-    assertEquals(expected, visualized);
-    assertEquals("1 2 3 4 5 6 7 8 9 10 11 231 153 173 67 218 112 7", visualized);
+    encodeHighLevel("AB", sizes);
+    assertEquals(3, sizes[0]);
+    assertEquals(3, sizes[1]);
+
+    encodeHighLevel("ABC", sizes);
+    assertEquals(3, sizes[0]);
+    assertEquals(3, sizes[1]);
+
+    encodeHighLevel("ABCD", sizes);
+    assertEquals(5, sizes[0]);
+    assertEquals(5, sizes[1]);
+
+    encodeHighLevel("ABCDE", sizes);
+    assertEquals(5, sizes[0]);
+    assertEquals(5, sizes[1]);
+
+    encodeHighLevel("ABCDEF", sizes);
+    assertEquals(5, sizes[0]);
+    assertEquals(5, sizes[1]);
+
+    encodeHighLevel("ABCDEFG", sizes);
+    assertEquals(8, sizes[0]);
+    assertEquals(8, sizes[1]);
+
+    encodeHighLevel("ABCDEFGH", sizes);
+    assertEquals(8, sizes[0]);
+    assertEquals(8, sizes[1]);
+
+    encodeHighLevel("ABCDEFGHI", sizes);
+    assertEquals(8, sizes[0]);
+    assertEquals(8, sizes[1]);
+
+    encodeHighLevel("ABCDEFGHIJ", sizes);
+    assertEquals(8, sizes[0]);
+    assertEquals(8, sizes[1]);
+
+    encodeHighLevel("a", sizes);
+    assertEquals(3, sizes[0]);
+    assertEquals(3, sizes[1]);
+
+    encodeHighLevel("ab", sizes);
+    assertEquals(3, sizes[0]);
+    assertEquals(3, sizes[1]);
+
+    encodeHighLevel("abc", sizes);
+    assertEquals(3, sizes[0]);
+    assertEquals(3, sizes[1]);
+
+    encodeHighLevel("abcd", sizes);
+    assertEquals(5, sizes[0]);
+    assertEquals(5, sizes[1]);
+
+    encodeHighLevel("abcdef", sizes);
+    assertEquals(5, sizes[0]);
+    assertEquals(5, sizes[1]);
+
+    encodeHighLevel("abcdefg", sizes);
+    assertEquals(8, sizes[0]);
+    assertEquals(8, sizes[1]);
+
+    encodeHighLevel("abcdefgh", sizes);
+    assertEquals(8, sizes[0]);
+    assertEquals(8, sizes[1]);
+
+    encodeHighLevel("+", sizes);
+    assertEquals(3, sizes[0]);
+    assertEquals(3, sizes[1]);
+
+    encodeHighLevel("++", sizes);
+    assertEquals(3, sizes[0]);
+    assertEquals(3, sizes[1]);
+
+    encodeHighLevel("+++", sizes);
+    assertEquals(3, sizes[0]);
+    assertEquals(3, sizes[1]);
+
+    encodeHighLevel("++++", sizes);
+    assertEquals(5, sizes[0]);
+    assertEquals(5, sizes[1]);
+
+    encodeHighLevel("+++++", sizes);
+    assertEquals(5, sizes[0]);
+    assertEquals(5, sizes[1]);
+
+    encodeHighLevel("++++++", sizes);
+    assertEquals(8, sizes[0]);
+    assertEquals(8, sizes[1]);
+
+    encodeHighLevel("+++++++", sizes);
+    assertEquals(8, sizes[0]);
+    assertEquals(8, sizes[1]);
+
+    encodeHighLevel("++++++++", sizes);
+    assertEquals(8, sizes[0]);
+    assertEquals(8, sizes[1]);
+
+    encodeHighLevel("+++++++++", sizes);
+    assertEquals(8, sizes[0]);
+    assertEquals(8, sizes[1]);
 
-    visualized = encodeHighLevel("url(data:;base64,flRlc3R+)");
-    assertEquals("127 85 102 116 117 127 129 56", visualized);
+    encodeHighLevel("\u00F0\u00F0" +
+        "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEF", sizes);
+    assertEquals(114, sizes[0]);
+    assertEquals(62, sizes[1]);
+  }
+
+  @Test
+  public void testECIs() {
+
+    String visualized = visualize(MinimalEncoder.encodeHighLevel("that particularly stands out to me is \u0625\u0650" +
+        "\u062C\u064E\u0651\u0627\u0635 (\u02BE\u0101\u1E63) \"pear\", suggested to have originated from Hebrew " +
+        "\u05D0\u05B7\u05D2\u05B8\u05BC\u05E1 (ag\u00E1s)"));
+    assertEquals("239 209 151 206 214 92 122 140 35 158 144 162 52 205 55 171 137 23 67 206 218 175 147 113 15 254" +
+        " 116 33 241 25 231 186 14 212 64 253 151 252 159 33 41 241 27 231 83 171 53 209 35 25 134 6 42 33 35 239 184" +
+        " 31 193 234 7 252 205 101 127 241 209 34 24 5 22 23 221 148 179 239 128 140 92 187 106 204 198 59 19 25 114" +
+        " 248 118 36 254 231 106 196 19 239 101 27 107 69 189 112 236 156 252 16 174 125 24 10 125 116 42 129",
+        visualized);
+
+    visualized = visualize(MinimalEncoder.encodeHighLevel("that particularly stands out to me is \u0625\u0650" +
+        "\u062C\u064E\u0651\u0627\u0635 (\u02BE\u0101\u1E63) \"pear\", suggested to have originated from Hebrew " +
+        "\u05D0\u05B7\u05D2\u05B8\u05BC\u05E1 (ag\u00E1s)", StandardCharsets.UTF_8, -1 , SymbolShapeHint.FORCE_NONE));
+    assertEquals("241 27 239 209 151 206 214 92 122 140 35 158 144 162 52 205 55 171 137 23 67 206 218 175 147 113" +
+        " 15 254 116 33 231 202 33 131 77 154 119 225 163 238 206 28 249 93 36 150 151 53 108 246 145 228 217 71" +
+        " 199 42 33 35 239 184 31 193 234 7 252 205 101 127 241 209 34 24 5 22 23 221 148 179 239 128 140 92 187 106" +
+        " 204 198 59 19 25 114 248 118 36 254 231 43 133 212 175 38 220 44 6 125 49 172 93 189 209 111 61 217 203 62" +
+        " 116 42 129 1 151 46 196 91 241 137 32 182 77 227 122 18 168 63 213 108 4 154 49 199 94 244 140 35 185 80",
+         visualized);
+  }
+
+  @Test
+  public void testPadding() {
+    int[] sizes = new int[2];
+    encodeHighLevel("IS010000000000000000000000S1118058599124123S21.2.250.1.213.1.4.8 S3FIRST NAMETEST S5MS618-06" +
+        "-1985S713201S4LASTNAMETEST", sizes);
+    assertEquals(86, sizes[0]);
+    assertEquals(86, sizes[1]);
+  }
+
+
+  private static void encodeHighLevel(String msg, int[] sizes) {
+    sizes[0] = HighLevelEncoder.encodeHighLevel(msg).length();
+    sizes[1] = MinimalEncoder.encodeHighLevel(msg).length();
   }
 
   private static String encodeHighLevel(String msg) {
+    return encodeHighLevel(msg, true);
+  }
+
+  private static String encodeHighLevel(String msg, boolean compareSizeToMinimalEncoder) {
     CharSequence encoded = HighLevelEncoder.encodeHighLevel(msg);
-    //DecodeHighLevel.decode(encoded);
+    CharSequence encoded2 = MinimalEncoder.encodeHighLevel(msg);
+    assertTrue(!compareSizeToMinimalEncoder || encoded2.length() <= encoded.length());
     return visualize(encoded);
   }
-  
+
   /**
    * Convert a string of char codewords into a different string which lists each character
    * using its decimal value.
diff --git a/core/src/test/java/com/google/zxing/inverted/InvertedDataMatrixBlackBoxTestCase.java b/core/src/test/java/com/google/zxing/inverted/InvertedDataMatrixBlackBoxTestCase.java
new file mode 100644
index 0000000..c2c942e
--- /dev/null
+++ b/core/src/test/java/com/google/zxing/inverted/InvertedDataMatrixBlackBoxTestCase.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2008 ZXing authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.zxing.inverted;
+
+import com.google.zxing.BarcodeFormat;
+import com.google.zxing.DecodeHintType;
+import com.google.zxing.MultiFormatReader;
+import com.google.zxing.common.AbstractBlackBoxTestCase;
+
+/**
+ * Inverted barcodes
+ */
+public final class InvertedDataMatrixBlackBoxTestCase extends AbstractBlackBoxTestCase {
+
+  public InvertedDataMatrixBlackBoxTestCase() {
+    super("src/test/resources/blackbox/inverted", new MultiFormatReader(), BarcodeFormat.DATA_MATRIX);
+    addHint(DecodeHintType.ALSO_INVERTED);
+    addTest(1, 1, 0.0f);
+    addTest(1, 1, 90.0f);
+    addTest(1, 1, 180.0f);
+    addTest(1, 1, 270.0f);
+  }
+
+}
diff --git a/core/src/test/java/com/google/zxing/inverted/NoHintInvertedDataMatrixBlackBoxTestCase.java b/core/src/test/java/com/google/zxing/inverted/NoHintInvertedDataMatrixBlackBoxTestCase.java
new file mode 100644
index 0000000..ca3a6b2
--- /dev/null
+++ b/core/src/test/java/com/google/zxing/inverted/NoHintInvertedDataMatrixBlackBoxTestCase.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2008 ZXing authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.zxing.inverted;
+
+import com.google.zxing.common.AbstractNegativeBlackBoxTestCase;
+
+/**
+ * Without hint inverted barcodes should not be found.
+ */
+public final class NoHintInvertedDataMatrixBlackBoxTestCase extends AbstractNegativeBlackBoxTestCase {
+
+  public NoHintInvertedDataMatrixBlackBoxTestCase() {
+    super("src/test/resources/blackbox/inverted");
+    addTest(0, 0.0f);
+    addTest(0, 90.0f);
+    addTest(0, 180.0f);
+    addTest(0, 270.0f);
+  }
+
+}
diff --git a/core/src/test/java/com/google/zxing/maxicode/MaxiCodeBlackBox1TestCase.java b/core/src/test/java/com/google/zxing/maxicode/MaxiCodeBlackBox1TestCase.java
new file mode 100644
index 0000000..ed02656
--- /dev/null
+++ b/core/src/test/java/com/google/zxing/maxicode/MaxiCodeBlackBox1TestCase.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2022 ZXing authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.zxing.maxicode;
+
+import com.google.zxing.BarcodeFormat;
+import com.google.zxing.DecodeHintType;
+import com.google.zxing.MultiFormatReader;
+import com.google.zxing.common.AbstractBlackBoxTestCase;
+
+/**
+ * Tests all characters in Set A.
+ *
+ * @author Daniel Gredler
+ * @see <a href="https://github.com/zxing/zxing/issues/1543">Defect 1543</a>
+ */
+public final class MaxiCodeBlackBox1TestCase extends AbstractBlackBoxTestCase {
+
+  public MaxiCodeBlackBox1TestCase() {
+    super("src/test/resources/blackbox/maxicode-1", new MultiFormatReader(), BarcodeFormat.MAXICODE);
+    addHint(DecodeHintType.PURE_BARCODE);
+    addTest(7, 7, 0.0f);
+  }
+
+}
diff --git a/core/src/test/java/com/google/zxing/maxicode/Maxicode1TestCase.java b/core/src/test/java/com/google/zxing/maxicode/Maxicode1TestCase.java
index 52927ca..6d3f49b 100644
--- a/core/src/test/java/com/google/zxing/maxicode/Maxicode1TestCase.java
+++ b/core/src/test/java/com/google/zxing/maxicode/Maxicode1TestCase.java
@@ -27,10 +27,7 @@ public final class Maxicode1TestCase extends AbstractBlackBoxTestCase {
 
   public Maxicode1TestCase() {
     super("src/test/resources/blackbox/maxicode-1", new MultiFormatReader(), BarcodeFormat.MAXICODE);
-    addTest(5, 5, 0.0f);
-    //addTest(5, 5, 90.0f);
-    //addTest(5, 5, 180.0f);
-    //addTest(5, 5, 270.0f);
+    addTest(7, 7, 0.0f);
   }
 
-}
\ No newline at end of file
+}
diff --git a/core/src/test/java/com/google/zxing/multi/qrcode/MultiQRCodeTestCase.java b/core/src/test/java/com/google/zxing/multi/qrcode/MultiQRCodeTestCase.java
index d95dcb8..711362f 100644
--- a/core/src/test/java/com/google/zxing/multi/qrcode/MultiQRCodeTestCase.java
+++ b/core/src/test/java/com/google/zxing/multi/qrcode/MultiQRCodeTestCase.java
@@ -66,7 +66,8 @@ public final class MultiQRCodeTestCase extends Assert {
     Collection<String> expectedContents = new HashSet<>();
     expectedContents.add("You earned the class a 5 MINUTE DANCE PARTY!!  Awesome!  Way to go!  Let's boogie!");
     expectedContents.add("You earned the class 5 EXTRA MINUTES OF RECESS!!  Fabulous!!  Way to go!!");
-    expectedContents.add("You get to SIT AT MRS. SIGMON'S DESK FOR A DAY!!  Awesome!!  Way to go!! Guess I better clean up! :)");
+    expectedContents.add(
+        "You get to SIT AT MRS. SIGMON'S DESK FOR A DAY!!  Awesome!!  Way to go!! Guess I better clean up! :)");
     expectedContents.add("You get to CREATE OUR JOURNAL PROMPT FOR THE DAY!  Yay!  Way to go!  ");
     assertEquals(expectedContents, barcodeContents);
   }
diff --git a/core/src/test/java/com/google/zxing/oned/Code128WriterTestCase.java b/core/src/test/java/com/google/zxing/oned/Code128WriterTestCase.java
index a12d44d..c2a5b04 100644
--- a/core/src/test/java/com/google/zxing/oned/Code128WriterTestCase.java
+++ b/core/src/test/java/com/google/zxing/oned/Code128WriterTestCase.java
@@ -22,12 +22,15 @@ import org.junit.Before;
 import org.junit.Test;
 
 import com.google.zxing.BarcodeFormat;
+import com.google.zxing.EncodeHintType;
 import com.google.zxing.Result;
 import com.google.zxing.Writer;
-import com.google.zxing.WriterException;
 import com.google.zxing.common.BitArray;
 import com.google.zxing.common.BitMatrix;
 
+import java.util.Map;
+import java.util.EnumMap;
+
 /**
  * Tests {@link Code128Writer}.
  */
@@ -57,39 +60,57 @@ public class Code128WriterTestCase extends Assert {
   }
 
   @Test
-  public void testEncodeWithFunc3() throws WriterException {
+  public void testEncodeWithFunc3() throws Exception {
     String toEncode = "\u00f3" + "123";
-    //                                                       "1"            "2"             "3"          check digit 51
-    String expected = QUIET_SPACE + START_CODE_B + FNC3 + "10011100110" + "11001110010" + "11001011100" + "11101000110" + STOP + QUIET_SPACE;
+    String expected = QUIET_SPACE + START_CODE_B + FNC3 +
+        // "1"            "2"             "3"            check digit 51
+        "10011100110" + "11001110010" + "11001011100" + "11101000110" + STOP + QUIET_SPACE;
 
-    BitMatrix result = writer.encode(toEncode, BarcodeFormat.CODE_128, 0, 0);
+    BitMatrix result = encode(toEncode, false, "123");
 
     String actual = BitMatrixTestCase.matrixToString(result);
     assertEquals(expected, actual);
+
+    int width = result.getWidth();
+    result = encode(toEncode, true, "123");
+
+    assertEquals(width, result.getWidth());
   }
 
   @Test
-  public void testEncodeWithFunc2() throws WriterException {
+  public void testEncodeWithFunc2() throws Exception {
     String toEncode = "\u00f2" + "123";
-    //                                                       "1"            "2"             "3"          check digit 56
-    String expected = QUIET_SPACE + START_CODE_B + FNC2 + "10011100110" + "11001110010" + "11001011100" + "11100010110" + STOP + QUIET_SPACE;
+    String expected = QUIET_SPACE + START_CODE_B + FNC2 +
+        // "1"            "2"             "3"             check digit 56
+        "10011100110" + "11001110010" + "11001011100" + "11100010110" + STOP + QUIET_SPACE;
 
-    BitMatrix result = writer.encode(toEncode, BarcodeFormat.CODE_128, 0, 0);
+    BitMatrix result = encode(toEncode, false, "123");
 
     String actual = BitMatrixTestCase.matrixToString(result);
     assertEquals(expected, actual);
+
+    int width = result.getWidth();
+    result = encode(toEncode, true, "123");
+
+    assertEquals(width, result.getWidth());
   }
 
   @Test
-  public void testEncodeWithFunc1() throws WriterException {
+  public void testEncodeWithFunc1() throws Exception {
     String toEncode = "\u00f1" + "123";
-    //                                                       "12"                           "3"          check digit 92
-    String expected = QUIET_SPACE + START_CODE_C + FNC1 + "10110011100" + SWITCH_CODE_B + "11001011100" + "10101111000" + STOP + QUIET_SPACE;
+    String expected = QUIET_SPACE + START_CODE_C + FNC1 +
+        // "12"                           "3"            check digit 92
+        "10110011100" + SWITCH_CODE_B + "11001011100" + "10101111000" + STOP + QUIET_SPACE;
 
-    BitMatrix result = writer.encode(toEncode, BarcodeFormat.CODE_128, 0, 0);
+    BitMatrix result = encode(toEncode, false, "123");
 
     String actual = BitMatrixTestCase.matrixToString(result);
     assertEquals(expected, actual);
+
+    int width = result.getWidth();
+    result = encode(toEncode, true, "123");
+
+    assertEquals(width, result.getWidth());
   }
 
   @Test
@@ -97,58 +118,242 @@ public class Code128WriterTestCase extends Assert {
     String toEncode = "\u00f1" + "10958" + "\u00f1" + "17160526";
     String expected = "1095817160526";
 
-    BitMatrix encResult = writer.encode(toEncode, BarcodeFormat.CODE_128, 0, 0);
-    BitArray row = encResult.getRow(0, null);
-    Result rtResult = reader.decodeRow(0, row, null);
-    String actual = rtResult.getText();
-    assertEquals(expected, actual);
+    BitMatrix encResult = encode(toEncode, false, expected);
+
+    int width = encResult.getWidth();
+    encResult = encode(toEncode, true, expected);
+    //Compact encoding has one latch less and encodes as STARTA,FNC1,1,CODEC,09,58,FNC1,17,16,05,26
+    assertEquals(width, encResult.getWidth() + 11);
   }
 
   @Test
-  public void testEncodeWithFunc4() throws WriterException {
+  public void testLongCompact() throws Exception {
+    //test longest possible input
+    String toEncode = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
+    encode(toEncode, true, toEncode);
+  }
+
+  @Test
+  public void testShift() throws Exception {
+    //compare fast to compact
+    String toEncode = "a\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\n";
+    BitMatrix result = encode(toEncode, false, toEncode);
+
+    int width = result.getWidth();
+    result = encode(toEncode, true, toEncode);
+
+    //big difference since the fast algoritm doesn't make use of SHIFT
+    assertEquals(width, result.getWidth() + 253);
+  }
+
+  @Test
+  public void testDigitMixCompaction() throws Exception {
+    //compare fast to compact
+    String toEncode = "A1A12A123A1234A12345AA1AA12AA123AA1234AA1235";
+    BitMatrix result = encode(toEncode, false, toEncode);
+
+    int width = result.getWidth();
+    result = encode(toEncode, true, toEncode);
+
+    //very good, no difference
+    assertEquals(width, result.getWidth());
+  }
+
+  @Test
+  public void testCompaction1() throws Exception {
+    //compare fast to compact
+    String toEncode = "AAAAAAAAAAA12AAAAAAAAA";
+    BitMatrix result = encode(toEncode, false, toEncode);
+
+    int width = result.getWidth();
+    result = encode(toEncode, true, toEncode);
+
+    //very good, no difference
+    assertEquals(width, result.getWidth());
+  }
+
+  @Test
+  public void testCompaction2() throws Exception {
+    //compare fast to compact
+    String toEncode = "AAAAAAAAAAA1212aaaaaaaaa";
+    BitMatrix result = encode(toEncode, false, toEncode);
+
+    int width = result.getWidth();
+    result = encode(toEncode, true, toEncode);
+
+    //very good, no difference
+    assertEquals(width, result.getWidth());
+  }
+
+  @Test
+  public void testEncodeWithFunc4() throws Exception {
     String toEncode = "\u00f4" + "123";
-    //                                                       "1"            "2"             "3"          check digit 59
-    String expected = QUIET_SPACE + START_CODE_B + FNC4B + "10011100110" + "11001110010" + "11001011100" + "11100011010" + STOP + QUIET_SPACE;
+    String expected = QUIET_SPACE + START_CODE_B + FNC4B +
+        // "1"            "2"             "3"            check digit 59
+        "10011100110" + "11001110010" + "11001011100" + "11100011010" + STOP + QUIET_SPACE;
 
-    BitMatrix result = writer.encode(toEncode, BarcodeFormat.CODE_128, 0, 0);
+    BitMatrix result = encode(toEncode, false, null);
 
     String actual = BitMatrixTestCase.matrixToString(result);
     assertEquals(expected, actual);
+
+    int width = result.getWidth();
+    result = encode(toEncode, true, null);
+    assertEquals(width, result.getWidth());
   }
 
   @Test
   public void testEncodeWithFncsAndNumberInCodesetA() throws Exception {
     String toEncode = "\n" + "\u00f1" + "\u00f4" + "1" + "\n";
 
-    String expected = QUIET_SPACE + START_CODE_A + LF + FNC1 + FNC4A + "10011100110" + LF + "10101111000" + STOP + QUIET_SPACE;
+    String expected = QUIET_SPACE + START_CODE_A + LF + FNC1 + FNC4A +
+        "10011100110" + LF + "10101111000" + STOP + QUIET_SPACE;
 
-    BitMatrix result = writer.encode(toEncode, BarcodeFormat.CODE_128, 0, 0);
+    BitMatrix result = encode(toEncode, false, null);
 
     String actual = BitMatrixTestCase.matrixToString(result);
 
     assertEquals(expected, actual);
+
+    int width = result.getWidth();
+    result = encode(toEncode, true, null);
+    assertEquals(width, result.getWidth());
   }
 
   @Test
   public void testEncodeSwitchBetweenCodesetsAAndB() throws Exception {
     // start with A switch to B and back to A
-    //                                                      "\0"            "A"             "B"             Switch to B     "a"             "b"             Switch to A     "\u0010"        check digit
-    testEncode("\0ABab\u0010", QUIET_SPACE + START_CODE_A + "10100001100" + "10100011000" + "10001011000" + SWITCH_CODE_B + "10010110000" + "10010000110" + SWITCH_CODE_A + "10100111100" + "11001110100" + STOP + QUIET_SPACE);
+    testEncode("\0ABab\u0010", QUIET_SPACE + START_CODE_A +
+        // "\0"            "A"             "B"             Switch to B     "a"             "b"
+        "10100001100" + "10100011000" + "10001011000" + SWITCH_CODE_B + "10010110000" + "10010000110" +
+        // Switch to A    "\u0010"        check digit
+        SWITCH_CODE_A + "10100111100" + "11001110100" + STOP + QUIET_SPACE);
 
     // start with B switch to A and back to B
-    //                                                "a"             "b"             Switch to A     "\0             "Switch to B"   "a"             "b"             check digit
-    testEncode("ab\0ab", QUIET_SPACE + START_CODE_B + "10010110000" + "10010000110" + SWITCH_CODE_A + "10100001100" + SWITCH_CODE_B + "10010110000" + "10010000110" + "11010001110" + STOP + QUIET_SPACE);
+    // the compact encoder encodes this shorter as STARTB,a,b,SHIFT,NUL,a,b
+    testEncode("ab\0ab", QUIET_SPACE + START_CODE_B +
+        //  "a"             "b"            Switch to A     "\0"           Switch to B
+        "10010110000" + "10010000110" + SWITCH_CODE_A + "10100001100" + SWITCH_CODE_B +
+        //  "a"             "b"            check digit
+        "10010110000" + "10010000110" + "11010001110" + STOP + QUIET_SPACE);
   }
-  
-  private void testEncode(String toEncode, String expected) throws Exception {
-    BitMatrix result = writer.encode(toEncode, BarcodeFormat.CODE_128, 0, 0);
 
+  private void testEncode(String toEncode, String expected) throws Exception {
+    BitMatrix result = encode(toEncode, false, toEncode);
     String actual = BitMatrixTestCase.matrixToString(result);
     assertEquals(toEncode, expected, actual);
-    
-    BitArray row = result.getRow(0, null);
-    Result rtResult = reader.decodeRow(0, row, null);
-    String actualRoundtripResultText = rtResult.getText();
-    assertEquals(toEncode, actualRoundtripResultText);
+
+
+    int width = result.getWidth();
+    result = encode(toEncode, true, toEncode);
+    assertTrue(result.getWidth() <= width);
+
+  }
+
+  @Test(expected = IllegalArgumentException.class)
+  public void testEncodeWithForcedCodeSetFailureCodeSetABadCharacter() throws Exception {
+    // Lower case characters should not be accepted when the code set is forced to A.
+    String toEncode = "ASDFx0123";
+
+    Map<EncodeHintType, Object> hints = new EnumMap<>(EncodeHintType.class);
+    hints.put(EncodeHintType.FORCE_CODE_SET, "A");
+    writer.encode(toEncode, BarcodeFormat.CODE_128, 0, 0, hints);
+  }
+
+  @Test(expected = IllegalArgumentException.class)
+  public void testEncodeWithForcedCodeSetFailureCodeSetBBadCharacter() throws Exception {
+    String toEncode = "ASdf\00123"; // \0 (ascii value 0)
+    // Characters with ASCII value below 32 should not be accepted when the code set is forced to B.
+
+    Map<EncodeHintType, Object> hints = new EnumMap<>(EncodeHintType.class);
+    hints.put(EncodeHintType.FORCE_CODE_SET, "B");
+    writer.encode(toEncode, BarcodeFormat.CODE_128, 0, 0, hints);
+  }
+
+  @Test(expected = IllegalArgumentException.class)
+  public void testEncodeWithForcedCodeSetFailureCodeSetCBadCharactersNonNum() throws Exception {
+    String toEncode = "123a5678";
+    // Non-digit characters should not be accepted when the code set is forced to C.
+
+    Map<EncodeHintType, Object> hints = new EnumMap<>(EncodeHintType.class);
+    hints.put(EncodeHintType.FORCE_CODE_SET, "C");
+    writer.encode(toEncode, BarcodeFormat.CODE_128, 0, 0, hints);
+  }
+
+  @Test(expected = IllegalArgumentException.class)
+  public void testEncodeWithForcedCodeSetFailureCodeSetCBadCharactersFncCode() throws Exception {
+    String toEncode = "123\u00f2a678";
+    // Function codes other than 1 should not be accepted when the code set is forced to C.
+
+    Map<EncodeHintType, Object> hints = new EnumMap<>(EncodeHintType.class);
+    hints.put(EncodeHintType.FORCE_CODE_SET, "C");
+    writer.encode(toEncode, BarcodeFormat.CODE_128, 0, 0, hints);
+  }
+
+  @Test(expected = IllegalArgumentException.class)
+  public void testEncodeWithForcedCodeSetFailureCodeSetCWrongAmountOfDigits() throws Exception {
+    String toEncode = "123456789";
+    // An uneven amount of digits should not be accepted when the code set is forced to C.
+
+    Map<EncodeHintType, Object> hints = new EnumMap<>(EncodeHintType.class);
+    hints.put(EncodeHintType.FORCE_CODE_SET, "C");
+    writer.encode(toEncode, BarcodeFormat.CODE_128, 0, 0, hints);
+  }
+
+  @Test
+  public void testEncodeWithForcedCodeSetFailureCodeSetA() throws Exception {
+    String toEncode = "AB123";
+    //                          would default to B   "A"             "B"             "1"
+    String expected = QUIET_SPACE + START_CODE_A + "10100011000" + "10001011000" + "10011100110" +
+        // "2"             "3"           check digit 10
+        "11001110010" + "11001011100" + "11001000100" + STOP + QUIET_SPACE;
+
+    Map<EncodeHintType, Object> hints = new EnumMap<>(EncodeHintType.class);
+    hints.put(EncodeHintType.FORCE_CODE_SET, "A");
+    BitMatrix result = writer.encode(toEncode, BarcodeFormat.CODE_128, 0, 0, hints);
+
+    String actual = BitMatrixTestCase.matrixToString(result);
+    assertEquals(expected, actual);
+  }
+
+  @Test
+  public void testEncodeWithForcedCodeSetFailureCodeSetB() throws Exception {
+    String toEncode = "1234";
+    //                          would default to C   "1"             "2"             "3"
+    String expected = QUIET_SPACE + START_CODE_B + "10011100110" + "11001110010" + "11001011100" +
+        // "4"           check digit 88
+        "11001001110" + "11110010010" + STOP + QUIET_SPACE;
+
+    Map<EncodeHintType, Object> hints = new EnumMap<>(EncodeHintType.class);
+    hints.put(EncodeHintType.FORCE_CODE_SET, "B");
+    BitMatrix result = writer.encode(toEncode, BarcodeFormat.CODE_128, 0, 0, hints);
+
+    String actual = BitMatrixTestCase.matrixToString(result);
+    assertEquals(expected, actual);
+  }
+
+  private BitMatrix encode(String toEncode, boolean compact, String expectedLoopback) throws Exception {
+    Map<EncodeHintType, Object> hints = new EnumMap<>(EncodeHintType.class);
+    if (compact) {
+      hints.put(EncodeHintType.CODE128_COMPACT, Boolean.TRUE);
+    }
+    BitMatrix encResult = writer.encode(toEncode, BarcodeFormat.CODE_128, 0, 0, hints);
+    if (expectedLoopback != null) {
+      BitArray row = encResult.getRow(0, null);
+      Result rtResult = reader.decodeRow(0, row, null);
+      String actual = rtResult.getText();
+      assertEquals(expectedLoopback, actual);
+    }
+    if (compact) {
+      //check that what is encoded compactly yields the same on loopback as what was encoded fast.
+      BitArray row = encResult.getRow(0, null);
+      Result rtResult = reader.decodeRow(0, row, null);
+      String actual = rtResult.getText();
+      BitMatrix encResultFast = writer.encode(toEncode, BarcodeFormat.CODE_128, 0, 0);
+      row = encResultFast.getRow(0, null);
+      rtResult = reader.decodeRow(0, row, null);
+      assertEquals(rtResult.getText(), actual);
+    }
+    return encResult;
   }
 }
diff --git a/core/src/test/java/com/google/zxing/oned/Code39ExtendedModeTestCase.java b/core/src/test/java/com/google/zxing/oned/Code39ExtendedModeTestCase.java
index 5ed5056..1a931f9 100644
--- a/core/src/test/java/com/google/zxing/oned/Code39ExtendedModeTestCase.java
+++ b/core/src/test/java/com/google/zxing/oned/Code39ExtendedModeTestCase.java
@@ -31,8 +31,9 @@ import com.google.zxing.Result;
  */
 public final class Code39ExtendedModeTestCase extends Assert {
 
+  @SuppressWarnings("checkstyle:lineLength")
   @Test
-  public void testDecodeExtendedMode() throws Exception {
+  public void testDecodeExtendedMode() throws FormatException, ChecksumException, NotFoundException {
     doTest("\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f",
            "000001001011011010101001001001011001010101101001001001010110101001011010010010010101011010010110100100100101011011010010101001001001010101011001011010010010010101101011001010100100100101010110110010101001001001010101010011011010010010010101101010011010100100100101010110100110101001001001010101011001101010010010010101101010100110100100100101010110101001101001001001010110110101001010010010010101010110100110100100100101011010110100101001001001010101101101001010010010010101010101100110100100100101011010101100101001001001010101101011001010010010010101010110110010100100100101011001010101101001001001010100110101011010010010010101100110101010100100100101010010110101101001001001010110010110101010010010010101001101101010101001001001011010100101101010010010010101101001011010100100100101101101001010101001001001010101100101101010010010010110101100101010010110110100000");
     doTest(" !\"#$%&'()*+,-./0123456789:;<=>?",
@@ -42,8 +43,9 @@ public final class Code39ExtendedModeTestCase extends Assert {
     doTest("`abcdefghijklmnopqrstuvwxyz{|}~",
            "000001001011011010101001001001011001101010101001010010010110101001011010010100100101011010010110100101001001011011010010101001010010010101011001011010010100100101101011001010100101001001010110110010101001010010010101010011011010010100100101101010011010100101001001010110100110101001010010010101011001101010010100100101101010100110100101001001010110101001101001010010010110110101001010010100100101010110100110100101001001011010110100101001010010010101101101001010010100100101010101100110100101001001011010101100101001010010010101101011001010010100100101010110110010100101001001011001010101101001010010010100110101011010010100100101100110101010100101001001010010110101101001010010010110010110101010010100100101001101101010101001001001010110110100101010010010010101010110011010100100100101101010110010101001001001010110101100101010010010010101011011001010010110110100000");
   }
-  
-  private static void doTest(String expectedResult, String encodedResult) throws FormatException, ChecksumException, NotFoundException {
+
+  private static void doTest(String expectedResult, String encodedResult)
+      throws FormatException, ChecksumException, NotFoundException {
     Code39Reader sut = new Code39Reader(false, true);
     BitMatrix matrix = BitMatrix.parse(encodedResult, "1", "0");
     BitArray row = new BitArray(matrix.getWidth());
@@ -52,4 +54,4 @@ public final class Code39ExtendedModeTestCase extends Assert {
     assertEquals(expectedResult, result.getText());
   }
 
-}
\ No newline at end of file
+}
diff --git a/core/src/test/java/com/google/zxing/oned/Code39WriterTestCase.java b/core/src/test/java/com/google/zxing/oned/Code39WriterTestCase.java
index bcab736..669b863 100644
--- a/core/src/test/java/com/google/zxing/oned/Code39WriterTestCase.java
+++ b/core/src/test/java/com/google/zxing/oned/Code39WriterTestCase.java
@@ -27,6 +27,7 @@ import org.junit.Test;
  */
 public final class Code39WriterTestCase extends Assert {
 
+  @SuppressWarnings("checkstyle:lineLength")
   @Test
   public void testEncode() {
     doTest("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",
diff --git a/core/src/test/java/com/google/zxing/oned/Code93ReaderTestCase.java b/core/src/test/java/com/google/zxing/oned/Code93ReaderTestCase.java
index 48a0f5c..1a6538b 100644
--- a/core/src/test/java/com/google/zxing/oned/Code93ReaderTestCase.java
+++ b/core/src/test/java/com/google/zxing/oned/Code93ReaderTestCase.java
@@ -31,13 +31,15 @@ import com.google.zxing.Result;
  */
 public final class Code93ReaderTestCase extends Assert {
 
+  @SuppressWarnings("checkstyle:lineLength")
   @Test
-  public void testDecode() throws Exception {
+  public void testDecode() throws FormatException, ChecksumException, NotFoundException {
     doTest("Code93!\n$%/+ :\u001b;[{\u007f\u0000@`\u007f\u007f\u007f",
            "0000001010111101101000101001100101001011001001100101100101001001100101100100101000010101010000101110101101101010001001001101001101001110010101101011101011011101011101101110100101110101101001110101110110101101010001110110101100010101110110101000110101110110101000101101110110101101001101110110101100101101110110101100110101110110101011011001110110101011001101110110101001101101110110101001110101001100101101010001010111101111");
   }
 
-  private static void doTest(String expectedResult, String encodedResult) throws FormatException, ChecksumException, NotFoundException {
+  private static void doTest(String expectedResult, String encodedResult)
+      throws FormatException, ChecksumException, NotFoundException {
     Code93Reader sut = new Code93Reader();
     BitMatrix matrix = BitMatrix.parse(encodedResult, "1", "0");
     BitArray row = new BitArray(matrix.getWidth());
diff --git a/core/src/test/java/com/google/zxing/oned/EAN13WriterTestCase.java b/core/src/test/java/com/google/zxing/oned/EAN13WriterTestCase.java
index 9217843..4d49499 100644
--- a/core/src/test/java/com/google/zxing/oned/EAN13WriterTestCase.java
+++ b/core/src/test/java/com/google/zxing/oned/EAN13WriterTestCase.java
@@ -29,14 +29,16 @@ public final class EAN13WriterTestCase extends Assert {
 
   @Test
   public void testEncode() {
-    String testStr = "00001010001011010011101100110010011011110100111010101011001101101100100001010111001001110100010010100000";
+    String testStr =
+        "00001010001011010011101100110010011011110100111010101011001101101100100001010111001001110100010010100000";
     BitMatrix result = new EAN13Writer().encode("5901234123457", BarcodeFormat.EAN_13, testStr.length(), 0);
     assertEquals(testStr, BitMatrixTestCase.matrixToString(result));
   }
 
   @Test
   public void testAddChecksumAndEncode() {
-    String testStr = "00001010001011010011101100110010011011110100111010101011001101101100100001010111001001110100010010100000";
+    String testStr =
+        "00001010001011010011101100110010011011110100111010101011001101101100100001010111001001110100010010100000";
     BitMatrix result = new EAN13Writer().encode("590123412345", BarcodeFormat.EAN_13, testStr.length(), 0);
     assertEquals(testStr, BitMatrixTestCase.matrixToString(result));
   }
diff --git a/core/src/test/java/com/google/zxing/oned/UPCAWriterTestCase.java b/core/src/test/java/com/google/zxing/oned/UPCAWriterTestCase.java
index 73fe982..b444479 100644
--- a/core/src/test/java/com/google/zxing/oned/UPCAWriterTestCase.java
+++ b/core/src/test/java/com/google/zxing/oned/UPCAWriterTestCase.java
@@ -30,14 +30,16 @@ public final class UPCAWriterTestCase extends Assert {
 
   @Test
   public void testEncode() {
-    String testStr = "00001010100011011011101100010001011010111101111010101011100101110100100111011001101101100101110010100000";
+    String testStr =
+        "00001010100011011011101100010001011010111101111010101011100101110100100111011001101101100101110010100000";
     BitMatrix result = new UPCAWriter().encode("485963095124", BarcodeFormat.UPC_A, testStr.length(), 0);
     assertEquals(testStr, BitMatrixTestCase.matrixToString(result));
   }
 
   @Test
   public void testAddChecksumAndEncode() {
-    String testStr = "00001010011001001001101111010100011011000101011110101010001001001000111010011100101100110110110010100000";
+    String testStr =
+        "00001010011001001001101111010100011011000101011110101010001001001000111010011100101100110110110010100000";
     BitMatrix result = new UPCAWriter().encode("12345678901", BarcodeFormat.UPC_A, testStr.length(), 0);
     assertEquals(testStr, BitMatrixTestCase.matrixToString(result));
   }
diff --git a/core/src/test/java/com/google/zxing/oned/rss/expanded/BinaryUtilTest.java b/core/src/test/java/com/google/zxing/oned/rss/expanded/BinaryUtilTest.java
index a7adf5f..f7be304 100644
--- a/core/src/test/java/com/google/zxing/oned/rss/expanded/BinaryUtilTest.java
+++ b/core/src/test/java/com/google/zxing/oned/rss/expanded/BinaryUtilTest.java
@@ -38,7 +38,7 @@ import java.util.regex.Pattern;
  */
 public final class BinaryUtilTest extends Assert {
 
-   private static final Pattern SPACE = Pattern.compile(" ");
+  private static final Pattern SPACE = Pattern.compile(" ");
 
   @Test
   public void testBuildBitArrayFromString() {
diff --git a/core/src/test/java/com/google/zxing/oned/rss/expanded/RSSExpandedBlackBox3TestCase.java b/core/src/test/java/com/google/zxing/oned/rss/expanded/RSSExpandedBlackBox3TestCase.java
index 002ce69..6117d6e 100644
--- a/core/src/test/java/com/google/zxing/oned/rss/expanded/RSSExpandedBlackBox3TestCase.java
+++ b/core/src/test/java/com/google/zxing/oned/rss/expanded/RSSExpandedBlackBox3TestCase.java
@@ -34,11 +34,11 @@ import com.google.zxing.common.AbstractBlackBoxTestCase;
  * A test of {@link RSSExpandedReader} against a fixed test set of images.
  */
 public final class RSSExpandedBlackBox3TestCase extends AbstractBlackBoxTestCase {
-    
-    public RSSExpandedBlackBox3TestCase() {
-        super("src/test/resources/blackbox/rssexpanded-3", new MultiFormatReader(), BarcodeFormat.RSS_EXPANDED);
-        addTest(117, 117, 0.0f);
-        addTest(117, 117, 180.0f);
-    }
+
+  public RSSExpandedBlackBox3TestCase() {
+    super("src/test/resources/blackbox/rssexpanded-3", new MultiFormatReader(), BarcodeFormat.RSS_EXPANDED);
+    addTest(117, 117, 0.0f);
+    addTest(117, 117, 180.0f);
+  }
 }
-    
+
diff --git a/core/src/test/java/com/google/zxing/oned/rss/expanded/RSSExpandedImage2binaryTestCase.java b/core/src/test/java/com/google/zxing/oned/rss/expanded/RSSExpandedImage2binaryTestCase.java
index fa56ea1..6436123 100644
--- a/core/src/test/java/com/google/zxing/oned/rss/expanded/RSSExpandedImage2binaryTestCase.java
+++ b/core/src/test/java/com/google/zxing/oned/rss/expanded/RSSExpandedImage2binaryTestCase.java
@@ -52,8 +52,8 @@ public final class RSSExpandedImage2binaryTestCase extends Assert {
   @Test
   public void testDecodeRow2binary1() throws Exception {
     // (11)100224(17)110224(3102)000100
-    assertCorrectImage2binary(
-        "1.png", " ...X...X .X....X. .XX...X. X..X...X ...XX.X. ..X.X... ..X.X..X ...X..X. X.X....X .X....X. .....X.. X...X...");
+    assertCorrectImage2binary("1.png",
+        " ...X...X .X....X. .XX...X. X..X...X ...XX.X. ..X.X... ..X.X..X ...X..X. X.X....X .X....X. .....X.. X...X...");
   }
 
   @Test
@@ -82,18 +82,20 @@ public final class RSSExpandedImage2binaryTestCase extends Assert {
         "5.png", " ..X.X... .XXXX.X. XX..XXXX ....XX.. X....... ....X... ....X..X .XX.");
   }
 
+  @SuppressWarnings("checkstyle:lineLength")
   @Test
   public void testDecodeRow2binary10() throws Exception {
     // (01)98898765432106(15)991231(3103)001750(10)12A(422)123(21)123456(423)0123456789012
-    assertCorrectImage2binary(
-        "10.png", " .X.XX..X XX.XXXX. .XXX.XX. XX..X... .XXXXX.. XX.X..X. ..XX...X XX.X.... X.X.X.X. X.X..X.X .X....X. XX...X.. ...XX.X. .XXXXXX. .X..XX.. X.X.X... .X...... XXXX.... XX.XX... XXXXX.X. ...XXXXX .....X.X ...X.... X.XXX..X X.X.X... XX.XX..X .X..X..X .X.X.X.X X.XX...X .XX.XXX. XXX.X.XX ..X.");
+    assertCorrectImage2binary("10.png",
+        " .X.XX..X XX.XXXX. .XXX.XX. XX..X... .XXXXX.. XX.X..X. ..XX...X XX.X.... X.X.X.X. X.X..X.X .X....X. XX...X.. ...XX.X. .XXXXXX. .X..XX.. X.X.X... .X...... XXXX.... XX.XX... XXXXX.X. ...XXXXX .....X.X ...X.... X.XXX..X X.X.X... XX.XX..X .X..X..X .X.X.X.X X.XX...X .XX.XXX. XXX.X.XX ..X.");
   }
 
+  @SuppressWarnings("checkstyle:lineLength")
   @Test
   public void testDecodeRow2binary11() throws Exception {
     // (01)98898765432106(15)991231(3103)001750(10)12A(422)123(21)123456
-    assertCorrectImage2binary(
-        "11.png", " .X.XX..X XX.XXXX. .XXX.XX. XX..X... .XXXXX.. XX.X..X. ..XX...X XX.X.... X.X.X.X. X.X..X.X .X....X. XX...X.. ...XX.X. .XXXXXX. .X..XX.. X.X.X... .X...... XXXX.... XX.XX... XXXXX.X. ...XXXXX .....X.X ...X.... X.XXX..X X.X.X... ....");
+    assertCorrectImage2binary("11.png",
+        " .X.XX..X XX.XXXX. .XXX.XX. XX..X... .XXXXX.. XX.X..X. ..XX...X XX.X.... X.X.X.X. X.X..X.X .X....X. XX...X.. ...XX.X. .XXXXXX. .X..XX.. X.X.X... .X...... XXXX.... XX.XX... XXXXX.X. ...XXXXX .....X.X ...X.... X.XXX..X X.X.X... ....");
   }
 
   @Test
diff --git a/core/src/test/java/com/google/zxing/oned/rss/expanded/decoders/AI013X0X1XDecoderTest.java b/core/src/test/java/com/google/zxing/oned/rss/expanded/decoders/AI013X0X1XDecoderTest.java
index f491b59..1781725 100644
--- a/core/src/test/java/com/google/zxing/oned/rss/expanded/decoders/AI013X0X1XDecoderTest.java
+++ b/core/src/test/java/com/google/zxing/oned/rss/expanded/decoders/AI013X0X1XDecoderTest.java
@@ -52,7 +52,8 @@ public final class AI013X0X1XDecoderTest extends AbstractDecoderTest {
 
   @Test
   public void test01310X111() throws Exception {
-    CharSequence data = header310x11 + compressedGtin900123456798908 + compressed20bitWeight1750 + compressedDateMarch12th2010;
+    CharSequence data = header310x11 + compressedGtin900123456798908 + compressed20bitWeight1750 +
+        compressedDateMarch12th2010;
     String expected = "(01)90012345678908(3100)001750(11)100312";
 
     assertCorrectBinaryString(data, expected);
@@ -60,7 +61,8 @@ public final class AI013X0X1XDecoderTest extends AbstractDecoderTest {
 
   @Test
   public void test01320X111() throws Exception {
-    CharSequence data = header320x11 + compressedGtin900123456798908 + compressed20bitWeight1750 + compressedDateMarch12th2010;
+    CharSequence data = header320x11 + compressedGtin900123456798908 + compressed20bitWeight1750 +
+        compressedDateMarch12th2010;
     String expected = "(01)90012345678908(3200)001750(11)100312";
 
     assertCorrectBinaryString(data, expected);
@@ -68,7 +70,8 @@ public final class AI013X0X1XDecoderTest extends AbstractDecoderTest {
 
   @Test
   public void test01310X131() throws Exception {
-    CharSequence data = header310x13 + compressedGtin900123456798908 + compressed20bitWeight1750 + compressedDateMarch12th2010;
+    CharSequence data = header310x13 + compressedGtin900123456798908 + compressed20bitWeight1750 +
+        compressedDateMarch12th2010;
     String expected = "(01)90012345678908(3100)001750(13)100312";
 
     assertCorrectBinaryString(data, expected);
@@ -76,7 +79,8 @@ public final class AI013X0X1XDecoderTest extends AbstractDecoderTest {
 
   @Test
   public void test01320X131() throws Exception {
-    CharSequence data = header320x13 + compressedGtin900123456798908 + compressed20bitWeight1750 + compressedDateMarch12th2010;
+    CharSequence data = header320x13 + compressedGtin900123456798908 + compressed20bitWeight1750 +
+        compressedDateMarch12th2010;
     String expected = "(01)90012345678908(3200)001750(13)100312";
 
     assertCorrectBinaryString(data, expected);
@@ -84,7 +88,8 @@ public final class AI013X0X1XDecoderTest extends AbstractDecoderTest {
 
   @Test
   public void test01310X151() throws Exception {
-    CharSequence data = header310x15 + compressedGtin900123456798908 + compressed20bitWeight1750 + compressedDateMarch12th2010;
+    CharSequence data = header310x15 + compressedGtin900123456798908 + compressed20bitWeight1750 +
+        compressedDateMarch12th2010;
     String expected = "(01)90012345678908(3100)001750(15)100312";
 
     assertCorrectBinaryString(data, expected);
@@ -92,7 +97,8 @@ public final class AI013X0X1XDecoderTest extends AbstractDecoderTest {
 
   @Test
   public void test01320X151() throws Exception {
-    CharSequence data = header320x15 + compressedGtin900123456798908 + compressed20bitWeight1750 + compressedDateMarch12th2010;
+    CharSequence data = header320x15 + compressedGtin900123456798908 + compressed20bitWeight1750 +
+        compressedDateMarch12th2010;
     String expected = "(01)90012345678908(3200)001750(15)100312";
 
     assertCorrectBinaryString(data, expected);
@@ -100,7 +106,8 @@ public final class AI013X0X1XDecoderTest extends AbstractDecoderTest {
 
   @Test
   public void test01310X171() throws Exception {
-    CharSequence data = header310x17 + compressedGtin900123456798908 + compressed20bitWeight1750 + compressedDateMarch12th2010;
+    CharSequence data = header310x17 + compressedGtin900123456798908 + compressed20bitWeight1750 +
+        compressedDateMarch12th2010;
     String expected = "(01)90012345678908(3100)001750(17)100312";
 
     assertCorrectBinaryString(data, expected);
@@ -108,7 +115,8 @@ public final class AI013X0X1XDecoderTest extends AbstractDecoderTest {
 
   @Test
   public void test01320X171() throws Exception {
-    CharSequence data = header320x17 + compressedGtin900123456798908 + compressed20bitWeight1750 + compressedDateMarch12th2010;
+    CharSequence data = header320x17 + compressedGtin900123456798908 + compressed20bitWeight1750 +
+        compressedDateMarch12th2010;
     String expected = "(01)90012345678908(3200)001750(17)100312";
 
     assertCorrectBinaryString(data, expected);
diff --git a/core/src/test/java/com/google/zxing/oned/rss/expanded/decoders/AnyAIDecoderTest.java b/core/src/test/java/com/google/zxing/oned/rss/expanded/decoders/AnyAIDecoderTest.java
index 1036c69..b79e636 100644
--- a/core/src/test/java/com/google/zxing/oned/rss/expanded/decoders/AnyAIDecoderTest.java
+++ b/core/src/test/java/com/google/zxing/oned/rss/expanded/decoders/AnyAIDecoderTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-/* 
+/*
  * These authors would like to acknowledge the Spanish Ministry of Industry,
  * Tourism and Trade, for the support in the project TSI020301-2008-2
  * "PIRAmIDE: Personalizable Interactions with Resources on AmI-enabled
@@ -53,7 +53,8 @@ public final class AnyAIDecoderTest extends AbstractDecoderTest {
 
   @Test
   public void testAnyAIDecoder3() throws Exception {
-    CharSequence data = header + numeric10 + numeric2alpha + alpha2isoiec646 + i646B + i646C + isoiec6462alpha + alphaA + alpha2numeric + numeric10;
+    CharSequence data = header + numeric10 + numeric2alpha + alpha2isoiec646 + i646B + i646C + isoiec6462alpha +
+        alphaA + alpha2numeric + numeric10;
     String expected = "(10)BCA10";
 
     assertCorrectBinaryString(data, expected);
diff --git a/core/src/test/java/com/google/zxing/pdf417/PDF417BlackBox1TestCase.java b/core/src/test/java/com/google/zxing/pdf417/PDF417BlackBox1TestCase.java
index 13f210d..c5292b4 100644
--- a/core/src/test/java/com/google/zxing/pdf417/PDF417BlackBox1TestCase.java
+++ b/core/src/test/java/com/google/zxing/pdf417/PDF417BlackBox1TestCase.java
@@ -30,7 +30,9 @@ public final class PDF417BlackBox1TestCase extends AbstractBlackBoxTestCase {
   public PDF417BlackBox1TestCase() {
     super("src/test/resources/blackbox/pdf417-1", new MultiFormatReader(), BarcodeFormat.PDF_417);
     addTest(10, 10, 0.0f);
+    addTest(10, 10, 90.0f);
     addTest(10, 10, 180.0f);
+    addTest(10, 10, 270.0f);
   }
 
 }
\ No newline at end of file
diff --git a/core/src/test/java/com/google/zxing/pdf417/PDF417WriterTestCase.java b/core/src/test/java/com/google/zxing/pdf417/PDF417WriterTestCase.java
index 3d98a32..fff0f32 100644
--- a/core/src/test/java/com/google/zxing/pdf417/PDF417WriterTestCase.java
+++ b/core/src/test/java/com/google/zxing/pdf417/PDF417WriterTestCase.java
@@ -31,6 +31,7 @@ import org.junit.Test;
  */
 public final class PDF417WriterTestCase extends Assert {
 
+  @SuppressWarnings("checkstyle:lineLength")
   @Test
   public void testDataMatrixImageWriter() throws WriterException {
     Map<EncodeHintType,Object> hints = new EnumMap<>(EncodeHintType.class);
diff --git a/core/src/test/java/com/google/zxing/pdf417/decoder/PDF417DecoderTestCase.java b/core/src/test/java/com/google/zxing/pdf417/decoder/PDF417DecoderTestCase.java
index cb70c0a..e384178 100644
--- a/core/src/test/java/com/google/zxing/pdf417/decoder/PDF417DecoderTestCase.java
+++ b/core/src/test/java/com/google/zxing/pdf417/decoder/PDF417DecoderTestCase.java
@@ -17,9 +17,17 @@
 package com.google.zxing.pdf417.decoder;
 
 import com.google.zxing.FormatException;
+import com.google.zxing.WriterException;
 import com.google.zxing.pdf417.PDF417ResultMetadata;
+import com.google.zxing.common.DecoderResult;
+import com.google.zxing.pdf417.encoder.Compaction;
+import com.google.zxing.pdf417.encoder.PDF417HighLevelEncoderTestAdapter;
+
 import org.junit.Assert;
 import org.junit.Test;
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+import java.util.Random;
 
 /**
  * Tests {@link DecodedBitStreamParser}.
@@ -39,7 +47,7 @@ public class PDF417DecoderTestCase extends Assert {
     DecodedBitStreamParser.decodeMacroBlock(sampleCodes, 2, resultMetadata);
 
     assertEquals(0, resultMetadata.getSegmentIndex());
-    assertEquals("ARBX", resultMetadata.getFileId());
+    assertEquals("017053", resultMetadata.getFileId());
     assertFalse(resultMetadata.isLastSegment());
     assertEquals(4, resultMetadata.getSegmentCount());
     assertEquals("CEN BE", resultMetadata.getSender());
@@ -66,7 +74,7 @@ public class PDF417DecoderTestCase extends Assert {
     DecodedBitStreamParser.decodeMacroBlock(sampleCodes, 2, resultMetadata);
 
     assertEquals(3, resultMetadata.getSegmentIndex());
-    assertEquals("ARBX", resultMetadata.getFileId());
+    assertEquals("017053", resultMetadata.getFileId());
     assertTrue(resultMetadata.isLastSegment());
     assertEquals(4, resultMetadata.getSegmentCount());
     assertNull(resultMetadata.getAddressee());
@@ -79,6 +87,32 @@ public class PDF417DecoderTestCase extends Assert {
         104, optionalData[optionalData.length - 1]);
   }
 
+
+  /**
+   * Tests the example given in ISO/IEC 15438:2015(E) - Annex H.6
+   */
+  @Test
+  public void testStandardSample3() throws FormatException {
+    PDF417ResultMetadata resultMetadata = new PDF417ResultMetadata();
+    int[] sampleCodes = {7, 928, 111, 100, 100, 200, 300,
+      0}; // Final dummy ECC codeword required to avoid ArrayIndexOutOfBounds
+
+    DecodedBitStreamParser.decodeMacroBlock(sampleCodes, 2, resultMetadata);
+
+    assertEquals(0, resultMetadata.getSegmentIndex());
+    assertEquals("100200300", resultMetadata.getFileId());
+    assertFalse(resultMetadata.isLastSegment());
+    assertEquals(-1, resultMetadata.getSegmentCount());
+    assertNull(resultMetadata.getAddressee());
+    assertNull(resultMetadata.getSender());
+    assertNull(resultMetadata.getOptionalData());
+
+    // Check that symbol containing no data except Macro is accepted (see note in Annex H.2)
+    DecoderResult decoderResult = DecodedBitStreamParser.decode(sampleCodes, "0");
+    assertEquals("", decoderResult.getText());
+    assertNotNull(decoderResult.getOther());
+  }
+
   @Test
   public void testSampleWithFilename() throws FormatException {
     int[] sampleCodes = {23, 477, 928, 111, 100, 0, 252, 21, 86, 923, 0, 815, 251, 133, 12, 148, 537, 593,
@@ -89,7 +123,7 @@ public class PDF417DecoderTestCase extends Assert {
     DecodedBitStreamParser.decodeMacroBlock(sampleCodes, 3, resultMetadata);
 
     assertEquals(0, resultMetadata.getSegmentIndex());
-    assertEquals("AAIMAVC ", resultMetadata.getFileId());
+    assertEquals("000252021086", resultMetadata.getFileId());
     assertFalse(resultMetadata.isLastSegment());
     assertEquals(2, resultMetadata.getSegmentCount());
     assertNull(resultMetadata.getAddressee());
@@ -106,7 +140,7 @@ public class PDF417DecoderTestCase extends Assert {
     DecodedBitStreamParser.decodeMacroBlock(sampleCodes, 3, resultMetadata);
 
     assertEquals(0, resultMetadata.getSegmentIndex());
-    assertEquals("AAIMAVC ", resultMetadata.getFileId());
+    assertEquals("000252021086", resultMetadata.getFileId());
     assertFalse(resultMetadata.isLastSegment());
 
     assertEquals(180980729000000L, resultMetadata.getTimestamp());
@@ -114,4 +148,321 @@ public class PDF417DecoderTestCase extends Assert {
     assertEquals(260013, resultMetadata.getChecksum());
   }
 
+  @Test
+  public void testSampleWithMacroTerminatorOnly() throws FormatException {
+    int[] sampleCodes = {7, 477, 928, 222, 198, 0, 922};
+    PDF417ResultMetadata resultMetadata = new PDF417ResultMetadata();
+
+    DecodedBitStreamParser.decodeMacroBlock(sampleCodes, 3, resultMetadata);
+
+    assertEquals(99998, resultMetadata.getSegmentIndex());
+    assertEquals("000", resultMetadata.getFileId());
+    assertTrue(resultMetadata.isLastSegment());
+    assertEquals(-1, resultMetadata.getSegmentCount());
+    assertNull(resultMetadata.getOptionalData());
+  }
+
+  @Test(expected = FormatException.class)
+  public void testSampleWithBadSequenceIndexMacro() throws FormatException {
+    int[] sampleCodes = {3, 928, 222, 0};
+    PDF417ResultMetadata resultMetadata = new PDF417ResultMetadata();
+    DecodedBitStreamParser.decodeMacroBlock(sampleCodes, 2, resultMetadata);
+  }
+
+  @Test(expected = FormatException.class)
+  public void testSampleWithNoFileIdMacro() throws FormatException {
+    int[] sampleCodes = {4, 928, 222, 198, 0};
+    PDF417ResultMetadata resultMetadata = new PDF417ResultMetadata();
+    DecodedBitStreamParser.decodeMacroBlock(sampleCodes, 2, resultMetadata);
+  }
+
+  @Test(expected = FormatException.class)
+  public void testSampleWithNoDataNoMacro() throws FormatException {
+    int[] sampleCodes = {3, 899, 899, 0};
+    DecodedBitStreamParser.decode(sampleCodes, "0");
+  }
+
+  @Test
+  public void testUppercase() throws WriterException, FormatException {
+    //encodeDecode("", 0);
+    performEncodeTest('A', new int[] { 3, 4, 5, 6, 4, 4, 5, 5});
+  }
+
+  @Test
+  public void testNumeric() throws WriterException, FormatException {
+    performEncodeTest('1', new int[] { 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 7, 7, 8, 8, 8, 9, 9, 9, 10, 10});
+  }
+
+  @Test
+  public void testByte() throws WriterException, FormatException {
+    performEncodeTest('\u00c4', new int[] { 3, 4, 5, 6, 7, 7, 8});
+  }
+
+  @Test
+  public void testUppercaseLowercaseMix1() throws WriterException, FormatException {
+    encodeDecode("aA", 4);
+    encodeDecode("aAa", 5);
+    encodeDecode("Aa", 4);
+    encodeDecode("Aaa", 5);
+    encodeDecode("AaA", 5);
+    encodeDecode("AaaA", 6);
+    encodeDecode("Aaaa", 6);
+    encodeDecode("AaAaA", 5);
+    encodeDecode("AaaAaaA", 6);
+    encodeDecode("AaaAAaaA", 7);
+  }
+
+  @Test
+  public void testPunctuation() throws WriterException, FormatException {
+    performEncodeTest(';', new int[] { 3, 4, 5, 6, 6, 7, 8});
+    encodeDecode(";;;;;;;;;;;;;;;;", 17);
+  }
+
+  @Test
+  public void testUppercaseLowercaseMix2() throws WriterException, FormatException {
+    performPermutationTest(new char[] {'A', 'a'}, 10, 8972);
+  }
+
+  @Test
+  public void testUppercaseNumericMix() throws WriterException, FormatException {
+    performPermutationTest(new char[] {'A', '1'}, 14, 192510);
+  }
+
+  @Test
+  public void testUppercaseMixedMix() throws WriterException, FormatException {
+    performPermutationTest(new char[] {'A', '1', ' ', ';'}, 7, 106060);
+  }
+
+  @Test
+  public void testUppercasePunctuationMix() throws WriterException, FormatException {
+    performPermutationTest(new char[] {'A', ';'}, 10, 8967);
+  }
+
+  @Test
+  public void testUppercaseByteMix() throws WriterException, FormatException {
+    performPermutationTest(new char[] {'A', '\u00c4'}, 10, 11222);
+  }
+
+  @Test
+  public void testLowercaseByteMix() throws WriterException, FormatException {
+    performPermutationTest(new char[] {'a', '\u00c4'}, 10, 11233);
+  }
+
+  public void testUppercaseLowercaseNumericMix() throws WriterException, FormatException {
+    performPermutationTest(new char[] {'A', 'a', '1'}, 7, 15491);
+  }
+
+  @Test
+  public void testUppercaseLowercasePunctuationMix() throws WriterException, FormatException {
+    performPermutationTest(new char[] {'A', 'a', ';'}, 7, 15491);
+  }
+
+  @Test
+  public void testUppercaseLowercaseByteMix() throws WriterException, FormatException {
+    performPermutationTest(new char[] {'A', 'a', '\u00c4'}, 7, 17288);
+  }
+
+  @Test
+  public void testLowercasePunctuationByteMix() throws WriterException, FormatException {
+    performPermutationTest(new char[] {'a', ';', '\u00c4'}, 7, 17427);
+  }
+
+  @Test
+  public void testUppercaseLowercaseNumericPunctuationMix() throws WriterException, FormatException {
+    performPermutationTest(new char[] {'A', 'a', '1', ';'}, 7, 120479);
+  }
+
+  @Test
+  public void testBinaryData() throws WriterException, FormatException {
+    byte[] bytes = new byte[500];
+    Random random = new Random(0);
+    int total = 0;
+    for (int i = 0; i < 10000; i++) {
+      random.nextBytes(bytes);
+      total += encodeDecode(new String(bytes, StandardCharsets.ISO_8859_1));
+    }
+    assertEquals(4190044, total);
+  }
+
+  @Test
+  public void testECIEnglishHiragana() throws Exception {
+    //multi ECI UTF-8, UTF-16 and ISO-8859-1
+    performECITest(new char[] {'a', '1', '\u3040'}, new float[] {20f, 1f, 10f}, 105825, 110914);
+  }
+
+  @Test
+  public void testECIEnglishKatakana() throws Exception {
+    //multi ECI UTF-8, UTF-16 and ISO-8859-1
+    performECITest(new char[] {'a', '1', '\u30a0'}, new float[] {20f, 1f, 10f}, 109177, 110914);
+  }
+
+  @Test
+  public void testECIEnglishHalfWidthKatakana() throws Exception {
+    //single ECI
+    performECITest(new char[] {'a', '1', '\uff80'}, new float[] {20f, 1f, 10f}, 80617, 110914);
+  }
+
+  @Test
+  public void testECIEnglishChinese() throws Exception {
+    //single ECI
+    performECITest(new char[] {'a', '1', '\u4e00'}, new float[] {20f, 1f, 10f}, 95797, 110914);
+  }
+
+  @Test
+  public void testECIGermanCyrillic() throws Exception {
+    //single ECI since the German Umlaut is in ISO-8859-1
+    performECITest(new char[] {'a', '1', '\u00c4', '\u042f'}, new float[] {20f, 1f, 1f, 10f}, 80755, 96007);
+  }
+
+  @Test
+  public void testECIEnglishCzechCyrillic1() throws Exception {
+    //multi ECI between ISO-8859-2 and ISO-8859-5
+    performECITest(new char[] {'a', '1', '\u010c', '\u042f'}, new float[] {10f, 1f, 10f, 10f}, 102824, 124525);
+  }
+
+  @Test
+  public void testECIEnglishCzechCyrillic2() throws Exception {
+    //multi ECI between ISO-8859-2 and ISO-8859-5
+    performECITest(new char[] {'a', '1', '\u010c', '\u042f'}, new float[] {40f, 1f, 10f, 10f}, 81321, 88236);
+  }
+
+  @Test
+  public void testECIEnglishArabicCyrillic() throws Exception {
+    //multi ECI between UTF-8 (ISO-8859-6 is excluded in CharacterSetECI) and ISO-8859-5
+    performECITest(new char[] {'a', '1', '\u0620', '\u042f'}, new float[] {10f, 1f, 10f, 10f}, 118510, 124525);
+  }
+
+  @Test
+  public void testBinaryMultiECI() throws Exception {
+    //Test the cases described in 5.5.5.3 "ECI and Byte Compaction mode using latch 924 and 901"
+    performDecodeTest(new int[] {5, 927, 4, 913, 200}, "\u010c");
+    performDecodeTest(new int[] {9, 927, 4, 913, 200, 927, 7, 913, 207}, "\u010c\u042f");
+    performDecodeTest(new int[] {9, 927, 4, 901, 200, 927, 7, 901, 207}, "\u010c\u042f");
+    performDecodeTest(new int[] {8, 927, 4, 901, 200, 927, 7, 207}, "\u010c\u042f");
+    performDecodeTest(new int[] {14, 927, 4, 901, 200, 927, 7, 207, 927, 4, 200, 927, 7, 207},
+         "\u010c\u042f\u010c\u042f");
+    performDecodeTest(new int[] {16, 927, 4, 924, 336, 432, 197, 51, 300, 927, 7, 348, 231, 311, 858, 567},
+        "\u010c\u010c\u010c\u010c\u010c\u010c\u042f\u042f\u042f\u042f\u042f\u042f");
+  }
+
+  private static void encodeDecode(String input, int expectedLength) throws WriterException, FormatException {
+    assertEquals(expectedLength, encodeDecode(input));
+  }
+
+  private static int encodeDecode(String input) throws WriterException, FormatException {
+    return encodeDecode(input, null, false, true);
+  }
+
+  private static int encodeDecode(String input, Charset charset, boolean autoECI, boolean decode)
+      throws WriterException, FormatException {
+    String s = PDF417HighLevelEncoderTestAdapter.encodeHighLevel(input, Compaction.AUTO, charset, autoECI);
+    if (decode) {
+      int[] codewords = new int[s.length() + 1];
+      codewords[0] = codewords.length;
+      for (int i = 1; i < codewords.length; i++) {
+        codewords[i] = s.charAt(i - 1);
+      }
+      performDecodeTest(codewords, input);
+    }
+    return s.length() + 1;
+  }
+
+  private static int getEndIndex(int length, char[] chars) {
+    double decimalLength = Math.log10(chars.length);
+    return (int) Math.ceil(Math.pow(10, decimalLength * length));
+  }
+
+  private static String generatePermutation(int index, int length, char[] chars) {
+    int N = chars.length;
+    String baseNNumber = Integer.toString(index, N);
+    while (baseNNumber.length() < length) {
+      baseNNumber = "0" + baseNNumber;
+    }
+    String prefix = "";
+    for (int i = 0; i < baseNNumber.length(); i++) {
+      prefix += chars[baseNNumber.charAt(i) - '0'];
+    }
+    return prefix;
+  }
+
+  private static void performPermutationTest(char[] chars, int length, int expectedTotal) throws WriterException,
+      FormatException {
+    int endIndex = getEndIndex(length, chars);
+    int total = 0;
+    for (int i = 0; i < endIndex; i++) {
+      total += encodeDecode(generatePermutation(i, length, chars));
+    }
+    assertEquals(expectedTotal, total);
+  }
+
+  private static void performEncodeTest(char c, int[] expectedLengths) throws WriterException, FormatException {
+    for (int i = 0; i < expectedLengths.length; i++) {
+      StringBuilder sb = new StringBuilder();
+      for (int j = 0; j <= i; j++) {
+        sb.append(c);
+      }
+      encodeDecode(sb.toString(), expectedLengths[i]);
+    }
+  }
+
+  private static void performDecodeTest(int[] codewords, String expectedResult) throws FormatException {
+    DecoderResult result = DecodedBitStreamParser.decode(codewords, "0");
+    assertEquals(expectedResult, result.getText());
+  }
+
+  private static void performECITest(char[] chars,
+                               float[] weights,
+                               int expectedMinLength,
+                               int expectedUTFLength) throws WriterException, FormatException {
+    Random random = new Random(0);
+    int minLength = 0;
+    int utfLength = 0;
+    for (int i = 0; i < 1000; i++) {
+      String s = generateText(random, 100, chars, weights);
+      minLength += encodeDecode(s, null, true, true);
+      utfLength += encodeDecode(s, StandardCharsets.UTF_8, false, true);
+    }
+    assertEquals(expectedMinLength, minLength);
+    assertEquals(expectedUTFLength, utfLength);
+  }
+
+  private static String generateText(Random random, int maxWidth, char[] chars, float[] weights) {
+    StringBuilder result = new StringBuilder();
+    final int maxWordWidth = 7;
+    float total = 0;
+    for (int i = 0; i < weights.length; i++) {
+      total += weights[i];
+    }
+    for (int i = 0; i < weights.length; i++) {
+      weights[i] /= total;
+    }
+    int cnt = 0;
+    do {
+      float maxValue = 0;
+      int maxIndex = 0;
+      for (int j = 0; j < weights.length; j++) {
+        float value = random.nextFloat() * weights[j];
+        if (value > maxValue) {
+          maxValue = value;
+          maxIndex = j;
+        }
+      }
+      final float wordLength = maxWordWidth * random.nextFloat();
+      if (wordLength > 0 && result.length() > 0) {
+        result.append(' ');
+      }
+      for (int j = 0; j < wordLength; j++) {
+        char c = chars[maxIndex];
+        if (j == 0 && c >= 'a' && c <= 'z' && random.nextBoolean()) {
+          c = (char) (c - 'a' + 'A');
+        }
+        result.append(c);
+      }
+      if (cnt % 2 != 0 && random.nextBoolean()) {
+        result.append('.');
+      }
+      cnt++;
+    } while (result.length() < maxWidth - maxWordWidth);
+    return result.toString();
+  }
 }
diff --git a/core/src/test/java/com/google/zxing/pdf417/decoder/ec/ErrorCorrectionTestCase.java b/core/src/test/java/com/google/zxing/pdf417/decoder/ec/ErrorCorrectionTestCase.java
index 3ccf3b9..7af2ae8 100644
--- a/core/src/test/java/com/google/zxing/pdf417/decoder/ec/ErrorCorrectionTestCase.java
+++ b/core/src/test/java/com/google/zxing/pdf417/decoder/ec/ErrorCorrectionTestCase.java
@@ -18,7 +18,6 @@ package com.google.zxing.pdf417.decoder.ec;
 
 import com.google.zxing.ChecksumException;
 
-import org.junit.Ignore;
 import org.junit.Test;
 
 import java.util.Random;
@@ -85,31 +84,6 @@ public final class ErrorCorrectionTestCase extends AbstractErrorCorrectionTestCa
     }
   }
 
-  @Ignore("Erasures not implemented yet")
-  @Test
-  public void testMaxErasures() throws ChecksumException {
-    Random random = getRandom();
-    for (int test : PDF417_TEST) { // # iterations is kind of arbitrary
-      int[] received = PDF417_TEST_WITH_EC.clone();
-      int[] erasures = erase(received, MAX_ERASURES, random);
-      checkDecode(received, erasures);
-    }
-  }
-
-  @Ignore("Erasures not implemented yet")
-  @Test
-  public void testTooManyErasures() {
-    Random random = getRandom();
-    int[] received = PDF417_TEST_WITH_EC.clone();
-    int[] erasures = erase(received, MAX_ERASURES + 1, random);
-    try {
-      checkDecode(received, erasures);
-      fail("Should not have decoded");
-    } catch (ChecksumException ce) {
-      // good
-    }
-  }
-
   private void checkDecode(int[] received) throws ChecksumException {
     checkDecode(received, new int[0]);
   }
diff --git a/core/src/test/java/com/google/zxing/pdf417/encoder/PDF417EncoderTestCase.java b/core/src/test/java/com/google/zxing/pdf417/encoder/PDF417EncoderTestCase.java
index 4d4b35b..f0c9aa5 100644
--- a/core/src/test/java/com/google/zxing/pdf417/encoder/PDF417EncoderTestCase.java
+++ b/core/src/test/java/com/google/zxing/pdf417/encoder/PDF417EncoderTestCase.java
@@ -16,6 +16,8 @@
 
 package com.google.zxing.pdf417.encoder;
 
+import com.google.zxing.WriterException;
+
 import java.nio.charset.StandardCharsets;
 
 import org.junit.Assert;
@@ -29,7 +31,7 @@ public final class PDF417EncoderTestCase extends Assert {
   @Test
   public void testEncodeAuto() throws Exception {
     String encoded = PDF417HighLevelEncoder.encodeHighLevel(
-        "ABCD", Compaction.AUTO, StandardCharsets.UTF_8);
+        "ABCD", Compaction.AUTO, StandardCharsets.UTF_8, false);
     assertEquals("\u039f\u001A\u0385ABCD", encoded);
   }
 
@@ -37,34 +39,38 @@ public final class PDF417EncoderTestCase extends Assert {
   public void testEncodeAutoWithSpecialChars() throws Exception {
     // Just check if this does not throw an exception
     PDF417HighLevelEncoder.encodeHighLevel(
-        "1%§s ?aG$", Compaction.AUTO, StandardCharsets.UTF_8);
+        "1%§s ?aG$", Compaction.AUTO, StandardCharsets.UTF_8, false);
   }
   
   @Test
   public void testEncodeIso88591WithSpecialChars() throws Exception {
     // Just check if this does not throw an exception
-    PDF417HighLevelEncoder.encodeHighLevel("asdfg§asd", Compaction.AUTO, StandardCharsets.ISO_8859_1);
+    PDF417HighLevelEncoder.encodeHighLevel("asdfg§asd", Compaction.AUTO, StandardCharsets.ISO_8859_1, false);
   }
 
   @Test
   public void testEncodeText() throws Exception {
     String encoded = PDF417HighLevelEncoder.encodeHighLevel(
-        "ABCD", Compaction.TEXT, StandardCharsets.UTF_8);
+        "ABCD", Compaction.TEXT, StandardCharsets.UTF_8, false);
     assertEquals("Ο\u001A\u0001?", encoded);
   }
 
   @Test
   public void testEncodeNumeric() throws Exception {
     String encoded = PDF417HighLevelEncoder.encodeHighLevel(
-        "1234", Compaction.NUMERIC, StandardCharsets.UTF_8);
+        "1234", Compaction.NUMERIC, StandardCharsets.UTF_8, false);
     assertEquals("\u039f\u001A\u0386\f\u01b2", encoded);
   }
 
   @Test
   public void testEncodeByte() throws Exception {
     String encoded = PDF417HighLevelEncoder.encodeHighLevel(
-        "abcd", Compaction.BYTE, StandardCharsets.UTF_8);
+        "abcd", Compaction.BYTE, StandardCharsets.UTF_8, false);
     assertEquals("\u039f\u001A\u0385abcd", encoded);
   }
 
+  @Test(expected = WriterException.class)
+  public void testEncodeEmptyString() throws Exception {
+    PDF417HighLevelEncoder.encodeHighLevel("", Compaction.AUTO, null, false);
+  }
 }
diff --git a/core/src/test/java/com/google/zxing/qrcode/QRCodeBlackBox2TestCase.java b/core/src/test/java/com/google/zxing/qrcode/QRCodeBlackBox2TestCase.java
index 7c11dad..111c228 100644
--- a/core/src/test/java/com/google/zxing/qrcode/QRCodeBlackBox2TestCase.java
+++ b/core/src/test/java/com/google/zxing/qrcode/QRCodeBlackBox2TestCase.java
@@ -28,7 +28,7 @@ public final class QRCodeBlackBox2TestCase extends AbstractBlackBoxTestCase {
   public QRCodeBlackBox2TestCase() {
     super("src/test/resources/blackbox/qrcode-2", new MultiFormatReader(), BarcodeFormat.QR_CODE);
     addTest(31, 31, 0.0f);
-    addTest(30, 30, 90.0f);
+    addTest(29, 29, 90.0f);
     addTest(30, 30, 180.0f);
     addTest(30, 30, 270.0f);
   }
diff --git a/core/src/test/java/com/google/zxing/qrcode/encoder/EncoderTestCase.java b/core/src/test/java/com/google/zxing/qrcode/encoder/EncoderTestCase.java
index ebf00e2..b76ef38 100644
--- a/core/src/test/java/com/google/zxing/qrcode/encoder/EncoderTestCase.java
+++ b/core/src/test/java/com/google/zxing/qrcode/encoder/EncoderTestCase.java
@@ -19,6 +19,7 @@ package com.google.zxing.qrcode.encoder;
 import com.google.zxing.EncodeHintType;
 import com.google.zxing.WriterException;
 import com.google.zxing.common.BitArray;
+import com.google.zxing.common.StringUtils;
 import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
 import com.google.zxing.qrcode.decoder.Mode;
 import com.google.zxing.qrcode.decoder.Version;
@@ -26,9 +27,9 @@ import com.google.zxing.qrcode.decoder.Version;
 import org.junit.Assert;
 import org.junit.Test;
 
-import java.io.UnsupportedEncodingException;
 import java.util.EnumMap;
 import java.util.Map;
+import java.nio.charset.Charset;
 
 /**
  * @author satorux@google.com (Satoru Takabayashi) - creator
@@ -66,7 +67,7 @@ public final class EncoderTestCase extends Assert {
   }
 
   @Test
-  public void testChooseMode() throws WriterException {
+  public void testChooseMode() {
     // Numeric mode.
     assertSame(Mode.NUMERIC, Encoder.chooseMode("0"));
     assertSame(Mode.NUMERIC, Encoder.chooseMode("0123456789"));
@@ -96,38 +97,37 @@ public final class EncoderTestCase extends Assert {
   @Test
   public void testEncode() throws WriterException {
     QRCode qrCode = Encoder.encode("ABCDEF", ErrorCorrectionLevel.H);
-    String expected =
-      "<<\n" +
-          " mode: ALPHANUMERIC\n" +
-          " ecLevel: H\n" +
-          " version: 1\n" +
-          " maskPattern: 4\n" +
-          " matrix:\n" +
-          " 1 1 1 1 1 1 1 0 0 1 0 1 0 0 1 1 1 1 1 1 1\n" +
-          " 1 0 0 0 0 0 1 0 1 0 1 0 1 0 1 0 0 0 0 0 1\n" +
-          " 1 0 1 1 1 0 1 0 0 0 0 0 0 0 1 0 1 1 1 0 1\n" +
-          " 1 0 1 1 1 0 1 0 0 1 0 0 1 0 1 0 1 1 1 0 1\n" +
-          " 1 0 1 1 1 0 1 0 0 1 0 1 0 0 1 0 1 1 1 0 1\n" +
-          " 1 0 0 0 0 0 1 0 1 0 0 1 1 0 1 0 0 0 0 0 1\n" +
-          " 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1\n" +
-          " 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0\n" +
-          " 0 0 0 0 1 1 1 1 0 1 1 0 1 0 1 1 0 0 0 1 0\n" +
-          " 0 0 0 0 1 1 0 1 1 1 0 0 1 1 1 1 0 1 1 0 1\n" +
-          " 1 0 0 0 0 1 1 0 0 1 0 1 0 0 0 1 1 1 0 1 1\n" +
-          " 1 0 0 1 1 1 0 0 1 1 1 1 0 0 0 0 1 0 0 0 0\n" +
-          " 0 1 1 1 1 1 1 0 1 0 1 0 1 1 1 0 0 1 1 0 0\n" +
-          " 0 0 0 0 0 0 0 0 1 1 0 0 0 1 1 0 0 0 1 0 1\n" +
-          " 1 1 1 1 1 1 1 0 1 1 1 1 0 0 0 0 0 1 1 0 0\n" +
-          " 1 0 0 0 0 0 1 0 1 1 0 1 0 0 0 1 0 1 1 1 1\n" +
-          " 1 0 1 1 1 0 1 0 1 0 0 1 0 0 0 1 1 0 0 1 1\n" +
-          " 1 0 1 1 1 0 1 0 0 0 1 1 0 1 0 0 0 0 1 1 1\n" +
-          " 1 0 1 1 1 0 1 0 0 1 0 1 0 0 0 1 1 0 0 0 0\n" +
-          " 1 0 0 0 0 0 1 0 0 1 0 0 1 0 0 1 1 0 0 0 1\n" +
-          " 1 1 1 1 1 1 1 0 0 0 1 0 0 1 0 0 0 0 1 1 1\n" +
-          ">>\n";
+    String expected = "<<\n" +
+        " mode: ALPHANUMERIC\n" +
+        " ecLevel: H\n" +
+        " version: 1\n" +
+        " maskPattern: 0\n" +
+        " matrix:\n" +
+        " 1 1 1 1 1 1 1 0 1 1 1 1 0 0 1 1 1 1 1 1 1\n" +
+        " 1 0 0 0 0 0 1 0 0 1 1 1 0 0 1 0 0 0 0 0 1\n" +
+        " 1 0 1 1 1 0 1 0 0 1 0 1 1 0 1 0 1 1 1 0 1\n" +
+        " 1 0 1 1 1 0 1 0 1 1 1 0 1 0 1 0 1 1 1 0 1\n" +
+        " 1 0 1 1 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1\n" +
+        " 1 0 0 0 0 0 1 0 0 1 0 0 0 0 1 0 0 0 0 0 1\n" +
+        " 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1\n" +
+        " 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0\n" +
+        " 0 0 1 0 1 1 1 0 1 1 0 0 1 1 0 0 0 1 0 0 1\n" +
+        " 1 0 1 1 1 0 0 1 0 0 0 1 0 1 0 0 0 0 0 0 0\n" +
+        " 0 0 1 1 0 0 1 0 1 0 0 0 1 0 1 0 1 0 1 1 0\n" +
+        " 1 1 0 1 0 1 0 1 1 1 0 1 0 1 0 0 0 0 0 1 0\n" +
+        " 0 0 1 1 0 1 1 1 1 0 0 0 1 0 1 0 1 1 1 1 0\n" +
+        " 0 0 0 0 0 0 0 0 1 0 0 1 1 1 0 1 0 1 0 0 0\n" +
+        " 1 1 1 1 1 1 1 0 0 0 1 0 1 0 1 1 0 0 0 0 1\n" +
+        " 1 0 0 0 0 0 1 0 1 1 1 1 0 1 0 1 1 1 1 0 1\n" +
+        " 1 0 1 1 1 0 1 0 1 0 1 1 0 1 0 1 0 0 0 0 1\n" +
+        " 1 0 1 1 1 0 1 0 0 1 1 0 1 1 1 1 0 1 0 1 0\n" +
+        " 1 0 1 1 1 0 1 0 1 0 0 0 1 0 1 0 1 1 1 0 1\n" +
+        " 1 0 0 0 0 0 1 0 0 1 1 0 1 1 0 1 0 0 0 1 1\n" +
+        " 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 0 1 0 1\n" +
+        ">>\n";
     assertEquals(expected, qrCode.toString());
   }
-  
+
   @Test
   public void testEncodeWithVersion() throws WriterException {
     Map<EncodeHintType, Object> hints = new EnumMap<>(EncodeHintType.class);
@@ -135,7 +135,7 @@ public final class EncoderTestCase extends Assert {
     QRCode qrCode = Encoder.encode("ABCDEF", ErrorCorrectionLevel.H, hints);
     assertTrue(qrCode.toString().contains(" version: 7\n"));
   }
-  
+
   @Test(expected = WriterException.class)
   public void testEncodeWithVersionTooSmall() throws WriterException {
     Map<EncodeHintType, Object> hints = new EnumMap<>(EncodeHintType.class);
@@ -148,35 +148,34 @@ public final class EncoderTestCase extends Assert {
     Map<EncodeHintType,Object> hints = new EnumMap<>(EncodeHintType.class);
     hints.put(EncodeHintType.CHARACTER_SET, "UTF8");
     QRCode qrCode = Encoder.encode("hello", ErrorCorrectionLevel.H, hints);
-    String expected =
-      "<<\n" +
-          " mode: BYTE\n" +
-          " ecLevel: H\n" +
-          " version: 1\n" +
-          " maskPattern: 6\n" +
-          " matrix:\n" +
-          " 1 1 1 1 1 1 1 0 0 0 1 1 0 0 1 1 1 1 1 1 1\n" +
-          " 1 0 0 0 0 0 1 0 0 0 1 1 0 0 1 0 0 0 0 0 1\n" +
-          " 1 0 1 1 1 0 1 0 1 0 0 1 1 0 1 0 1 1 1 0 1\n" +
-          " 1 0 1 1 1 0 1 0 1 0 0 0 1 0 1 0 1 1 1 0 1\n" +
-          " 1 0 1 1 1 0 1 0 0 1 1 0 0 0 1 0 1 1 1 0 1\n" +
-          " 1 0 0 0 0 0 1 0 0 0 0 1 0 0 1 0 0 0 0 0 1\n" +
-          " 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1\n" +
-          " 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0\n" +
-          " 0 0 0 1 1 0 1 1 0 0 0 0 1 0 0 0 0 1 1 0 0\n" +
-          " 0 0 0 0 0 0 0 0 1 1 0 1 0 0 1 0 1 1 1 1 1\n" +
-          " 1 1 0 0 0 1 1 1 0 0 0 1 1 0 0 1 0 1 0 1 1\n" +
-          " 0 0 0 0 1 1 0 0 1 0 0 0 0 0 1 0 1 1 0 0 0\n" +
-          " 0 1 1 0 0 1 1 0 0 1 1 1 0 1 1 1 1 1 1 1 1\n" +
-          " 0 0 0 0 0 0 0 0 1 1 1 0 1 1 1 1 1 1 1 1 1\n" +
-          " 1 1 1 1 1 1 1 0 1 0 1 0 0 0 1 0 0 0 0 0 0\n" +
-          " 1 0 0 0 0 0 1 0 0 1 0 0 0 1 0 0 0 1 1 0 0\n" +
-          " 1 0 1 1 1 0 1 0 1 0 0 0 1 0 1 0 0 0 1 0 0\n" +
-          " 1 0 1 1 1 0 1 0 1 1 1 1 0 1 0 0 1 0 1 1 0\n" +
-          " 1 0 1 1 1 0 1 0 0 1 1 1 0 0 1 0 0 1 0 1 1\n" +
-          " 1 0 0 0 0 0 1 0 0 0 0 0 0 1 1 0 1 1 0 0 0\n" +
-          " 1 1 1 1 1 1 1 0 0 0 0 1 0 1 0 0 1 0 1 0 0\n" +
-          ">>\n";
+    String expected = "<<\n" +
+        " mode: BYTE\n" +
+        " ecLevel: H\n" +
+        " version: 1\n" +
+        " maskPattern: 3\n" +
+        " matrix:\n" +
+        " 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 1 1\n" +
+        " 1 0 0 0 0 0 1 0 0 0 1 0 1 0 1 0 0 0 0 0 1\n" +
+        " 1 0 1 1 1 0 1 0 0 1 0 1 0 0 1 0 1 1 1 0 1\n" +
+        " 1 0 1 1 1 0 1 0 0 1 1 0 1 0 1 0 1 1 1 0 1\n" +
+        " 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1\n" +
+        " 1 0 0 0 0 0 1 0 0 0 0 0 1 0 1 0 0 0 0 0 1\n" +
+        " 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1\n" +
+        " 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0\n" +
+        " 0 0 1 1 0 0 1 1 1 1 0 0 0 1 1 0 1 0 0 0 0\n" +
+        " 0 0 1 1 1 0 0 0 0 0 1 1 0 0 0 1 0 1 1 1 0\n" +
+        " 0 1 0 1 0 1 1 1 0 1 0 1 0 0 0 0 0 1 1 1 1\n" +
+        " 1 1 0 0 1 0 0 1 1 0 0 1 1 1 1 0 1 0 1 1 0\n" +
+        " 0 0 0 0 1 0 1 1 1 1 0 0 0 0 0 1 0 0 1 0 0\n" +
+        " 0 0 0 0 0 0 0 0 1 1 1 1 0 0 1 1 1 0 0 0 1\n" +
+        " 1 1 1 1 1 1 1 0 1 1 1 0 1 0 1 1 0 0 1 0 0\n" +
+        " 1 0 0 0 0 0 1 0 0 0 1 0 0 1 1 1 1 1 1 0 1\n" +
+        " 1 0 1 1 1 0 1 0 0 1 0 0 0 0 1 1 0 0 0 0 0\n" +
+        " 1 0 1 1 1 0 1 0 1 1 1 0 1 0 0 0 1 1 0 0 0\n" +
+        " 1 0 1 1 1 0 1 0 1 1 0 0 0 1 0 0 1 0 0 0 0\n" +
+        " 1 0 0 0 0 0 1 0 0 0 0 1 1 0 1 0 1 0 1 1 0\n" +
+        " 1 1 1 1 1 1 1 0 0 1 0 1 1 1 0 1 1 0 0 0 0\n" +
+        ">>\n";
     assertEquals(expected, qrCode.toString());
   }
 
@@ -186,35 +185,34 @@ public final class EncoderTestCase extends Assert {
     hints.put(EncodeHintType.CHARACTER_SET, "Shift_JIS");
     // Nihon in Kanji
     QRCode qrCode = Encoder.encode("\u65e5\u672c", ErrorCorrectionLevel.M, hints);
-    String expected =
-      "<<\n" +
-          " mode: KANJI\n" +
-          " ecLevel: M\n" +
-          " version: 1\n" +
-          " maskPattern: 0\n" +
-          " matrix:\n" +
-          " 1 1 1 1 1 1 1 0 0 1 0 1 0 0 1 1 1 1 1 1 1\n" +
-          " 1 0 0 0 0 0 1 0 1 1 0 0 0 0 1 0 0 0 0 0 1\n" +
-          " 1 0 1 1 1 0 1 0 0 1 1 1 1 0 1 0 1 1 1 0 1\n" +
-          " 1 0 1 1 1 0 1 0 0 0 0 0 1 0 1 0 1 1 1 0 1\n" +
-          " 1 0 1 1 1 0 1 0 1 1 1 1 1 0 1 0 1 1 1 0 1\n" +
-          " 1 0 0 0 0 0 1 0 0 1 1 1 0 0 1 0 0 0 0 0 1\n" +
-          " 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1\n" +
-          " 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0\n" +
-          " 1 0 1 0 1 0 1 0 0 0 1 0 1 0 0 0 1 0 0 1 0\n" +
-          " 1 1 0 1 0 0 0 1 0 1 1 1 0 1 0 1 0 1 0 0 0\n" +
-          " 0 1 0 0 0 0 1 1 1 1 1 1 0 1 1 1 0 1 0 1 0\n" +
-          " 1 1 1 0 0 1 0 1 0 0 0 1 1 1 0 1 1 0 1 0 0\n" +
-          " 0 1 1 0 0 1 1 0 1 1 0 1 0 1 1 1 0 1 0 0 1\n" +
-          " 0 0 0 0 0 0 0 0 1 0 1 0 0 0 1 0 0 0 1 0 1\n" +
-          " 1 1 1 1 1 1 1 0 0 0 0 0 1 0 0 0 1 0 0 1 1\n" +
-          " 1 0 0 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 1 1\n" +
-          " 1 0 1 1 1 0 1 0 1 0 0 0 1 0 1 0 1 0 1 0 1\n" +
-          " 1 0 1 1 1 0 1 0 0 0 0 1 0 1 0 1 0 1 0 1 0\n" +
-          " 1 0 1 1 1 0 1 0 1 0 1 1 0 1 1 1 0 0 1 0 1\n" +
-          " 1 0 0 0 0 0 1 0 0 0 0 1 1 1 0 1 1 1 0 1 0\n" +
-          " 1 1 1 1 1 1 1 0 1 1 0 1 0 1 1 1 0 0 1 0 0\n" +
-          ">>\n";
+    String expected = "<<\n" +
+        " mode: KANJI\n" +
+        " ecLevel: M\n" +
+        " version: 1\n" +
+        " maskPattern: 4\n" +
+        " matrix:\n" +
+        " 1 1 1 1 1 1 1 0 1 1 1 1 0 0 1 1 1 1 1 1 1\n" +
+        " 1 0 0 0 0 0 1 0 0 0 0 1 1 0 1 0 0 0 0 0 1\n" +
+        " 1 0 1 1 1 0 1 0 0 0 1 0 0 0 1 0 1 1 1 0 1\n" +
+        " 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1\n" +
+        " 1 0 1 1 1 0 1 0 1 1 0 1 1 0 1 0 1 1 1 0 1\n" +
+        " 1 0 0 0 0 0 1 0 1 0 1 0 1 0 1 0 0 0 0 0 1\n" +
+        " 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1\n" +
+        " 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0\n" +
+        " 1 0 0 0 1 0 1 1 1 0 0 0 1 1 1 1 1 1 0 0 1\n" +
+        " 0 1 1 0 0 1 0 1 1 0 1 0 1 1 1 0 0 0 1 0 1\n" +
+        " 1 1 1 1 0 1 1 1 0 0 1 0 1 1 0 0 0 0 1 1 1\n" +
+        " 1 0 1 0 1 1 0 0 0 0 1 1 1 0 0 1 0 0 1 1 0\n" +
+        " 0 0 1 0 1 1 1 1 1 1 1 1 0 0 1 1 1 1 0 1 1\n" +
+        " 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 1 0 1 0 0 0\n" +
+        " 1 1 1 1 1 1 1 0 1 1 0 1 0 0 1 1 1 1 1 1 0\n" +
+        " 1 0 0 0 0 0 1 0 0 0 0 0 0 1 1 0 1 0 1 0 1\n" +
+        " 1 0 1 1 1 0 1 0 1 0 1 0 1 1 1 0 0 0 1 1 1\n" +
+        " 1 0 1 1 1 0 1 0 0 1 0 0 1 1 1 0 0 0 1 1 1\n" +
+        " 1 0 1 1 1 0 1 0 0 1 1 0 1 1 0 0 0 1 0 0 0\n" +
+        " 1 0 0 0 0 0 1 0 0 0 1 1 1 0 0 1 0 1 0 0 0\n" +
+        " 1 1 1 1 1 1 1 0 1 1 1 1 0 0 1 1 1 0 1 1 0\n" +
+        ">>\n";
     assertEquals(expected, qrCode.toString());
   }
 
@@ -223,35 +221,34 @@ public final class EncoderTestCase extends Assert {
     Map<EncodeHintType,Object> hints = new EnumMap<>(EncodeHintType.class);
     hints.put(EncodeHintType.CHARACTER_SET, "Shift_JIS");
     QRCode qrCode = Encoder.encode("0123", ErrorCorrectionLevel.M, hints);
-    String expected =
-      "<<\n" +
-          " mode: NUMERIC\n" +
-          " ecLevel: M\n" +
-          " version: 1\n" +
-          " maskPattern: 2\n" +
-          " matrix:\n" +
-          " 1 1 1 1 1 1 1 0 0 1 1 0 1 0 1 1 1 1 1 1 1\n" +
-          " 1 0 0 0 0 0 1 0 0 1 0 0 1 0 1 0 0 0 0 0 1\n" +
-          " 1 0 1 1 1 0 1 0 1 0 0 0 0 0 1 0 1 1 1 0 1\n" +
-          " 1 0 1 1 1 0 1 0 1 0 1 1 1 0 1 0 1 1 1 0 1\n" +
-          " 1 0 1 1 1 0 1 0 1 1 0 1 1 0 1 0 1 1 1 0 1\n" +
-          " 1 0 0 0 0 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0 1\n" +
-          " 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1\n" +
-          " 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0\n" +
-          " 1 0 1 1 1 1 1 0 0 1 1 0 1 0 1 1 1 1 1 0 0\n" +
-          " 1 1 0 0 0 1 0 0 1 0 1 0 1 0 0 1 0 0 1 0 0\n" +
-          " 0 1 1 0 1 1 1 1 0 1 1 1 0 1 0 0 1 1 0 1 1\n" +
-          " 1 0 1 1 0 1 0 1 0 0 1 0 0 0 0 1 1 0 1 0 0\n" +
-          " 0 0 1 0 0 1 1 1 0 0 0 1 0 1 0 0 1 0 1 0 0\n" +
-          " 0 0 0 0 0 0 0 0 1 1 0 1 1 1 1 0 0 1 0 0 0\n" +
-          " 1 1 1 1 1 1 1 0 0 0 1 0 1 0 1 1 0 0 0 0 0\n" +
-          " 1 0 0 0 0 0 1 0 1 1 0 1 1 1 1 0 0 1 0 1 0\n" +
-          " 1 0 1 1 1 0 1 0 1 0 1 0 1 0 0 1 0 0 1 0 0\n" +
-          " 1 0 1 1 1 0 1 0 1 1 1 0 1 0 0 1 0 0 1 0 0\n" +
-          " 1 0 1 1 1 0 1 0 1 1 0 1 0 1 0 0 1 1 1 0 0\n" +
-          " 1 0 0 0 0 0 1 0 0 0 1 0 0 0 0 1 1 0 1 1 0\n" +
-          " 1 1 1 1 1 1 1 0 1 1 0 1 0 1 0 0 1 1 1 0 0\n" +
-          ">>\n";
+    String expected = "<<\n" +
+        " mode: NUMERIC\n" +
+        " ecLevel: M\n" +
+        " version: 1\n" +
+        " maskPattern: 0\n" +
+        " matrix:\n" +
+        " 1 1 1 1 1 1 1 0 0 0 0 0 1 0 1 1 1 1 1 1 1\n" +
+        " 1 0 0 0 0 0 1 0 1 1 0 1 0 0 1 0 0 0 0 0 1\n" +
+        " 1 0 1 1 1 0 1 0 0 1 1 0 0 0 1 0 1 1 1 0 1\n" +
+        " 1 0 1 1 1 0 1 0 0 0 1 0 0 0 1 0 1 1 1 0 1\n" +
+        " 1 0 1 1 1 0 1 0 1 0 1 1 1 0 1 0 1 1 1 0 1\n" +
+        " 1 0 0 0 0 0 1 0 0 1 0 1 0 0 1 0 0 0 0 0 1\n" +
+        " 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1\n" +
+        " 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0\n" +
+        " 1 0 1 0 1 0 1 0 0 0 0 0 1 0 0 0 1 0 0 1 0\n" +
+        " 0 0 0 0 0 0 0 1 1 0 1 1 0 1 0 1 0 1 0 1 0\n" +
+        " 0 1 0 1 0 1 1 1 1 0 0 1 0 1 1 1 0 1 0 1 0\n" +
+        " 0 1 1 1 0 0 0 0 0 0 1 1 1 1 0 1 1 1 0 1 0\n" +
+        " 0 0 0 1 1 1 1 1 1 1 1 1 0 1 1 1 0 0 1 0 1\n" +
+        " 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 0 0 0 1 1 0\n" +
+        " 1 1 1 1 1 1 1 0 0 1 0 0 1 0 0 0 1 0 0 0 1\n" +
+        " 1 0 0 0 0 0 1 0 0 1 0 0 0 0 1 0 0 0 1 0 0\n" +
+        " 1 0 1 1 1 0 1 0 1 1 0 0 1 0 1 0 1 0 1 0 1\n" +
+        " 1 0 1 1 1 0 1 0 0 1 1 1 0 1 0 1 0 1 0 1 0\n" +
+        " 1 0 1 1 1 0 1 0 1 0 1 1 0 1 1 1 0 1 1 0 1\n" +
+        " 1 0 0 0 0 0 1 0 0 0 1 1 1 1 0 1 1 1 0 0 0\n" +
+        " 1 1 1 1 1 1 1 0 1 0 1 1 0 1 1 1 0 1 1 0 1\n" +
+        ">>\n";
     assertEquals(expected, qrCode.toString());
   }
 
@@ -293,35 +290,34 @@ public final class EncoderTestCase extends Assert {
     hints.put(EncodeHintType.CHARACTER_SET, "UTF8");
     hints.put(EncodeHintType.GS1_FORMAT, true);
     QRCode qrCode = Encoder.encode("hello", ErrorCorrectionLevel.H, hints);
-    String expected =
-      "<<\n" +
-          " mode: BYTE\n" +
-          " ecLevel: H\n" +
-          " version: 1\n" +
-          " maskPattern: 5\n" +
-          " matrix:\n" +
-          " 1 1 1 1 1 1 1 0 1 0 1 1 0 0 1 1 1 1 1 1 1\n" +
-          " 1 0 0 0 0 0 1 0 0 1 1 0 0 0 1 0 0 0 0 0 1\n" +
-          " 1 0 1 1 1 0 1 0 1 1 1 0 0 0 1 0 1 1 1 0 1\n" +
-          " 1 0 1 1 1 0 1 0 0 1 0 1 0 0 1 0 1 1 1 0 1\n" +
-          " 1 0 1 1 1 0 1 0 1 0 1 0 0 0 1 0 1 1 1 0 1\n" +
-          " 1 0 0 0 0 0 1 0 0 1 1 1 1 0 1 0 0 0 0 0 1\n" +
-          " 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1\n" +
-          " 0 0 0 0 0 0 0 0 1 0 1 1 1 0 0 0 0 0 0 0 0\n" +
-          " 0 0 0 0 0 1 1 0 0 1 1 0 0 0 1 0 1 0 1 0 1\n" +
-          " 0 1 0 1 1 0 0 1 0 1 1 1 1 1 1 0 1 1 1 0 1\n" +
-          " 0 1 0 1 1 1 1 0 1 1 0 0 0 1 0 1 0 1 1 0 0\n" +
-          " 1 1 1 1 0 1 0 1 0 0 1 0 1 0 0 1 1 1 1 0 0\n" +
-          " 1 0 0 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 0 1\n" +
-          " 0 0 0 0 0 0 0 0 1 1 1 1 1 0 1 0 1 0 0 1 0\n" +
-          " 1 1 1 1 1 1 1 0 0 0 1 1 0 0 1 0 0 0 1 1 0\n" +
-          " 1 0 0 0 0 0 1 0 1 1 0 0 0 0 1 0 1 1 1 0 0\n" +
-          " 1 0 1 1 1 0 1 0 0 1 0 0 1 0 1 0 1 0 0 0 1\n" +
-          " 1 0 1 1 1 0 1 0 0 0 0 0 1 1 1 0 1 1 1 1 0\n" +
-          " 1 0 1 1 1 0 1 0 0 0 1 0 0 1 0 0 1 0 1 1 1\n" +
-          " 1 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 0 1 1 1 1\n" +
-          " 1 1 1 1 1 1 1 0 0 1 1 1 0 1 1 0 1 0 0 1 0\n" +
-          ">>\n";
+    String expected = "<<\n" +
+        " mode: BYTE\n" +
+        " ecLevel: H\n" +
+        " version: 1\n" +
+        " maskPattern: 6\n" +
+        " matrix:\n" +
+        " 1 1 1 1 1 1 1 0 0 0 1 1 0 0 1 1 1 1 1 1 1\n" +
+        " 1 0 0 0 0 0 1 0 0 1 1 0 0 0 1 0 0 0 0 0 1\n" +
+        " 1 0 1 1 1 0 1 0 1 1 0 0 0 0 1 0 1 1 1 0 1\n" +
+        " 1 0 1 1 1 0 1 0 1 1 0 1 0 0 1 0 1 1 1 0 1\n" +
+        " 1 0 1 1 1 0 1 0 0 0 1 1 0 0 1 0 1 1 1 0 1\n" +
+        " 1 0 0 0 0 0 1 0 0 1 0 0 1 0 1 0 0 0 0 0 1\n" +
+        " 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1\n" +
+        " 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0\n" +
+        " 0 0 0 1 1 0 1 1 0 1 0 0 0 0 0 0 0 1 1 0 0\n" +
+        " 0 1 0 1 1 0 0 1 0 1 1 1 1 1 1 0 1 1 1 0 1\n" +
+        " 0 1 1 1 1 0 1 0 0 1 0 1 0 1 1 1 0 0 1 0 1\n" +
+        " 1 1 1 1 1 0 0 1 0 0 0 1 1 0 0 1 0 0 1 0 0\n" +
+        " 1 0 0 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 0 1\n" +
+        " 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 1 0 0 0 1\n" +
+        " 1 1 1 1 1 1 1 0 1 0 0 1 0 1 1 0 1 0 1 0 0\n" +
+        " 1 0 0 0 0 0 1 0 0 1 0 0 0 0 1 0 1 1 1 0 0\n" +
+        " 1 0 1 1 1 0 1 0 1 1 0 1 1 0 0 0 1 1 0 0 0\n" +
+        " 1 0 1 1 1 0 1 0 1 0 1 1 1 1 1 0 0 0 1 1 0\n" +
+        " 1 0 1 1 1 0 1 0 0 0 1 0 0 1 0 0 1 0 1 1 1\n" +
+        " 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 1 1 0 0\n" +
+        " 1 1 1 1 1 1 1 0 0 1 0 1 0 0 1 0 0 0 0 0 0\n" +
+        ">>\n";
     assertEquals(expected, qrCode.toString());
   }
 
@@ -580,7 +576,7 @@ public final class EncoderTestCase extends Assert {
   }
 
   @Test
-  public void testAppend8BitBytes() throws WriterException {
+  public void testAppend8BitBytes() {
     // 0x61, 0x62, 0x63
     BitArray bits = new BitArray();
     Encoder.append8BitBytes("abc", bits, Encoder.DEFAULT_BYTE_MODE_ENCODING);
@@ -595,10 +591,10 @@ public final class EncoderTestCase extends Assert {
   @Test
   public void testAppendKanjiBytes() throws WriterException {
     BitArray bits = new BitArray();
-      Encoder.appendKanjiBytes(shiftJISString(bytes(0x93, 0x5f)), bits);
-      assertEquals(" .XX.XX.. XXXXX", bits.toString());
-      Encoder.appendKanjiBytes(shiftJISString(bytes(0xe4, 0xaa)), bits);
-      assertEquals(" .XX.XX.. XXXXXXX. X.X.X.X. X.", bits.toString());
+    Encoder.appendKanjiBytes(shiftJISString(bytes(0x93, 0x5f)), bits);
+    assertEquals(" .XX.XX.. XXXXX", bits.toString());
+    Encoder.appendKanjiBytes(shiftJISString(bytes(0xe4, 0xaa)), bits);
+    assertEquals(" .XX.XX.. XXXXXXX. X.X.X.X. X.", bits.toString());
   }
 
   // Numbers are from http://www.swetake.com/qr/qr3.html and
@@ -672,82 +668,320 @@ public final class EncoderTestCase extends Assert {
     Encoder.encode(builder.toString(), ErrorCorrectionLevel.L);
   }
 
+  @Test
+  public void testMinimalEncoder1() throws Exception {
+    verifyMinimalEncoding("A", "ALPHANUMERIC(A)", null, false);
+  }
+
+  @Test
+  public void testMinimalEncoder2() throws Exception {
+    verifyMinimalEncoding("AB", "ALPHANUMERIC(AB)", null, false);
+  }
+
+  @Test
+  public void testMinimalEncoder3() throws Exception {
+    verifyMinimalEncoding("ABC", "ALPHANUMERIC(ABC)", null, false);
+  }
+
+  @Test
+  public void testMinimalEncoder4() throws Exception {
+    verifyMinimalEncoding("ABCD", "ALPHANUMERIC(ABCD)", null, false);
+  }
+
+  @Test
+  public void testMinimalEncoder5() throws Exception {
+    verifyMinimalEncoding("ABCDE", "ALPHANUMERIC(ABCDE)", null, false);
+  }
+
+  @Test
+  public void testMinimalEncoder6() throws Exception {
+    verifyMinimalEncoding("ABCDEF", "ALPHANUMERIC(ABCDEF)", null, false);
+  }
+
+  @Test
+  public void testMinimalEncoder7() throws Exception {
+    verifyMinimalEncoding("ABCDEFG", "ALPHANUMERIC(ABCDEFG)", null, false);
+  }
+
+  @Test
+  public void testMinimalEncoder8() throws Exception {
+    verifyMinimalEncoding("1", "NUMERIC(1)", null, false);
+  }
+
+  @Test
+  public void testMinimalEncoder9() throws Exception {
+    verifyMinimalEncoding("12", "NUMERIC(12)", null, false);
+  }
+
+  @Test
+  public void testMinimalEncoder10() throws Exception {
+    verifyMinimalEncoding("123", "NUMERIC(123)", null, false);
+  }
+
+  @Test
+  public void testMinimalEncoder11() throws Exception {
+    verifyMinimalEncoding("1234", "NUMERIC(1234)", null, false);
+  }
+
+  @Test
+  public void testMinimalEncoder12() throws Exception {
+    verifyMinimalEncoding("12345", "NUMERIC(12345)", null, false);
+  }
+
+  @Test
+  public void testMinimalEncoder13() throws Exception {
+    verifyMinimalEncoding("123456", "NUMERIC(123456)", null, false);
+  }
+
+  @Test
+  public void testMinimalEncoder14() throws Exception {
+    verifyMinimalEncoding("123A", "ALPHANUMERIC(123A)", null, false);
+  }
+
+  @Test
+  public void testMinimalEncoder15() throws Exception {
+    verifyMinimalEncoding("A1", "ALPHANUMERIC(A1)", null, false);
+  }
+
+  @Test
+  public void testMinimalEncoder16() throws Exception {
+    verifyMinimalEncoding("A12", "ALPHANUMERIC(A12)", null, false);
+  }
+
+  @Test
+  public void testMinimalEncoder17() throws Exception {
+    verifyMinimalEncoding("A123", "ALPHANUMERIC(A123)", null, false);
+  }
+
+  @Test
+  public void testMinimalEncoder18() throws Exception {
+    verifyMinimalEncoding("A1234", "ALPHANUMERIC(A1234)", null, false);
+  }
+
+  @Test
+  public void testMinimalEncoder19() throws Exception {
+    verifyMinimalEncoding("A12345", "ALPHANUMERIC(A12345)", null, false);
+  }
+
+  @Test
+  public void testMinimalEncoder20() throws Exception {
+    verifyMinimalEncoding("A123456", "ALPHANUMERIC(A123456)", null, false);
+  }
+
+  @Test
+  public void testMinimalEncoder21() throws Exception {
+    verifyMinimalEncoding("A1234567", "ALPHANUMERIC(A1234567)", null, false);
+  }
+
+  @Test
+  public void testMinimalEncoder22() throws Exception {
+    verifyMinimalEncoding("A12345678", "BYTE(A),NUMERIC(12345678)", null, false);
+  }
+
+  @Test
+  public void testMinimalEncoder23() throws Exception {
+    verifyMinimalEncoding("A123456789", "BYTE(A),NUMERIC(123456789)", null, false);
+  }
+
+  @Test
+  public void testMinimalEncoder24() throws Exception {
+    verifyMinimalEncoding("A1234567890", "ALPHANUMERIC(A1),NUMERIC(234567890)", null, false);
+  }
+
+  @Test
+  public void testMinimalEncoder25() throws Exception {
+    verifyMinimalEncoding("AB1", "ALPHANUMERIC(AB1)", null, false);
+  }
+
+  @Test
+  public void testMinimalEncoder26() throws Exception {
+    verifyMinimalEncoding("AB12", "ALPHANUMERIC(AB12)", null, false);
+  }
+
+  @Test
+  public void testMinimalEncoder27() throws Exception {
+    verifyMinimalEncoding("AB123", "ALPHANUMERIC(AB123)", null, false);
+  }
+
+  @Test
+  public void testMinimalEncoder28() throws Exception {
+    verifyMinimalEncoding("AB1234", "ALPHANUMERIC(AB1234)", null, false);
+  }
+
+  @Test
+  public void testMinimalEncoder29() throws Exception {
+    verifyMinimalEncoding("ABC1", "ALPHANUMERIC(ABC1)", null, false);
+  }
+
+  @Test
+  public void testMinimalEncoder30() throws Exception {
+    verifyMinimalEncoding("ABC12", "ALPHANUMERIC(ABC12)", null, false);
+  }
+
+  @Test
+  public void testMinimalEncoder31() throws Exception {
+    verifyMinimalEncoding("ABC1234", "ALPHANUMERIC(ABC1234)", null, false);
+  }
+
+  @Test
+  public void testMinimalEncoder32() throws Exception {
+    verifyMinimalEncoding("http://foo.com", "BYTE(http://foo.com)" +
+        "", null, false);
+  }
+
+  @Test
+  public void testMinimalEncoder33() throws Exception {
+    verifyMinimalEncoding("HTTP://FOO.COM", "ALPHANUMERIC(HTTP://FOO.COM" +
+        ")", null, false);
+  }
+
+  @Test
+  public void testMinimalEncoder34() throws Exception {
+    verifyMinimalEncoding("1001114670010%01201220%107211220%140045003267781", 
+        "NUMERIC(1001114670010),ALPHANUMERIC(%01201220%107211220%),NUMERIC(140045003267781)", null, false);
+  }
+
+  @Test
+  public void testMinimalEncoder35() throws Exception {
+    verifyMinimalEncoding("\u0150", "ECI(ISO-8859-2),BYTE(.)", null, false);
+  }
+
+  @Test
+  public void testMinimalEncoder36() throws Exception {
+    verifyMinimalEncoding("\u015C", "ECI(ISO-8859-3),BYTE(.)", null, false);
+  }
+
+  @Test
+  public void testMinimalEncoder37() throws Exception {
+    verifyMinimalEncoding("\u0150\u015C", "ECI(UTF-8),BYTE(..)", null, false);
+  }
+
+  @Test
+  public void testMinimalEncoder38() throws Exception {
+    verifyMinimalEncoding("\u0150\u0150\u015C\u015C", "ECI(ISO-8859-2),BYTE(." +
+        ".),ECI(ISO-8859-3),BYTE(..)", null, false);
+  }
+
+  @Test
+  public void testMinimalEncoder39() throws Exception {
+    verifyMinimalEncoding("abcdef\u0150ghij", "ECI(ISO-8859-2),BYTE(abcde" +
+        "f.ghij)", null, false);
+  }
+
+  @Test
+  public void testMinimalEncoder40() throws Exception {
+    verifyMinimalEncoding("2938928329832983\u01502938928329832983\u015C2938928329832983", 
+        "NUMERIC(2938928329832983),ECI(ISO-8859-2),BYTE(.),NUMERIC(2938928329832983),ECI(ISO-8" +
+        "859-3),BYTE(.),NUMERIC(2938928329832983)", null, false);
+  }
+
+  @Test
+  public void testMinimalEncoder41() throws Exception {
+    verifyMinimalEncoding("1001114670010%01201220%107211220%140045003267781", "FNC1_FIRST_POSITION(),NUMERIC(100111" +
+        "4670010),ALPHANUMERIC(%01201220%107211220%),NUMERIC(140045003267781)", null, 
+        true);
+  }
+
+  @Test
+  public void testMinimalEncoder42() throws Exception {
+    // test halfwidth Katakana character (they are single byte encoded in Shift_JIS)
+    verifyMinimalEncoding("Katakana:\uFF66\uFF66\uFF66\uFF66\uFF66\uFF66", "ECI(Shift_JIS),BYTE(Katakana:......)", null
+        , false);
+  }
+
+  @Test
+  public void testMinimalEncoder43() throws Exception {
+    // The character \u30A2 encodes as double byte in Shift_JIS so KANJI is more compact in this case
+    verifyMinimalEncoding("Katakana:\u30A2\u30A2\u30A2\u30A2\u30A2\u30A2", "BYTE(Katakana:),KANJI(......)", null,
+        false);
+  }
+
+  @Test
+  public void testMinimalEncoder44() throws Exception {
+    // The character \u30A2 encodes as double byte in Shift_JIS but KANJI is not more compact in this case because
+    // KANJI is only more compact when it encodes pairs of characters. In the case of mixed text it can however be
+    // that Shift_JIS encoding is more compact as in this example
+    verifyMinimalEncoding("Katakana:\u30A2a\u30A2a\u30A2a\u30A2a\u30A2a\u30A2", "ECI(Shift_JIS),BYTE(Katakana:.a.a.a" +
+        ".a.a.)", null, false);
+  }
+
+  static void verifyMinimalEncoding(String input, String expectedResult, Charset priorityCharset, boolean isGS1) 
+      throws Exception {
+    MinimalEncoder.ResultList result = MinimalEncoder.encode(input, null, priorityCharset, isGS1,
+        ErrorCorrectionLevel.L);
+    assertEquals(result.toString(), expectedResult);
+  }
+
   private static void verifyGS1EncodedData(QRCode qrCode) {
-    String expected =
-      "<<\n" +
-          " mode: ALPHANUMERIC\n" +
-          " ecLevel: H\n" +
-          " version: 2\n" +
-          " maskPattern: 4\n" +
-          " matrix:\n" +
-          " 1 1 1 1 1 1 1 0 0 1 1 1 1 0 1 0 1 0 1 1 1 1 1 1 1\n" +
-          " 1 0 0 0 0 0 1 0 1 1 0 0 0 0 0 1 1 0 1 0 0 0 0 0 1\n" +
-          " 1 0 1 1 1 0 1 0 0 0 0 0 1 1 1 0 1 0 1 0 1 1 1 0 1\n" +
-          " 1 0 1 1 1 0 1 0 0 1 0 1 0 0 1 1 0 0 1 0 1 1 1 0 1\n" +
-          " 1 0 1 1 1 0 1 0 0 0 1 1 1 0 0 0 1 0 1 0 1 1 1 0 1\n" +
-          " 1 0 0 0 0 0 1 0 1 1 0 1 1 0 1 1 0 0 1 0 0 0 0 0 1\n" +
-          " 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1\n" +
-          " 0 0 0 0 0 0 0 0 1 1 0 1 1 0 1 1 0 0 0 0 0 0 0 0 0\n" +
-          " 0 0 0 0 1 1 1 1 0 0 1 1 0 0 0 1 1 0 1 1 0 0 0 1 0\n" +
-          " 0 1 1 0 1 1 0 0 1 1 1 0 0 0 1 1 1 1 1 1 1 0 0 0 1\n" +
-          " 0 0 1 1 1 1 1 0 1 1 1 1 1 0 1 0 0 0 0 0 0 1 1 1 0\n" +
-          " 1 0 1 1 1 0 0 1 1 1 0 1 1 1 1 1 0 1 1 0 1 1 1 0 0\n" +
-          " 0 1 0 1 0 0 1 1 1 1 1 1 0 0 1 1 0 1 0 0 0 0 0 1 0\n" +
-          " 1 0 0 1 1 1 0 0 1 1 0 0 0 1 1 0 1 0 1 0 1 0 0 0 0\n" +
-          " 0 0 1 0 0 1 1 1 0 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0\n" +
-          " 0 0 0 1 1 0 0 1 0 0 1 0 0 1 1 0 0 1 0 0 0 1 1 1 0\n" +
-          " 1 1 0 1 0 1 1 0 1 0 1 0 0 0 1 1 1 1 1 1 1 0 0 0 0\n" +
-          " 0 0 0 0 0 0 0 0 1 1 0 1 0 0 0 1 1 0 0 0 1 1 0 1 0\n" +
-          " 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 0 1 0 1 0 0 0 0\n" +
-          " 1 0 0 0 0 0 1 0 1 1 0 0 0 1 0 1 1 0 0 0 1 0 1 1 0\n" +
-          " 1 0 1 1 1 0 1 0 1 1 1 0 0 0 0 0 1 1 1 1 1 1 0 0 1\n" +
-          " 1 0 1 1 1 0 1 0 0 0 0 0 0 1 1 1 0 0 1 1 0 1 0 0 0\n" +
-          " 1 0 1 1 1 0 1 0 0 0 1 1 0 1 0 1 1 1 0 1 1 0 0 1 0\n" +
-          " 1 0 0 0 0 0 1 0 0 1 1 0 1 1 1 1 1 0 1 0 1 1 0 0 0\n" +
-          " 1 1 1 1 1 1 1 0 0 0 1 0 0 0 0 1 1 0 0 1 1 0 0 1 1\n" +
-          ">>\n";
+    String expected = "<<\n" +
+        " mode: ALPHANUMERIC\n" +
+        " ecLevel: H\n" +
+        " version: 2\n" +
+        " maskPattern: 2\n" +
+        " matrix:\n" +
+        " 1 1 1 1 1 1 1 0 1 0 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1\n" +
+        " 1 0 0 0 0 0 1 0 1 0 0 0 0 1 1 0 1 0 1 0 0 0 0 0 1\n" +
+        " 1 0 1 1 1 0 1 0 1 0 1 1 0 1 1 0 0 0 1 0 1 1 1 0 1\n" +
+        " 1 0 1 1 1 0 1 0 0 1 1 0 1 0 1 1 1 0 1 0 1 1 1 0 1\n" +
+        " 1 0 1 1 1 0 1 0 0 1 1 1 1 1 1 1 1 0 1 0 1 1 1 0 1\n" +
+        " 1 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 0 0 1 0 0 0 0 0 1\n" +
+        " 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1\n" +
+        " 0 0 0 0 0 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 0 0 0 0 0\n" +
+        " 0 0 1 1 1 0 1 0 1 1 1 1 0 1 1 0 1 1 1 1 0 0 1 1 1\n" +
+        " 0 0 0 1 1 1 0 1 0 0 1 0 0 1 0 0 1 1 1 0 0 1 0 0 1\n" +
+        " 1 0 1 1 0 0 1 0 1 1 0 0 0 0 1 0 1 1 1 0 0 1 0 0 1\n" +
+        " 0 0 1 1 0 1 0 1 1 1 1 0 0 1 1 1 1 0 0 0 1 1 0 1 1\n" +
+        " 0 0 1 0 0 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 1 1 0 1 0\n" +
+        " 1 1 1 0 1 1 0 1 0 0 0 0 0 0 0 1 1 0 1 1 0 1 0 0 0\n" +
+        " 1 0 1 0 1 0 1 1 0 1 0 1 0 1 1 0 0 0 0 0 1 1 0 0 1\n" +
+        " 1 0 0 1 0 1 0 1 0 0 0 1 1 1 1 0 1 0 1 0 0 1 0 0 1\n" +
+        " 1 0 1 0 0 1 1 1 0 1 1 0 0 1 0 0 1 1 1 1 1 1 0 0 0\n" +
+        " 0 0 0 0 0 0 0 0 1 0 0 1 0 1 1 0 1 0 0 0 1 0 0 1 0\n" +
+        " 1 1 1 1 1 1 1 0 0 0 0 1 0 0 1 1 1 0 1 0 1 0 1 1 1\n" +
+        " 1 0 0 0 0 0 1 0 0 1 1 1 1 1 0 1 1 0 0 0 1 0 0 0 1\n" +
+        " 1 0 1 1 1 0 1 0 1 0 1 0 0 1 1 1 1 1 1 1 1 0 0 0 1\n" +
+        " 1 0 1 1 1 0 1 0 1 1 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0\n" +
+        " 1 0 1 1 1 0 1 0 1 0 0 0 1 1 0 1 0 0 1 1 1 0 1 0 1\n" +
+        " 1 0 0 0 0 0 1 0 0 1 0 1 0 1 1 1 0 1 0 0 1 1 1 1 1\n" +
+        " 1 1 1 1 1 1 1 0 0 1 1 0 0 1 1 0 1 0 0 0 0 1 0 1 1\n" +
+        ">>\n";
     assertEquals(expected, qrCode.toString());
   }
 
   private static void verifyNotGS1EncodedData(QRCode qrCode) {
-    String expected =
-      "<<\n" +
-          " mode: ALPHANUMERIC\n" +
-          " ecLevel: H\n" +
-          " version: 1\n" +
-          " maskPattern: 4\n" +
-          " matrix:\n" +
-          " 1 1 1 1 1 1 1 0 0 1 0 1 0 0 1 1 1 1 1 1 1\n" +
-          " 1 0 0 0 0 0 1 0 1 0 1 0 1 0 1 0 0 0 0 0 1\n" +
-          " 1 0 1 1 1 0 1 0 0 0 0 0 0 0 1 0 1 1 1 0 1\n" +
-          " 1 0 1 1 1 0 1 0 0 1 0 0 1 0 1 0 1 1 1 0 1\n" +
-          " 1 0 1 1 1 0 1 0 0 1 0 1 0 0 1 0 1 1 1 0 1\n" +
-          " 1 0 0 0 0 0 1 0 1 0 0 1 1 0 1 0 0 0 0 0 1\n" +
-          " 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1\n" +
-          " 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0\n" +
-          " 0 0 0 0 1 1 1 1 0 1 1 0 1 0 1 1 0 0 0 1 0\n" +
-          " 0 0 0 0 1 1 0 1 1 1 0 0 1 1 1 1 0 1 1 0 1\n" +
-          " 1 0 0 0 0 1 1 0 0 1 0 1 0 0 0 1 1 1 0 1 1\n" +
-          " 1 0 0 1 1 1 0 0 1 1 1 1 0 0 0 0 1 0 0 0 0\n" +
-          " 0 1 1 1 1 1 1 0 1 0 1 0 1 1 1 0 0 1 1 0 0\n" +
-          " 0 0 0 0 0 0 0 0 1 1 0 0 0 1 1 0 0 0 1 0 1\n" +
-          " 1 1 1 1 1 1 1 0 1 1 1 1 0 0 0 0 0 1 1 0 0\n" +
-          " 1 0 0 0 0 0 1 0 1 1 0 1 0 0 0 1 0 1 1 1 1\n" +
-          " 1 0 1 1 1 0 1 0 1 0 0 1 0 0 0 1 1 0 0 1 1\n" +
-          " 1 0 1 1 1 0 1 0 0 0 1 1 0 1 0 0 0 0 1 1 1\n" +
-          " 1 0 1 1 1 0 1 0 0 1 0 1 0 0 0 1 1 0 0 0 0\n" +
-          " 1 0 0 0 0 0 1 0 0 1 0 0 1 0 0 1 1 0 0 0 1\n" +
-          " 1 1 1 1 1 1 1 0 0 0 1 0 0 1 0 0 0 0 1 1 1\n" +
-          ">>\n";
+    String expected = "<<\n" +
+        " mode: ALPHANUMERIC\n" +
+        " ecLevel: H\n" +
+        " version: 1\n" +
+        " maskPattern: 0\n" +
+        " matrix:\n" +
+        " 1 1 1 1 1 1 1 0 1 1 1 1 0 0 1 1 1 1 1 1 1\n" +
+        " 1 0 0 0 0 0 1 0 0 1 1 1 0 0 1 0 0 0 0 0 1\n" +
+        " 1 0 1 1 1 0 1 0 0 1 0 1 1 0 1 0 1 1 1 0 1\n" +
+        " 1 0 1 1 1 0 1 0 1 1 1 0 1 0 1 0 1 1 1 0 1\n" +
+        " 1 0 1 1 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1\n" +
+        " 1 0 0 0 0 0 1 0 0 1 0 0 0 0 1 0 0 0 0 0 1\n" +
+        " 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1\n" +
+        " 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0\n" +
+        " 0 0 1 0 1 1 1 0 1 1 0 0 1 1 0 0 0 1 0 0 1\n" +
+        " 1 0 1 1 1 0 0 1 0 0 0 1 0 1 0 0 0 0 0 0 0\n" +
+        " 0 0 1 1 0 0 1 0 1 0 0 0 1 0 1 0 1 0 1 1 0\n" +
+        " 1 1 0 1 0 1 0 1 1 1 0 1 0 1 0 0 0 0 0 1 0\n" +
+        " 0 0 1 1 0 1 1 1 1 0 0 0 1 0 1 0 1 1 1 1 0\n" +
+        " 0 0 0 0 0 0 0 0 1 0 0 1 1 1 0 1 0 1 0 0 0\n" +
+        " 1 1 1 1 1 1 1 0 0 0 1 0 1 0 1 1 0 0 0 0 1\n" +
+        " 1 0 0 0 0 0 1 0 1 1 1 1 0 1 0 1 1 1 1 0 1\n" +
+        " 1 0 1 1 1 0 1 0 1 0 1 1 0 1 0 1 0 0 0 0 1\n" +
+        " 1 0 1 1 1 0 1 0 0 1 1 0 1 1 1 1 0 1 0 1 0\n" +
+        " 1 0 1 1 1 0 1 0 1 0 0 0 1 0 1 0 1 1 1 0 1\n" +
+        " 1 0 0 0 0 0 1 0 0 1 1 0 1 1 0 1 0 0 0 1 1\n" +
+        " 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 0 1 0 1\n" +
+        ">>\n";
     assertEquals(expected, qrCode.toString());
   }
 
-  private static String shiftJISString(byte[] bytes) throws WriterException {
-    try {
-      return new String(bytes, "Shift_JIS");
-    } catch (UnsupportedEncodingException uee) {
-      throw new WriterException(uee.toString());
-    }
+  private static String shiftJISString(byte[] bytes) {
+    return new String(bytes, StringUtils.SHIFT_JIS_CHARSET);
   }
 
 }
diff --git a/core/src/test/java/com/google/zxing/qrcode/encoder/MaskUtilTestCase.java b/core/src/test/java/com/google/zxing/qrcode/encoder/MaskUtilTestCase.java
index 85a0fd0..2cb6a29 100644
--- a/core/src/test/java/com/google/zxing/qrcode/encoder/MaskUtilTestCase.java
+++ b/core/src/test/java/com/google/zxing/qrcode/encoder/MaskUtilTestCase.java
@@ -118,6 +118,16 @@ public final class MaskUtilTestCase extends Assert {
     matrix.set(9, 0, 0);
     matrix.set(10, 0, 0);
     assertEquals(40, MaskUtil.applyMaskPenaltyRule3(matrix));
+    // Horizontal 1011101.
+    matrix = new ByteMatrix(7, 1);
+    matrix.set(0, 0, 1);
+    matrix.set(1, 0, 0);
+    matrix.set(2, 0, 1);
+    matrix.set(3, 0, 1);
+    matrix.set(4, 0, 1);
+    matrix.set(5, 0, 0);
+    matrix.set(6, 0, 1);
+    assertEquals(0, MaskUtil.applyMaskPenaltyRule3(matrix));
     // Vertical 00001011101.
     matrix = new ByteMatrix(1, 11);
     matrix.set(0, 0, 0);
@@ -145,7 +155,16 @@ public final class MaskUtilTestCase extends Assert {
     matrix.set(0, 8, 0);
     matrix.set(0, 9, 0);
     matrix.set(0, 10, 0);
-    assertEquals(40, MaskUtil.applyMaskPenaltyRule3(matrix));
+    // Vertical 1011101.
+    matrix = new ByteMatrix(1, 7);
+    matrix.set(0, 0, 1);
+    matrix.set(0, 1, 0);
+    matrix.set(0, 2, 1);
+    matrix.set(0, 3, 1);
+    matrix.set(0, 4, 1);
+    matrix.set(0, 5, 0);
+    matrix.set(0, 6, 1);
+    assertEquals(0, MaskUtil.applyMaskPenaltyRule3(matrix));
   }
 
   @Test
@@ -185,75 +204,75 @@ public final class MaskUtilTestCase extends Assert {
   @Test
   public void testGetDataMaskBit() {
     int[][] mask0 = {
-      {1, 0, 1, 0, 1, 0},
-      {0, 1, 0, 1, 0, 1},
-      {1, 0, 1, 0, 1, 0},
-      {0, 1, 0, 1, 0, 1},
-      {1, 0, 1, 0, 1, 0},
-      {0, 1, 0, 1, 0, 1},
+        {1, 0, 1, 0, 1, 0},
+        {0, 1, 0, 1, 0, 1},
+        {1, 0, 1, 0, 1, 0},
+        {0, 1, 0, 1, 0, 1},
+        {1, 0, 1, 0, 1, 0},
+        {0, 1, 0, 1, 0, 1},
     };
     assertTrue(testGetDataMaskBitInternal(0, mask0));
     int[][] mask1 = {
-      {1, 1, 1, 1, 1, 1},
-      {0, 0, 0, 0, 0, 0},
-      {1, 1, 1, 1, 1, 1},
-      {0, 0, 0, 0, 0, 0},
-      {1, 1, 1, 1, 1, 1},
-      {0, 0, 0, 0, 0, 0},
+        {1, 1, 1, 1, 1, 1},
+        {0, 0, 0, 0, 0, 0},
+        {1, 1, 1, 1, 1, 1},
+        {0, 0, 0, 0, 0, 0},
+        {1, 1, 1, 1, 1, 1},
+        {0, 0, 0, 0, 0, 0},
     };
     assertTrue(testGetDataMaskBitInternal(1, mask1));
     int[][] mask2 = {
-      {1, 0, 0, 1, 0, 0},
-      {1, 0, 0, 1, 0, 0},
-      {1, 0, 0, 1, 0, 0},
-      {1, 0, 0, 1, 0, 0},
-      {1, 0, 0, 1, 0, 0},
-      {1, 0, 0, 1, 0, 0},
+        {1, 0, 0, 1, 0, 0},
+        {1, 0, 0, 1, 0, 0},
+        {1, 0, 0, 1, 0, 0},
+        {1, 0, 0, 1, 0, 0},
+        {1, 0, 0, 1, 0, 0},
+        {1, 0, 0, 1, 0, 0},
     };
     assertTrue(testGetDataMaskBitInternal(2, mask2));
     int[][] mask3 = {
-      {1, 0, 0, 1, 0, 0},
-      {0, 0, 1, 0, 0, 1},
-      {0, 1, 0, 0, 1, 0},
-      {1, 0, 0, 1, 0, 0},
-      {0, 0, 1, 0, 0, 1},
-      {0, 1, 0, 0, 1, 0},
+        {1, 0, 0, 1, 0, 0},
+        {0, 0, 1, 0, 0, 1},
+        {0, 1, 0, 0, 1, 0},
+        {1, 0, 0, 1, 0, 0},
+        {0, 0, 1, 0, 0, 1},
+        {0, 1, 0, 0, 1, 0},
     };
     assertTrue(testGetDataMaskBitInternal(3, mask3));
     int[][] mask4 = {
-      {1, 1, 1, 0, 0, 0},
-      {1, 1, 1, 0, 0, 0},
-      {0, 0, 0, 1, 1, 1},
-      {0, 0, 0, 1, 1, 1},
-      {1, 1, 1, 0, 0, 0},
-      {1, 1, 1, 0, 0, 0},
+        {1, 1, 1, 0, 0, 0},
+        {1, 1, 1, 0, 0, 0},
+        {0, 0, 0, 1, 1, 1},
+        {0, 0, 0, 1, 1, 1},
+        {1, 1, 1, 0, 0, 0},
+        {1, 1, 1, 0, 0, 0},
     };
     assertTrue(testGetDataMaskBitInternal(4, mask4));
     int[][] mask5 = {
-      {1, 1, 1, 1, 1, 1},
-      {1, 0, 0, 0, 0, 0},
-      {1, 0, 0, 1, 0, 0},
-      {1, 0, 1, 0, 1, 0},
-      {1, 0, 0, 1, 0, 0},
-      {1, 0, 0, 0, 0, 0},
+        {1, 1, 1, 1, 1, 1},
+        {1, 0, 0, 0, 0, 0},
+        {1, 0, 0, 1, 0, 0},
+        {1, 0, 1, 0, 1, 0},
+        {1, 0, 0, 1, 0, 0},
+        {1, 0, 0, 0, 0, 0},
     };
     assertTrue(testGetDataMaskBitInternal(5, mask5));
     int[][] mask6 = {
-      {1, 1, 1, 1, 1, 1},
-      {1, 1, 1, 0, 0, 0},
-      {1, 1, 0, 1, 1, 0},
-      {1, 0, 1, 0, 1, 0},
-      {1, 0, 1, 1, 0, 1},
-      {1, 0, 0, 0, 1, 1},
+        {1, 1, 1, 1, 1, 1},
+        {1, 1, 1, 0, 0, 0},
+        {1, 1, 0, 1, 1, 0},
+        {1, 0, 1, 0, 1, 0},
+        {1, 0, 1, 1, 0, 1},
+        {1, 0, 0, 0, 1, 1},
     };
     assertTrue(testGetDataMaskBitInternal(6, mask6));
     int[][] mask7 = {
-      {1, 0, 1, 0, 1, 0},
-      {0, 0, 0, 1, 1, 1},
-      {1, 0, 0, 0, 1, 1},
-      {0, 1, 0, 1, 0, 1},
-      {1, 1, 1, 0, 0, 0},
-      {0, 1, 1, 1, 0, 0},
+        {1, 0, 1, 0, 1, 0},
+        {0, 0, 0, 1, 1, 1},
+        {1, 0, 0, 0, 1, 1},
+        {0, 1, 0, 1, 0, 1},
+        {1, 1, 1, 0, 0, 0},
+        {0, 1, 1, 1, 0, 0},
     };
     assertTrue(testGetDataMaskBitInternal(7, mask7));
   }
diff --git a/core/src/test/java/com/google/zxing/qrcode/encoder/QRCodeTestCase.java b/core/src/test/java/com/google/zxing/qrcode/encoder/QRCodeTestCase.java
index dfee6e3..dc198d5 100644
--- a/core/src/test/java/com/google/zxing/qrcode/encoder/QRCodeTestCase.java
+++ b/core/src/test/java/com/google/zxing/qrcode/encoder/QRCodeTestCase.java
@@ -62,13 +62,13 @@ public final class QRCodeTestCase extends Assert {
   public void testToString1() {
     QRCode qrCode = new QRCode();
     String expected =
-      "<<\n" +
-      " mode: null\n" +
-      " ecLevel: null\n" +
-      " version: null\n" +
-      " maskPattern: -1\n" +
-      " matrix: null\n" +
-      ">>\n";
+        "<<\n" +
+        " mode: null\n" +
+        " ecLevel: null\n" +
+        " version: null\n" +
+        " maskPattern: -1\n" +
+        " matrix: null\n" +
+        ">>\n";
     assertEquals(expected, qrCode.toString());
   }
 
diff --git a/debian/changelog b/debian/changelog
index 97c0fcb..a389f0c 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+zxing (3.5.1+git20221101.1.bc88dd1+ds-1) UNRELEASED; urgency=low
+
+  * New upstream snapshot.
+
+ -- Debian Janitor <janitor@jelmer.uk>  Fri, 25 Nov 2022 03:37:25 -0000
+
 zxing (3.4.1+ds-1) unstable; urgency=medium
 
   [ Andrej Shadura ]
diff --git a/debian/patches/01_change-goal b/debian/patches/01_change-goal
index 3369adc..2cf3074 100644
--- a/debian/patches/01_change-goal
+++ b/debian/patches/01_change-goal
@@ -2,9 +2,11 @@ Description: Change goal of maven-bundle-plugin to manifest
 Forwarded:   No
 Author:      Mechtilde Stehmann <mechtilde@debian.org>
 Last-Update: 2019-10-27
---- a/core/pom.xml
-+++ b/core/pom.xml
-@@ -70,7 +70,8 @@
+Index: zxing.git/core/pom.xml
+===================================================================
+--- zxing.git.orig/core/pom.xml
++++ zxing.git/core/pom.xml
+@@ -67,7 +67,8 @@
          <executions>
            <execution>
              <goals>
diff --git a/docs/_config.yml b/docs/_config.yml
new file mode 100644
index 0000000..1885487
--- /dev/null
+++ b/docs/_config.yml
@@ -0,0 +1 @@
+theme: jekyll-theme-midnight
\ No newline at end of file
diff --git a/docs/apidocs/allclasses-frame.html b/docs/apidocs/allclasses-frame.html
index 7b8655d..a7d1569 100644
--- a/docs/apidocs/allclasses-frame.html
+++ b/docs/apidocs/allclasses-frame.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>All Classes (ZXing 3.4.0 API)</title>
+<title>All Classes (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
 <script type="text/javascript" src="script.js"></script>
 </head>
@@ -75,6 +75,9 @@
 <li><a href="com/google/zxing/oned/EAN13Writer.html" title="class in com.google.zxing.oned" target="classFrame">EAN13Writer</a></li>
 <li><a href="com/google/zxing/oned/EAN8Reader.html" title="class in com.google.zxing.oned" target="classFrame">EAN8Reader</a></li>
 <li><a href="com/google/zxing/oned/EAN8Writer.html" title="class in com.google.zxing.oned" target="classFrame">EAN8Writer</a></li>
+<li><a href="com/google/zxing/common/ECIEncoderSet.html" title="class in com.google.zxing.common" target="classFrame">ECIEncoderSet</a></li>
+<li><a href="com/google/zxing/common/ECIInput.html" title="interface in com.google.zxing.common" target="classFrame"><span class="interfaceName">ECIInput</span></a></li>
+<li><a href="com/google/zxing/common/ECIStringBuilder.html" title="class in com.google.zxing.common" target="classFrame">ECIStringBuilder</a></li>
 <li><a href="com/google/zxing/client/result/EmailAddressParsedResult.html" title="class in com.google.zxing.client.result" target="classFrame">EmailAddressParsedResult</a></li>
 <li><a href="com/google/zxing/client/result/EmailAddressResultParser.html" title="class in com.google.zxing.client.result" target="classFrame">EmailAddressResultParser</a></li>
 <li><a href="com/google/zxing/client/result/EmailDoCoMoResultParser.html" title="class in com.google.zxing.client.result" target="classFrame">EmailDoCoMoResultParser</a></li>
@@ -114,10 +117,13 @@
 <li><a href="com/google/zxing/client/j2se/MatrixToImageConfig.html" title="class in com.google.zxing.client.j2se" target="classFrame">MatrixToImageConfig</a></li>
 <li><a href="com/google/zxing/client/j2se/MatrixToImageWriter.html" title="class in com.google.zxing.client.j2se" target="classFrame">MatrixToImageWriter</a></li>
 <li><a href="com/google/zxing/maxicode/MaxiCodeReader.html" title="class in com.google.zxing.maxicode" target="classFrame">MaxiCodeReader</a></li>
+<li><a href="com/google/zxing/common/MinimalECIInput.html" title="class in com.google.zxing.common" target="classFrame">MinimalECIInput</a></li>
+<li><a href="com/google/zxing/datamatrix/encoder/MinimalEncoder.html" title="class in com.google.zxing.datamatrix.encoder" target="classFrame">MinimalEncoder</a></li>
 <li><a href="com/google/zxing/qrcode/decoder/Mode.html" title="enum in com.google.zxing.qrcode.decoder" target="classFrame">Mode</a></li>
 <li><a href="com/google/zxing/pdf417/decoder/ec/ModulusGF.html" title="class in com.google.zxing.pdf417.decoder.ec" target="classFrame">ModulusGF</a></li>
 <li><a href="com/google/zxing/common/detector/MonochromeRectangleDetector.html" title="class in com.google.zxing.common.detector" target="classFrame">MonochromeRectangleDetector</a></li>
 <li><a href="com/google/zxing/multi/qrcode/detector/MultiDetector.html" title="class in com.google.zxing.multi.qrcode.detector" target="classFrame">MultiDetector</a></li>
+<li><a href="com/google/zxing/multi/qrcode/detector/MultiFinderPatternFinder.html" title="class in com.google.zxing.multi.qrcode.detector" target="classFrame">MultiFinderPatternFinder</a></li>
 <li><a href="com/google/zxing/oned/MultiFormatOneDReader.html" title="class in com.google.zxing.oned" target="classFrame">MultiFormatOneDReader</a></li>
 <li><a href="com/google/zxing/MultiFormatReader.html" title="class in com.google.zxing" target="classFrame">MultiFormatReader</a></li>
 <li><a href="com/google/zxing/oned/MultiFormatUPCEANReader.html" title="class in com.google.zxing.oned" target="classFrame">MultiFormatUPCEANReader</a></li>
@@ -132,6 +138,7 @@
 <li><a href="com/google/zxing/pdf417/encoder/PDF417.html" title="class in com.google.zxing.pdf417.encoder" target="classFrame">PDF417</a></li>
 <li><a href="com/google/zxing/pdf417/PDF417Common.html" title="class in com.google.zxing.pdf417" target="classFrame">PDF417Common</a></li>
 <li><a href="com/google/zxing/pdf417/detector/PDF417DetectorResult.html" title="class in com.google.zxing.pdf417.detector" target="classFrame">PDF417DetectorResult</a></li>
+<li><a href="com/google/zxing/pdf417/encoder/PDF417HighLevelEncoderTestAdapter.html" title="class in com.google.zxing.pdf417.encoder" target="classFrame">PDF417HighLevelEncoderTestAdapter</a></li>
 <li><a href="com/google/zxing/pdf417/PDF417Reader.html" title="class in com.google.zxing.pdf417" target="classFrame">PDF417Reader</a></li>
 <li><a href="com/google/zxing/pdf417/PDF417ResultMetadata.html" title="class in com.google.zxing.pdf417" target="classFrame">PDF417ResultMetadata</a></li>
 <li><a href="com/google/zxing/pdf417/decoder/PDF417ScanningDecoder.html" title="class in com.google.zxing.pdf417.decoder" target="classFrame">PDF417ScanningDecoder</a></li>
@@ -170,6 +177,7 @@
 <li><a href="com/google/zxing/client/result/TelParsedResult.html" title="class in com.google.zxing.client.result" target="classFrame">TelParsedResult</a></li>
 <li><a href="com/google/zxing/client/result/TelResultParser.html" title="class in com.google.zxing.client.result" target="classFrame">TelResultParser</a></li>
 <li><a href="com/google/zxing/client/result/TextParsedResult.html" title="class in com.google.zxing.client.result" target="classFrame">TextParsedResult</a></li>
+<li><a href="com/google/zxing/web/TimeoutFilter.html" title="class in com.google.zxing.web" target="classFrame">TimeoutFilter</a></li>
 <li><a href="com/google/zxing/oned/UPCAReader.html" title="class in com.google.zxing.oned" target="classFrame">UPCAReader</a></li>
 <li><a href="com/google/zxing/oned/UPCAWriter.html" title="class in com.google.zxing.oned" target="classFrame">UPCAWriter</a></li>
 <li><a href="com/google/zxing/oned/UPCEANReader.html" title="class in com.google.zxing.oned" target="classFrame">UPCEANReader</a></li>
diff --git a/docs/apidocs/allclasses-noframe.html b/docs/apidocs/allclasses-noframe.html
index 483b61f..6a1d671 100644
--- a/docs/apidocs/allclasses-noframe.html
+++ b/docs/apidocs/allclasses-noframe.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>All Classes (ZXing 3.4.0 API)</title>
+<title>All Classes (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
 <script type="text/javascript" src="script.js"></script>
 </head>
@@ -75,6 +75,9 @@
 <li><a href="com/google/zxing/oned/EAN13Writer.html" title="class in com.google.zxing.oned">EAN13Writer</a></li>
 <li><a href="com/google/zxing/oned/EAN8Reader.html" title="class in com.google.zxing.oned">EAN8Reader</a></li>
 <li><a href="com/google/zxing/oned/EAN8Writer.html" title="class in com.google.zxing.oned">EAN8Writer</a></li>
+<li><a href="com/google/zxing/common/ECIEncoderSet.html" title="class in com.google.zxing.common">ECIEncoderSet</a></li>
+<li><a href="com/google/zxing/common/ECIInput.html" title="interface in com.google.zxing.common"><span class="interfaceName">ECIInput</span></a></li>
+<li><a href="com/google/zxing/common/ECIStringBuilder.html" title="class in com.google.zxing.common">ECIStringBuilder</a></li>
 <li><a href="com/google/zxing/client/result/EmailAddressParsedResult.html" title="class in com.google.zxing.client.result">EmailAddressParsedResult</a></li>
 <li><a href="com/google/zxing/client/result/EmailAddressResultParser.html" title="class in com.google.zxing.client.result">EmailAddressResultParser</a></li>
 <li><a href="com/google/zxing/client/result/EmailDoCoMoResultParser.html" title="class in com.google.zxing.client.result">EmailDoCoMoResultParser</a></li>
@@ -114,10 +117,13 @@
 <li><a href="com/google/zxing/client/j2se/MatrixToImageConfig.html" title="class in com.google.zxing.client.j2se">MatrixToImageConfig</a></li>
 <li><a href="com/google/zxing/client/j2se/MatrixToImageWriter.html" title="class in com.google.zxing.client.j2se">MatrixToImageWriter</a></li>
 <li><a href="com/google/zxing/maxicode/MaxiCodeReader.html" title="class in com.google.zxing.maxicode">MaxiCodeReader</a></li>
+<li><a href="com/google/zxing/common/MinimalECIInput.html" title="class in com.google.zxing.common">MinimalECIInput</a></li>
+<li><a href="com/google/zxing/datamatrix/encoder/MinimalEncoder.html" title="class in com.google.zxing.datamatrix.encoder">MinimalEncoder</a></li>
 <li><a href="com/google/zxing/qrcode/decoder/Mode.html" title="enum in com.google.zxing.qrcode.decoder">Mode</a></li>
 <li><a href="com/google/zxing/pdf417/decoder/ec/ModulusGF.html" title="class in com.google.zxing.pdf417.decoder.ec">ModulusGF</a></li>
 <li><a href="com/google/zxing/common/detector/MonochromeRectangleDetector.html" title="class in com.google.zxing.common.detector">MonochromeRectangleDetector</a></li>
 <li><a href="com/google/zxing/multi/qrcode/detector/MultiDetector.html" title="class in com.google.zxing.multi.qrcode.detector">MultiDetector</a></li>
+<li><a href="com/google/zxing/multi/qrcode/detector/MultiFinderPatternFinder.html" title="class in com.google.zxing.multi.qrcode.detector">MultiFinderPatternFinder</a></li>
 <li><a href="com/google/zxing/oned/MultiFormatOneDReader.html" title="class in com.google.zxing.oned">MultiFormatOneDReader</a></li>
 <li><a href="com/google/zxing/MultiFormatReader.html" title="class in com.google.zxing">MultiFormatReader</a></li>
 <li><a href="com/google/zxing/oned/MultiFormatUPCEANReader.html" title="class in com.google.zxing.oned">MultiFormatUPCEANReader</a></li>
@@ -132,6 +138,7 @@
 <li><a href="com/google/zxing/pdf417/encoder/PDF417.html" title="class in com.google.zxing.pdf417.encoder">PDF417</a></li>
 <li><a href="com/google/zxing/pdf417/PDF417Common.html" title="class in com.google.zxing.pdf417">PDF417Common</a></li>
 <li><a href="com/google/zxing/pdf417/detector/PDF417DetectorResult.html" title="class in com.google.zxing.pdf417.detector">PDF417DetectorResult</a></li>
+<li><a href="com/google/zxing/pdf417/encoder/PDF417HighLevelEncoderTestAdapter.html" title="class in com.google.zxing.pdf417.encoder">PDF417HighLevelEncoderTestAdapter</a></li>
 <li><a href="com/google/zxing/pdf417/PDF417Reader.html" title="class in com.google.zxing.pdf417">PDF417Reader</a></li>
 <li><a href="com/google/zxing/pdf417/PDF417ResultMetadata.html" title="class in com.google.zxing.pdf417">PDF417ResultMetadata</a></li>
 <li><a href="com/google/zxing/pdf417/decoder/PDF417ScanningDecoder.html" title="class in com.google.zxing.pdf417.decoder">PDF417ScanningDecoder</a></li>
@@ -170,6 +177,7 @@
 <li><a href="com/google/zxing/client/result/TelParsedResult.html" title="class in com.google.zxing.client.result">TelParsedResult</a></li>
 <li><a href="com/google/zxing/client/result/TelResultParser.html" title="class in com.google.zxing.client.result">TelResultParser</a></li>
 <li><a href="com/google/zxing/client/result/TextParsedResult.html" title="class in com.google.zxing.client.result">TextParsedResult</a></li>
+<li><a href="com/google/zxing/web/TimeoutFilter.html" title="class in com.google.zxing.web">TimeoutFilter</a></li>
 <li><a href="com/google/zxing/oned/UPCAReader.html" title="class in com.google.zxing.oned">UPCAReader</a></li>
 <li><a href="com/google/zxing/oned/UPCAWriter.html" title="class in com.google.zxing.oned">UPCAWriter</a></li>
 <li><a href="com/google/zxing/oned/UPCEANReader.html" title="class in com.google.zxing.oned">UPCEANReader</a></li>
diff --git a/docs/apidocs/com/google/zxing/BarcodeFormat.html b/docs/apidocs/com/google/zxing/BarcodeFormat.html
index 81232bb..83191c5 100644
--- a/docs/apidocs/com/google/zxing/BarcodeFormat.html
+++ b/docs/apidocs/com/google/zxing/BarcodeFormat.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>BarcodeFormat (ZXing 3.4.0 API)</title>
+<title>BarcodeFormat (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="BarcodeFormat (ZXing 3.4.0 API)";
+            parent.document.title="BarcodeFormat (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -573,6 +573,6 @@ not permitted.)</div>
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/Binarizer.html b/docs/apidocs/com/google/zxing/Binarizer.html
index d0be3a0..53556cd 100644
--- a/docs/apidocs/com/google/zxing/Binarizer.html
+++ b/docs/apidocs/com/google/zxing/Binarizer.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Binarizer (ZXing 3.4.0 API)</title>
+<title>Binarizer (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Binarizer (ZXing 3.4.0 API)";
+            parent.document.title="Binarizer (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -392,6 +392,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/BinaryBitmap.html b/docs/apidocs/com/google/zxing/BinaryBitmap.html
index 6010de2..1e2e9c4 100644
--- a/docs/apidocs/com/google/zxing/BinaryBitmap.html
+++ b/docs/apidocs/com/google/zxing/BinaryBitmap.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>BinaryBitmap (ZXing 3.4.0 API)</title>
+<title>BinaryBitmap (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="BinaryBitmap (ZXing 3.4.0 API)";
+            parent.document.title="BinaryBitmap (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -476,6 +476,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/ChecksumException.html b/docs/apidocs/com/google/zxing/ChecksumException.html
index 93e3d38..33bf2a6 100644
--- a/docs/apidocs/com/google/zxing/ChecksumException.html
+++ b/docs/apidocs/com/google/zxing/ChecksumException.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>ChecksumException (ZXing 3.4.0 API)</title>
+<title>ChecksumException (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="ChecksumException (ZXing 3.4.0 API)";
+            parent.document.title="ChecksumException (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -185,7 +185,7 @@ extends <a href="../../../com/google/zxing/ReaderException.html" title="class in
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;com.google.zxing.<a href="../../../com/google/zxing/ReaderException.html" title="class in com.google.zxing">ReaderException</a></h3>
-<code><a href="../../../com/google/zxing/ReaderException.html#fillInStackTrace--">fillInStackTrace</a></code></li>
+<code><a href="../../../com/google/zxing/ReaderException.html#fillInStackTrace--">fillInStackTrace</a>, <a href="../../../com/google/zxing/ReaderException.html#setStackTrace-boolean-">setStackTrace</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Throwable">
@@ -302,6 +302,6 @@ extends <a href="../../../com/google/zxing/ReaderException.html" title="class in
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/DecodeHintType.html b/docs/apidocs/com/google/zxing/DecodeHintType.html
index 826376c..2162238 100644
--- a/docs/apidocs/com/google/zxing/DecodeHintType.html
+++ b/docs/apidocs/com/google/zxing/DecodeHintType.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>DecodeHintType (ZXing 3.4.0 API)</title>
+<title>DecodeHintType (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="DecodeHintType (ZXing 3.4.0 API)";
+            parent.document.title="DecodeHintType (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -157,47 +157,52 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?i
 </td>
 </tr>
 <tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../com/google/zxing/DecodeHintType.html#ALSO_INVERTED">ALSO_INVERTED</a></span></code>
+<div class="block">If true, also tries to decode as inverted image.</div>
+</td>
+</tr>
+<tr class="rowColor">
 <td class="colOne"><code><span class="memberNameLink"><a href="../../../com/google/zxing/DecodeHintType.html#ASSUME_CODE_39_CHECK_DIGIT">ASSUME_CODE_39_CHECK_DIGIT</a></span></code>
 <div class="block">Assume Code 39 codes employ a check digit.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><code><span class="memberNameLink"><a href="../../../com/google/zxing/DecodeHintType.html#ASSUME_GS1">ASSUME_GS1</a></span></code>
 <div class="block">Assume the barcode is being processed as a GS1 barcode, and modify behavior as needed.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><code><span class="memberNameLink"><a href="../../../com/google/zxing/DecodeHintType.html#CHARACTER_SET">CHARACTER_SET</a></span></code>
 <div class="block">Specifies what character encoding to use when decoding, where applicable (type String)</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><code><span class="memberNameLink"><a href="../../../com/google/zxing/DecodeHintType.html#NEED_RESULT_POINT_CALLBACK">NEED_RESULT_POINT_CALLBACK</a></span></code>
 <div class="block">The caller needs to be notified via callback when a possible <a href="../../../com/google/zxing/ResultPoint.html" title="class in com.google.zxing"><code>ResultPoint</code></a>
  is found.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><code><span class="memberNameLink"><a href="../../../com/google/zxing/DecodeHintType.html#OTHER">OTHER</a></span></code>
 <div class="block">Unspecified, application-specific hint.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><code><span class="memberNameLink"><a href="../../../com/google/zxing/DecodeHintType.html#POSSIBLE_FORMATS">POSSIBLE_FORMATS</a></span></code>
 <div class="block">Image is known to be of one of a few possible formats.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><code><span class="memberNameLink"><a href="../../../com/google/zxing/DecodeHintType.html#PURE_BARCODE">PURE_BARCODE</a></span></code>
 <div class="block">Image is a pure monochrome image of a barcode.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><code><span class="memberNameLink"><a href="../../../com/google/zxing/DecodeHintType.html#RETURN_CODABAR_START_END">RETURN_CODABAR_START_END</a></span></code>
 <div class="block">If true, return the start and end digits in a Codabar barcode instead of stripping them.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><code><span class="memberNameLink"><a href="../../../com/google/zxing/DecodeHintType.html#TRY_HARDER">TRY_HARDER</a></span></code>
 <div class="block">Spend more time to try to find a barcode; optimize for accuracy, not speed.</div>
 </td>
@@ -375,7 +380,7 @@ the order they are declared.</div>
 <a name="ALLOWED_EAN_EXTENSIONS">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>ALLOWED_EAN_EXTENSIONS</h4>
 <pre>public static final&nbsp;<a href="../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a> ALLOWED_EAN_EXTENSIONS</pre>
@@ -386,6 +391,17 @@ the order they are declared.</div>
  at all.</div>
 </li>
 </ul>
+<a name="ALSO_INVERTED">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>ALSO_INVERTED</h4>
+<pre>public static final&nbsp;<a href="../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a> ALSO_INVERTED</pre>
+<div class="block">If true, also tries to decode as inverted image. All configured decoders are simply called a
+ second time with an inverted image. Doesn't matter what it maps to; use <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true#TRUE" title="class or interface in java.lang"><code>Boolean.TRUE</code></a>.</div>
+</li>
+</ul>
 </li>
 </ul>
 <!-- ============ METHOD DETAIL ========== -->
@@ -514,6 +530,6 @@ not permitted.)</div>
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/Dimension.html b/docs/apidocs/com/google/zxing/Dimension.html
index 59cabd0..77cfd3b 100644
--- a/docs/apidocs/com/google/zxing/Dimension.html
+++ b/docs/apidocs/com/google/zxing/Dimension.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Dimension (ZXing 3.4.0 API)</title>
+<title>Dimension (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Dimension (ZXing 3.4.0 API)";
+            parent.document.title="Dimension (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -334,6 +334,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/EncodeHintType.html b/docs/apidocs/com/google/zxing/EncodeHintType.html
index 519d98f..c68cd9c 100644
--- a/docs/apidocs/com/google/zxing/EncodeHintType.html
+++ b/docs/apidocs/com/google/zxing/EncodeHintType.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>EncodeHintType (ZXing 3.4.0 API)</title>
+<title>EncodeHintType (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="EncodeHintType (ZXing 3.4.0 API)";
+            parent.document.title="EncodeHintType (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -153,6 +153,18 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?i
 </td>
 </tr>
 <tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../com/google/zxing/EncodeHintType.html#CODE128_COMPACT">CODE128_COMPACT</a></span></code>
+<div class="block">Specifies whether to use compact mode for Code-128 code (type <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang"><code>Boolean</code></a>, or "true" or "false" 
+ <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang"><code>String</code></a> value).</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../com/google/zxing/EncodeHintType.html#DATA_MATRIX_COMPACT">DATA_MATRIX_COMPACT</a></span></code>
+<div class="block">Specifies whether to use compact mode for Data Matrix (type <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang"><code>Boolean</code></a>, or "true" or "false" 
+ <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang"><code>String</code></a> value).</div>
+</td>
+</tr>
+<tr class="altColor">
 <td class="colOne"><code><span class="memberNameLink"><a href="../../../com/google/zxing/EncodeHintType.html#DATA_MATRIX_SHAPE">DATA_MATRIX_SHAPE</a></span></code>
 <div class="block">Specifies the matrix shape for Data Matrix (type <a href="../../../com/google/zxing/datamatrix/encoder/SymbolShapeHint.html" title="enum in com.google.zxing.datamatrix.encoder"><code>SymbolShapeHint</code></a>)</div>
 </td>
@@ -163,6 +175,16 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?i
 </td>
 </tr>
 <tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../com/google/zxing/EncodeHintType.html#FORCE_C40">FORCE_C40</a></span></code>
+<div class="block">Forces C40 encoding for data-matrix (type <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang"><code>Boolean</code></a>, or "true" or "false") <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang"><code>String</code></a> value).</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../com/google/zxing/EncodeHintType.html#FORCE_CODE_SET">FORCE_CODE_SET</a></span></code>
+<div class="block">Forces which encoding will be used.</div>
+</td>
+</tr>
+<tr class="altColor">
 <td class="colOne"><code><span class="memberNameLink"><a href="../../../com/google/zxing/EncodeHintType.html#GS1_FORMAT">GS1_FORMAT</a></span></code>
 <div class="block">Specifies whether the data should be encoded to the GS1 standard (type <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang"><code>Boolean</code></a>, or "true" or "false"
  <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang"><code>String</code></a> value).</div>
@@ -189,25 +211,42 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?i
 </td>
 </tr>
 <tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../com/google/zxing/EncodeHintType.html#PDF417_AUTO_ECI">PDF417_AUTO_ECI</a></span></code>
+<div class="block">Specifies whether to automatically insert ECIs when encoding PDF417 (type <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang"><code>Boolean</code></a>, or "true" or "false"
+ <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang"><code>String</code></a> value).</div>
+</td>
+</tr>
+<tr class="rowColor">
 <td class="colOne"><code><span class="memberNameLink"><a href="../../../com/google/zxing/EncodeHintType.html#PDF417_COMPACT">PDF417_COMPACT</a></span></code>
 <div class="block">Specifies whether to use compact mode for PDF417 (type <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang"><code>Boolean</code></a>, or "true" or "false"
  <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang"><code>String</code></a> value).</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><code><span class="memberNameLink"><a href="../../../com/google/zxing/EncodeHintType.html#PDF417_COMPACTION">PDF417_COMPACTION</a></span></code>
 <div class="block">Specifies what compaction mode to use for PDF417 (type
  <a href="../../../com/google/zxing/pdf417/encoder/Compaction.html" title="enum in com.google.zxing.pdf417.encoder"><code>Compaction</code></a> or <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang"><code>String</code></a> value of one of its
  enum values).</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><code><span class="memberNameLink"><a href="../../../com/google/zxing/EncodeHintType.html#PDF417_DIMENSIONS">PDF417_DIMENSIONS</a></span></code>
 <div class="block">Specifies the minimum and maximum number of rows and columns for PDF417 (type
  <a href="../../../com/google/zxing/pdf417/encoder/Dimensions.html" title="class in com.google.zxing.pdf417.encoder"><code>Dimensions</code></a>).</div>
 </td>
 </tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../com/google/zxing/EncodeHintType.html#QR_COMPACT">QR_COMPACT</a></span></code>
+<div class="block">Specifies whether to use compact mode for QR code (type <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang"><code>Boolean</code></a>, or "true" or "false"
+ <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang"><code>String</code></a> value).</div>
+</td>
+</tr>
 <tr class="rowColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../com/google/zxing/EncodeHintType.html#QR_MASK_PATTERN">QR_MASK_PATTERN</a></span></code>
+<div class="block">Specifies the QR code mask pattern to be used.</div>
+</td>
+</tr>
+<tr class="altColor">
 <td class="colOne"><code><span class="memberNameLink"><a href="../../../com/google/zxing/EncodeHintType.html#QR_VERSION">QR_VERSION</a></span></code>
 <div class="block">Specifies the exact version of QR code to be encoded.</div>
 </td>
@@ -305,6 +344,27 @@ the order they are declared.</div>
 <div class="block">Specifies the matrix shape for Data Matrix (type <a href="../../../com/google/zxing/datamatrix/encoder/SymbolShapeHint.html" title="enum in com.google.zxing.datamatrix.encoder"><code>SymbolShapeHint</code></a>)</div>
 </li>
 </ul>
+<a name="DATA_MATRIX_COMPACT">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>DATA_MATRIX_COMPACT</h4>
+<pre>public static final&nbsp;<a href="../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a> DATA_MATRIX_COMPACT</pre>
+<div class="block">Specifies whether to use compact mode for Data Matrix (type <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang"><code>Boolean</code></a>, or "true" or "false" 
+ <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang"><code>String</code></a> value).
+ The compact encoding mode also supports the encoding of characters that are not in the ISO-8859-1
+ character set via ECIs.
+ Please note that in that case, the most compact character encoding is chosen for characters in
+ the input that are not in the ISO-8859-1 character set. Based on experience, some scanners do not
+ support encodings like cp-1256 (Arabic). In such cases the encoding can be forced to UTF-8 by
+ means of the <a href="../../../com/google/zxing/EncodeHintType.html#CHARACTER_SET"><code>CHARACTER_SET</code></a> encoding hint.
+ Compact encoding also provides GS1-FNC1 support when <a href="../../../com/google/zxing/EncodeHintType.html#GS1_FORMAT"><code>GS1_FORMAT</code></a> is selected. In this case
+ group-separator character (ASCII 29 decimal) can be used to encode the positions of FNC1 codewords
+ for the purpose of delimiting AIs.
+ This option and <a href="../../../com/google/zxing/EncodeHintType.html#FORCE_C40"><code>FORCE_C40</code></a> are mutually exclusive.</div>
+</li>
+</ul>
 <a name="MIN_SIZE">
 <!--   -->
 </a>
@@ -376,6 +436,21 @@ public static final&nbsp;<a href="../../../com/google/zxing/EncodeHintType.html"
  <a href="../../../com/google/zxing/pdf417/encoder/Dimensions.html" title="class in com.google.zxing.pdf417.encoder"><code>Dimensions</code></a>).</div>
 </li>
 </ul>
+<a name="PDF417_AUTO_ECI">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>PDF417_AUTO_ECI</h4>
+<pre>public static final&nbsp;<a href="../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a> PDF417_AUTO_ECI</pre>
+<div class="block">Specifies whether to automatically insert ECIs when encoding PDF417 (type <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang"><code>Boolean</code></a>, or "true" or "false"
+ <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang"><code>String</code></a> value). 
+ Please note that in that case, the most compact character encoding is chosen for characters in
+ the input that are not in the ISO-8859-1 character set. Based on experience, some scanners do not
+ support encodings like cp-1256 (Arabic). In such cases the encoding can be forced to UTF-8 by
+ means of the <a href="../../../com/google/zxing/EncodeHintType.html#CHARACTER_SET"><code>CHARACTER_SET</code></a> encoding hint.</div>
+</li>
+</ul>
 <a name="AZTEC_LAYERS">
 <!--   -->
 </a>
@@ -401,10 +476,38 @@ public static final&nbsp;<a href="../../../com/google/zxing/EncodeHintType.html"
  (Type <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang"><code>Integer</code></a>, or <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang"><code>String</code></a> representation of the integer value).</div>
 </li>
 </ul>
+<a name="QR_MASK_PATTERN">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>QR_MASK_PATTERN</h4>
+<pre>public static final&nbsp;<a href="../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a> QR_MASK_PATTERN</pre>
+<div class="block">Specifies the QR code mask pattern to be used. Allowed values are
+ 0..QRCode.NUM_MASK_PATTERNS-1. By default the code will automatically select
+ the optimal mask pattern.
+ * (Type <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang"><code>Integer</code></a>, or <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang"><code>String</code></a> representation of the integer value).</div>
+</li>
+</ul>
+<a name="QR_COMPACT">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>QR_COMPACT</h4>
+<pre>public static final&nbsp;<a href="../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a> QR_COMPACT</pre>
+<div class="block">Specifies whether to use compact mode for QR code (type <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang"><code>Boolean</code></a>, or "true" or "false"
+ <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang"><code>String</code></a> value).
+ Please note that when compaction is performed, the most compact character encoding is chosen
+ for characters in the input that are not in the ISO-8859-1 character set. Based on experience,
+ some scanners do not support encodings like cp-1256 (Arabic). In such cases the encoding can
+ be forced to UTF-8 by means of the <a href="../../../com/google/zxing/EncodeHintType.html#CHARACTER_SET"><code>CHARACTER_SET</code></a> encoding hint.</div>
+</li>
+</ul>
 <a name="GS1_FORMAT">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>GS1_FORMAT</h4>
 <pre>public static final&nbsp;<a href="../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a> GS1_FORMAT</pre>
@@ -412,6 +515,42 @@ public static final&nbsp;<a href="../../../com/google/zxing/EncodeHintType.html"
  <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang"><code>String</code></a> value).</div>
 </li>
 </ul>
+<a name="FORCE_CODE_SET">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>FORCE_CODE_SET</h4>
+<pre>public static final&nbsp;<a href="../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a> FORCE_CODE_SET</pre>
+<div class="block">Forces which encoding will be used. Currently only used for Code-128 code sets (Type <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang"><code>String</code></a>).
+ Valid values are "A", "B", "C".
+ This option and <a href="../../../com/google/zxing/EncodeHintType.html#CODE128_COMPACT"><code>CODE128_COMPACT</code></a> are mutually exclusive.</div>
+</li>
+</ul>
+<a name="FORCE_C40">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>FORCE_C40</h4>
+<pre>public static final&nbsp;<a href="../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a> FORCE_C40</pre>
+<div class="block">Forces C40 encoding for data-matrix (type <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang"><code>Boolean</code></a>, or "true" or "false") <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang"><code>String</code></a> value). This 
+ option and <a href="../../../com/google/zxing/EncodeHintType.html#DATA_MATRIX_COMPACT"><code>DATA_MATRIX_COMPACT</code></a> are mutually exclusive.</div>
+</li>
+</ul>
+<a name="CODE128_COMPACT">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>CODE128_COMPACT</h4>
+<pre>public static final&nbsp;<a href="../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a> CODE128_COMPACT</pre>
+<div class="block">Specifies whether to use compact mode for Code-128 code (type <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang"><code>Boolean</code></a>, or "true" or "false" 
+ <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang"><code>String</code></a> value).
+ This can yield slightly smaller bar codes. This option and <a href="../../../com/google/zxing/EncodeHintType.html#FORCE_CODE_SET"><code>FORCE_CODE_SET</code></a> are mutually
+ exclusive.</div>
+</li>
+</ul>
 </li>
 </ul>
 <!-- ============ METHOD DETAIL ========== -->
@@ -531,6 +670,6 @@ not permitted.)</div>
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/FormatException.html b/docs/apidocs/com/google/zxing/FormatException.html
index a61e8ac..ab51b15 100644
--- a/docs/apidocs/com/google/zxing/FormatException.html
+++ b/docs/apidocs/com/google/zxing/FormatException.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>FormatException (ZXing 3.4.0 API)</title>
+<title>FormatException (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="FormatException (ZXing 3.4.0 API)";
+            parent.document.title="FormatException (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -186,7 +186,7 @@ extends <a href="../../../com/google/zxing/ReaderException.html" title="class in
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;com.google.zxing.<a href="../../../com/google/zxing/ReaderException.html" title="class in com.google.zxing">ReaderException</a></h3>
-<code><a href="../../../com/google/zxing/ReaderException.html#fillInStackTrace--">fillInStackTrace</a></code></li>
+<code><a href="../../../com/google/zxing/ReaderException.html#fillInStackTrace--">fillInStackTrace</a>, <a href="../../../com/google/zxing/ReaderException.html#setStackTrace-boolean-">setStackTrace</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Throwable">
@@ -303,6 +303,6 @@ extends <a href="../../../com/google/zxing/ReaderException.html" title="class in
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/InvertedLuminanceSource.html b/docs/apidocs/com/google/zxing/InvertedLuminanceSource.html
index 2ea42e4..02eff84 100644
--- a/docs/apidocs/com/google/zxing/InvertedLuminanceSource.html
+++ b/docs/apidocs/com/google/zxing/InvertedLuminanceSource.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>InvertedLuminanceSource (ZXing 3.4.0 API)</title>
+<title>InvertedLuminanceSource (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="InvertedLuminanceSource (ZXing 3.4.0 API)";
+            parent.document.title="InvertedLuminanceSource (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -471,6 +471,6 @@ extends <a href="../../../com/google/zxing/LuminanceSource.html" title="class in
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/LuminanceSource.html b/docs/apidocs/com/google/zxing/LuminanceSource.html
index cb68efc..fb095ba 100644
--- a/docs/apidocs/com/google/zxing/LuminanceSource.html
+++ b/docs/apidocs/com/google/zxing/LuminanceSource.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>LuminanceSource (ZXing 3.4.0 API)</title>
+<title>LuminanceSource (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="LuminanceSource (ZXing 3.4.0 API)";
+            parent.document.title="LuminanceSource (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -501,6 +501,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/MultiFormatReader.html b/docs/apidocs/com/google/zxing/MultiFormatReader.html
index c9b85e0..d7765c0 100644
--- a/docs/apidocs/com/google/zxing/MultiFormatReader.html
+++ b/docs/apidocs/com/google/zxing/MultiFormatReader.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>MultiFormatReader (ZXing 3.4.0 API)</title>
+<title>MultiFormatReader (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="MultiFormatReader (ZXing 3.4.0 API)";
+            parent.document.title="MultiFormatReader (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -397,6 +397,6 @@ implements <a href="../../../com/google/zxing/Reader.html" title="interface in c
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/MultiFormatWriter.html b/docs/apidocs/com/google/zxing/MultiFormatWriter.html
index ad2cbc5..e4abc40 100644
--- a/docs/apidocs/com/google/zxing/MultiFormatWriter.html
+++ b/docs/apidocs/com/google/zxing/MultiFormatWriter.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>MultiFormatWriter (ZXing 3.4.0 API)</title>
+<title>MultiFormatWriter (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="MultiFormatWriter (ZXing 3.4.0 API)";
+            parent.document.title="MultiFormatWriter (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -338,6 +338,6 @@ implements <a href="../../../com/google/zxing/Writer.html" title="interface in c
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/NotFoundException.html b/docs/apidocs/com/google/zxing/NotFoundException.html
index 8237b4d..5bd9fc1 100644
--- a/docs/apidocs/com/google/zxing/NotFoundException.html
+++ b/docs/apidocs/com/google/zxing/NotFoundException.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>NotFoundException (ZXing 3.4.0 API)</title>
+<title>NotFoundException (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="NotFoundException (ZXing 3.4.0 API)";
+            parent.document.title="NotFoundException (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -181,7 +181,7 @@ extends <a href="../../../com/google/zxing/ReaderException.html" title="class in
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;com.google.zxing.<a href="../../../com/google/zxing/ReaderException.html" title="class in com.google.zxing">ReaderException</a></h3>
-<code><a href="../../../com/google/zxing/ReaderException.html#fillInStackTrace--">fillInStackTrace</a></code></li>
+<code><a href="../../../com/google/zxing/ReaderException.html#fillInStackTrace--">fillInStackTrace</a>, <a href="../../../com/google/zxing/ReaderException.html#setStackTrace-boolean-">setStackTrace</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Throwable">
@@ -289,6 +289,6 @@ extends <a href="../../../com/google/zxing/ReaderException.html" title="class in
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/PlanarYUVLuminanceSource.html b/docs/apidocs/com/google/zxing/PlanarYUVLuminanceSource.html
index 1890877..21a21e0 100644
--- a/docs/apidocs/com/google/zxing/PlanarYUVLuminanceSource.html
+++ b/docs/apidocs/com/google/zxing/PlanarYUVLuminanceSource.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>PlanarYUVLuminanceSource (ZXing 3.4.0 API)</title>
+<title>PlanarYUVLuminanceSource (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="PlanarYUVLuminanceSource (ZXing 3.4.0 API)";
+            parent.document.title="PlanarYUVLuminanceSource (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -450,6 +450,6 @@ extends <a href="../../../com/google/zxing/LuminanceSource.html" title="class in
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/RGBLuminanceSource.html b/docs/apidocs/com/google/zxing/RGBLuminanceSource.html
index 5187a2a..96c3647 100644
--- a/docs/apidocs/com/google/zxing/RGBLuminanceSource.html
+++ b/docs/apidocs/com/google/zxing/RGBLuminanceSource.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>RGBLuminanceSource (ZXing 3.4.0 API)</title>
+<title>RGBLuminanceSource (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="RGBLuminanceSource (ZXing 3.4.0 API)";
+            parent.document.title="RGBLuminanceSource (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -389,6 +389,6 @@ extends <a href="../../../com/google/zxing/LuminanceSource.html" title="class in
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/Reader.html b/docs/apidocs/com/google/zxing/Reader.html
index 8efb994..9b63377 100644
--- a/docs/apidocs/com/google/zxing/Reader.html
+++ b/docs/apidocs/com/google/zxing/Reader.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Reader (ZXing 3.4.0 API)</title>
+<title>Reader (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Reader (ZXing 3.4.0 API)";
+            parent.document.title="Reader (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -302,6 +302,6 @@ var activeTableTab = "activeTableTab";
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/ReaderException.html b/docs/apidocs/com/google/zxing/ReaderException.html
index 2fe1814..a713355 100644
--- a/docs/apidocs/com/google/zxing/ReaderException.html
+++ b/docs/apidocs/com/google/zxing/ReaderException.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>ReaderException (ZXing 3.4.0 API)</title>
+<title>ReaderException (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../script.js"></script>
 </head>
@@ -12,14 +12,14 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="ReaderException (ZXing 3.4.0 API)";
+            parent.document.title="ReaderException (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
     }
 //-->
-var methods = {"i0":10};
-var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var methods = {"i0":10,"i1":9};
+var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
 var tableTab = "tableTab";
@@ -174,7 +174,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.h
 </a>
 <h3>Method Summary</h3>
 <table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
-<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
 <tr>
 <th class="colFirst" scope="col">Modifier and Type</th>
 <th class="colLast" scope="col">Method and Description</th>
@@ -183,6 +183,12 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.h
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../com/google/zxing/ReaderException.html#fillInStackTrace--">fillInStackTrace</a></span>()</code>&nbsp;</td>
 </tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>static void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/google/zxing/ReaderException.html#setStackTrace-boolean-">setStackTrace</a></span>(boolean&nbsp;enabled)</code>
+<div class="block">For testing only.</div>
+</td>
+</tr>
 </table>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Throwable">
@@ -218,7 +224,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.h
 <ul class="blockList">
 <li class="blockList">
 <h4>isStackTrace</h4>
-<pre>protected static final&nbsp;boolean isStackTrace</pre>
+<pre>protected static&nbsp;boolean isStackTrace</pre>
 </li>
 </ul>
 <a name="NO_TRACE">
@@ -241,7 +247,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.h
 <a name="fillInStackTrace--">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>fillInStackTrace</h4>
 <pre>public final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;fillInStackTrace()</pre>
@@ -251,6 +257,23 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.h
 </dl>
 </li>
 </ul>
+<a name="setStackTrace-boolean-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>setStackTrace</h4>
+<pre>public static&nbsp;void&nbsp;setStackTrace(boolean&nbsp;enabled)</pre>
+<div class="block">For testing only. Controls whether library exception classes include stack traces or not.
+ Defaults to false, unless running in the project's unit testing harness.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>enabled</code> - if true, enables stack traces in library exception classes</dd>
+<dt><span class="simpleTagLabel">Since:</span></dt>
+<dd>3.5.0</dd>
+</dl>
+</li>
+</ul>
 </li>
 </ul>
 </li>
@@ -320,6 +343,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.h
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/Result.html b/docs/apidocs/com/google/zxing/Result.html
index 5aab6a9..24c0c17 100644
--- a/docs/apidocs/com/google/zxing/Result.html
+++ b/docs/apidocs/com/google/zxing/Result.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Result (ZXing 3.4.0 API)</title>
+<title>Result (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Result (ZXing 3.4.0 API)";
+            parent.document.title="Result (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -486,6 +486,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/ResultMetadataType.html b/docs/apidocs/com/google/zxing/ResultMetadataType.html
index 9d466c0..9d7ed3c 100644
--- a/docs/apidocs/com/google/zxing/ResultMetadataType.html
+++ b/docs/apidocs/com/google/zxing/ResultMetadataType.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>ResultMetadataType (ZXing 3.4.0 API)</title>
+<title>ResultMetadataType (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="ResultMetadataType (ZXing 3.4.0 API)";
+            parent.document.title="ResultMetadataType (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -199,6 +199,11 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?i
 </td>
 </tr>
 <tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../com/google/zxing/ResultMetadataType.html#SYMBOLOGY_IDENTIFIER">SYMBOLOGY_IDENTIFIER</a></span></code>
+<div class="block">Barcode Symbology Identifier.</div>
+</td>
+</tr>
+<tr class="rowColor">
 <td class="colOne"><code><span class="memberNameLink"><a href="../../../com/google/zxing/ResultMetadataType.html#UPC_EAN_EXTENSION">UPC_EAN_EXTENSION</a></span></code>
 <div class="block">For some products, the extension text</div>
 </td>
@@ -377,7 +382,7 @@ the order they are declared.</div>
 <a name="STRUCTURED_APPEND_PARITY">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>STRUCTURED_APPEND_PARITY</h4>
 <pre>public static final&nbsp;<a href="../../../com/google/zxing/ResultMetadataType.html" title="enum in com.google.zxing">ResultMetadataType</a> STRUCTURED_APPEND_PARITY</pre>
@@ -385,6 +390,18 @@ the order they are declared.</div>
  parity is given with it.</div>
 </li>
 </ul>
+<a name="SYMBOLOGY_IDENTIFIER">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>SYMBOLOGY_IDENTIFIER</h4>
+<pre>public static final&nbsp;<a href="../../../com/google/zxing/ResultMetadataType.html" title="enum in com.google.zxing">ResultMetadataType</a> SYMBOLOGY_IDENTIFIER</pre>
+<div class="block">Barcode Symbology Identifier.
+ Note: According to the GS1 specification the identifier may have to replace a leading FNC1/GS character
+ when prepending to the barcode content.</div>
+</li>
+</ul>
 </li>
 </ul>
 <!-- ============ METHOD DETAIL ========== -->
@@ -504,6 +521,6 @@ not permitted.)</div>
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/ResultPoint.html b/docs/apidocs/com/google/zxing/ResultPoint.html
index 5873973..cd4a2a4 100644
--- a/docs/apidocs/com/google/zxing/ResultPoint.html
+++ b/docs/apidocs/com/google/zxing/ResultPoint.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>ResultPoint (ZXing 3.4.0 API)</title>
+<title>ResultPoint (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="ResultPoint (ZXing 3.4.0 API)";
+            parent.document.title="ResultPoint (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -387,6 +387,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/ResultPointCallback.html b/docs/apidocs/com/google/zxing/ResultPointCallback.html
index f68fea2..fd800c2 100644
--- a/docs/apidocs/com/google/zxing/ResultPointCallback.html
+++ b/docs/apidocs/com/google/zxing/ResultPointCallback.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>ResultPointCallback (ZXing 3.4.0 API)</title>
+<title>ResultPointCallback (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="ResultPointCallback (ZXing 3.4.0 API)";
+            parent.document.title="ResultPointCallback (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -223,6 +223,6 @@ var activeTableTab = "activeTableTab";
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/Writer.html b/docs/apidocs/com/google/zxing/Writer.html
index ea8fefe..8aca309 100644
--- a/docs/apidocs/com/google/zxing/Writer.html
+++ b/docs/apidocs/com/google/zxing/Writer.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Writer (ZXing 3.4.0 API)</title>
+<title>Writer (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Writer (ZXing 3.4.0 API)";
+            parent.document.title="Writer (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -281,6 +281,6 @@ var activeTableTab = "activeTableTab";
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/WriterException.html b/docs/apidocs/com/google/zxing/WriterException.html
index f1ea929..30d73f2 100644
--- a/docs/apidocs/com/google/zxing/WriterException.html
+++ b/docs/apidocs/com/google/zxing/WriterException.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>WriterException (ZXing 3.4.0 API)</title>
+<title>WriterException (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="WriterException (ZXing 3.4.0 API)";
+            parent.document.title="WriterException (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -286,6 +286,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.h
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/aztec/AztecDetectorResult.html b/docs/apidocs/com/google/zxing/aztec/AztecDetectorResult.html
index 23c7cbb..3f5f267 100644
--- a/docs/apidocs/com/google/zxing/aztec/AztecDetectorResult.html
+++ b/docs/apidocs/com/google/zxing/aztec/AztecDetectorResult.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>AztecDetectorResult (ZXing 3.4.0 API)</title>
+<title>AztecDetectorResult (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="AztecDetectorResult (ZXing 3.4.0 API)";
+            parent.document.title="AztecDetectorResult (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -319,6 +319,6 @@ extends <a href="../../../../com/google/zxing/common/DetectorResult.html" title=
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/aztec/AztecReader.html b/docs/apidocs/com/google/zxing/aztec/AztecReader.html
index 027dc39..df778a0 100644
--- a/docs/apidocs/com/google/zxing/aztec/AztecReader.html
+++ b/docs/apidocs/com/google/zxing/aztec/AztecReader.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>AztecReader (ZXing 3.4.0 API)</title>
+<title>AztecReader (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="AztecReader (ZXing 3.4.0 API)";
+            parent.document.title="AztecReader (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -353,6 +353,6 @@ implements <a href="../../../../com/google/zxing/Reader.html" title="interface i
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/aztec/AztecWriter.html b/docs/apidocs/com/google/zxing/aztec/AztecWriter.html
index 25571d7..906ebbd 100644
--- a/docs/apidocs/com/google/zxing/aztec/AztecWriter.html
+++ b/docs/apidocs/com/google/zxing/aztec/AztecWriter.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>AztecWriter (ZXing 3.4.0 API)</title>
+<title>AztecWriter (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="AztecWriter (ZXing 3.4.0 API)";
+            parent.document.title="AztecWriter (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -327,6 +327,6 @@ implements <a href="../../../../com/google/zxing/Writer.html" title="interface i
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/aztec/class-use/AztecDetectorResult.html b/docs/apidocs/com/google/zxing/aztec/class-use/AztecDetectorResult.html
index 7f35301..b1ff89f 100644
--- a/docs/apidocs/com/google/zxing/aztec/class-use/AztecDetectorResult.html
+++ b/docs/apidocs/com/google/zxing/aztec/class-use/AztecDetectorResult.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.aztec.AztecDetectorResult (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.aztec.AztecDetectorResult (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.aztec.AztecDetectorResult (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.aztec.AztecDetectorResult (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -188,6 +188,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/aztec/class-use/AztecReader.html b/docs/apidocs/com/google/zxing/aztec/class-use/AztecReader.html
index a3c6faf..ed4ad6b 100644
--- a/docs/apidocs/com/google/zxing/aztec/class-use/AztecReader.html
+++ b/docs/apidocs/com/google/zxing/aztec/class-use/AztecReader.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.aztec.AztecReader (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.aztec.AztecReader (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.aztec.AztecReader (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.aztec.AztecReader (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/aztec/class-use/AztecWriter.html b/docs/apidocs/com/google/zxing/aztec/class-use/AztecWriter.html
index 0242bd0..6822d5f 100644
--- a/docs/apidocs/com/google/zxing/aztec/class-use/AztecWriter.html
+++ b/docs/apidocs/com/google/zxing/aztec/class-use/AztecWriter.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.aztec.AztecWriter (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.aztec.AztecWriter (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.aztec.AztecWriter (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.aztec.AztecWriter (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/aztec/decoder/Decoder.html b/docs/apidocs/com/google/zxing/aztec/decoder/Decoder.html
index eea6cde..5e77674 100644
--- a/docs/apidocs/com/google/zxing/aztec/decoder/Decoder.html
+++ b/docs/apidocs/com/google/zxing/aztec/decoder/Decoder.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Decoder (ZXing 3.4.0 API)</title>
+<title>Decoder (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Decoder (ZXing 3.4.0 API)";
+            parent.document.title="Decoder (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -219,7 +219,12 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>highLevelDecode</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;highLevelDecode(boolean[]&nbsp;correctedBits)</pre>
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;highLevelDecode(boolean[]&nbsp;correctedBits)
+                              throws <a href="../../../../../com/google/zxing/FormatException.html" title="class in com.google.zxing">FormatException</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="../../../../../com/google/zxing/FormatException.html" title="class in com.google.zxing">FormatException</a></code></dd>
+</dl>
 </li>
 </ul>
 </li>
@@ -291,6 +296,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/aztec/decoder/class-use/Decoder.html b/docs/apidocs/com/google/zxing/aztec/decoder/class-use/Decoder.html
index a041f73..502cb65 100644
--- a/docs/apidocs/com/google/zxing/aztec/decoder/class-use/Decoder.html
+++ b/docs/apidocs/com/google/zxing/aztec/decoder/class-use/Decoder.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.aztec.decoder.Decoder (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.aztec.decoder.Decoder (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.aztec.decoder.Decoder (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.aztec.decoder.Decoder (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/aztec/decoder/package-frame.html b/docs/apidocs/com/google/zxing/aztec/decoder/package-frame.html
index 46e7c6d..fe3b22a 100644
--- a/docs/apidocs/com/google/zxing/aztec/decoder/package-frame.html
+++ b/docs/apidocs/com/google/zxing/aztec/decoder/package-frame.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.aztec.decoder (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.aztec.decoder (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
diff --git a/docs/apidocs/com/google/zxing/aztec/decoder/package-summary.html b/docs/apidocs/com/google/zxing/aztec/decoder/package-summary.html
index 98489d8..31584d2 100644
--- a/docs/apidocs/com/google/zxing/aztec/decoder/package-summary.html
+++ b/docs/apidocs/com/google/zxing/aztec/decoder/package-summary.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.aztec.decoder (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.aztec.decoder (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.aztec.decoder (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.aztec.decoder (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -141,6 +141,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/aztec/decoder/package-tree.html b/docs/apidocs/com/google/zxing/aztec/decoder/package-tree.html
index 442075a..ae579e4 100644
--- a/docs/apidocs/com/google/zxing/aztec/decoder/package-tree.html
+++ b/docs/apidocs/com/google/zxing/aztec/decoder/package-tree.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.aztec.decoder Class Hierarchy (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.aztec.decoder Class Hierarchy (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.aztec.decoder Class Hierarchy (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.aztec.decoder Class Hierarchy (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -133,6 +133,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/aztec/decoder/package-use.html b/docs/apidocs/com/google/zxing/aztec/decoder/package-use.html
index 6d5ae5c..ece7150 100644
--- a/docs/apidocs/com/google/zxing/aztec/decoder/package-use.html
+++ b/docs/apidocs/com/google/zxing/aztec/decoder/package-use.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Package com.google.zxing.aztec.decoder (ZXing 3.4.0 API)</title>
+<title>Uses of Package com.google.zxing.aztec.decoder (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Package com.google.zxing.aztec.decoder (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Package com.google.zxing.aztec.decoder (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/aztec/detector/Detector.html b/docs/apidocs/com/google/zxing/aztec/detector/Detector.html
index a798546..8230ff9 100644
--- a/docs/apidocs/com/google/zxing/aztec/detector/Detector.html
+++ b/docs/apidocs/com/google/zxing/aztec/detector/Detector.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Detector (ZXing 3.4.0 API)</title>
+<title>Detector (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Detector (ZXing 3.4.0 API)";
+            parent.document.title="Detector (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -303,6 +303,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/aztec/detector/class-use/Detector.html b/docs/apidocs/com/google/zxing/aztec/detector/class-use/Detector.html
index e96a661..f92711e 100644
--- a/docs/apidocs/com/google/zxing/aztec/detector/class-use/Detector.html
+++ b/docs/apidocs/com/google/zxing/aztec/detector/class-use/Detector.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.aztec.detector.Detector (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.aztec.detector.Detector (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.aztec.detector.Detector (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.aztec.detector.Detector (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/aztec/detector/package-frame.html b/docs/apidocs/com/google/zxing/aztec/detector/package-frame.html
index 6b15ad8..3a9e8b5 100644
--- a/docs/apidocs/com/google/zxing/aztec/detector/package-frame.html
+++ b/docs/apidocs/com/google/zxing/aztec/detector/package-frame.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.aztec.detector (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.aztec.detector (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
diff --git a/docs/apidocs/com/google/zxing/aztec/detector/package-summary.html b/docs/apidocs/com/google/zxing/aztec/detector/package-summary.html
index 43de3b0..85f38e5 100644
--- a/docs/apidocs/com/google/zxing/aztec/detector/package-summary.html
+++ b/docs/apidocs/com/google/zxing/aztec/detector/package-summary.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.aztec.detector (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.aztec.detector (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.aztec.detector (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.aztec.detector (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -141,6 +141,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/aztec/detector/package-tree.html b/docs/apidocs/com/google/zxing/aztec/detector/package-tree.html
index 6691df2..85c7ac0 100644
--- a/docs/apidocs/com/google/zxing/aztec/detector/package-tree.html
+++ b/docs/apidocs/com/google/zxing/aztec/detector/package-tree.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.aztec.detector Class Hierarchy (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.aztec.detector Class Hierarchy (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.aztec.detector Class Hierarchy (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.aztec.detector Class Hierarchy (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -133,6 +133,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/aztec/detector/package-use.html b/docs/apidocs/com/google/zxing/aztec/detector/package-use.html
index 7c6421a..7b52665 100644
--- a/docs/apidocs/com/google/zxing/aztec/detector/package-use.html
+++ b/docs/apidocs/com/google/zxing/aztec/detector/package-use.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Package com.google.zxing.aztec.detector (ZXing 3.4.0 API)</title>
+<title>Uses of Package com.google.zxing.aztec.detector (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Package com.google.zxing.aztec.detector (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Package com.google.zxing.aztec.detector (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/aztec/encoder/AztecCode.html b/docs/apidocs/com/google/zxing/aztec/encoder/AztecCode.html
index ecd6c9f..2612983 100644
--- a/docs/apidocs/com/google/zxing/aztec/encoder/AztecCode.html
+++ b/docs/apidocs/com/google/zxing/aztec/encoder/AztecCode.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>AztecCode (ZXing 3.4.0 API)</title>
+<title>AztecCode (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="AztecCode (ZXing 3.4.0 API)";
+            parent.document.title="AztecCode (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -409,6 +409,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/aztec/encoder/Encoder.html b/docs/apidocs/com/google/zxing/aztec/encoder/Encoder.html
index 9aba8dc..188b4f6 100644
--- a/docs/apidocs/com/google/zxing/aztec/encoder/Encoder.html
+++ b/docs/apidocs/com/google/zxing/aztec/encoder/Encoder.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Encoder (ZXing 3.4.0 API)</title>
+<title>Encoder (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,13 +12,13 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Encoder (ZXing 3.4.0 API)";
+            parent.document.title="Encoder (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
     }
 //-->
-var methods = {"i0":9,"i1":9};
+var methods = {"i0":9,"i1":9,"i2":9,"i3":9,"i4":9,"i5":9};
 var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -160,7 +160,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <tr id="i0" class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../com/google/zxing/aztec/encoder/AztecCode.html" title="class in com.google.zxing.aztec.encoder">AztecCode</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/aztec/encoder/Encoder.html#encode-byte:A-">encode</a></span>(byte[]&nbsp;data)</code>
-<div class="block">Encodes the given binary content as an Aztec symbol</div>
+<div class="block">Encodes the given binary content as an Aztec symbol (without ECI code)</div>
 </td>
 </tr>
 <tr id="i1" class="rowColor">
@@ -168,9 +168,41 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/aztec/encoder/Encoder.html#encode-byte:A-int-int-">encode</a></span>(byte[]&nbsp;data,
       int&nbsp;minECCPercent,
       int&nbsp;userSpecifiedLayers)</code>
+<div class="block">Encodes the given binary content as an Aztec symbol (without ECI code)</div>
+</td>
+</tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code>static <a href="../../../../../com/google/zxing/aztec/encoder/AztecCode.html" title="class in com.google.zxing.aztec.encoder">AztecCode</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/aztec/encoder/Encoder.html#encode-byte:A-int-int-java.nio.charset.Charset-">encode</a></span>(byte[]&nbsp;data,
+      int&nbsp;minECCPercent,
+      int&nbsp;userSpecifiedLayers,
+      <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</a>&nbsp;charset)</code>
 <div class="block">Encodes the given binary content as an Aztec symbol</div>
 </td>
 </tr>
+<tr id="i3" class="rowColor">
+<td class="colFirst"><code>static <a href="../../../../../com/google/zxing/aztec/encoder/AztecCode.html" title="class in com.google.zxing.aztec.encoder">AztecCode</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/aztec/encoder/Encoder.html#encode-java.lang.String-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;data)</code>
+<div class="block">Encodes the given string content as an Aztec symbol (without ECI code)</div>
+</td>
+</tr>
+<tr id="i4" class="altColor">
+<td class="colFirst"><code>static <a href="../../../../../com/google/zxing/aztec/encoder/AztecCode.html" title="class in com.google.zxing.aztec.encoder">AztecCode</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/aztec/encoder/Encoder.html#encode-java.lang.String-int-int-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;data,
+      int&nbsp;minECCPercent,
+      int&nbsp;userSpecifiedLayers)</code>
+<div class="block">Encodes the given string content as an Aztec symbol (without ECI code)</div>
+</td>
+</tr>
+<tr id="i5" class="rowColor">
+<td class="colFirst"><code>static <a href="../../../../../com/google/zxing/aztec/encoder/AztecCode.html" title="class in com.google.zxing.aztec.encoder">AztecCode</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/aztec/encoder/Encoder.html#encode-java.lang.String-int-int-java.nio.charset.Charset-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;data,
+      int&nbsp;minECCPercent,
+      int&nbsp;userSpecifiedLayers,
+      <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</a>&nbsp;charset)</code>
+<div class="block">Encodes the given string content as an Aztec symbol</div>
+</td>
+</tr>
 </table>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
@@ -227,6 +259,68 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a>
 <h3>Method Detail</h3>
+<a name="encode-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>encode</h4>
+<pre>public static&nbsp;<a href="../../../../../com/google/zxing/aztec/encoder/AztecCode.html" title="class in com.google.zxing.aztec.encoder">AztecCode</a>&nbsp;encode(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;data)</pre>
+<div class="block">Encodes the given string content as an Aztec symbol (without ECI code)</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>data</code> - input data string; must be encodable as ISO/IEC 8859-1 (Latin-1)</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>Aztec symbol matrix with metadata</dd>
+</dl>
+</li>
+</ul>
+<a name="encode-java.lang.String-int-int-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>encode</h4>
+<pre>public static&nbsp;<a href="../../../../../com/google/zxing/aztec/encoder/AztecCode.html" title="class in com.google.zxing.aztec.encoder">AztecCode</a>&nbsp;encode(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;data,
+                               int&nbsp;minECCPercent,
+                               int&nbsp;userSpecifiedLayers)</pre>
+<div class="block">Encodes the given string content as an Aztec symbol (without ECI code)</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>data</code> - input data string; must be encodable as ISO/IEC 8859-1 (Latin-1)</dd>
+<dd><code>minECCPercent</code> - minimal percentage of error check words (According to ISO/IEC 24778:2008,
+                      a minimum of 23% + 3 words is recommended)</dd>
+<dd><code>userSpecifiedLayers</code> - if non-zero, a user-specified value for the number of layers</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>Aztec symbol matrix with metadata</dd>
+</dl>
+</li>
+</ul>
+<a name="encode-java.lang.String-int-int-java.nio.charset.Charset-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>encode</h4>
+<pre>public static&nbsp;<a href="../../../../../com/google/zxing/aztec/encoder/AztecCode.html" title="class in com.google.zxing.aztec.encoder">AztecCode</a>&nbsp;encode(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;data,
+                               int&nbsp;minECCPercent,
+                               int&nbsp;userSpecifiedLayers,
+                               <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</a>&nbsp;charset)</pre>
+<div class="block">Encodes the given string content as an Aztec symbol</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>data</code> - input data string</dd>
+<dd><code>minECCPercent</code> - minimal percentage of error check words (According to ISO/IEC 24778:2008,
+                      a minimum of 23% + 3 words is recommended)</dd>
+<dd><code>userSpecifiedLayers</code> - if non-zero, a user-specified value for the number of layers</dd>
+<dd><code>charset</code> - character set in which to encode string using ECI; if null, no ECI code
+                will be inserted, and the string must be encodable as ISO/IEC 8859-1
+                (Latin-1), the default encoding of the symbol.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>Aztec symbol matrix with metadata</dd>
+</dl>
+</li>
+</ul>
 <a name="encode-byte:A-">
 <!--   -->
 </a>
@@ -234,7 +328,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <li class="blockList">
 <h4>encode</h4>
 <pre>public static&nbsp;<a href="../../../../../com/google/zxing/aztec/encoder/AztecCode.html" title="class in com.google.zxing.aztec.encoder">AztecCode</a>&nbsp;encode(byte[]&nbsp;data)</pre>
-<div class="block">Encodes the given binary content as an Aztec symbol</div>
+<div class="block">Encodes the given binary content as an Aztec symbol (without ECI code)</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>data</code> - input data string</dd>
@@ -246,12 +340,34 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <a name="encode-byte:A-int-int-">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>encode</h4>
 <pre>public static&nbsp;<a href="../../../../../com/google/zxing/aztec/encoder/AztecCode.html" title="class in com.google.zxing.aztec.encoder">AztecCode</a>&nbsp;encode(byte[]&nbsp;data,
                                int&nbsp;minECCPercent,
                                int&nbsp;userSpecifiedLayers)</pre>
+<div class="block">Encodes the given binary content as an Aztec symbol (without ECI code)</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>data</code> - input data string</dd>
+<dd><code>minECCPercent</code> - minimal percentage of error check words (According to ISO/IEC 24778:2008,
+                      a minimum of 23% + 3 words is recommended)</dd>
+<dd><code>userSpecifiedLayers</code> - if non-zero, a user-specified value for the number of layers</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>Aztec symbol matrix with metadata</dd>
+</dl>
+</li>
+</ul>
+<a name="encode-byte:A-int-int-java.nio.charset.Charset-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>encode</h4>
+<pre>public static&nbsp;<a href="../../../../../com/google/zxing/aztec/encoder/AztecCode.html" title="class in com.google.zxing.aztec.encoder">AztecCode</a>&nbsp;encode(byte[]&nbsp;data,
+                               int&nbsp;minECCPercent,
+                               int&nbsp;userSpecifiedLayers,
+                               <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</a>&nbsp;charset)</pre>
 <div class="block">Encodes the given binary content as an Aztec symbol</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -259,6 +375,8 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <dd><code>minECCPercent</code> - minimal percentage of error check words (According to ISO/IEC 24778:2008,
                       a minimum of 23% + 3 words is recommended)</dd>
 <dd><code>userSpecifiedLayers</code> - if non-zero, a user-specified value for the number of layers</dd>
+<dd><code>charset</code> - character set to mark using ECI; if null, no ECI code will be inserted, and the
+                default encoding of ISO/IEC 8859-1 will be assuming by readers.</dd>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>Aztec symbol matrix with metadata</dd>
 </dl>
@@ -333,6 +451,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/aztec/encoder/HighLevelEncoder.html b/docs/apidocs/com/google/zxing/aztec/encoder/HighLevelEncoder.html
index aa39cde..b3f40b5 100644
--- a/docs/apidocs/com/google/zxing/aztec/encoder/HighLevelEncoder.html
+++ b/docs/apidocs/com/google/zxing/aztec/encoder/HighLevelEncoder.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>HighLevelEncoder (ZXing 3.4.0 API)</title>
+<title>HighLevelEncoder (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="HighLevelEncoder (ZXing 3.4.0 API)";
+            parent.document.title="HighLevelEncoder (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -142,6 +142,10 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <tr class="altColor">
 <td class="colOne"><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/aztec/encoder/HighLevelEncoder.html#HighLevelEncoder-byte:A-">HighLevelEncoder</a></span>(byte[]&nbsp;text)</code>&nbsp;</td>
 </tr>
+<tr class="rowColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/aztec/encoder/HighLevelEncoder.html#HighLevelEncoder-byte:A-java.nio.charset.Charset-">HighLevelEncoder</a></span>(byte[]&nbsp;text,
+                <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</a>&nbsp;charset)</code>&nbsp;</td>
+</tr>
 </table>
 </li>
 </ul>
@@ -186,12 +190,22 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <a name="HighLevelEncoder-byte:A-">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>HighLevelEncoder</h4>
 <pre>public&nbsp;HighLevelEncoder(byte[]&nbsp;text)</pre>
 </li>
 </ul>
+<a name="HighLevelEncoder-byte:A-java.nio.charset.Charset-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>HighLevelEncoder</h4>
+<pre>public&nbsp;HighLevelEncoder(byte[]&nbsp;text,
+                        <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</a>&nbsp;charset)</pre>
+</li>
+</ul>
 </li>
 </ul>
 <!-- ============ METHOD DETAIL ========== -->
@@ -282,6 +296,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/aztec/encoder/class-use/AztecCode.html b/docs/apidocs/com/google/zxing/aztec/encoder/class-use/AztecCode.html
index c621e1f..3a11209 100644
--- a/docs/apidocs/com/google/zxing/aztec/encoder/class-use/AztecCode.html
+++ b/docs/apidocs/com/google/zxing/aztec/encoder/class-use/AztecCode.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.aztec.encoder.AztecCode (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.aztec.encoder.AztecCode (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.aztec.encoder.AztecCode (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.aztec.encoder.AztecCode (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -105,7 +105,7 @@
 <tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../../com/google/zxing/aztec/encoder/AztecCode.html" title="class in com.google.zxing.aztec.encoder">AztecCode</a></code></td>
 <td class="colLast"><span class="typeNameLabel">Encoder.</span><code><span class="memberNameLink"><a href="../../../../../../com/google/zxing/aztec/encoder/Encoder.html#encode-byte:A-">encode</a></span>(byte[]&nbsp;data)</code>
-<div class="block">Encodes the given binary content as an Aztec symbol</div>
+<div class="block">Encodes the given binary content as an Aztec symbol (without ECI code)</div>
 </td>
 </tr>
 <tr class="rowColor">
@@ -113,9 +113,41 @@
 <td class="colLast"><span class="typeNameLabel">Encoder.</span><code><span class="memberNameLink"><a href="../../../../../../com/google/zxing/aztec/encoder/Encoder.html#encode-byte:A-int-int-">encode</a></span>(byte[]&nbsp;data,
       int&nbsp;minECCPercent,
       int&nbsp;userSpecifiedLayers)</code>
+<div class="block">Encodes the given binary content as an Aztec symbol (without ECI code)</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static <a href="../../../../../../com/google/zxing/aztec/encoder/AztecCode.html" title="class in com.google.zxing.aztec.encoder">AztecCode</a></code></td>
+<td class="colLast"><span class="typeNameLabel">Encoder.</span><code><span class="memberNameLink"><a href="../../../../../../com/google/zxing/aztec/encoder/Encoder.html#encode-byte:A-int-int-java.nio.charset.Charset-">encode</a></span>(byte[]&nbsp;data,
+      int&nbsp;minECCPercent,
+      int&nbsp;userSpecifiedLayers,
+      <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</a>&nbsp;charset)</code>
 <div class="block">Encodes the given binary content as an Aztec symbol</div>
 </td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <a href="../../../../../../com/google/zxing/aztec/encoder/AztecCode.html" title="class in com.google.zxing.aztec.encoder">AztecCode</a></code></td>
+<td class="colLast"><span class="typeNameLabel">Encoder.</span><code><span class="memberNameLink"><a href="../../../../../../com/google/zxing/aztec/encoder/Encoder.html#encode-java.lang.String-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;data)</code>
+<div class="block">Encodes the given string content as an Aztec symbol (without ECI code)</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static <a href="../../../../../../com/google/zxing/aztec/encoder/AztecCode.html" title="class in com.google.zxing.aztec.encoder">AztecCode</a></code></td>
+<td class="colLast"><span class="typeNameLabel">Encoder.</span><code><span class="memberNameLink"><a href="../../../../../../com/google/zxing/aztec/encoder/Encoder.html#encode-java.lang.String-int-int-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;data,
+      int&nbsp;minECCPercent,
+      int&nbsp;userSpecifiedLayers)</code>
+<div class="block">Encodes the given string content as an Aztec symbol (without ECI code)</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <a href="../../../../../../com/google/zxing/aztec/encoder/AztecCode.html" title="class in com.google.zxing.aztec.encoder">AztecCode</a></code></td>
+<td class="colLast"><span class="typeNameLabel">Encoder.</span><code><span class="memberNameLink"><a href="../../../../../../com/google/zxing/aztec/encoder/Encoder.html#encode-java.lang.String-int-int-java.nio.charset.Charset-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;data,
+      int&nbsp;minECCPercent,
+      int&nbsp;userSpecifiedLayers,
+      <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</a>&nbsp;charset)</code>
+<div class="block">Encodes the given string content as an Aztec symbol</div>
+</td>
+</tr>
 </tbody>
 </table>
 </li>
@@ -170,6 +202,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/aztec/encoder/class-use/Encoder.html b/docs/apidocs/com/google/zxing/aztec/encoder/class-use/Encoder.html
index a591fc4..53171e2 100644
--- a/docs/apidocs/com/google/zxing/aztec/encoder/class-use/Encoder.html
+++ b/docs/apidocs/com/google/zxing/aztec/encoder/class-use/Encoder.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.aztec.encoder.Encoder (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.aztec.encoder.Encoder (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.aztec.encoder.Encoder (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.aztec.encoder.Encoder (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/aztec/encoder/class-use/HighLevelEncoder.html b/docs/apidocs/com/google/zxing/aztec/encoder/class-use/HighLevelEncoder.html
index b981f23..697c1be 100644
--- a/docs/apidocs/com/google/zxing/aztec/encoder/class-use/HighLevelEncoder.html
+++ b/docs/apidocs/com/google/zxing/aztec/encoder/class-use/HighLevelEncoder.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.aztec.encoder.HighLevelEncoder (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.aztec.encoder.HighLevelEncoder (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.aztec.encoder.HighLevelEncoder (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.aztec.encoder.HighLevelEncoder (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/aztec/encoder/package-frame.html b/docs/apidocs/com/google/zxing/aztec/encoder/package-frame.html
index bb55759..9169773 100644
--- a/docs/apidocs/com/google/zxing/aztec/encoder/package-frame.html
+++ b/docs/apidocs/com/google/zxing/aztec/encoder/package-frame.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.aztec.encoder (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.aztec.encoder (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
diff --git a/docs/apidocs/com/google/zxing/aztec/encoder/package-summary.html b/docs/apidocs/com/google/zxing/aztec/encoder/package-summary.html
index d2a40d2..9c5e31b 100644
--- a/docs/apidocs/com/google/zxing/aztec/encoder/package-summary.html
+++ b/docs/apidocs/com/google/zxing/aztec/encoder/package-summary.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.aztec.encoder (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.aztec.encoder (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.aztec.encoder (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.aztec.encoder (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -153,6 +153,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/aztec/encoder/package-tree.html b/docs/apidocs/com/google/zxing/aztec/encoder/package-tree.html
index 2e45b9e..2d1ad82 100644
--- a/docs/apidocs/com/google/zxing/aztec/encoder/package-tree.html
+++ b/docs/apidocs/com/google/zxing/aztec/encoder/package-tree.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.aztec.encoder Class Hierarchy (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.aztec.encoder Class Hierarchy (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.aztec.encoder Class Hierarchy (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.aztec.encoder Class Hierarchy (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -135,6 +135,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/aztec/encoder/package-use.html b/docs/apidocs/com/google/zxing/aztec/encoder/package-use.html
index 4987979..78d7648 100644
--- a/docs/apidocs/com/google/zxing/aztec/encoder/package-use.html
+++ b/docs/apidocs/com/google/zxing/aztec/encoder/package-use.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Package com.google.zxing.aztec.encoder (ZXing 3.4.0 API)</title>
+<title>Uses of Package com.google.zxing.aztec.encoder (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Package com.google.zxing.aztec.encoder (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Package com.google.zxing.aztec.encoder (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -155,6 +155,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/aztec/package-frame.html b/docs/apidocs/com/google/zxing/aztec/package-frame.html
index 2b8ce3a..4222b49 100644
--- a/docs/apidocs/com/google/zxing/aztec/package-frame.html
+++ b/docs/apidocs/com/google/zxing/aztec/package-frame.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.aztec (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.aztec (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
diff --git a/docs/apidocs/com/google/zxing/aztec/package-summary.html b/docs/apidocs/com/google/zxing/aztec/package-summary.html
index f84aff0..8954d60 100644
--- a/docs/apidocs/com/google/zxing/aztec/package-summary.html
+++ b/docs/apidocs/com/google/zxing/aztec/package-summary.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.aztec (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.aztec (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.aztec (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.aztec (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -153,6 +153,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/aztec/package-tree.html b/docs/apidocs/com/google/zxing/aztec/package-tree.html
index 5bdad2c..5aa81b5 100644
--- a/docs/apidocs/com/google/zxing/aztec/package-tree.html
+++ b/docs/apidocs/com/google/zxing/aztec/package-tree.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.aztec Class Hierarchy (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.aztec Class Hierarchy (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.aztec Class Hierarchy (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.aztec Class Hierarchy (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -139,6 +139,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/aztec/package-use.html b/docs/apidocs/com/google/zxing/aztec/package-use.html
index e0288e2..eb3c0a7 100644
--- a/docs/apidocs/com/google/zxing/aztec/package-use.html
+++ b/docs/apidocs/com/google/zxing/aztec/package-use.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Package com.google.zxing.aztec (ZXing 3.4.0 API)</title>
+<title>Uses of Package com.google.zxing.aztec (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Package com.google.zxing.aztec (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Package com.google.zxing.aztec (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -178,6 +178,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/class-use/BarcodeFormat.html b/docs/apidocs/com/google/zxing/class-use/BarcodeFormat.html
index 7989e52..e713573 100644
--- a/docs/apidocs/com/google/zxing/class-use/BarcodeFormat.html
+++ b/docs/apidocs/com/google/zxing/class-use/BarcodeFormat.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.BarcodeFormat (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.BarcodeFormat (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.BarcodeFormat (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.BarcodeFormat (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -150,23 +150,23 @@ the order they are declared.</div>
 <tbody>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">Writer.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/Writer.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
+<td class="colLast"><span class="typeNameLabel">MultiFormatWriter.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/MultiFormatWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
       <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
       int&nbsp;width,
-      int&nbsp;height)</code>
-<div class="block">Encode a barcode using the default settings.</div>
-</td>
+      int&nbsp;height)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">MultiFormatWriter.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/MultiFormatWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
+<td class="colLast"><span class="typeNameLabel">Writer.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/Writer.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
       <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
       int&nbsp;width,
-      int&nbsp;height)</code>&nbsp;</td>
+      int&nbsp;height)</code>
+<div class="block">Encode a barcode using the default settings.</div>
+</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">Writer.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/Writer.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
+<td class="colLast"><span class="typeNameLabel">MultiFormatWriter.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/MultiFormatWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
       <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
       int&nbsp;width,
       int&nbsp;height,
@@ -174,7 +174,7 @@ the order they are declared.</div>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">MultiFormatWriter.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/MultiFormatWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
+<td class="colLast"><span class="typeNameLabel">Writer.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/Writer.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
       <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
       int&nbsp;width,
       int&nbsp;height,
@@ -275,79 +275,74 @@ the order they are declared.</div>
 </a>
 <h3>Uses of <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a> in <a href="../../../../com/google/zxing/oned/package-summary.html">com.google.zxing.oned</a></h3>
 <table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
-<caption><span>Methods in <a href="../../../../com/google/zxing/oned/package-summary.html">com.google.zxing.oned</a> with parameters of type <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a></span><span class="tabEnd">&nbsp;</span></caption>
+<caption><span>Methods in <a href="../../../../com/google/zxing/oned/package-summary.html">com.google.zxing.oned</a> that return types with arguments of type <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a></span><span class="tabEnd">&nbsp;</span></caption>
 <tr>
 <th class="colFirst" scope="col">Modifier and Type</th>
 <th class="colLast" scope="col">Method and Description</th>
 </tr>
 <tbody>
 <tr class="altColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">OneDimensionalCodeWriter.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
-      <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
-      int&nbsp;width,
-      int&nbsp;height)</code>&nbsp;</td>
+<td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">EAN8Writer.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/EAN8Writer.html#getSupportedWriteFormats--">getSupportedWriteFormats</a></span>()</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">UPCAWriter.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCAWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
-      <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
-      int&nbsp;width,
-      int&nbsp;height)</code>&nbsp;</td>
+<td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">UPCEWriter.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCEWriter.html#getSupportedWriteFormats--">getSupportedWriteFormats</a></span>()</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">Code39Writer.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/Code39Writer.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
-      <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
-      int&nbsp;width,
-      int&nbsp;height,
-      <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
+<td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">Code93Writer.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/Code93Writer.html#getSupportedWriteFormats--">getSupportedWriteFormats</a></span>()</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">Code93Writer.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/Code93Writer.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
-      <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
-      int&nbsp;width,
-      int&nbsp;height,
-      <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
+<td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">Code39Writer.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/Code39Writer.html#getSupportedWriteFormats--">getSupportedWriteFormats</a></span>()</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">OneDimensionalCodeWriter.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
-      <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
-      int&nbsp;width,
-      int&nbsp;height,
-      <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a>,?&gt;&nbsp;hints)</code>
-<div class="block">Encode the contents following specified format.</div>
-</td>
+<td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">OneDimensionalCodeWriter.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#getSupportedWriteFormats--">getSupportedWriteFormats</a></span>()</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">UPCEWriter.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCEWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
-      <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
-      int&nbsp;width,
-      int&nbsp;height,
-      <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
+<td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">ITFWriter.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/ITFWriter.html#getSupportedWriteFormats--">getSupportedWriteFormats</a></span>()</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">EAN13Writer.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/EAN13Writer.html#getSupportedWriteFormats--">getSupportedWriteFormats</a></span>()</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">CodaBarWriter.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/CodaBarWriter.html#getSupportedWriteFormats--">getSupportedWriteFormats</a></span>()</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">Code128Writer.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/Code128Writer.html#getSupportedWriteFormats--">getSupportedWriteFormats</a></span>()</code>&nbsp;</td>
 </tr>
+</tbody>
+</table>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
+<caption><span>Methods in <a href="../../../../com/google/zxing/oned/package-summary.html">com.google.zxing.oned</a> with parameters of type <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tbody>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">EAN13Writer.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/EAN13Writer.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
+<td class="colLast"><span class="typeNameLabel">UPCAWriter.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCAWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
       <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
       int&nbsp;width,
-      int&nbsp;height,
-      <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
+      int&nbsp;height)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">UPCAWriter.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCAWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
+<td class="colLast"><span class="typeNameLabel">OneDimensionalCodeWriter.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
       <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
       int&nbsp;width,
-      int&nbsp;height,
-      <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
+      int&nbsp;height)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">EAN8Writer.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/EAN8Writer.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
+<td class="colLast"><span class="typeNameLabel">UPCAWriter.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCAWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
       <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
       int&nbsp;width,
       int&nbsp;height,
@@ -355,19 +350,13 @@ the order they are declared.</div>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">Code128Writer.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/Code128Writer.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
-      <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
-      int&nbsp;width,
-      int&nbsp;height,
-      <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ITFWriter.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/ITFWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
+<td class="colLast"><span class="typeNameLabel">OneDimensionalCodeWriter.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
       <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
       int&nbsp;width,
       int&nbsp;height,
-      <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
+      <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a>,?&gt;&nbsp;hints)</code>
+<div class="block">Encode the contents following specified format.</div>
+</td>
 </tr>
 </tbody>
 </table>
@@ -481,6 +470,6 @@ the order they are declared.</div>
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/class-use/Binarizer.html b/docs/apidocs/com/google/zxing/class-use/Binarizer.html
index 9831633..c1bd2a6 100644
--- a/docs/apidocs/com/google/zxing/class-use/Binarizer.html
+++ b/docs/apidocs/com/google/zxing/class-use/Binarizer.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.Binarizer (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.Binarizer (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.Binarizer (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.Binarizer (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -222,6 +222,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/class-use/BinaryBitmap.html b/docs/apidocs/com/google/zxing/class-use/BinaryBitmap.html
index 4b9d58b..79887f4 100644
--- a/docs/apidocs/com/google/zxing/class-use/BinaryBitmap.html
+++ b/docs/apidocs/com/google/zxing/class-use/BinaryBitmap.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.BinaryBitmap (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.BinaryBitmap (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.BinaryBitmap (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.BinaryBitmap (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -356,20 +356,20 @@
 <tbody>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">OneDReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/OneDReader.html#decode-com.google.zxing.BinaryBitmap-">decode</a></span>(<a href="../../../../com/google/zxing/BinaryBitmap.html" title="class in com.google.zxing">BinaryBitmap</a>&nbsp;image)</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">UPCAReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCAReader.html#decode-com.google.zxing.BinaryBitmap-">decode</a></span>(<a href="../../../../com/google/zxing/BinaryBitmap.html" title="class in com.google.zxing">BinaryBitmap</a>&nbsp;image)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">UPCAReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCAReader.html#decode-com.google.zxing.BinaryBitmap-">decode</a></span>(<a href="../../../../com/google/zxing/BinaryBitmap.html" title="class in com.google.zxing">BinaryBitmap</a>&nbsp;image)</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">OneDReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/OneDReader.html#decode-com.google.zxing.BinaryBitmap-">decode</a></span>(<a href="../../../../com/google/zxing/BinaryBitmap.html" title="class in com.google.zxing">BinaryBitmap</a>&nbsp;image)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">OneDReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/OneDReader.html#decode-com.google.zxing.BinaryBitmap-java.util.Map-">decode</a></span>(<a href="../../../../com/google/zxing/BinaryBitmap.html" title="class in com.google.zxing">BinaryBitmap</a>&nbsp;image,
+<td class="colLast"><span class="typeNameLabel">UPCAReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCAReader.html#decode-com.google.zxing.BinaryBitmap-java.util.Map-">decode</a></span>(<a href="../../../../com/google/zxing/BinaryBitmap.html" title="class in com.google.zxing">BinaryBitmap</a>&nbsp;image,
       <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">UPCAReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCAReader.html#decode-com.google.zxing.BinaryBitmap-java.util.Map-">decode</a></span>(<a href="../../../../com/google/zxing/BinaryBitmap.html" title="class in com.google.zxing">BinaryBitmap</a>&nbsp;image,
+<td class="colLast"><span class="typeNameLabel">OneDReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/OneDReader.html#decode-com.google.zxing.BinaryBitmap-java.util.Map-">decode</a></span>(<a href="../../../../com/google/zxing/BinaryBitmap.html" title="class in com.google.zxing">BinaryBitmap</a>&nbsp;image,
       <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
 </tr>
 </tbody>
@@ -507,6 +507,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/class-use/ChecksumException.html b/docs/apidocs/com/google/zxing/class-use/ChecksumException.html
index ac01f9b..1695814 100644
--- a/docs/apidocs/com/google/zxing/class-use/ChecksumException.html
+++ b/docs/apidocs/com/google/zxing/class-use/ChecksumException.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.ChecksumException (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.ChecksumException (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.ChecksumException (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.ChecksumException (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -314,6 +314,13 @@
 <tbody>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
+<td class="colLast"><span class="typeNameLabel">UPCAReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCAReader.html#decodeRow-int-com.google.zxing.common.BitArray-int:A-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
+         <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
+         int[]&nbsp;startGuardRange,
+         <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
 <td class="colLast"><span class="typeNameLabel">UPCEANReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCEANReader.html#decodeRow-int-com.google.zxing.common.BitArray-int:A-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
          <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
          int[]&nbsp;startGuardRange,
@@ -323,25 +330,15 @@
  found.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">UPCAReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCAReader.html#decodeRow-int-com.google.zxing.common.BitArray-int:A-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
+<td class="colLast"><span class="typeNameLabel">UPCAReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCAReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
          <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
-         int[]&nbsp;startGuardRange,
          <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
-<td class="colFirst"><code>abstract <a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">OneDReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/OneDReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
-         <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
-         <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>
-<div class="block">Attempts to decode a one-dimensional barcode format given a single row of
- an image.</div>
-</td>
-</tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">Code128Reader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/Code128Reader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
+<td class="colLast"><span class="typeNameLabel">Code39Reader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/Code39Reader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
          <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
          <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
 </tr>
@@ -353,21 +350,24 @@
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">UPCAReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCAReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
+<td class="colLast"><span class="typeNameLabel">Code93Reader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/Code93Reader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
          <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
          <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">Code39Reader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/Code39Reader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
+<td class="colLast"><span class="typeNameLabel">Code128Reader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/Code128Reader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
          <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
          <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">Code93Reader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/Code93Reader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
+<td class="colFirst"><code>abstract <a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
+<td class="colLast"><span class="typeNameLabel">OneDReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/OneDReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
          <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
-         <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
+         <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>
+<div class="block">Attempts to decode a one-dimensional barcode format given a single row of
+ an image.</div>
+</td>
 </tr>
 </tbody>
 </table>
@@ -553,6 +553,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/class-use/DecodeHintType.html b/docs/apidocs/com/google/zxing/class-use/DecodeHintType.html
index ccf5453..cf73a74 100644
--- a/docs/apidocs/com/google/zxing/class-use/DecodeHintType.html
+++ b/docs/apidocs/com/google/zxing/class-use/DecodeHintType.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.DecodeHintType (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.DecodeHintType (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.DecodeHintType (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.DecodeHintType (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -242,6 +242,11 @@ the order they are declared.</div>
 </tr>
 <tbody>
 <tr class="altColor">
+<td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</a></code></td>
+<td class="colLast"><span class="typeNameLabel">StringUtils.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/StringUtils.html#guessCharset-byte:A-java.util.Map-">guessCharset</a></span>(byte[]&nbsp;bytes,
+            <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><span class="typeNameLabel">StringUtils.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/StringUtils.html#guessEncoding-byte:A-java.util.Map-">guessEncoding</a></span>(byte[]&nbsp;bytes,
              <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
@@ -369,6 +374,10 @@ the order they are declared.</div>
 <td class="colFirst"><code><a href="../../../../com/google/zxing/common/DetectorResult.html" title="class in com.google.zxing.common">DetectorResult</a>[]</code></td>
 <td class="colLast"><span class="typeNameLabel">MultiDetector.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/multi/qrcode/detector/MultiDetector.html#detectMulti-java.util.Map-">detectMulti</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../../../../com/google/zxing/qrcode/detector/FinderPatternInfo.html" title="class in com.google.zxing.qrcode.detector">FinderPatternInfo</a>[]</code></td>
+<td class="colLast"><span class="typeNameLabel">MultiFinderPatternFinder.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/multi/qrcode/detector/MultiFinderPatternFinder.html#findMulti-java.util.Map-">findMulti</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
+</tr>
 </tbody>
 </table>
 </li>
@@ -385,16 +394,23 @@ the order they are declared.</div>
 <tbody>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">OneDReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/OneDReader.html#decode-com.google.zxing.BinaryBitmap-java.util.Map-">decode</a></span>(<a href="../../../../com/google/zxing/BinaryBitmap.html" title="class in com.google.zxing">BinaryBitmap</a>&nbsp;image,
+<td class="colLast"><span class="typeNameLabel">UPCAReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCAReader.html#decode-com.google.zxing.BinaryBitmap-java.util.Map-">decode</a></span>(<a href="../../../../com/google/zxing/BinaryBitmap.html" title="class in com.google.zxing">BinaryBitmap</a>&nbsp;image,
       <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">UPCAReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCAReader.html#decode-com.google.zxing.BinaryBitmap-java.util.Map-">decode</a></span>(<a href="../../../../com/google/zxing/BinaryBitmap.html" title="class in com.google.zxing">BinaryBitmap</a>&nbsp;image,
+<td class="colLast"><span class="typeNameLabel">OneDReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/OneDReader.html#decode-com.google.zxing.BinaryBitmap-java.util.Map-">decode</a></span>(<a href="../../../../com/google/zxing/BinaryBitmap.html" title="class in com.google.zxing">BinaryBitmap</a>&nbsp;image,
       <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
+<td class="colLast"><span class="typeNameLabel">UPCAReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCAReader.html#decodeRow-int-com.google.zxing.common.BitArray-int:A-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
+         <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
+         int[]&nbsp;startGuardRange,
+         <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
 <td class="colLast"><span class="typeNameLabel">UPCEANReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCEANReader.html#decodeRow-int-com.google.zxing.common.BitArray-int:A-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
          <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
          int[]&nbsp;startGuardRange,
@@ -404,75 +420,68 @@ the order they are declared.</div>
  found.</div>
 </td>
 </tr>
-<tr class="rowColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">UPCAReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCAReader.html#decodeRow-int-com.google.zxing.common.BitArray-int:A-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
-         <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
-         int[]&nbsp;startGuardRange,
-         <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
-</tr>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ITFReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/ITFReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
+<td class="colLast"><span class="typeNameLabel">UPCAReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCAReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
          <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
          <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>abstract <a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">OneDReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/OneDReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
+<td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
+<td class="colLast"><span class="typeNameLabel">Code39Reader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/Code39Reader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
          <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
-         <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>
-<div class="block">Attempts to decode a one-dimensional barcode format given a single row of
- an image.</div>
-</td>
+         <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">Code128Reader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/Code128Reader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
+<td class="colLast"><span class="typeNameLabel">UPCEANReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCEANReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
          <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
          <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">MultiFormatOneDReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/MultiFormatOneDReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
+<td class="colLast"><span class="typeNameLabel">Code93Reader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/Code93Reader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
          <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
          <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">UPCEANReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCEANReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
+<td class="colLast"><span class="typeNameLabel">CodaBarReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/CodaBarReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
          <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
          <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">UPCAReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCAReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
+<td class="colLast"><span class="typeNameLabel">MultiFormatUPCEANReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/MultiFormatUPCEANReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
          <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
          <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">MultiFormatUPCEANReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/MultiFormatUPCEANReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
+<td class="colLast"><span class="typeNameLabel">ITFReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/ITFReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
          <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
          <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">CodaBarReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/CodaBarReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
+<td class="colLast"><span class="typeNameLabel">Code128Reader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/Code128Reader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
          <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
          <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">Code39Reader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/Code39Reader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
+<td class="colLast"><span class="typeNameLabel">MultiFormatOneDReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/MultiFormatOneDReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
          <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
          <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">Code93Reader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/Code93Reader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
+<td class="colFirst"><code>abstract <a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
+<td class="colLast"><span class="typeNameLabel">OneDReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/OneDReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
          <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
-         <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
+         <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>
+<div class="block">Attempts to decode a one-dimensional barcode format given a single row of
+ an image.</div>
+</td>
 </tr>
 </tbody>
 </table>
@@ -695,6 +704,6 @@ the order they are declared.</div>
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/class-use/Dimension.html b/docs/apidocs/com/google/zxing/class-use/Dimension.html
index 24884b5..0923c04 100644
--- a/docs/apidocs/com/google/zxing/class-use/Dimension.html
+++ b/docs/apidocs/com/google/zxing/class-use/Dimension.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.Dimension (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.Dimension (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.Dimension (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.Dimension (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -113,6 +113,17 @@
 </td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><span class="typeNameLabel">HighLevelEncoder.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/datamatrix/encoder/HighLevelEncoder.html#encodeHighLevel-java.lang.String-com.google.zxing.datamatrix.encoder.SymbolShapeHint-com.google.zxing.Dimension-com.google.zxing.Dimension-boolean-">encodeHighLevel</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg,
+               <a href="../../../../com/google/zxing/datamatrix/encoder/SymbolShapeHint.html" title="enum in com.google.zxing.datamatrix.encoder">SymbolShapeHint</a>&nbsp;shape,
+               <a href="../../../../com/google/zxing/Dimension.html" title="class in com.google.zxing">Dimension</a>&nbsp;minSize,
+               <a href="../../../../com/google/zxing/Dimension.html" title="class in com.google.zxing">Dimension</a>&nbsp;maxSize,
+               boolean&nbsp;forceC40)</code>
+<div class="block">Performs message encoding of a DataMatrix message using the algorithm described in annex P
+ of ISO/IEC 16022:2000(E).</div>
+</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../com/google/zxing/datamatrix/encoder/SymbolInfo.html" title="class in com.google.zxing.datamatrix.encoder">SymbolInfo</a></code></td>
 <td class="colLast"><span class="typeNameLabel">SymbolInfo.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/datamatrix/encoder/SymbolInfo.html#lookup-int-com.google.zxing.datamatrix.encoder.SymbolShapeHint-com.google.zxing.Dimension-com.google.zxing.Dimension-boolean-">lookup</a></span>(int&nbsp;dataCodewords,
       <a href="../../../../com/google/zxing/datamatrix/encoder/SymbolShapeHint.html" title="enum in com.google.zxing.datamatrix.encoder">SymbolShapeHint</a>&nbsp;shape,
@@ -174,6 +185,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/class-use/EncodeHintType.html b/docs/apidocs/com/google/zxing/class-use/EncodeHintType.html
index 77923a3..2ba49a9 100644
--- a/docs/apidocs/com/google/zxing/class-use/EncodeHintType.html
+++ b/docs/apidocs/com/google/zxing/class-use/EncodeHintType.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.EncodeHintType (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.EncodeHintType (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.EncodeHintType (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.EncodeHintType (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -150,7 +150,7 @@ the order they are declared.</div>
 <tbody>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">Writer.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/Writer.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
+<td class="colLast"><span class="typeNameLabel">MultiFormatWriter.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/MultiFormatWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
       <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
       int&nbsp;width,
       int&nbsp;height,
@@ -158,7 +158,7 @@ the order they are declared.</div>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">MultiFormatWriter.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/MultiFormatWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
+<td class="colLast"><span class="typeNameLabel">Writer.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/Writer.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
       <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
       int&nbsp;width,
       int&nbsp;height,
@@ -224,7 +224,7 @@ the order they are declared.</div>
 <tbody>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">Code39Writer.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/Code39Writer.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
+<td class="colLast"><span class="typeNameLabel">UPCAWriter.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCAWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
       <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
       int&nbsp;width,
       int&nbsp;height,
@@ -232,14 +232,6 @@ the order they are declared.</div>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">Code93Writer.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/Code93Writer.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
-      <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
-      int&nbsp;width,
-      int&nbsp;height,
-      <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
 <td class="colLast"><span class="typeNameLabel">OneDimensionalCodeWriter.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
       <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
       int&nbsp;width,
@@ -248,52 +240,16 @@ the order they are declared.</div>
 <div class="block">Encode the contents following specified format.</div>
 </td>
 </tr>
-<tr class="rowColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">UPCEWriter.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCEWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
-      <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
-      int&nbsp;width,
-      int&nbsp;height,
-      <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">EAN13Writer.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/EAN13Writer.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
-      <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
-      int&nbsp;width,
-      int&nbsp;height,
-      <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">UPCAWriter.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCAWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
-      <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
-      int&nbsp;width,
-      int&nbsp;height,
-      <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
-</tr>
 <tr class="altColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">EAN8Writer.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/EAN8Writer.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
-      <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
-      int&nbsp;width,
-      int&nbsp;height,
-      <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
+<td class="colFirst"><code>protected boolean[]</code></td>
+<td class="colLast"><span class="typeNameLabel">OneDimensionalCodeWriter.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
+      <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a>,?&gt;&nbsp;hints)</code>
+<div class="block">Can be overwritten if the encode requires to read the hints map.</div>
+</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">Code128Writer.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/Code128Writer.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
-      <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
-      int&nbsp;width,
-      int&nbsp;height,
-      <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ITFWriter.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/ITFWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
-      <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
-      int&nbsp;width,
-      int&nbsp;height,
+<td class="colFirst"><code>protected boolean[]</code></td>
+<td class="colLast"><span class="typeNameLabel">Code128Writer.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/Code128Writer.html#encode-java.lang.String-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
       <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
 </tr>
 </tbody>
@@ -414,6 +370,6 @@ the order they are declared.</div>
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/class-use/FormatException.html b/docs/apidocs/com/google/zxing/class-use/FormatException.html
index fa39a4c..aa0d568 100644
--- a/docs/apidocs/com/google/zxing/class-use/FormatException.html
+++ b/docs/apidocs/com/google/zxing/class-use/FormatException.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.FormatException (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.FormatException (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.FormatException (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.FormatException (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -239,6 +239,10 @@
 <td class="colFirst"><code><a href="../../../../com/google/zxing/common/DecoderResult.html" title="class in com.google.zxing.common">DecoderResult</a></code></td>
 <td class="colLast"><span class="typeNameLabel">Decoder.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/aztec/decoder/Decoder.html#decode-com.google.zxing.aztec.AztecDetectorResult-">decode</a></span>(<a href="../../../../com/google/zxing/aztec/AztecDetectorResult.html" title="class in com.google.zxing.aztec">AztecDetectorResult</a>&nbsp;detectorResult)</code>&nbsp;</td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><span class="typeNameLabel">Decoder.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/aztec/decoder/Decoder.html#highLevelDecode-boolean:A-">highLevelDecode</a></span>(boolean[]&nbsp;correctedBits)</code>&nbsp;</td>
+</tr>
 </tbody>
 </table>
 </li>
@@ -254,6 +258,12 @@
 </tr>
 <tbody>
 <tr class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><span class="typeNameLabel">ECIStringBuilder.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/ECIStringBuilder.html#appendECI-int-">appendECI</a></span>(int&nbsp;value)</code>
+<div class="block">Appends ECI value to output.</div>
+</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../com/google/zxing/common/CharacterSetECI.html" title="enum in com.google.zxing.common">CharacterSetECI</a></code></td>
 <td class="colLast"><span class="typeNameLabel">CharacterSetECI.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/CharacterSetECI.html#getCharacterSetECIByValue-int-">getCharacterSetECIByValue</a></span>(int&nbsp;value)</code>&nbsp;</td>
 </tr>
@@ -406,24 +416,31 @@
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">OneDReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/OneDReader.html#decode-com.google.zxing.BinaryBitmap-">decode</a></span>(<a href="../../../../com/google/zxing/BinaryBitmap.html" title="class in com.google.zxing">BinaryBitmap</a>&nbsp;image)</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">UPCAReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCAReader.html#decode-com.google.zxing.BinaryBitmap-">decode</a></span>(<a href="../../../../com/google/zxing/BinaryBitmap.html" title="class in com.google.zxing">BinaryBitmap</a>&nbsp;image)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">UPCAReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCAReader.html#decode-com.google.zxing.BinaryBitmap-">decode</a></span>(<a href="../../../../com/google/zxing/BinaryBitmap.html" title="class in com.google.zxing">BinaryBitmap</a>&nbsp;image)</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">OneDReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/OneDReader.html#decode-com.google.zxing.BinaryBitmap-">decode</a></span>(<a href="../../../../com/google/zxing/BinaryBitmap.html" title="class in com.google.zxing">BinaryBitmap</a>&nbsp;image)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">OneDReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/OneDReader.html#decode-com.google.zxing.BinaryBitmap-java.util.Map-">decode</a></span>(<a href="../../../../com/google/zxing/BinaryBitmap.html" title="class in com.google.zxing">BinaryBitmap</a>&nbsp;image,
+<td class="colLast"><span class="typeNameLabel">UPCAReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCAReader.html#decode-com.google.zxing.BinaryBitmap-java.util.Map-">decode</a></span>(<a href="../../../../com/google/zxing/BinaryBitmap.html" title="class in com.google.zxing">BinaryBitmap</a>&nbsp;image,
       <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">UPCAReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCAReader.html#decode-com.google.zxing.BinaryBitmap-java.util.Map-">decode</a></span>(<a href="../../../../com/google/zxing/BinaryBitmap.html" title="class in com.google.zxing">BinaryBitmap</a>&nbsp;image,
+<td class="colLast"><span class="typeNameLabel">OneDReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/OneDReader.html#decode-com.google.zxing.BinaryBitmap-java.util.Map-">decode</a></span>(<a href="../../../../com/google/zxing/BinaryBitmap.html" title="class in com.google.zxing">BinaryBitmap</a>&nbsp;image,
       <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
+<td class="colLast"><span class="typeNameLabel">UPCAReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCAReader.html#decodeRow-int-com.google.zxing.common.BitArray-int:A-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
+         <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
+         int[]&nbsp;startGuardRange,
+         <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
 <td class="colLast"><span class="typeNameLabel">UPCEANReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCEANReader.html#decodeRow-int-com.google.zxing.common.BitArray-int:A-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
          <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
          int[]&nbsp;startGuardRange,
@@ -433,57 +450,50 @@
  found.</div>
 </td>
 </tr>
-<tr class="altColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">UPCAReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCAReader.html#decodeRow-int-com.google.zxing.common.BitArray-int:A-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
-         <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
-         int[]&nbsp;startGuardRange,
-         <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
-</tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ITFReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/ITFReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
+<td class="colLast"><span class="typeNameLabel">UPCAReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCAReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
          <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
          <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code>abstract <a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">OneDReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/OneDReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
+<td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
+<td class="colLast"><span class="typeNameLabel">Code39Reader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/Code39Reader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
          <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
-         <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>
-<div class="block">Attempts to decode a one-dimensional barcode format given a single row of
- an image.</div>
-</td>
+         <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">Code128Reader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/Code128Reader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
+<td class="colLast"><span class="typeNameLabel">UPCEANReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCEANReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
          <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
          <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">UPCEANReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCEANReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
+<td class="colLast"><span class="typeNameLabel">Code93Reader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/Code93Reader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
          <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
          <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">UPCAReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCAReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
+<td class="colLast"><span class="typeNameLabel">ITFReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/ITFReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
          <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
          <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">Code39Reader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/Code39Reader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
+<td class="colLast"><span class="typeNameLabel">Code128Reader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/Code128Reader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
          <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
          <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">Code93Reader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/Code93Reader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
+<td class="colFirst"><code>abstract <a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
+<td class="colLast"><span class="typeNameLabel">OneDReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/OneDReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
          <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
-         <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
+         <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>
+<div class="block">Attempts to decode a one-dimensional barcode format given a single row of
+ an image.</div>
+</td>
 </tr>
 </tbody>
 </table>
@@ -723,6 +733,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/class-use/InvertedLuminanceSource.html b/docs/apidocs/com/google/zxing/class-use/InvertedLuminanceSource.html
index 18a00c2..37d5284 100644
--- a/docs/apidocs/com/google/zxing/class-use/InvertedLuminanceSource.html
+++ b/docs/apidocs/com/google/zxing/class-use/InvertedLuminanceSource.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.InvertedLuminanceSource (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.InvertedLuminanceSource (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.InvertedLuminanceSource (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.InvertedLuminanceSource (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/class-use/LuminanceSource.html b/docs/apidocs/com/google/zxing/class-use/LuminanceSource.html
index a858e54..861e5c7 100644
--- a/docs/apidocs/com/google/zxing/class-use/LuminanceSource.html
+++ b/docs/apidocs/com/google/zxing/class-use/LuminanceSource.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.LuminanceSource (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.LuminanceSource (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.LuminanceSource (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.LuminanceSource (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -142,33 +142,33 @@
 <tbody>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/LuminanceSource.html" title="class in com.google.zxing">LuminanceSource</a></code></td>
-<td class="colLast"><span class="typeNameLabel">LuminanceSource.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/LuminanceSource.html#crop-int-int-int-int-">crop</a></span>(int&nbsp;left,
+<td class="colLast"><span class="typeNameLabel">PlanarYUVLuminanceSource.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/PlanarYUVLuminanceSource.html#crop-int-int-int-int-">crop</a></span>(int&nbsp;left,
     int&nbsp;top,
     int&nbsp;width,
-    int&nbsp;height)</code>
-<div class="block">Returns a new object with cropped image data.</div>
-</td>
+    int&nbsp;height)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/LuminanceSource.html" title="class in com.google.zxing">LuminanceSource</a></code></td>
-<td class="colLast"><span class="typeNameLabel">PlanarYUVLuminanceSource.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/PlanarYUVLuminanceSource.html#crop-int-int-int-int-">crop</a></span>(int&nbsp;left,
+<td class="colLast"><span class="typeNameLabel">RGBLuminanceSource.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/RGBLuminanceSource.html#crop-int-int-int-int-">crop</a></span>(int&nbsp;left,
     int&nbsp;top,
     int&nbsp;width,
     int&nbsp;height)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/LuminanceSource.html" title="class in com.google.zxing">LuminanceSource</a></code></td>
-<td class="colLast"><span class="typeNameLabel">RGBLuminanceSource.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/RGBLuminanceSource.html#crop-int-int-int-int-">crop</a></span>(int&nbsp;left,
+<td class="colLast"><span class="typeNameLabel">InvertedLuminanceSource.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/InvertedLuminanceSource.html#crop-int-int-int-int-">crop</a></span>(int&nbsp;left,
     int&nbsp;top,
     int&nbsp;width,
     int&nbsp;height)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/LuminanceSource.html" title="class in com.google.zxing">LuminanceSource</a></code></td>
-<td class="colLast"><span class="typeNameLabel">InvertedLuminanceSource.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/InvertedLuminanceSource.html#crop-int-int-int-int-">crop</a></span>(int&nbsp;left,
+<td class="colLast"><span class="typeNameLabel">LuminanceSource.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/LuminanceSource.html#crop-int-int-int-int-">crop</a></span>(int&nbsp;left,
     int&nbsp;top,
     int&nbsp;width,
-    int&nbsp;height)</code>&nbsp;</td>
+    int&nbsp;height)</code>
+<div class="block">Returns a new object with cropped image data.</div>
+</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/LuminanceSource.html" title="class in com.google.zxing">LuminanceSource</a></code></td>
@@ -176,32 +176,32 @@
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/LuminanceSource.html" title="class in com.google.zxing">LuminanceSource</a></code></td>
-<td class="colLast"><span class="typeNameLabel">LuminanceSource.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/LuminanceSource.html#invert--">invert</a></span>()</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">InvertedLuminanceSource.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/InvertedLuminanceSource.html#invert--">invert</a></span>()</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/LuminanceSource.html" title="class in com.google.zxing">LuminanceSource</a></code></td>
-<td class="colLast"><span class="typeNameLabel">InvertedLuminanceSource.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/InvertedLuminanceSource.html#invert--">invert</a></span>()</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">LuminanceSource.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/LuminanceSource.html#invert--">invert</a></span>()</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/LuminanceSource.html" title="class in com.google.zxing">LuminanceSource</a></code></td>
+<td class="colLast"><span class="typeNameLabel">InvertedLuminanceSource.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/InvertedLuminanceSource.html#rotateCounterClockwise--">rotateCounterClockwise</a></span>()</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../../../../com/google/zxing/LuminanceSource.html" title="class in com.google.zxing">LuminanceSource</a></code></td>
 <td class="colLast"><span class="typeNameLabel">LuminanceSource.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/LuminanceSource.html#rotateCounterClockwise--">rotateCounterClockwise</a></span>()</code>
 <div class="block">Returns a new object with rotated image data by 90 degrees counterclockwise.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/LuminanceSource.html" title="class in com.google.zxing">LuminanceSource</a></code></td>
-<td class="colLast"><span class="typeNameLabel">InvertedLuminanceSource.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/InvertedLuminanceSource.html#rotateCounterClockwise--">rotateCounterClockwise</a></span>()</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">InvertedLuminanceSource.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/InvertedLuminanceSource.html#rotateCounterClockwise45--">rotateCounterClockwise45</a></span>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/LuminanceSource.html" title="class in com.google.zxing">LuminanceSource</a></code></td>
 <td class="colLast"><span class="typeNameLabel">LuminanceSource.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/LuminanceSource.html#rotateCounterClockwise45--">rotateCounterClockwise45</a></span>()</code>
 <div class="block">Returns a new object with rotated image data by 45 degrees counterclockwise.</div>
 </td>
 </tr>
-<tr class="altColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/LuminanceSource.html" title="class in com.google.zxing">LuminanceSource</a></code></td>
-<td class="colLast"><span class="typeNameLabel">InvertedLuminanceSource.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/InvertedLuminanceSource.html#rotateCounterClockwise45--">rotateCounterClockwise45</a></span>()</code>&nbsp;</td>
-</tr>
 </tbody>
 </table>
 <table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
@@ -366,6 +366,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/class-use/MultiFormatReader.html b/docs/apidocs/com/google/zxing/class-use/MultiFormatReader.html
index acd715e..b866ecf 100644
--- a/docs/apidocs/com/google/zxing/class-use/MultiFormatReader.html
+++ b/docs/apidocs/com/google/zxing/class-use/MultiFormatReader.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.MultiFormatReader (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.MultiFormatReader (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.MultiFormatReader (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.MultiFormatReader (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/class-use/MultiFormatWriter.html b/docs/apidocs/com/google/zxing/class-use/MultiFormatWriter.html
index 473048c..af3bf88 100644
--- a/docs/apidocs/com/google/zxing/class-use/MultiFormatWriter.html
+++ b/docs/apidocs/com/google/zxing/class-use/MultiFormatWriter.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.MultiFormatWriter (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.MultiFormatWriter (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.MultiFormatWriter (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.MultiFormatWriter (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/class-use/NotFoundException.html b/docs/apidocs/com/google/zxing/class-use/NotFoundException.html
index 4c1c133..3f3fdc5 100644
--- a/docs/apidocs/com/google/zxing/class-use/NotFoundException.html
+++ b/docs/apidocs/com/google/zxing/class-use/NotFoundException.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.NotFoundException (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.NotFoundException (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.NotFoundException (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.NotFoundException (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -225,27 +225,27 @@
 </td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">BinaryBitmap.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/BinaryBitmap.html#getBlackMatrix--">getBlackMatrix</a></span>()</code>
-<div class="block">Converts a 2D array of luminance data to 1 bit.</div>
-</td>
-</tr>
-<tr class="altColor">
 <td class="colFirst"><code>abstract <a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
 <td class="colLast"><span class="typeNameLabel">Binarizer.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/Binarizer.html#getBlackMatrix--">getBlackMatrix</a></span>()</code>
 <div class="block">Converts a 2D array of luminance data to 1 bit data.</div>
 </td>
 </tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
+<td class="colLast"><span class="typeNameLabel">BinaryBitmap.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/BinaryBitmap.html#getBlackMatrix--">getBlackMatrix</a></span>()</code>
+<div class="block">Converts a 2D array of luminance data to 1 bit.</div>
+</td>
+</tr>
 <tr class="rowColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a></code></td>
-<td class="colLast"><span class="typeNameLabel">BinaryBitmap.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/BinaryBitmap.html#getBlackRow-int-com.google.zxing.common.BitArray-">getBlackRow</a></span>(int&nbsp;y,
+<td class="colFirst"><code>abstract <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a></code></td>
+<td class="colLast"><span class="typeNameLabel">Binarizer.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/Binarizer.html#getBlackRow-int-com.google.zxing.common.BitArray-">getBlackRow</a></span>(int&nbsp;y,
            <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row)</code>
 <div class="block">Converts one row of luminance data to 1 bit data.</div>
 </td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code>abstract <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a></code></td>
-<td class="colLast"><span class="typeNameLabel">Binarizer.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/Binarizer.html#getBlackRow-int-com.google.zxing.common.BitArray-">getBlackRow</a></span>(int&nbsp;y,
+<td class="colFirst"><code><a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a></code></td>
+<td class="colLast"><span class="typeNameLabel">BinaryBitmap.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/BinaryBitmap.html#getBlackRow-int-com.google.zxing.common.BitArray-">getBlackRow</a></span>(int&nbsp;y,
            <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row)</code>
 <div class="block">Converts one row of luminance data to 1 bit data.</div>
 </td>
@@ -337,8 +337,8 @@
            <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code>abstract <a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">GridSampler.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/GridSampler.html#sampleGrid-com.google.zxing.common.BitMatrix-int-int-float-float-float-float-float-float-float-float-float-float-float-float-float-float-float-float-">sampleGrid</a></span>(<a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a>&nbsp;image,
+<td class="colFirst"><code><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
+<td class="colLast"><span class="typeNameLabel">DefaultGridSampler.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/DefaultGridSampler.html#sampleGrid-com.google.zxing.common.BitMatrix-int-int-float-float-float-float-float-float-float-float-float-float-float-float-float-float-float-float-">sampleGrid</a></span>(<a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a>&nbsp;image,
           int&nbsp;dimensionX,
           int&nbsp;dimensionY,
           float&nbsp;p1ToX,
@@ -356,13 +356,11 @@
           float&nbsp;p3FromX,
           float&nbsp;p3FromY,
           float&nbsp;p4FromX,
-          float&nbsp;p4FromY)</code>
-<div class="block">Samples an image for a rectangular matrix of bits of the given dimension.</div>
-</td>
+          float&nbsp;p4FromY)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">DefaultGridSampler.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/DefaultGridSampler.html#sampleGrid-com.google.zxing.common.BitMatrix-int-int-float-float-float-float-float-float-float-float-float-float-float-float-float-float-float-float-">sampleGrid</a></span>(<a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a>&nbsp;image,
+<td class="colFirst"><code>abstract <a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
+<td class="colLast"><span class="typeNameLabel">GridSampler.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/GridSampler.html#sampleGrid-com.google.zxing.common.BitMatrix-int-int-float-float-float-float-float-float-float-float-float-float-float-float-float-float-float-float-">sampleGrid</a></span>(<a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a>&nbsp;image,
           int&nbsp;dimensionX,
           int&nbsp;dimensionY,
           float&nbsp;p1ToX,
@@ -380,18 +378,20 @@
           float&nbsp;p3FromX,
           float&nbsp;p3FromY,
           float&nbsp;p4FromX,
-          float&nbsp;p4FromY)</code>&nbsp;</td>
+          float&nbsp;p4FromY)</code>
+<div class="block">Samples an image for a rectangular matrix of bits of the given dimension.</div>
+</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code>abstract <a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">GridSampler.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/GridSampler.html#sampleGrid-com.google.zxing.common.BitMatrix-int-int-com.google.zxing.common.PerspectiveTransform-">sampleGrid</a></span>(<a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a>&nbsp;image,
+<td class="colFirst"><code><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
+<td class="colLast"><span class="typeNameLabel">DefaultGridSampler.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/DefaultGridSampler.html#sampleGrid-com.google.zxing.common.BitMatrix-int-int-com.google.zxing.common.PerspectiveTransform-">sampleGrid</a></span>(<a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a>&nbsp;image,
           int&nbsp;dimensionX,
           int&nbsp;dimensionY,
           <a href="../../../../com/google/zxing/common/PerspectiveTransform.html" title="class in com.google.zxing.common">PerspectiveTransform</a>&nbsp;transform)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">DefaultGridSampler.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/DefaultGridSampler.html#sampleGrid-com.google.zxing.common.BitMatrix-int-int-com.google.zxing.common.PerspectiveTransform-">sampleGrid</a></span>(<a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a>&nbsp;image,
+<td class="colFirst"><code>abstract <a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
+<td class="colLast"><span class="typeNameLabel">GridSampler.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/GridSampler.html#sampleGrid-com.google.zxing.common.BitMatrix-int-int-com.google.zxing.common.PerspectiveTransform-">sampleGrid</a></span>(<a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a>&nbsp;image,
           int&nbsp;dimensionX,
           int&nbsp;dimensionY,
           <a href="../../../../com/google/zxing/common/PerspectiveTransform.html" title="class in com.google.zxing.common">PerspectiveTransform</a>&nbsp;transform)</code>&nbsp;</td>
@@ -412,19 +412,19 @@
 <tbody>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/ResultPoint.html" title="class in com.google.zxing">ResultPoint</a>[]</code></td>
-<td class="colLast"><span class="typeNameLabel">WhiteRectangleDetector.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/detector/WhiteRectangleDetector.html#detect--">detect</a></span>()</code>
-<div class="block">
- Detects a candidate barcode-like rectangular region within an image.</div>
-</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/ResultPoint.html" title="class in com.google.zxing">ResultPoint</a>[]</code></td>
 <td class="colLast"><span class="typeNameLabel">MonochromeRectangleDetector.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/detector/MonochromeRectangleDetector.html#detect--">detect</a></span>()</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Detects a rectangular region of black and white -- mostly black -- with a region of mostly
  white, in an image.</div>
 </td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../../../../com/google/zxing/ResultPoint.html" title="class in com.google.zxing">ResultPoint</a>[]</code></td>
+<td class="colLast"><span class="typeNameLabel">WhiteRectangleDetector.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/detector/WhiteRectangleDetector.html#detect--">detect</a></span>()</code>
+<div class="block">
+ Detects a candidate barcode-like rectangular region within an image.</div>
+</td>
+</tr>
 </tbody>
 </table>
 <table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing constructors, and an explanation">
@@ -605,6 +605,10 @@
 <td class="colFirst"><code><a href="../../../../com/google/zxing/common/DetectorResult.html" title="class in com.google.zxing.common">DetectorResult</a>[]</code></td>
 <td class="colLast"><span class="typeNameLabel">MultiDetector.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/multi/qrcode/detector/MultiDetector.html#detectMulti-java.util.Map-">detectMulti</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../../../../com/google/zxing/qrcode/detector/FinderPatternInfo.html" title="class in com.google.zxing.qrcode.detector">FinderPatternInfo</a>[]</code></td>
+<td class="colLast"><span class="typeNameLabel">MultiFinderPatternFinder.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/multi/qrcode/detector/MultiFinderPatternFinder.html#findMulti-java.util.Map-">findMulti</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
+</tr>
 </tbody>
 </table>
 </li>
@@ -621,20 +625,20 @@
 <tbody>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">OneDReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/OneDReader.html#decode-com.google.zxing.BinaryBitmap-">decode</a></span>(<a href="../../../../com/google/zxing/BinaryBitmap.html" title="class in com.google.zxing">BinaryBitmap</a>&nbsp;image)</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">UPCAReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCAReader.html#decode-com.google.zxing.BinaryBitmap-">decode</a></span>(<a href="../../../../com/google/zxing/BinaryBitmap.html" title="class in com.google.zxing">BinaryBitmap</a>&nbsp;image)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">UPCAReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCAReader.html#decode-com.google.zxing.BinaryBitmap-">decode</a></span>(<a href="../../../../com/google/zxing/BinaryBitmap.html" title="class in com.google.zxing">BinaryBitmap</a>&nbsp;image)</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">OneDReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/OneDReader.html#decode-com.google.zxing.BinaryBitmap-">decode</a></span>(<a href="../../../../com/google/zxing/BinaryBitmap.html" title="class in com.google.zxing">BinaryBitmap</a>&nbsp;image)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">OneDReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/OneDReader.html#decode-com.google.zxing.BinaryBitmap-java.util.Map-">decode</a></span>(<a href="../../../../com/google/zxing/BinaryBitmap.html" title="class in com.google.zxing">BinaryBitmap</a>&nbsp;image,
+<td class="colLast"><span class="typeNameLabel">UPCAReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCAReader.html#decode-com.google.zxing.BinaryBitmap-java.util.Map-">decode</a></span>(<a href="../../../../com/google/zxing/BinaryBitmap.html" title="class in com.google.zxing">BinaryBitmap</a>&nbsp;image,
       <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">UPCAReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCAReader.html#decode-com.google.zxing.BinaryBitmap-java.util.Map-">decode</a></span>(<a href="../../../../com/google/zxing/BinaryBitmap.html" title="class in com.google.zxing">BinaryBitmap</a>&nbsp;image,
+<td class="colLast"><span class="typeNameLabel">OneDReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/OneDReader.html#decode-com.google.zxing.BinaryBitmap-java.util.Map-">decode</a></span>(<a href="../../../../com/google/zxing/BinaryBitmap.html" title="class in com.google.zxing">BinaryBitmap</a>&nbsp;image,
       <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
@@ -644,9 +648,9 @@
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>protected int</code></td>
-<td class="colLast"><span class="typeNameLabel">EAN8Reader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/EAN8Reader.html#decodeMiddle-com.google.zxing.common.BitArray-int:A-java.lang.StringBuilder-">decodeMiddle</a></span>(<a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
+<td class="colLast"><span class="typeNameLabel">UPCAReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCAReader.html#decodeMiddle-com.google.zxing.common.BitArray-int:A-java.lang.StringBuilder-">decodeMiddle</a></span>(<a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
             int[]&nbsp;startRange,
-            <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a>&nbsp;result)</code>&nbsp;</td>
+            <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a>&nbsp;resultString)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>protected abstract int</code></td>
@@ -665,9 +669,9 @@
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>protected int</code></td>
-<td class="colLast"><span class="typeNameLabel">UPCAReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCAReader.html#decodeMiddle-com.google.zxing.common.BitArray-int:A-java.lang.StringBuilder-">decodeMiddle</a></span>(<a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
+<td class="colLast"><span class="typeNameLabel">EAN8Reader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/EAN8Reader.html#decodeMiddle-com.google.zxing.common.BitArray-int:A-java.lang.StringBuilder-">decodeMiddle</a></span>(<a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
             int[]&nbsp;startRange,
-            <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a>&nbsp;resultString)</code>&nbsp;</td>
+            <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a>&nbsp;result)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>protected int</code></td>
@@ -677,6 +681,13 @@
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
+<td class="colLast"><span class="typeNameLabel">UPCAReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCAReader.html#decodeRow-int-com.google.zxing.common.BitArray-int:A-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
+         <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
+         int[]&nbsp;startGuardRange,
+         <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
 <td class="colLast"><span class="typeNameLabel">UPCEANReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCEANReader.html#decodeRow-int-com.google.zxing.common.BitArray-int:A-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
          <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
          int[]&nbsp;startGuardRange,
@@ -686,75 +697,68 @@
  found.</div>
 </td>
 </tr>
-<tr class="rowColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">UPCAReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCAReader.html#decodeRow-int-com.google.zxing.common.BitArray-int:A-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
-         <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
-         int[]&nbsp;startGuardRange,
-         <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
-</tr>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ITFReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/ITFReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
+<td class="colLast"><span class="typeNameLabel">UPCAReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCAReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
          <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
          <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>abstract <a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">OneDReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/OneDReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
+<td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
+<td class="colLast"><span class="typeNameLabel">Code39Reader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/Code39Reader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
          <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
-         <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>
-<div class="block">Attempts to decode a one-dimensional barcode format given a single row of
- an image.</div>
-</td>
+         <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">Code128Reader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/Code128Reader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
+<td class="colLast"><span class="typeNameLabel">UPCEANReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCEANReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
          <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
          <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">MultiFormatOneDReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/MultiFormatOneDReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
+<td class="colLast"><span class="typeNameLabel">Code93Reader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/Code93Reader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
          <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
          <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">UPCEANReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCEANReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
+<td class="colLast"><span class="typeNameLabel">CodaBarReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/CodaBarReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
          <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
          <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">UPCAReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCAReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
+<td class="colLast"><span class="typeNameLabel">MultiFormatUPCEANReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/MultiFormatUPCEANReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
          <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
          <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">MultiFormatUPCEANReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/MultiFormatUPCEANReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
+<td class="colLast"><span class="typeNameLabel">ITFReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/ITFReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
          <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
          <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">CodaBarReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/CodaBarReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
+<td class="colLast"><span class="typeNameLabel">Code128Reader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/Code128Reader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
          <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
          <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">Code39Reader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/Code39Reader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
+<td class="colLast"><span class="typeNameLabel">MultiFormatOneDReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/MultiFormatOneDReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
          <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
          <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">Code93Reader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/Code93Reader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
+<td class="colFirst"><code>abstract <a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
+<td class="colLast"><span class="typeNameLabel">OneDReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/OneDReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
          <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
-         <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
+         <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>
+<div class="block">Attempts to decode a one-dimensional barcode format given a single row of
+ an image.</div>
+</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>protected static void</code></td>
@@ -1032,6 +1036,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/class-use/PlanarYUVLuminanceSource.html b/docs/apidocs/com/google/zxing/class-use/PlanarYUVLuminanceSource.html
index 8d4b6a0..69a2102 100644
--- a/docs/apidocs/com/google/zxing/class-use/PlanarYUVLuminanceSource.html
+++ b/docs/apidocs/com/google/zxing/class-use/PlanarYUVLuminanceSource.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.PlanarYUVLuminanceSource (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.PlanarYUVLuminanceSource (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.PlanarYUVLuminanceSource (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.PlanarYUVLuminanceSource (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/class-use/RGBLuminanceSource.html b/docs/apidocs/com/google/zxing/class-use/RGBLuminanceSource.html
index 28939e8..278da9b 100644
--- a/docs/apidocs/com/google/zxing/class-use/RGBLuminanceSource.html
+++ b/docs/apidocs/com/google/zxing/class-use/RGBLuminanceSource.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.RGBLuminanceSource (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.RGBLuminanceSource (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.RGBLuminanceSource (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.RGBLuminanceSource (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/class-use/Reader.html b/docs/apidocs/com/google/zxing/class-use/Reader.html
index d6b5366..2b642f3 100644
--- a/docs/apidocs/com/google/zxing/class-use/Reader.html
+++ b/docs/apidocs/com/google/zxing/class-use/Reader.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Interface com.google.zxing.Reader (ZXing 3.4.0 API)</title>
+<title>Uses of Interface com.google.zxing.Reader (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Interface com.google.zxing.Reader (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Interface com.google.zxing.Reader (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -494,6 +494,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/class-use/ReaderException.html b/docs/apidocs/com/google/zxing/class-use/ReaderException.html
index 4b8596f..b4a680a 100644
--- a/docs/apidocs/com/google/zxing/class-use/ReaderException.html
+++ b/docs/apidocs/com/google/zxing/class-use/ReaderException.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.ReaderException (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.ReaderException (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.ReaderException (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.ReaderException (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -176,6 +176,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/class-use/Result.html b/docs/apidocs/com/google/zxing/class-use/Result.html
index f4505ce..23981b1 100644
--- a/docs/apidocs/com/google/zxing/class-use/Result.html
+++ b/docs/apidocs/com/google/zxing/class-use/Result.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.Result (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.Result (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.Result (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.Result (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -223,94 +223,94 @@
 <td class="colLast"><span class="typeNameLabel">ResultParser.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/client/result/ResultParser.html#getMassagedText-com.google.zxing.Result-">getMassagedText</a></span>(<a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a>&nbsp;result)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/client/result/SMSParsedResult.html" title="class in com.google.zxing.client.result">SMSParsedResult</a></code></td>
-<td class="colLast"><span class="typeNameLabel">SMSTOMMSTOResultParser.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/client/result/SMSTOMMSTOResultParser.html#parse-com.google.zxing.Result-">parse</a></span>(<a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a>&nbsp;result)</code>&nbsp;</td>
+<td class="colFirst"><code><a href="../../../../com/google/zxing/client/result/ExpandedProductParsedResult.html" title="class in com.google.zxing.client.result">ExpandedProductParsedResult</a></code></td>
+<td class="colLast"><span class="typeNameLabel">ExpandedProductResultParser.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/client/result/ExpandedProductResultParser.html#parse-com.google.zxing.Result-">parse</a></span>(<a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a>&nbsp;result)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/client/result/EmailAddressParsedResult.html" title="class in com.google.zxing.client.result">EmailAddressParsedResult</a></code></td>
-<td class="colLast"><span class="typeNameLabel">EmailAddressResultParser.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/client/result/EmailAddressResultParser.html#parse-com.google.zxing.Result-">parse</a></span>(<a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a>&nbsp;result)</code>&nbsp;</td>
+<td class="colFirst"><code><a href="../../../../com/google/zxing/client/result/AddressBookParsedResult.html" title="class in com.google.zxing.client.result">AddressBookParsedResult</a></code></td>
+<td class="colLast"><span class="typeNameLabel">AddressBookAUResultParser.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/client/result/AddressBookAUResultParser.html#parse-com.google.zxing.Result-">parse</a></span>(<a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a>&nbsp;result)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/client/result/ISBNParsedResult.html" title="class in com.google.zxing.client.result">ISBNParsedResult</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ISBNResultParser.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/client/result/ISBNResultParser.html#parse-com.google.zxing.Result-">parse</a></span>(<a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a>&nbsp;result)</code>
-<div class="block">See <a href="http://www.bisg.org/isbn-13/for.dummies.html">ISBN-13 For Dummies</a></div>
-</td>
+<td class="colFirst"><code><a href="../../../../com/google/zxing/client/result/AddressBookParsedResult.html" title="class in com.google.zxing.client.result">AddressBookParsedResult</a></code></td>
+<td class="colLast"><span class="typeNameLabel">BizcardResultParser.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/client/result/BizcardResultParser.html#parse-com.google.zxing.Result-">parse</a></span>(<a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a>&nbsp;result)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/client/result/SMSParsedResult.html" title="class in com.google.zxing.client.result">SMSParsedResult</a></code></td>
-<td class="colLast"><span class="typeNameLabel">SMSMMSResultParser.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/client/result/SMSMMSResultParser.html#parse-com.google.zxing.Result-">parse</a></span>(<a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a>&nbsp;result)</code>&nbsp;</td>
+<td class="colFirst"><code><a href="../../../../com/google/zxing/client/result/VINParsedResult.html" title="class in com.google.zxing.client.result">VINParsedResult</a></code></td>
+<td class="colLast"><span class="typeNameLabel">VINResultParser.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/client/result/VINResultParser.html#parse-com.google.zxing.Result-">parse</a></span>(<a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a>&nbsp;result)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/client/result/GeoParsedResult.html" title="class in com.google.zxing.client.result">GeoParsedResult</a></code></td>
-<td class="colLast"><span class="typeNameLabel">GeoResultParser.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/client/result/GeoResultParser.html#parse-com.google.zxing.Result-">parse</a></span>(<a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a>&nbsp;result)</code>&nbsp;</td>
+<td class="colFirst"><code><a href="../../../../com/google/zxing/client/result/ProductParsedResult.html" title="class in com.google.zxing.client.result">ProductParsedResult</a></code></td>
+<td class="colLast"><span class="typeNameLabel">ProductResultParser.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/client/result/ProductResultParser.html#parse-com.google.zxing.Result-">parse</a></span>(<a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a>&nbsp;result)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/client/result/TelParsedResult.html" title="class in com.google.zxing.client.result">TelParsedResult</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TelResultParser.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/client/result/TelResultParser.html#parse-com.google.zxing.Result-">parse</a></span>(<a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a>&nbsp;result)</code>&nbsp;</td>
+<td class="colFirst"><code><a href="../../../../com/google/zxing/client/result/EmailAddressParsedResult.html" title="class in com.google.zxing.client.result">EmailAddressParsedResult</a></code></td>
+<td class="colLast"><span class="typeNameLabel">EmailDoCoMoResultParser.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/client/result/EmailDoCoMoResultParser.html#parse-com.google.zxing.Result-">parse</a></span>(<a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a>&nbsp;result)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/client/result/CalendarParsedResult.html" title="class in com.google.zxing.client.result">CalendarParsedResult</a></code></td>
-<td class="colLast"><span class="typeNameLabel">VEventResultParser.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/client/result/VEventResultParser.html#parse-com.google.zxing.Result-">parse</a></span>(<a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a>&nbsp;result)</code>&nbsp;</td>
+<td class="colFirst"><code><a href="../../../../com/google/zxing/client/result/ISBNParsedResult.html" title="class in com.google.zxing.client.result">ISBNParsedResult</a></code></td>
+<td class="colLast"><span class="typeNameLabel">ISBNResultParser.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/client/result/ISBNResultParser.html#parse-com.google.zxing.Result-">parse</a></span>(<a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a>&nbsp;result)</code>
+<div class="block">See <a href="http://www.bisg.org/isbn-13/for.dummies.html">ISBN-13 For Dummies</a></div>
+</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/client/result/URIParsedResult.html" title="class in com.google.zxing.client.result">URIParsedResult</a></code></td>
-<td class="colLast"><span class="typeNameLabel">URIResultParser.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/client/result/URIResultParser.html#parse-com.google.zxing.Result-">parse</a></span>(<a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a>&nbsp;result)</code>&nbsp;</td>
+<td class="colFirst"><code><a href="../../../../com/google/zxing/client/result/GeoParsedResult.html" title="class in com.google.zxing.client.result">GeoParsedResult</a></code></td>
+<td class="colLast"><span class="typeNameLabel">GeoResultParser.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/client/result/GeoResultParser.html#parse-com.google.zxing.Result-">parse</a></span>(<a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a>&nbsp;result)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/client/result/AddressBookParsedResult.html" title="class in com.google.zxing.client.result">AddressBookParsedResult</a></code></td>
-<td class="colLast"><span class="typeNameLabel">AddressBookDoCoMoResultParser.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/client/result/AddressBookDoCoMoResultParser.html#parse-com.google.zxing.Result-">parse</a></span>(<a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a>&nbsp;result)</code>&nbsp;</td>
+<td class="colFirst"><code><a href="../../../../com/google/zxing/client/result/EmailAddressParsedResult.html" title="class in com.google.zxing.client.result">EmailAddressParsedResult</a></code></td>
+<td class="colLast"><span class="typeNameLabel">EmailAddressResultParser.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/client/result/EmailAddressResultParser.html#parse-com.google.zxing.Result-">parse</a></span>(<a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a>&nbsp;result)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/client/result/ExpandedProductParsedResult.html" title="class in com.google.zxing.client.result">ExpandedProductParsedResult</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ExpandedProductResultParser.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/client/result/ExpandedProductResultParser.html#parse-com.google.zxing.Result-">parse</a></span>(<a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a>&nbsp;result)</code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/client/result/AddressBookParsedResult.html" title="class in com.google.zxing.client.result">AddressBookParsedResult</a></code></td>
-<td class="colLast"><span class="typeNameLabel">BizcardResultParser.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/client/result/BizcardResultParser.html#parse-com.google.zxing.Result-">parse</a></span>(<a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a>&nbsp;result)</code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>abstract <a href="../../../../com/google/zxing/client/result/ParsedResult.html" title="class in com.google.zxing.client.result">ParsedResult</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ResultParser.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/client/result/ResultParser.html#parse-com.google.zxing.Result-">parse</a></span>(<a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a>&nbsp;theResult)</code>
-<div class="block">Attempts to parse the raw <a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing"><code>Result</code></a>'s contents as a particular type
- of information (email, URL, etc.) and return a <a href="../../../../com/google/zxing/client/result/ParsedResult.html" title="class in com.google.zxing.client.result"><code>ParsedResult</code></a> encapsulating
- the result of parsing.</div>
-</td>
+<td class="colLast"><span class="typeNameLabel">VCardResultParser.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/client/result/VCardResultParser.html#parse-com.google.zxing.Result-">parse</a></span>(<a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a>&nbsp;result)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/client/result/AddressBookParsedResult.html" title="class in com.google.zxing.client.result">AddressBookParsedResult</a></code></td>
-<td class="colLast"><span class="typeNameLabel">AddressBookAUResultParser.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/client/result/AddressBookAUResultParser.html#parse-com.google.zxing.Result-">parse</a></span>(<a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a>&nbsp;result)</code>&nbsp;</td>
+<td class="colFirst"><code><a href="../../../../com/google/zxing/client/result/TelParsedResult.html" title="class in com.google.zxing.client.result">TelParsedResult</a></code></td>
+<td class="colLast"><span class="typeNameLabel">TelResultParser.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/client/result/TelResultParser.html#parse-com.google.zxing.Result-">parse</a></span>(<a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a>&nbsp;result)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/client/result/URIParsedResult.html" title="class in com.google.zxing.client.result">URIParsedResult</a></code></td>
-<td class="colLast"><span class="typeNameLabel">BookmarkDoCoMoResultParser.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/client/result/BookmarkDoCoMoResultParser.html#parse-com.google.zxing.Result-">parse</a></span>(<a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a>&nbsp;result)</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">URLTOResultParser.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/client/result/URLTOResultParser.html#parse-com.google.zxing.Result-">parse</a></span>(<a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a>&nbsp;result)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/client/result/AddressBookParsedResult.html" title="class in com.google.zxing.client.result">AddressBookParsedResult</a></code></td>
-<td class="colLast"><span class="typeNameLabel">VCardResultParser.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/client/result/VCardResultParser.html#parse-com.google.zxing.Result-">parse</a></span>(<a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a>&nbsp;result)</code>&nbsp;</td>
+<td class="colFirst"><code><a href="../../../../com/google/zxing/client/result/URIParsedResult.html" title="class in com.google.zxing.client.result">URIParsedResult</a></code></td>
+<td class="colLast"><span class="typeNameLabel">URIResultParser.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/client/result/URIResultParser.html#parse-com.google.zxing.Result-">parse</a></span>(<a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a>&nbsp;result)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/client/result/EmailAddressParsedResult.html" title="class in com.google.zxing.client.result">EmailAddressParsedResult</a></code></td>
-<td class="colLast"><span class="typeNameLabel">EmailDoCoMoResultParser.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/client/result/EmailDoCoMoResultParser.html#parse-com.google.zxing.Result-">parse</a></span>(<a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a>&nbsp;result)</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">SMTPResultParser.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/client/result/SMTPResultParser.html#parse-com.google.zxing.Result-">parse</a></span>(<a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a>&nbsp;result)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code><a href="../../../../com/google/zxing/client/result/AddressBookParsedResult.html" title="class in com.google.zxing.client.result">AddressBookParsedResult</a></code></td>
+<td class="colLast"><span class="typeNameLabel">AddressBookDoCoMoResultParser.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/client/result/AddressBookDoCoMoResultParser.html#parse-com.google.zxing.Result-">parse</a></span>(<a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a>&nbsp;result)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/client/result/WifiParsedResult.html" title="class in com.google.zxing.client.result">WifiParsedResult</a></code></td>
 <td class="colLast"><span class="typeNameLabel">WifiResultParser.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/client/result/WifiResultParser.html#parse-com.google.zxing.Result-">parse</a></span>(<a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a>&nbsp;result)</code>&nbsp;</td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../../../../com/google/zxing/client/result/SMSParsedResult.html" title="class in com.google.zxing.client.result">SMSParsedResult</a></code></td>
+<td class="colLast"><span class="typeNameLabel">SMSMMSResultParser.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/client/result/SMSMMSResultParser.html#parse-com.google.zxing.Result-">parse</a></span>(<a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a>&nbsp;result)</code>&nbsp;</td>
+</tr>
 <tr class="altColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/client/result/URIParsedResult.html" title="class in com.google.zxing.client.result">URIParsedResult</a></code></td>
-<td class="colLast"><span class="typeNameLabel">URLTOResultParser.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/client/result/URLTOResultParser.html#parse-com.google.zxing.Result-">parse</a></span>(<a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a>&nbsp;result)</code>&nbsp;</td>
+<td class="colFirst"><code><a href="../../../../com/google/zxing/client/result/SMSParsedResult.html" title="class in com.google.zxing.client.result">SMSParsedResult</a></code></td>
+<td class="colLast"><span class="typeNameLabel">SMSTOMMSTOResultParser.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/client/result/SMSTOMMSTOResultParser.html#parse-com.google.zxing.Result-">parse</a></span>(<a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a>&nbsp;result)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/client/result/EmailAddressParsedResult.html" title="class in com.google.zxing.client.result">EmailAddressParsedResult</a></code></td>
-<td class="colLast"><span class="typeNameLabel">SMTPResultParser.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/client/result/SMTPResultParser.html#parse-com.google.zxing.Result-">parse</a></span>(<a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a>&nbsp;result)</code>&nbsp;</td>
+<td class="colFirst"><code><a href="../../../../com/google/zxing/client/result/CalendarParsedResult.html" title="class in com.google.zxing.client.result">CalendarParsedResult</a></code></td>
+<td class="colLast"><span class="typeNameLabel">VEventResultParser.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/client/result/VEventResultParser.html#parse-com.google.zxing.Result-">parse</a></span>(<a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a>&nbsp;result)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/client/result/ProductParsedResult.html" title="class in com.google.zxing.client.result">ProductParsedResult</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ProductResultParser.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/client/result/ProductResultParser.html#parse-com.google.zxing.Result-">parse</a></span>(<a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a>&nbsp;result)</code>&nbsp;</td>
+<td class="colFirst"><code><a href="../../../../com/google/zxing/client/result/URIParsedResult.html" title="class in com.google.zxing.client.result">URIParsedResult</a></code></td>
+<td class="colLast"><span class="typeNameLabel">BookmarkDoCoMoResultParser.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/client/result/BookmarkDoCoMoResultParser.html#parse-com.google.zxing.Result-">parse</a></span>(<a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a>&nbsp;result)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/client/result/VINParsedResult.html" title="class in com.google.zxing.client.result">VINParsedResult</a></code></td>
-<td class="colLast"><span class="typeNameLabel">VINResultParser.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/client/result/VINResultParser.html#parse-com.google.zxing.Result-">parse</a></span>(<a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a>&nbsp;result)</code>&nbsp;</td>
+<td class="colFirst"><code>abstract <a href="../../../../com/google/zxing/client/result/ParsedResult.html" title="class in com.google.zxing.client.result">ParsedResult</a></code></td>
+<td class="colLast"><span class="typeNameLabel">ResultParser.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/client/result/ResultParser.html#parse-com.google.zxing.Result-">parse</a></span>(<a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a>&nbsp;theResult)</code>
+<div class="block">Attempts to parse the raw <a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing"><code>Result</code></a>'s contents as a particular type
+ of information (email, URL, etc.) and return a <a href="../../../../com/google/zxing/client/result/ParsedResult.html" title="class in com.google.zxing.client.result"><code>ParsedResult</code></a> encapsulating
+ the result of parsing.</div>
+</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../com/google/zxing/client/result/ParsedResult.html" title="class in com.google.zxing.client.result">ParsedResult</a></code></td>
@@ -446,24 +446,31 @@
 <tbody>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">OneDReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/OneDReader.html#decode-com.google.zxing.BinaryBitmap-">decode</a></span>(<a href="../../../../com/google/zxing/BinaryBitmap.html" title="class in com.google.zxing">BinaryBitmap</a>&nbsp;image)</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">UPCAReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCAReader.html#decode-com.google.zxing.BinaryBitmap-">decode</a></span>(<a href="../../../../com/google/zxing/BinaryBitmap.html" title="class in com.google.zxing">BinaryBitmap</a>&nbsp;image)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">UPCAReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCAReader.html#decode-com.google.zxing.BinaryBitmap-">decode</a></span>(<a href="../../../../com/google/zxing/BinaryBitmap.html" title="class in com.google.zxing">BinaryBitmap</a>&nbsp;image)</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">OneDReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/OneDReader.html#decode-com.google.zxing.BinaryBitmap-">decode</a></span>(<a href="../../../../com/google/zxing/BinaryBitmap.html" title="class in com.google.zxing">BinaryBitmap</a>&nbsp;image)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">OneDReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/OneDReader.html#decode-com.google.zxing.BinaryBitmap-java.util.Map-">decode</a></span>(<a href="../../../../com/google/zxing/BinaryBitmap.html" title="class in com.google.zxing">BinaryBitmap</a>&nbsp;image,
+<td class="colLast"><span class="typeNameLabel">UPCAReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCAReader.html#decode-com.google.zxing.BinaryBitmap-java.util.Map-">decode</a></span>(<a href="../../../../com/google/zxing/BinaryBitmap.html" title="class in com.google.zxing">BinaryBitmap</a>&nbsp;image,
       <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">UPCAReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCAReader.html#decode-com.google.zxing.BinaryBitmap-java.util.Map-">decode</a></span>(<a href="../../../../com/google/zxing/BinaryBitmap.html" title="class in com.google.zxing">BinaryBitmap</a>&nbsp;image,
+<td class="colLast"><span class="typeNameLabel">OneDReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/OneDReader.html#decode-com.google.zxing.BinaryBitmap-java.util.Map-">decode</a></span>(<a href="../../../../com/google/zxing/BinaryBitmap.html" title="class in com.google.zxing">BinaryBitmap</a>&nbsp;image,
       <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
+<td class="colLast"><span class="typeNameLabel">UPCAReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCAReader.html#decodeRow-int-com.google.zxing.common.BitArray-int:A-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
+         <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
+         int[]&nbsp;startGuardRange,
+         <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
 <td class="colLast"><span class="typeNameLabel">UPCEANReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCEANReader.html#decodeRow-int-com.google.zxing.common.BitArray-int:A-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
          <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
          int[]&nbsp;startGuardRange,
@@ -473,75 +480,68 @@
  found.</div>
 </td>
 </tr>
-<tr class="rowColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">UPCAReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCAReader.html#decodeRow-int-com.google.zxing.common.BitArray-int:A-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
-         <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
-         int[]&nbsp;startGuardRange,
-         <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
-</tr>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ITFReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/ITFReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
+<td class="colLast"><span class="typeNameLabel">UPCAReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCAReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
          <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
          <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>abstract <a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">OneDReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/OneDReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
+<td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
+<td class="colLast"><span class="typeNameLabel">Code39Reader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/Code39Reader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
          <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
-         <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>
-<div class="block">Attempts to decode a one-dimensional barcode format given a single row of
- an image.</div>
-</td>
+         <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">Code128Reader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/Code128Reader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
+<td class="colLast"><span class="typeNameLabel">UPCEANReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCEANReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
          <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
          <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">MultiFormatOneDReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/MultiFormatOneDReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
+<td class="colLast"><span class="typeNameLabel">Code93Reader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/Code93Reader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
          <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
          <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">UPCEANReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCEANReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
+<td class="colLast"><span class="typeNameLabel">CodaBarReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/CodaBarReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
          <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
          <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">UPCAReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCAReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
+<td class="colLast"><span class="typeNameLabel">MultiFormatUPCEANReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/MultiFormatUPCEANReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
          <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
          <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">MultiFormatUPCEANReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/MultiFormatUPCEANReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
+<td class="colLast"><span class="typeNameLabel">ITFReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/ITFReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
          <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
          <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">CodaBarReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/CodaBarReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
+<td class="colLast"><span class="typeNameLabel">Code128Reader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/Code128Reader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
          <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
          <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">Code39Reader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/Code39Reader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
+<td class="colLast"><span class="typeNameLabel">MultiFormatOneDReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/MultiFormatOneDReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
          <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
          <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">Code93Reader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/Code93Reader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
+<td class="colFirst"><code>abstract <a href="../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
+<td class="colLast"><span class="typeNameLabel">OneDReader.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/OneDReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
          <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
-         <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
+         <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>
+<div class="block">Attempts to decode a one-dimensional barcode format given a single row of
+ an image.</div>
+</td>
 </tr>
 </tbody>
 </table>
@@ -696,6 +696,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/class-use/ResultMetadataType.html b/docs/apidocs/com/google/zxing/class-use/ResultMetadataType.html
index 80b974c..462a090 100644
--- a/docs/apidocs/com/google/zxing/class-use/ResultMetadataType.html
+++ b/docs/apidocs/com/google/zxing/class-use/ResultMetadataType.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.ResultMetadataType (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.ResultMetadataType (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.ResultMetadataType (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.ResultMetadataType (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -209,6 +209,6 @@ the order they are declared.</div>
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/class-use/ResultPoint.html b/docs/apidocs/com/google/zxing/class-use/ResultPoint.html
index 012d337..f030493 100644
--- a/docs/apidocs/com/google/zxing/class-use/ResultPoint.html
+++ b/docs/apidocs/com/google/zxing/class-use/ResultPoint.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.ResultPoint (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.ResultPoint (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.ResultPoint (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.ResultPoint (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -258,19 +258,19 @@
 <tbody>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/ResultPoint.html" title="class in com.google.zxing">ResultPoint</a>[]</code></td>
-<td class="colLast"><span class="typeNameLabel">WhiteRectangleDetector.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/detector/WhiteRectangleDetector.html#detect--">detect</a></span>()</code>
-<div class="block">
- Detects a candidate barcode-like rectangular region within an image.</div>
-</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/ResultPoint.html" title="class in com.google.zxing">ResultPoint</a>[]</code></td>
 <td class="colLast"><span class="typeNameLabel">MonochromeRectangleDetector.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/detector/MonochromeRectangleDetector.html#detect--">detect</a></span>()</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Detects a rectangular region of black and white -- mostly black -- with a region of mostly
  white, in an image.</div>
 </td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../../../../com/google/zxing/ResultPoint.html" title="class in com.google.zxing">ResultPoint</a>[]</code></td>
+<td class="colLast"><span class="typeNameLabel">WhiteRectangleDetector.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/detector/WhiteRectangleDetector.html#detect--">detect</a></span>()</code>
+<div class="block">
+ Detects a candidate barcode-like rectangular region within an image.</div>
+</td>
+</tr>
 </tbody>
 </table>
 </li>
@@ -433,6 +433,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/class-use/ResultPointCallback.html b/docs/apidocs/com/google/zxing/class-use/ResultPointCallback.html
index c0bb970..193245b 100644
--- a/docs/apidocs/com/google/zxing/class-use/ResultPointCallback.html
+++ b/docs/apidocs/com/google/zxing/class-use/ResultPointCallback.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Interface com.google.zxing.ResultPointCallback (ZXing 3.4.0 API)</title>
+<title>Uses of Interface com.google.zxing.ResultPointCallback (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Interface com.google.zxing.ResultPointCallback (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Interface com.google.zxing.ResultPointCallback (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -83,6 +83,10 @@
 </tr>
 <tbody>
 <tr class="altColor">
+<td class="colFirst"><a href="#com.google.zxing.multi.qrcode.detector">com.google.zxing.multi.qrcode.detector</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><a href="#com.google.zxing.qrcode.detector">com.google.zxing.qrcode.detector</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
@@ -91,6 +95,23 @@
 </li>
 <li class="blockList">
 <ul class="blockList">
+<li class="blockList"><a name="com.google.zxing.multi.qrcode.detector">
+<!--   -->
+</a>
+<h3>Uses of <a href="../../../../com/google/zxing/ResultPointCallback.html" title="interface in com.google.zxing">ResultPointCallback</a> in <a href="../../../../com/google/zxing/multi/qrcode/detector/package-summary.html">com.google.zxing.multi.qrcode.detector</a></h3>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing constructors, and an explanation">
+<caption><span>Constructors in <a href="../../../../com/google/zxing/multi/qrcode/detector/package-summary.html">com.google.zxing.multi.qrcode.detector</a> with parameters of type <a href="../../../../com/google/zxing/ResultPointCallback.html" title="interface in com.google.zxing">ResultPointCallback</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/multi/qrcode/detector/MultiFinderPatternFinder.html#MultiFinderPatternFinder-com.google.zxing.common.BitMatrix-com.google.zxing.ResultPointCallback-">MultiFinderPatternFinder</a></span>(<a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a>&nbsp;image,
+                        <a href="../../../../com/google/zxing/ResultPointCallback.html" title="interface in com.google.zxing">ResultPointCallback</a>&nbsp;resultPointCallback)</code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
+</li>
 <li class="blockList"><a name="com.google.zxing.qrcode.detector">
 <!--   -->
 </a>
@@ -172,6 +193,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/class-use/Writer.html b/docs/apidocs/com/google/zxing/class-use/Writer.html
index 52ee9a0..d83e5f0 100644
--- a/docs/apidocs/com/google/zxing/class-use/Writer.html
+++ b/docs/apidocs/com/google/zxing/class-use/Writer.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Interface com.google.zxing.Writer (ZXing 3.4.0 API)</title>
+<title>Uses of Interface com.google.zxing.Writer (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Interface com.google.zxing.Writer (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Interface com.google.zxing.Writer (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -342,6 +342,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/class-use/WriterException.html b/docs/apidocs/com/google/zxing/class-use/WriterException.html
index c62467c..c482523 100644
--- a/docs/apidocs/com/google/zxing/class-use/WriterException.html
+++ b/docs/apidocs/com/google/zxing/class-use/WriterException.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.WriterException (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.WriterException (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.WriterException (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.WriterException (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -87,22 +87,18 @@
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a href="#com.google.zxing.oned">com.google.zxing.oned</a></td>
-<td class="colLast">&nbsp;</td>
-</tr>
-<tr class="altColor">
 <td class="colFirst"><a href="#com.google.zxing.pdf417">com.google.zxing.pdf417</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="#com.google.zxing.pdf417.encoder">com.google.zxing.pdf417.encoder</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="#com.google.zxing.qrcode">com.google.zxing.qrcode</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="#com.google.zxing.qrcode.encoder">com.google.zxing.qrcode.encoder</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
@@ -124,117 +120,23 @@
 <tbody>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">Writer.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/Writer.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
-      <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
-      int&nbsp;width,
-      int&nbsp;height)</code>
-<div class="block">Encode a barcode using the default settings.</div>
-</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
 <td class="colLast"><span class="typeNameLabel">MultiFormatWriter.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/MultiFormatWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
       <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
       int&nbsp;width,
       int&nbsp;height)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">Writer.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/Writer.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
-      <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
-      int&nbsp;width,
-      int&nbsp;height,
-      <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">MultiFormatWriter.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/MultiFormatWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
-      <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
-      int&nbsp;width,
-      int&nbsp;height,
-      <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
-</tr>
-</tbody>
-</table>
-</li>
-<li class="blockList"><a name="com.google.zxing.oned">
-<!--   -->
-</a>
-<h3>Uses of <a href="../../../../com/google/zxing/WriterException.html" title="class in com.google.zxing">WriterException</a> in <a href="../../../../com/google/zxing/oned/package-summary.html">com.google.zxing.oned</a></h3>
-<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
-<caption><span>Methods in <a href="../../../../com/google/zxing/oned/package-summary.html">com.google.zxing.oned</a> that throw <a href="../../../../com/google/zxing/WriterException.html" title="class in com.google.zxing">WriterException</a></span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Method and Description</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">OneDimensionalCodeWriter.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
-      <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
-      int&nbsp;width,
-      int&nbsp;height)</code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">UPCAWriter.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCAWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
-      <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
-      int&nbsp;width,
-      int&nbsp;height)</code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">Code39Writer.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/Code39Writer.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
-      <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
-      int&nbsp;width,
-      int&nbsp;height,
-      <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
-</tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">Code93Writer.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/Code93Writer.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
-      <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
-      int&nbsp;width,
-      int&nbsp;height,
-      <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">OneDimensionalCodeWriter.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
+<td class="colLast"><span class="typeNameLabel">Writer.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/Writer.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
       <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
       int&nbsp;width,
-      int&nbsp;height,
-      <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a>,?&gt;&nbsp;hints)</code>
-<div class="block">Encode the contents following specified format.</div>
+      int&nbsp;height)</code>
+<div class="block">Encode a barcode using the default settings.</div>
 </td>
 </tr>
-<tr class="rowColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">UPCEWriter.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCEWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
-      <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
-      int&nbsp;width,
-      int&nbsp;height,
-      <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
-</tr>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">EAN13Writer.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/EAN13Writer.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
-      <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
-      int&nbsp;width,
-      int&nbsp;height,
-      <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">UPCAWriter.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCAWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
-      <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
-      int&nbsp;width,
-      int&nbsp;height,
-      <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">EAN8Writer.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/EAN8Writer.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
+<td class="colLast"><span class="typeNameLabel">MultiFormatWriter.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/MultiFormatWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
       <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
       int&nbsp;width,
       int&nbsp;height,
@@ -242,15 +144,7 @@
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">Code128Writer.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/Code128Writer.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
-      <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
-      int&nbsp;width,
-      int&nbsp;height,
-      <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ITFWriter.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/ITFWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
+<td class="colLast"><span class="typeNameLabel">Writer.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/Writer.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
       <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
       int&nbsp;width,
       int&nbsp;height,
@@ -300,10 +194,23 @@
 </tr>
 <tbody>
 <tr class="altColor">
+<td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><span class="typeNameLabel">PDF417HighLevelEncoderTestAdapter.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/pdf417/encoder/PDF417HighLevelEncoderTestAdapter.html#encodeHighLevel-java.lang.String-com.google.zxing.pdf417.encoder.Compaction-java.nio.charset.Charset-boolean-">encodeHighLevel</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg,
+               <a href="../../../../com/google/zxing/pdf417/encoder/Compaction.html" title="enum in com.google.zxing.pdf417.encoder">Compaction</a>&nbsp;compaction,
+               <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</a>&nbsp;encoding,
+               boolean&nbsp;autoECI)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">PDF417.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/pdf417/encoder/PDF417.html#generateBarcodeLogic-java.lang.String-int-">generateBarcodeLogic</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg,
                     int&nbsp;errorCorrectionLevel)</code>&nbsp;</td>
 </tr>
+<tr class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><span class="typeNameLabel">PDF417.</span><code><span class="memberNameLink"><a href="../../../../com/google/zxing/pdf417/encoder/PDF417.html#generateBarcodeLogic-java.lang.String-int-boolean-">generateBarcodeLogic</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg,
+                    int&nbsp;errorCorrectionLevel,
+                    boolean&nbsp;autoECI)</code>&nbsp;</td>
+</tr>
 </tbody>
 </table>
 </li>
@@ -412,6 +319,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/j2se/BufferedImageLuminanceSource.html b/docs/apidocs/com/google/zxing/client/j2se/BufferedImageLuminanceSource.html
index ebfd422..d4e33b2 100644
--- a/docs/apidocs/com/google/zxing/client/j2se/BufferedImageLuminanceSource.html
+++ b/docs/apidocs/com/google/zxing/client/j2se/BufferedImageLuminanceSource.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>BufferedImageLuminanceSource (ZXing 3.4.0 API)</title>
+<title>BufferedImageLuminanceSource (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="BufferedImageLuminanceSource (ZXing 3.4.0 API)";
+            parent.document.title="BufferedImageLuminanceSource (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -474,6 +474,6 @@ extends <a href="../../../../../com/google/zxing/LuminanceSource.html" title="cl
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/j2se/CommandLineEncoder.html b/docs/apidocs/com/google/zxing/client/j2se/CommandLineEncoder.html
index f3a78eb..16b3d7b 100644
--- a/docs/apidocs/com/google/zxing/client/j2se/CommandLineEncoder.html
+++ b/docs/apidocs/com/google/zxing/client/j2se/CommandLineEncoder.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>CommandLineEncoder (ZXing 3.4.0 API)</title>
+<title>CommandLineEncoder (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="CommandLineEncoder (ZXing 3.4.0 API)";
+            parent.document.title="CommandLineEncoder (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -243,6 +243,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/j2se/CommandLineRunner.html b/docs/apidocs/com/google/zxing/client/j2se/CommandLineRunner.html
index a975863..40c7e14 100644
--- a/docs/apidocs/com/google/zxing/client/j2se/CommandLineRunner.html
+++ b/docs/apidocs/com/google/zxing/client/j2se/CommandLineRunner.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>CommandLineRunner (ZXing 3.4.0 API)</title>
+<title>CommandLineRunner (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="CommandLineRunner (ZXing 3.4.0 API)";
+            parent.document.title="CommandLineRunner (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -246,6 +246,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/j2se/GUIRunner.html b/docs/apidocs/com/google/zxing/client/j2se/GUIRunner.html
index 82fc52c..cc77fb4 100644
--- a/docs/apidocs/com/google/zxing/client/j2se/GUIRunner.html
+++ b/docs/apidocs/com/google/zxing/client/j2se/GUIRunner.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GUIRunner (ZXing 3.4.0 API)</title>
+<title>GUIRunner (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="GUIRunner (ZXing 3.4.0 API)";
+            parent.document.title="GUIRunner (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -403,6 +403,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/javax/swing/JFrame.ht
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/j2se/HtmlAssetTranslator.html b/docs/apidocs/com/google/zxing/client/j2se/HtmlAssetTranslator.html
index db2a2ed..b4fa9c3 100644
--- a/docs/apidocs/com/google/zxing/client/j2se/HtmlAssetTranslator.html
+++ b/docs/apidocs/com/google/zxing/client/j2se/HtmlAssetTranslator.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>HtmlAssetTranslator (ZXing 3.4.0 API)</title>
+<title>HtmlAssetTranslator (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,14 +12,14 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="HtmlAssetTranslator (ZXing 3.4.0 API)";
+            parent.document.title="HtmlAssetTranslator (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
     }
 //-->
-var methods = {"i0":9};
-var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],8:["t4","Concrete Methods"]};
+var methods = {"i0":41};
+var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],8:["t4","Concrete Methods"],32:["t6","Deprecated Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
 var tableTab = "tableTab";
@@ -108,8 +108,12 @@ var activeTableTab = "activeTableTab";
 <ul class="blockList">
 <li class="blockList">
 <hr>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
+<div class="block"><span class="deprecationComment">without replacement since 3.4.2</span></div>
+</div>
 <br>
-<pre>public final class <span class="typeNameLabel">HtmlAssetTranslator</span>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
+public final class <span class="typeNameLabel">HtmlAssetTranslator</span>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 <div class="block"><p>A utility which auto-translates the English-language text in a directory of HTML documents using
  Google Translate.</p>
@@ -118,12 +122,12 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
  as a comma-separated list. Specify "all" for language to try to translate for all existing translations.
  Each argument after this is the name of a file to translate; if the first one is "all", all files will
  be translated.</p>
- 
+
  <p>Usage: <code>HtmlAssetTranslator android/assets/ (all|lang1[,lang2 ...]) (all|file1.html[ file2.html ...])</code></p>
 
- <p><code>android/assets/ es all</code> will translate .html files in subdirectory html-en to 
- directory html-es, for example. Note that only text nodes in the HTML document are translated. 
- Any text that is a child of a node with <code>class="notranslate"</code> will not be translated. It will 
+ <p><code>android/assets/ es all</code> will translate .html files in subdirectory html-en to
+ directory html-es, for example. Note that only text nodes in the HTML document are translated.
+ Any text that is a child of a node with <code>class="notranslate"</code> will not be translated. It will
  also add a note at the end of the translated page that indicates it was automatically translated.</p></div>
 <dl>
 <dt><span class="simpleTagLabel">Author:</span></dt>
@@ -142,14 +146,16 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </a>
 <h3>Method Summary</h3>
 <table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
-<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t6" class="tableTab"><span><a href="javascript:show(32);">Deprecated Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
 <tr>
 <th class="colFirst" scope="col">Modifier and Type</th>
 <th class="colLast" scope="col">Method and Description</th>
 </tr>
 <tr id="i0" class="altColor">
 <td class="colFirst"><code>static void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/client/j2se/HtmlAssetTranslator.html#main-java.lang.String:A-">main</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;args)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/client/j2se/HtmlAssetTranslator.html#main-java.lang.String:A-">main</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;args)</code>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
+&nbsp;</td>
 </tr>
 </table>
 <ul class="blockList">
@@ -181,6 +187,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <h4>main</h4>
 <pre>public static&nbsp;void&nbsp;main(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;args)
                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
@@ -256,6 +263,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/j2se/ImageReader.html b/docs/apidocs/com/google/zxing/client/j2se/ImageReader.html
index 89f3b95..ee58a7f 100644
--- a/docs/apidocs/com/google/zxing/client/j2se/ImageReader.html
+++ b/docs/apidocs/com/google/zxing/client/j2se/ImageReader.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>ImageReader (ZXing 3.4.0 API)</title>
+<title>ImageReader (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="ImageReader (ZXing 3.4.0 API)";
+            parent.document.title="ImageReader (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -261,6 +261,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/j2se/MatrixToImageConfig.html b/docs/apidocs/com/google/zxing/client/j2se/MatrixToImageConfig.html
index 7515e52..dff5d85 100644
--- a/docs/apidocs/com/google/zxing/client/j2se/MatrixToImageConfig.html
+++ b/docs/apidocs/com/google/zxing/client/j2se/MatrixToImageConfig.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>MatrixToImageConfig (ZXing 3.4.0 API)</title>
+<title>MatrixToImageConfig (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="MatrixToImageConfig (ZXing 3.4.0 API)";
+            parent.document.title="MatrixToImageConfig (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -362,6 +362,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/j2se/MatrixToImageWriter.html b/docs/apidocs/com/google/zxing/client/j2se/MatrixToImageWriter.html
index ba88174..bc4a43b 100644
--- a/docs/apidocs/com/google/zxing/client/j2se/MatrixToImageWriter.html
+++ b/docs/apidocs/com/google/zxing/client/j2se/MatrixToImageWriter.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>MatrixToImageWriter (ZXing 3.4.0 API)</title>
+<title>MatrixToImageWriter (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="MatrixToImageWriter (ZXing 3.4.0 API)";
+            parent.document.title="MatrixToImageWriter (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -469,6 +469,6 @@ public static&nbsp;void&nbsp;writeToFile(<a href="../../../../../com/google/zxin
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/j2se/StringsResourceTranslator.html b/docs/apidocs/com/google/zxing/client/j2se/StringsResourceTranslator.html
index 512fe06..262d4dc 100644
--- a/docs/apidocs/com/google/zxing/client/j2se/StringsResourceTranslator.html
+++ b/docs/apidocs/com/google/zxing/client/j2se/StringsResourceTranslator.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>StringsResourceTranslator (ZXing 3.4.0 API)</title>
+<title>StringsResourceTranslator (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,14 +12,14 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="StringsResourceTranslator (ZXing 3.4.0 API)";
+            parent.document.title="StringsResourceTranslator (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
     }
 //-->
-var methods = {"i0":9};
-var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],8:["t4","Concrete Methods"]};
+var methods = {"i0":41};
+var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],8:["t4","Concrete Methods"],32:["t6","Deprecated Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
 var tableTab = "tableTab";
@@ -108,8 +108,12 @@ var activeTableTab = "activeTableTab";
 <ul class="blockList">
 <li class="blockList">
 <hr>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
+<div class="block"><span class="deprecationComment">without replacement since 3.4.2</span></div>
+</div>
 <br>
-<pre>public final class <span class="typeNameLabel">StringsResourceTranslator</span>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
+public final class <span class="typeNameLabel">StringsResourceTranslator</span>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 <div class="block"><p>A utility which auto-translates English strings in Android string resources using
  Google Translate.</p>
@@ -136,14 +140,16 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </a>
 <h3>Method Summary</h3>
 <table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
-<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t6" class="tableTab"><span><a href="javascript:show(32);">Deprecated Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
 <tr>
 <th class="colFirst" scope="col">Modifier and Type</th>
 <th class="colLast" scope="col">Method and Description</th>
 </tr>
 <tr id="i0" class="altColor">
 <td class="colFirst"><code>static void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/client/j2se/StringsResourceTranslator.html#main-java.lang.String:A-">main</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;args)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/client/j2se/StringsResourceTranslator.html#main-java.lang.String:A-">main</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;args)</code>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
+&nbsp;</td>
 </tr>
 </table>
 <ul class="blockList">
@@ -175,6 +181,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <h4>main</h4>
 <pre>public static&nbsp;void&nbsp;main(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;args)
                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
@@ -250,6 +257,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/j2se/class-use/BufferedImageLuminanceSource.html b/docs/apidocs/com/google/zxing/client/j2se/class-use/BufferedImageLuminanceSource.html
index 3c5cba9..7321689 100644
--- a/docs/apidocs/com/google/zxing/client/j2se/class-use/BufferedImageLuminanceSource.html
+++ b/docs/apidocs/com/google/zxing/client/j2se/class-use/BufferedImageLuminanceSource.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.client.j2se.BufferedImageLuminanceSource (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.client.j2se.BufferedImageLuminanceSource (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.client.j2se.BufferedImageLuminanceSource (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.client.j2se.BufferedImageLuminanceSource (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/j2se/class-use/CommandLineEncoder.html b/docs/apidocs/com/google/zxing/client/j2se/class-use/CommandLineEncoder.html
index 9077d7a..15bf01f 100644
--- a/docs/apidocs/com/google/zxing/client/j2se/class-use/CommandLineEncoder.html
+++ b/docs/apidocs/com/google/zxing/client/j2se/class-use/CommandLineEncoder.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.client.j2se.CommandLineEncoder (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.client.j2se.CommandLineEncoder (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.client.j2se.CommandLineEncoder (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.client.j2se.CommandLineEncoder (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/j2se/class-use/CommandLineRunner.html b/docs/apidocs/com/google/zxing/client/j2se/class-use/CommandLineRunner.html
index a254a84..7e7e8dd 100644
--- a/docs/apidocs/com/google/zxing/client/j2se/class-use/CommandLineRunner.html
+++ b/docs/apidocs/com/google/zxing/client/j2se/class-use/CommandLineRunner.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.client.j2se.CommandLineRunner (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.client.j2se.CommandLineRunner (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.client.j2se.CommandLineRunner (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.client.j2se.CommandLineRunner (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/j2se/class-use/GUIRunner.html b/docs/apidocs/com/google/zxing/client/j2se/class-use/GUIRunner.html
index f395c51..833b2a7 100644
--- a/docs/apidocs/com/google/zxing/client/j2se/class-use/GUIRunner.html
+++ b/docs/apidocs/com/google/zxing/client/j2se/class-use/GUIRunner.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.client.j2se.GUIRunner (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.client.j2se.GUIRunner (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.client.j2se.GUIRunner (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.client.j2se.GUIRunner (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/j2se/class-use/HtmlAssetTranslator.html b/docs/apidocs/com/google/zxing/client/j2se/class-use/HtmlAssetTranslator.html
index 6ddc51d..c259289 100644
--- a/docs/apidocs/com/google/zxing/client/j2se/class-use/HtmlAssetTranslator.html
+++ b/docs/apidocs/com/google/zxing/client/j2se/class-use/HtmlAssetTranslator.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.client.j2se.HtmlAssetTranslator (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.client.j2se.HtmlAssetTranslator (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.client.j2se.HtmlAssetTranslator (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.client.j2se.HtmlAssetTranslator (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/j2se/class-use/ImageReader.html b/docs/apidocs/com/google/zxing/client/j2se/class-use/ImageReader.html
index abb7873..e2ffccc 100644
--- a/docs/apidocs/com/google/zxing/client/j2se/class-use/ImageReader.html
+++ b/docs/apidocs/com/google/zxing/client/j2se/class-use/ImageReader.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.client.j2se.ImageReader (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.client.j2se.ImageReader (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.client.j2se.ImageReader (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.client.j2se.ImageReader (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/j2se/class-use/MatrixToImageConfig.html b/docs/apidocs/com/google/zxing/client/j2se/class-use/MatrixToImageConfig.html
index af40c79..e33f069 100644
--- a/docs/apidocs/com/google/zxing/client/j2se/class-use/MatrixToImageConfig.html
+++ b/docs/apidocs/com/google/zxing/client/j2se/class-use/MatrixToImageConfig.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.client.j2se.MatrixToImageConfig (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.client.j2se.MatrixToImageConfig (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.client.j2se.MatrixToImageConfig (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.client.j2se.MatrixToImageConfig (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -192,6 +192,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/j2se/class-use/MatrixToImageWriter.html b/docs/apidocs/com/google/zxing/client/j2se/class-use/MatrixToImageWriter.html
index 2215f5b..73a0564 100644
--- a/docs/apidocs/com/google/zxing/client/j2se/class-use/MatrixToImageWriter.html
+++ b/docs/apidocs/com/google/zxing/client/j2se/class-use/MatrixToImageWriter.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.client.j2se.MatrixToImageWriter (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.client.j2se.MatrixToImageWriter (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.client.j2se.MatrixToImageWriter (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.client.j2se.MatrixToImageWriter (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/j2se/class-use/StringsResourceTranslator.html b/docs/apidocs/com/google/zxing/client/j2se/class-use/StringsResourceTranslator.html
index 043f576..f50a835 100644
--- a/docs/apidocs/com/google/zxing/client/j2se/class-use/StringsResourceTranslator.html
+++ b/docs/apidocs/com/google/zxing/client/j2se/class-use/StringsResourceTranslator.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.client.j2se.StringsResourceTranslator (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.client.j2se.StringsResourceTranslator (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.client.j2se.StringsResourceTranslator (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.client.j2se.StringsResourceTranslator (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/j2se/package-frame.html b/docs/apidocs/com/google/zxing/client/j2se/package-frame.html
index 41ea551..2ffcd28 100644
--- a/docs/apidocs/com/google/zxing/client/j2se/package-frame.html
+++ b/docs/apidocs/com/google/zxing/client/j2se/package-frame.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.client.j2se (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.client.j2se (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
diff --git a/docs/apidocs/com/google/zxing/client/j2se/package-summary.html b/docs/apidocs/com/google/zxing/client/j2se/package-summary.html
index 4928d8b..3e930cb 100644
--- a/docs/apidocs/com/google/zxing/client/j2se/package-summary.html
+++ b/docs/apidocs/com/google/zxing/client/j2se/package-summary.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.client.j2se (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.client.j2se (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.client.j2se (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.client.j2se (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -109,9 +109,8 @@
 </tr>
 <tr class="altColor">
 <td class="colFirst"><a href="../../../../../com/google/zxing/client/j2se/HtmlAssetTranslator.html" title="class in com.google.zxing.client.j2se">HtmlAssetTranslator</a></td>
-<td class="colLast">
-<div class="block">A utility which auto-translates the English-language text in a directory of HTML documents using
- Google Translate.</div>
+<td class="colLast">Deprecated
+<div class="block"><span class="deprecationComment">without replacement since 3.4.2</span></div>
 </td>
 </tr>
 <tr class="rowColor">
@@ -135,9 +134,8 @@
 </tr>
 <tr class="altColor">
 <td class="colFirst"><a href="../../../../../com/google/zxing/client/j2se/StringsResourceTranslator.html" title="class in com.google.zxing.client.j2se">StringsResourceTranslator</a></td>
-<td class="colLast">
-<div class="block">A utility which auto-translates English strings in Android string resources using
- Google Translate.</div>
+<td class="colLast">Deprecated
+<div class="block"><span class="deprecationComment">without replacement since 3.4.2</span></div>
 </td>
 </tr>
 </tbody>
@@ -192,6 +190,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/j2se/package-tree.html b/docs/apidocs/com/google/zxing/client/j2se/package-tree.html
index c4b9f89..6dc2e66 100644
--- a/docs/apidocs/com/google/zxing/client/j2se/package-tree.html
+++ b/docs/apidocs/com/google/zxing/client/j2se/package-tree.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.client.j2se Class Hierarchy (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.client.j2se Class Hierarchy (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.client.j2se Class Hierarchy (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.client.j2se Class Hierarchy (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -165,6 +165,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/j2se/package-use.html b/docs/apidocs/com/google/zxing/client/j2se/package-use.html
index b51fb75..779ed75 100644
--- a/docs/apidocs/com/google/zxing/client/j2se/package-use.html
+++ b/docs/apidocs/com/google/zxing/client/j2se/package-use.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Package com.google.zxing.client.j2se (ZXing 3.4.0 API)</title>
+<title>Uses of Package com.google.zxing.client.j2se (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Package com.google.zxing.client.j2se (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Package com.google.zxing.client.j2se (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -155,6 +155,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/AddressBookAUResultParser.html b/docs/apidocs/com/google/zxing/client/result/AddressBookAUResultParser.html
index 17cbd8f..584f0a4 100644
--- a/docs/apidocs/com/google/zxing/client/result/AddressBookAUResultParser.html
+++ b/docs/apidocs/com/google/zxing/client/result/AddressBookAUResultParser.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>AddressBookAUResultParser (ZXing 3.4.0 API)</title>
+<title>AddressBookAUResultParser (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="AddressBookAUResultParser (ZXing 3.4.0 API)";
+            parent.document.title="AddressBookAUResultParser (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -303,6 +303,6 @@ extends <a href="../../../../../com/google/zxing/client/result/ResultParser.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/AddressBookDoCoMoResultParser.html b/docs/apidocs/com/google/zxing/client/result/AddressBookDoCoMoResultParser.html
index 3bdb9a3..8b821d9 100644
--- a/docs/apidocs/com/google/zxing/client/result/AddressBookDoCoMoResultParser.html
+++ b/docs/apidocs/com/google/zxing/client/result/AddressBookDoCoMoResultParser.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>AddressBookDoCoMoResultParser (ZXing 3.4.0 API)</title>
+<title>AddressBookDoCoMoResultParser (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="AddressBookDoCoMoResultParser (ZXing 3.4.0 API)";
+            parent.document.title="AddressBookDoCoMoResultParser (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -310,6 +310,6 @@ extends <a href="../../../../../com/google/zxing/client/result/ResultParser.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/AddressBookParsedResult.html b/docs/apidocs/com/google/zxing/client/result/AddressBookParsedResult.html
index 5d83731..0865ce4 100644
--- a/docs/apidocs/com/google/zxing/client/result/AddressBookParsedResult.html
+++ b/docs/apidocs/com/google/zxing/client/result/AddressBookParsedResult.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>AddressBookParsedResult (ZXing 3.4.0 API)</title>
+<title>AddressBookParsedResult (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="AddressBookParsedResult (ZXing 3.4.0 API)";
+            parent.document.title="AddressBookParsedResult (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -582,6 +582,6 @@ extends <a href="../../../../../com/google/zxing/client/result/ParsedResult.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/BizcardResultParser.html b/docs/apidocs/com/google/zxing/client/result/BizcardResultParser.html
index 711007d..c901485 100644
--- a/docs/apidocs/com/google/zxing/client/result/BizcardResultParser.html
+++ b/docs/apidocs/com/google/zxing/client/result/BizcardResultParser.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>BizcardResultParser (ZXing 3.4.0 API)</title>
+<title>BizcardResultParser (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="BizcardResultParser (ZXing 3.4.0 API)";
+            parent.document.title="BizcardResultParser (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -302,6 +302,6 @@ extends <a href="../../../../../com/google/zxing/client/result/ResultParser.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/BookmarkDoCoMoResultParser.html b/docs/apidocs/com/google/zxing/client/result/BookmarkDoCoMoResultParser.html
index d9f3629..8e116fe 100644
--- a/docs/apidocs/com/google/zxing/client/result/BookmarkDoCoMoResultParser.html
+++ b/docs/apidocs/com/google/zxing/client/result/BookmarkDoCoMoResultParser.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>BookmarkDoCoMoResultParser (ZXing 3.4.0 API)</title>
+<title>BookmarkDoCoMoResultParser (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="BookmarkDoCoMoResultParser (ZXing 3.4.0 API)";
+            parent.document.title="BookmarkDoCoMoResultParser (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -299,6 +299,6 @@ extends <a href="../../../../../com/google/zxing/client/result/ResultParser.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/CalendarParsedResult.html b/docs/apidocs/com/google/zxing/client/result/CalendarParsedResult.html
index 9f61ff6..928858a 100644
--- a/docs/apidocs/com/google/zxing/client/result/CalendarParsedResult.html
+++ b/docs/apidocs/com/google/zxing/client/result/CalendarParsedResult.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>CalendarParsedResult (ZXing 3.4.0 API)</title>
+<title>CalendarParsedResult (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="CalendarParsedResult (ZXing 3.4.0 API)";
+            parent.document.title="CalendarParsedResult (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -516,6 +516,6 @@ public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Date.ht
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/EmailAddressParsedResult.html b/docs/apidocs/com/google/zxing/client/result/EmailAddressParsedResult.html
index c9774f0..571500f 100644
--- a/docs/apidocs/com/google/zxing/client/result/EmailAddressParsedResult.html
+++ b/docs/apidocs/com/google/zxing/client/result/EmailAddressParsedResult.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>EmailAddressParsedResult (ZXing 3.4.0 API)</title>
+<title>EmailAddressParsedResult (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="EmailAddressParsedResult (ZXing 3.4.0 API)";
+            parent.document.title="EmailAddressParsedResult (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -366,6 +366,6 @@ public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/EmailAddressResultParser.html b/docs/apidocs/com/google/zxing/client/result/EmailAddressResultParser.html
index 6263431..bb3e2da 100644
--- a/docs/apidocs/com/google/zxing/client/result/EmailAddressResultParser.html
+++ b/docs/apidocs/com/google/zxing/client/result/EmailAddressResultParser.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>EmailAddressResultParser (ZXing 3.4.0 API)</title>
+<title>EmailAddressResultParser (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="EmailAddressResultParser (ZXing 3.4.0 API)";
+            parent.document.title="EmailAddressResultParser (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -301,6 +301,6 @@ extends <a href="../../../../../com/google/zxing/client/result/ResultParser.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/EmailDoCoMoResultParser.html b/docs/apidocs/com/google/zxing/client/result/EmailDoCoMoResultParser.html
index 61cec74..92bae26 100644
--- a/docs/apidocs/com/google/zxing/client/result/EmailDoCoMoResultParser.html
+++ b/docs/apidocs/com/google/zxing/client/result/EmailDoCoMoResultParser.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>EmailDoCoMoResultParser (ZXing 3.4.0 API)</title>
+<title>EmailDoCoMoResultParser (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="EmailDoCoMoResultParser (ZXing 3.4.0 API)";
+            parent.document.title="EmailDoCoMoResultParser (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -302,6 +302,6 @@ extends <a href="../../../../../com/google/zxing/client/result/ResultParser.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/ExpandedProductParsedResult.html b/docs/apidocs/com/google/zxing/client/result/ExpandedProductParsedResult.html
index 63c9f8d..dd4a759 100644
--- a/docs/apidocs/com/google/zxing/client/result/ExpandedProductParsedResult.html
+++ b/docs/apidocs/com/google/zxing/client/result/ExpandedProductParsedResult.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>ExpandedProductParsedResult (ZXing 3.4.0 API)</title>
+<title>ExpandedProductParsedResult (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="ExpandedProductParsedResult (ZXing 3.4.0 API)";
+            parent.document.title="ExpandedProductParsedResult (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -603,6 +603,6 @@ extends <a href="../../../../../com/google/zxing/client/result/ParsedResult.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/ExpandedProductResultParser.html b/docs/apidocs/com/google/zxing/client/result/ExpandedProductResultParser.html
index f365298..40d62f1 100644
--- a/docs/apidocs/com/google/zxing/client/result/ExpandedProductResultParser.html
+++ b/docs/apidocs/com/google/zxing/client/result/ExpandedProductResultParser.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>ExpandedProductResultParser (ZXing 3.4.0 API)</title>
+<title>ExpandedProductResultParser (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="ExpandedProductResultParser (ZXing 3.4.0 API)";
+            parent.document.title="ExpandedProductResultParser (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -300,6 +300,6 @@ extends <a href="../../../../../com/google/zxing/client/result/ResultParser.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/GeoParsedResult.html b/docs/apidocs/com/google/zxing/client/result/GeoParsedResult.html
index 8733601..44057c9 100644
--- a/docs/apidocs/com/google/zxing/client/result/GeoParsedResult.html
+++ b/docs/apidocs/com/google/zxing/client/result/GeoParsedResult.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GeoParsedResult (ZXing 3.4.0 API)</title>
+<title>GeoParsedResult (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="GeoParsedResult (ZXing 3.4.0 API)";
+            parent.document.title="GeoParsedResult (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -336,6 +336,6 @@ extends <a href="../../../../../com/google/zxing/client/result/ParsedResult.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/GeoResultParser.html b/docs/apidocs/com/google/zxing/client/result/GeoResultParser.html
index 5cb789e..3dc8aff 100644
--- a/docs/apidocs/com/google/zxing/client/result/GeoResultParser.html
+++ b/docs/apidocs/com/google/zxing/client/result/GeoResultParser.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GeoResultParser (ZXing 3.4.0 API)</title>
+<title>GeoResultParser (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="GeoResultParser (ZXing 3.4.0 API)";
+            parent.document.title="GeoResultParser (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -303,6 +303,6 @@ extends <a href="../../../../../com/google/zxing/client/result/ResultParser.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/ISBNParsedResult.html b/docs/apidocs/com/google/zxing/client/result/ISBNParsedResult.html
index 7830a32..e6fc861 100644
--- a/docs/apidocs/com/google/zxing/client/result/ISBNParsedResult.html
+++ b/docs/apidocs/com/google/zxing/client/result/ISBNParsedResult.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>ISBNParsedResult (ZXing 3.4.0 API)</title>
+<title>ISBNParsedResult (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="ISBNParsedResult (ZXing 3.4.0 API)";
+            parent.document.title="ISBNParsedResult (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -267,6 +267,6 @@ extends <a href="../../../../../com/google/zxing/client/result/ParsedResult.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/ISBNResultParser.html b/docs/apidocs/com/google/zxing/client/result/ISBNResultParser.html
index 0200da0..5769974 100644
--- a/docs/apidocs/com/google/zxing/client/result/ISBNResultParser.html
+++ b/docs/apidocs/com/google/zxing/client/result/ISBNResultParser.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>ISBNResultParser (ZXing 3.4.0 API)</title>
+<title>ISBNResultParser (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="ISBNResultParser (ZXing 3.4.0 API)";
+            parent.document.title="ISBNResultParser (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -295,6 +295,6 @@ extends <a href="../../../../../com/google/zxing/client/result/ResultParser.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/ParsedResult.html b/docs/apidocs/com/google/zxing/client/result/ParsedResult.html
index 63ee6b7..2ce84dd 100644
--- a/docs/apidocs/com/google/zxing/client/result/ParsedResult.html
+++ b/docs/apidocs/com/google/zxing/client/result/ParsedResult.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>ParsedResult (ZXing 3.4.0 API)</title>
+<title>ParsedResult (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="ParsedResult (ZXing 3.4.0 API)";
+            parent.document.title="ParsedResult (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -344,6 +344,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/ParsedResultType.html b/docs/apidocs/com/google/zxing/client/result/ParsedResultType.html
index a477ab6..2d48b95 100644
--- a/docs/apidocs/com/google/zxing/client/result/ParsedResultType.html
+++ b/docs/apidocs/com/google/zxing/client/result/ParsedResultType.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>ParsedResultType (ZXing 3.4.0 API)</title>
+<title>ParsedResultType (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="ParsedResultType (ZXing 3.4.0 API)";
+            parent.document.title="ParsedResultType (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -463,6 +463,6 @@ not permitted.)</div>
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/ProductParsedResult.html b/docs/apidocs/com/google/zxing/client/result/ProductParsedResult.html
index fd7963e..6110f5a 100644
--- a/docs/apidocs/com/google/zxing/client/result/ProductParsedResult.html
+++ b/docs/apidocs/com/google/zxing/client/result/ProductParsedResult.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>ProductParsedResult (ZXing 3.4.0 API)</title>
+<title>ProductParsedResult (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="ProductParsedResult (ZXing 3.4.0 API)";
+            parent.document.title="ProductParsedResult (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -280,6 +280,6 @@ extends <a href="../../../../../com/google/zxing/client/result/ParsedResult.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/ProductResultParser.html b/docs/apidocs/com/google/zxing/client/result/ProductResultParser.html
index e6756db..16f93b1 100644
--- a/docs/apidocs/com/google/zxing/client/result/ProductResultParser.html
+++ b/docs/apidocs/com/google/zxing/client/result/ProductResultParser.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>ProductResultParser (ZXing 3.4.0 API)</title>
+<title>ProductResultParser (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="ProductResultParser (ZXing 3.4.0 API)";
+            parent.document.title="ProductResultParser (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -300,6 +300,6 @@ extends <a href="../../../../../com/google/zxing/client/result/ResultParser.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/ResultParser.html b/docs/apidocs/com/google/zxing/client/result/ResultParser.html
index 1d49819..d9f8e80 100644
--- a/docs/apidocs/com/google/zxing/client/result/ResultParser.html
+++ b/docs/apidocs/com/google/zxing/client/result/ResultParser.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>ResultParser (ZXing 3.4.0 API)</title>
+<title>ResultParser (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="ResultParser (ZXing 3.4.0 API)";
+            parent.document.title="ResultParser (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -422,6 +422,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/SMSMMSResultParser.html b/docs/apidocs/com/google/zxing/client/result/SMSMMSResultParser.html
index 314f3c0..ece6727 100644
--- a/docs/apidocs/com/google/zxing/client/result/SMSMMSResultParser.html
+++ b/docs/apidocs/com/google/zxing/client/result/SMSMMSResultParser.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>SMSMMSResultParser (ZXing 3.4.0 API)</title>
+<title>SMSMMSResultParser (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="SMSMMSResultParser (ZXing 3.4.0 API)";
+            parent.document.title="SMSMMSResultParser (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -310,6 +310,6 @@ extends <a href="../../../../../com/google/zxing/client/result/ResultParser.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/SMSParsedResult.html b/docs/apidocs/com/google/zxing/client/result/SMSParsedResult.html
index f05e986..7072653 100644
--- a/docs/apidocs/com/google/zxing/client/result/SMSParsedResult.html
+++ b/docs/apidocs/com/google/zxing/client/result/SMSParsedResult.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>SMSParsedResult (ZXing 3.4.0 API)</title>
+<title>SMSParsedResult (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="SMSParsedResult (ZXing 3.4.0 API)";
+            parent.document.title="SMSParsedResult (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -378,6 +378,6 @@ extends <a href="../../../../../com/google/zxing/client/result/ParsedResult.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/SMSTOMMSTOResultParser.html b/docs/apidocs/com/google/zxing/client/result/SMSTOMMSTOResultParser.html
index 294ea9a..7c56822 100644
--- a/docs/apidocs/com/google/zxing/client/result/SMSTOMMSTOResultParser.html
+++ b/docs/apidocs/com/google/zxing/client/result/SMSTOMMSTOResultParser.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>SMSTOMMSTOResultParser (ZXing 3.4.0 API)</title>
+<title>SMSTOMMSTOResultParser (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="SMSTOMMSTOResultParser (ZXing 3.4.0 API)";
+            parent.document.title="SMSTOMMSTOResultParser (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -305,6 +305,6 @@ extends <a href="../../../../../com/google/zxing/client/result/ResultParser.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/SMTPResultParser.html b/docs/apidocs/com/google/zxing/client/result/SMTPResultParser.html
index e9f43ab..59a8b9c 100644
--- a/docs/apidocs/com/google/zxing/client/result/SMTPResultParser.html
+++ b/docs/apidocs/com/google/zxing/client/result/SMTPResultParser.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>SMTPResultParser (ZXing 3.4.0 API)</title>
+<title>SMTPResultParser (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="SMTPResultParser (ZXing 3.4.0 API)";
+            parent.document.title="SMTPResultParser (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -301,6 +301,6 @@ extends <a href="../../../../../com/google/zxing/client/result/ResultParser.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/TelParsedResult.html b/docs/apidocs/com/google/zxing/client/result/TelParsedResult.html
index 4bd25ff..9bf2cbd 100644
--- a/docs/apidocs/com/google/zxing/client/result/TelParsedResult.html
+++ b/docs/apidocs/com/google/zxing/client/result/TelParsedResult.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>TelParsedResult (ZXing 3.4.0 API)</title>
+<title>TelParsedResult (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="TelParsedResult (ZXing 3.4.0 API)";
+            parent.document.title="TelParsedResult (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -331,6 +331,6 @@ extends <a href="../../../../../com/google/zxing/client/result/ParsedResult.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/TelResultParser.html b/docs/apidocs/com/google/zxing/client/result/TelResultParser.html
index 1d647d6..c0efad6 100644
--- a/docs/apidocs/com/google/zxing/client/result/TelResultParser.html
+++ b/docs/apidocs/com/google/zxing/client/result/TelResultParser.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>TelResultParser (ZXing 3.4.0 API)</title>
+<title>TelResultParser (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="TelResultParser (ZXing 3.4.0 API)";
+            parent.document.title="TelResultParser (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -300,6 +300,6 @@ extends <a href="../../../../../com/google/zxing/client/result/ResultParser.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/TextParsedResult.html b/docs/apidocs/com/google/zxing/client/result/TextParsedResult.html
index 8496cd4..bc6fd72 100644
--- a/docs/apidocs/com/google/zxing/client/result/TextParsedResult.html
+++ b/docs/apidocs/com/google/zxing/client/result/TextParsedResult.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>TextParsedResult (ZXing 3.4.0 API)</title>
+<title>TextParsedResult (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="TextParsedResult (ZXing 3.4.0 API)";
+            parent.document.title="TextParsedResult (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -317,6 +317,6 @@ extends <a href="../../../../../com/google/zxing/client/result/ParsedResult.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/URIParsedResult.html b/docs/apidocs/com/google/zxing/client/result/URIParsedResult.html
index ceafec6..753e862 100644
--- a/docs/apidocs/com/google/zxing/client/result/URIParsedResult.html
+++ b/docs/apidocs/com/google/zxing/client/result/URIParsedResult.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>URIParsedResult (ZXing 3.4.0 API)</title>
+<title>URIParsedResult (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="URIParsedResult (ZXing 3.4.0 API)";
+            parent.document.title="URIParsedResult (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -340,6 +340,6 @@ public&nbsp;boolean&nbsp;isPossiblyMaliciousURI()</pre>
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/URIResultParser.html b/docs/apidocs/com/google/zxing/client/result/URIResultParser.html
index 60da9e0..ac245cd 100644
--- a/docs/apidocs/com/google/zxing/client/result/URIResultParser.html
+++ b/docs/apidocs/com/google/zxing/client/result/URIResultParser.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>URIResultParser (ZXing 3.4.0 API)</title>
+<title>URIResultParser (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="URIResultParser (ZXing 3.4.0 API)";
+            parent.document.title="URIResultParser (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -300,6 +300,6 @@ extends <a href="../../../../../com/google/zxing/client/result/ResultParser.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/URLTOResultParser.html b/docs/apidocs/com/google/zxing/client/result/URLTOResultParser.html
index 1eff984..ea4e645 100644
--- a/docs/apidocs/com/google/zxing/client/result/URLTOResultParser.html
+++ b/docs/apidocs/com/google/zxing/client/result/URLTOResultParser.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>URLTOResultParser (ZXing 3.4.0 API)</title>
+<title>URLTOResultParser (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="URLTOResultParser (ZXing 3.4.0 API)";
+            parent.document.title="URLTOResultParser (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -302,6 +302,6 @@ extends <a href="../../../../../com/google/zxing/client/result/ResultParser.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/VCardResultParser.html b/docs/apidocs/com/google/zxing/client/result/VCardResultParser.html
index d95d90a..d15f532 100644
--- a/docs/apidocs/com/google/zxing/client/result/VCardResultParser.html
+++ b/docs/apidocs/com/google/zxing/client/result/VCardResultParser.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>VCardResultParser (ZXing 3.4.0 API)</title>
+<title>VCardResultParser (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="VCardResultParser (ZXing 3.4.0 API)";
+            parent.document.title="VCardResultParser (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -301,6 +301,6 @@ extends <a href="../../../../../com/google/zxing/client/result/ResultParser.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/VEventResultParser.html b/docs/apidocs/com/google/zxing/client/result/VEventResultParser.html
index d42e4bd..e748110 100644
--- a/docs/apidocs/com/google/zxing/client/result/VEventResultParser.html
+++ b/docs/apidocs/com/google/zxing/client/result/VEventResultParser.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>VEventResultParser (ZXing 3.4.0 API)</title>
+<title>VEventResultParser (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="VEventResultParser (ZXing 3.4.0 API)";
+            parent.document.title="VEventResultParser (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -301,6 +301,6 @@ extends <a href="../../../../../com/google/zxing/client/result/ResultParser.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/VINParsedResult.html b/docs/apidocs/com/google/zxing/client/result/VINParsedResult.html
index aa65e1a..27e4379 100644
--- a/docs/apidocs/com/google/zxing/client/result/VINParsedResult.html
+++ b/docs/apidocs/com/google/zxing/client/result/VINParsedResult.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>VINParsedResult (ZXing 3.4.0 API)</title>
+<title>VINParsedResult (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="VINParsedResult (ZXing 3.4.0 API)";
+            parent.document.title="VINParsedResult (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -417,6 +417,6 @@ extends <a href="../../../../../com/google/zxing/client/result/ParsedResult.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/VINResultParser.html b/docs/apidocs/com/google/zxing/client/result/VINResultParser.html
index 67f58a8..f2395ed 100644
--- a/docs/apidocs/com/google/zxing/client/result/VINResultParser.html
+++ b/docs/apidocs/com/google/zxing/client/result/VINResultParser.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>VINResultParser (ZXing 3.4.0 API)</title>
+<title>VINResultParser (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="VINResultParser (ZXing 3.4.0 API)";
+            parent.document.title="VINResultParser (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -300,6 +300,6 @@ extends <a href="../../../../../com/google/zxing/client/result/ResultParser.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/WifiParsedResult.html b/docs/apidocs/com/google/zxing/client/result/WifiParsedResult.html
index 1ec928b..0c39077 100644
--- a/docs/apidocs/com/google/zxing/client/result/WifiParsedResult.html
+++ b/docs/apidocs/com/google/zxing/client/result/WifiParsedResult.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>WifiParsedResult (ZXing 3.4.0 API)</title>
+<title>WifiParsedResult (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="WifiParsedResult (ZXing 3.4.0 API)";
+            parent.document.title="WifiParsedResult (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -440,6 +440,6 @@ extends <a href="../../../../../com/google/zxing/client/result/ParsedResult.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/WifiResultParser.html b/docs/apidocs/com/google/zxing/client/result/WifiResultParser.html
index 2648d20..049335c 100644
--- a/docs/apidocs/com/google/zxing/client/result/WifiResultParser.html
+++ b/docs/apidocs/com/google/zxing/client/result/WifiResultParser.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>WifiResultParser (ZXing 3.4.0 API)</title>
+<title>WifiResultParser (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="WifiResultParser (ZXing 3.4.0 API)";
+            parent.document.title="WifiResultParser (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -116,21 +116,6 @@ var activeTableTab = "activeTableTab";
 <br>
 <pre>public final class <span class="typeNameLabel">WifiResultParser</span>
 extends <a href="../../../../../com/google/zxing/client/result/ResultParser.html" title="class in com.google.zxing.client.result">ResultParser</a></pre>
-<div class="block"><p>Parses a WIFI configuration string. Strings will be of the form:</p>
-
- <p><code>WIFI:T:[network type];S:[network SSID];P:[network password];H:[hidden?];;</code></p>
-
- <p>For WPA2 enterprise (EAP), strings will be of the form:</p>
-
- <p><code>WIFI:T:WPA2-EAP;S:[network SSID];H:[hidden?];E:[EAP method];H:[Phase 2 method];A:[anonymous identity];I:[username];P:[password];;</code></p>
-
- <p>"EAP method" can e.g. be "TTLS" or "PWD" or one of the other fields in <a href="https://developer.android.com/reference/android/net/wifi/WifiEnterpriseConfig.Eap.html">WifiEnterpriseConfig.Eap</a> and "Phase 2 method" can e.g. be "MSCHAPV2" or any of the other fields in <a href="https://developer.android.com/reference/android/net/wifi/WifiEnterpriseConfig.Phase2.html">WifiEnterpriseConfig.Phase2</a></p>
-
- <p>The fields can appear in any order. Only "S:" is required.</p></div>
-<dl>
-<dt><span class="simpleTagLabel">Author:</span></dt>
-<dd>Vikram Aggarwal, Sean Owen, Steffen Kieß</dd>
-</dl>
 </li>
 </ul>
 </div>
@@ -310,6 +295,6 @@ extends <a href="../../../../../com/google/zxing/client/result/ResultParser.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/class-use/AddressBookAUResultParser.html b/docs/apidocs/com/google/zxing/client/result/class-use/AddressBookAUResultParser.html
index dddbbd2..ddabf39 100644
--- a/docs/apidocs/com/google/zxing/client/result/class-use/AddressBookAUResultParser.html
+++ b/docs/apidocs/com/google/zxing/client/result/class-use/AddressBookAUResultParser.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.client.result.AddressBookAUResultParser (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.client.result.AddressBookAUResultParser (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.client.result.AddressBookAUResultParser (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.client.result.AddressBookAUResultParser (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/class-use/AddressBookDoCoMoResultParser.html b/docs/apidocs/com/google/zxing/client/result/class-use/AddressBookDoCoMoResultParser.html
index 6013460..7a275fc 100644
--- a/docs/apidocs/com/google/zxing/client/result/class-use/AddressBookDoCoMoResultParser.html
+++ b/docs/apidocs/com/google/zxing/client/result/class-use/AddressBookDoCoMoResultParser.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.client.result.AddressBookDoCoMoResultParser (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.client.result.AddressBookDoCoMoResultParser (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.client.result.AddressBookDoCoMoResultParser (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.client.result.AddressBookDoCoMoResultParser (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/class-use/AddressBookParsedResult.html b/docs/apidocs/com/google/zxing/client/result/class-use/AddressBookParsedResult.html
index d6ac163..1fee3fb 100644
--- a/docs/apidocs/com/google/zxing/client/result/class-use/AddressBookParsedResult.html
+++ b/docs/apidocs/com/google/zxing/client/result/class-use/AddressBookParsedResult.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.client.result.AddressBookParsedResult (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.client.result.AddressBookParsedResult (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.client.result.AddressBookParsedResult (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.client.result.AddressBookParsedResult (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -104,7 +104,7 @@
 <tbody>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../../com/google/zxing/client/result/AddressBookParsedResult.html" title="class in com.google.zxing.client.result">AddressBookParsedResult</a></code></td>
-<td class="colLast"><span class="typeNameLabel">AddressBookDoCoMoResultParser.</span><code><span class="memberNameLink"><a href="../../../../../../com/google/zxing/client/result/AddressBookDoCoMoResultParser.html#parse-com.google.zxing.Result-">parse</a></span>(<a href="../../../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a>&nbsp;result)</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">AddressBookAUResultParser.</span><code><span class="memberNameLink"><a href="../../../../../../com/google/zxing/client/result/AddressBookAUResultParser.html#parse-com.google.zxing.Result-">parse</a></span>(<a href="../../../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a>&nbsp;result)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../../com/google/zxing/client/result/AddressBookParsedResult.html" title="class in com.google.zxing.client.result">AddressBookParsedResult</a></code></td>
@@ -112,11 +112,11 @@
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../../com/google/zxing/client/result/AddressBookParsedResult.html" title="class in com.google.zxing.client.result">AddressBookParsedResult</a></code></td>
-<td class="colLast"><span class="typeNameLabel">AddressBookAUResultParser.</span><code><span class="memberNameLink"><a href="../../../../../../com/google/zxing/client/result/AddressBookAUResultParser.html#parse-com.google.zxing.Result-">parse</a></span>(<a href="../../../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a>&nbsp;result)</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">VCardResultParser.</span><code><span class="memberNameLink"><a href="../../../../../../com/google/zxing/client/result/VCardResultParser.html#parse-com.google.zxing.Result-">parse</a></span>(<a href="../../../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a>&nbsp;result)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../../com/google/zxing/client/result/AddressBookParsedResult.html" title="class in com.google.zxing.client.result">AddressBookParsedResult</a></code></td>
-<td class="colLast"><span class="typeNameLabel">VCardResultParser.</span><code><span class="memberNameLink"><a href="../../../../../../com/google/zxing/client/result/VCardResultParser.html#parse-com.google.zxing.Result-">parse</a></span>(<a href="../../../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a>&nbsp;result)</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">AddressBookDoCoMoResultParser.</span><code><span class="memberNameLink"><a href="../../../../../../com/google/zxing/client/result/AddressBookDoCoMoResultParser.html#parse-com.google.zxing.Result-">parse</a></span>(<a href="../../../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a>&nbsp;result)</code>&nbsp;</td>
 </tr>
 </tbody>
 </table>
@@ -172,6 +172,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/class-use/BizcardResultParser.html b/docs/apidocs/com/google/zxing/client/result/class-use/BizcardResultParser.html
index 4062cb3..be06875 100644
--- a/docs/apidocs/com/google/zxing/client/result/class-use/BizcardResultParser.html
+++ b/docs/apidocs/com/google/zxing/client/result/class-use/BizcardResultParser.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.client.result.BizcardResultParser (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.client.result.BizcardResultParser (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.client.result.BizcardResultParser (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.client.result.BizcardResultParser (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/class-use/BookmarkDoCoMoResultParser.html b/docs/apidocs/com/google/zxing/client/result/class-use/BookmarkDoCoMoResultParser.html
index 22515fe..9c80f7d 100644
--- a/docs/apidocs/com/google/zxing/client/result/class-use/BookmarkDoCoMoResultParser.html
+++ b/docs/apidocs/com/google/zxing/client/result/class-use/BookmarkDoCoMoResultParser.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.client.result.BookmarkDoCoMoResultParser (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.client.result.BookmarkDoCoMoResultParser (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.client.result.BookmarkDoCoMoResultParser (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.client.result.BookmarkDoCoMoResultParser (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/class-use/CalendarParsedResult.html b/docs/apidocs/com/google/zxing/client/result/class-use/CalendarParsedResult.html
index 3f3189f..c9ac0cd 100644
--- a/docs/apidocs/com/google/zxing/client/result/class-use/CalendarParsedResult.html
+++ b/docs/apidocs/com/google/zxing/client/result/class-use/CalendarParsedResult.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.client.result.CalendarParsedResult (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.client.result.CalendarParsedResult (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.client.result.CalendarParsedResult (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.client.result.CalendarParsedResult (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -160,6 +160,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/class-use/EmailAddressParsedResult.html b/docs/apidocs/com/google/zxing/client/result/class-use/EmailAddressParsedResult.html
index f9ce2db..5520d07 100644
--- a/docs/apidocs/com/google/zxing/client/result/class-use/EmailAddressParsedResult.html
+++ b/docs/apidocs/com/google/zxing/client/result/class-use/EmailAddressParsedResult.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.client.result.EmailAddressParsedResult (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.client.result.EmailAddressParsedResult (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.client.result.EmailAddressParsedResult (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.client.result.EmailAddressParsedResult (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -104,11 +104,11 @@
 <tbody>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../../com/google/zxing/client/result/EmailAddressParsedResult.html" title="class in com.google.zxing.client.result">EmailAddressParsedResult</a></code></td>
-<td class="colLast"><span class="typeNameLabel">EmailAddressResultParser.</span><code><span class="memberNameLink"><a href="../../../../../../com/google/zxing/client/result/EmailAddressResultParser.html#parse-com.google.zxing.Result-">parse</a></span>(<a href="../../../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a>&nbsp;result)</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">EmailDoCoMoResultParser.</span><code><span class="memberNameLink"><a href="../../../../../../com/google/zxing/client/result/EmailDoCoMoResultParser.html#parse-com.google.zxing.Result-">parse</a></span>(<a href="../../../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a>&nbsp;result)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../../com/google/zxing/client/result/EmailAddressParsedResult.html" title="class in com.google.zxing.client.result">EmailAddressParsedResult</a></code></td>
-<td class="colLast"><span class="typeNameLabel">EmailDoCoMoResultParser.</span><code><span class="memberNameLink"><a href="../../../../../../com/google/zxing/client/result/EmailDoCoMoResultParser.html#parse-com.google.zxing.Result-">parse</a></span>(<a href="../../../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a>&nbsp;result)</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">EmailAddressResultParser.</span><code><span class="memberNameLink"><a href="../../../../../../com/google/zxing/client/result/EmailAddressResultParser.html#parse-com.google.zxing.Result-">parse</a></span>(<a href="../../../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a>&nbsp;result)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../../com/google/zxing/client/result/EmailAddressParsedResult.html" title="class in com.google.zxing.client.result">EmailAddressParsedResult</a></code></td>
@@ -168,6 +168,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/class-use/EmailAddressResultParser.html b/docs/apidocs/com/google/zxing/client/result/class-use/EmailAddressResultParser.html
index b2eb0b0..b5196d7 100644
--- a/docs/apidocs/com/google/zxing/client/result/class-use/EmailAddressResultParser.html
+++ b/docs/apidocs/com/google/zxing/client/result/class-use/EmailAddressResultParser.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.client.result.EmailAddressResultParser (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.client.result.EmailAddressResultParser (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.client.result.EmailAddressResultParser (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.client.result.EmailAddressResultParser (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/class-use/EmailDoCoMoResultParser.html b/docs/apidocs/com/google/zxing/client/result/class-use/EmailDoCoMoResultParser.html
index ba50718..69474cd 100644
--- a/docs/apidocs/com/google/zxing/client/result/class-use/EmailDoCoMoResultParser.html
+++ b/docs/apidocs/com/google/zxing/client/result/class-use/EmailDoCoMoResultParser.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.client.result.EmailDoCoMoResultParser (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.client.result.EmailDoCoMoResultParser (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.client.result.EmailDoCoMoResultParser (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.client.result.EmailDoCoMoResultParser (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/class-use/ExpandedProductParsedResult.html b/docs/apidocs/com/google/zxing/client/result/class-use/ExpandedProductParsedResult.html
index 2a3cfea..04986f2 100644
--- a/docs/apidocs/com/google/zxing/client/result/class-use/ExpandedProductParsedResult.html
+++ b/docs/apidocs/com/google/zxing/client/result/class-use/ExpandedProductParsedResult.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.client.result.ExpandedProductParsedResult (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.client.result.ExpandedProductParsedResult (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.client.result.ExpandedProductParsedResult (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.client.result.ExpandedProductParsedResult (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -160,6 +160,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/class-use/ExpandedProductResultParser.html b/docs/apidocs/com/google/zxing/client/result/class-use/ExpandedProductResultParser.html
index d8e9388..ce6f1e6 100644
--- a/docs/apidocs/com/google/zxing/client/result/class-use/ExpandedProductResultParser.html
+++ b/docs/apidocs/com/google/zxing/client/result/class-use/ExpandedProductResultParser.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.client.result.ExpandedProductResultParser (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.client.result.ExpandedProductResultParser (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.client.result.ExpandedProductResultParser (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.client.result.ExpandedProductResultParser (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/class-use/GeoParsedResult.html b/docs/apidocs/com/google/zxing/client/result/class-use/GeoParsedResult.html
index 982b033..7bf336e 100644
--- a/docs/apidocs/com/google/zxing/client/result/class-use/GeoParsedResult.html
+++ b/docs/apidocs/com/google/zxing/client/result/class-use/GeoParsedResult.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.client.result.GeoParsedResult (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.client.result.GeoParsedResult (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.client.result.GeoParsedResult (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.client.result.GeoParsedResult (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -160,6 +160,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/class-use/GeoResultParser.html b/docs/apidocs/com/google/zxing/client/result/class-use/GeoResultParser.html
index 41be124..617c3d1 100644
--- a/docs/apidocs/com/google/zxing/client/result/class-use/GeoResultParser.html
+++ b/docs/apidocs/com/google/zxing/client/result/class-use/GeoResultParser.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.client.result.GeoResultParser (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.client.result.GeoResultParser (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.client.result.GeoResultParser (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.client.result.GeoResultParser (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/class-use/ISBNParsedResult.html b/docs/apidocs/com/google/zxing/client/result/class-use/ISBNParsedResult.html
index 76c1aeb..f0e44af 100644
--- a/docs/apidocs/com/google/zxing/client/result/class-use/ISBNParsedResult.html
+++ b/docs/apidocs/com/google/zxing/client/result/class-use/ISBNParsedResult.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.client.result.ISBNParsedResult (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.client.result.ISBNParsedResult (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.client.result.ISBNParsedResult (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.client.result.ISBNParsedResult (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -162,6 +162,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/class-use/ISBNResultParser.html b/docs/apidocs/com/google/zxing/client/result/class-use/ISBNResultParser.html
index a28c795..e91c494 100644
--- a/docs/apidocs/com/google/zxing/client/result/class-use/ISBNResultParser.html
+++ b/docs/apidocs/com/google/zxing/client/result/class-use/ISBNResultParser.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.client.result.ISBNResultParser (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.client.result.ISBNResultParser (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.client.result.ISBNResultParser (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.client.result.ISBNResultParser (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/class-use/ParsedResult.html b/docs/apidocs/com/google/zxing/client/result/class-use/ParsedResult.html
index 38edd02..d963baf 100644
--- a/docs/apidocs/com/google/zxing/client/result/class-use/ParsedResult.html
+++ b/docs/apidocs/com/google/zxing/client/result/class-use/ParsedResult.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.client.result.ParsedResult (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.client.result.ParsedResult (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.client.result.ParsedResult (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.client.result.ParsedResult (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -262,6 +262,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/class-use/ParsedResultType.html b/docs/apidocs/com/google/zxing/client/result/class-use/ParsedResultType.html
index 98046d3..8f67696 100644
--- a/docs/apidocs/com/google/zxing/client/result/class-use/ParsedResultType.html
+++ b/docs/apidocs/com/google/zxing/client/result/class-use/ParsedResultType.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.client.result.ParsedResultType (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.client.result.ParsedResultType (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.client.result.ParsedResultType (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.client.result.ParsedResultType (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -184,6 +184,6 @@ the order they are declared.</div>
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/class-use/ProductParsedResult.html b/docs/apidocs/com/google/zxing/client/result/class-use/ProductParsedResult.html
index 7da6226..eadfc36 100644
--- a/docs/apidocs/com/google/zxing/client/result/class-use/ProductParsedResult.html
+++ b/docs/apidocs/com/google/zxing/client/result/class-use/ProductParsedResult.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.client.result.ProductParsedResult (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.client.result.ProductParsedResult (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.client.result.ProductParsedResult (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.client.result.ProductParsedResult (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -160,6 +160,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/class-use/ProductResultParser.html b/docs/apidocs/com/google/zxing/client/result/class-use/ProductResultParser.html
index ec9298c..f8a7c66 100644
--- a/docs/apidocs/com/google/zxing/client/result/class-use/ProductResultParser.html
+++ b/docs/apidocs/com/google/zxing/client/result/class-use/ProductResultParser.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.client.result.ProductResultParser (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.client.result.ProductResultParser (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.client.result.ProductResultParser (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.client.result.ProductResultParser (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/class-use/ResultParser.html b/docs/apidocs/com/google/zxing/client/result/class-use/ResultParser.html
index c36c855..a23cef3 100644
--- a/docs/apidocs/com/google/zxing/client/result/class-use/ResultParser.html
+++ b/docs/apidocs/com/google/zxing/client/result/class-use/ResultParser.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.client.result.ResultParser (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.client.result.ResultParser (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.client.result.ResultParser (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.client.result.ResultParser (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -223,9 +223,7 @@
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../com/google/zxing/client/result/WifiResultParser.html" title="class in com.google.zxing.client.result">WifiResultParser</a></span></code>
-<div class="block">Parses a WIFI configuration string.</div>
-</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../com/google/zxing/client/result/WifiResultParser.html" title="class in com.google.zxing.client.result">WifiResultParser</a></span></code>&nbsp;</td>
 </tr>
 </tbody>
 </table>
@@ -281,6 +279,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/class-use/SMSMMSResultParser.html b/docs/apidocs/com/google/zxing/client/result/class-use/SMSMMSResultParser.html
index e6c6e71..6d93430 100644
--- a/docs/apidocs/com/google/zxing/client/result/class-use/SMSMMSResultParser.html
+++ b/docs/apidocs/com/google/zxing/client/result/class-use/SMSMMSResultParser.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.client.result.SMSMMSResultParser (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.client.result.SMSMMSResultParser (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.client.result.SMSMMSResultParser (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.client.result.SMSMMSResultParser (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/class-use/SMSParsedResult.html b/docs/apidocs/com/google/zxing/client/result/class-use/SMSParsedResult.html
index 57e1841..648ab83 100644
--- a/docs/apidocs/com/google/zxing/client/result/class-use/SMSParsedResult.html
+++ b/docs/apidocs/com/google/zxing/client/result/class-use/SMSParsedResult.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.client.result.SMSParsedResult (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.client.result.SMSParsedResult (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.client.result.SMSParsedResult (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.client.result.SMSParsedResult (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -104,11 +104,11 @@
 <tbody>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../../com/google/zxing/client/result/SMSParsedResult.html" title="class in com.google.zxing.client.result">SMSParsedResult</a></code></td>
-<td class="colLast"><span class="typeNameLabel">SMSTOMMSTOResultParser.</span><code><span class="memberNameLink"><a href="../../../../../../com/google/zxing/client/result/SMSTOMMSTOResultParser.html#parse-com.google.zxing.Result-">parse</a></span>(<a href="../../../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a>&nbsp;result)</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">SMSMMSResultParser.</span><code><span class="memberNameLink"><a href="../../../../../../com/google/zxing/client/result/SMSMMSResultParser.html#parse-com.google.zxing.Result-">parse</a></span>(<a href="../../../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a>&nbsp;result)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../../com/google/zxing/client/result/SMSParsedResult.html" title="class in com.google.zxing.client.result">SMSParsedResult</a></code></td>
-<td class="colLast"><span class="typeNameLabel">SMSMMSResultParser.</span><code><span class="memberNameLink"><a href="../../../../../../com/google/zxing/client/result/SMSMMSResultParser.html#parse-com.google.zxing.Result-">parse</a></span>(<a href="../../../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a>&nbsp;result)</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">SMSTOMMSTOResultParser.</span><code><span class="memberNameLink"><a href="../../../../../../com/google/zxing/client/result/SMSTOMMSTOResultParser.html#parse-com.google.zxing.Result-">parse</a></span>(<a href="../../../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a>&nbsp;result)</code>&nbsp;</td>
 </tr>
 </tbody>
 </table>
@@ -164,6 +164,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/class-use/SMSTOMMSTOResultParser.html b/docs/apidocs/com/google/zxing/client/result/class-use/SMSTOMMSTOResultParser.html
index 7d71bb0..f5221b5 100644
--- a/docs/apidocs/com/google/zxing/client/result/class-use/SMSTOMMSTOResultParser.html
+++ b/docs/apidocs/com/google/zxing/client/result/class-use/SMSTOMMSTOResultParser.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.client.result.SMSTOMMSTOResultParser (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.client.result.SMSTOMMSTOResultParser (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.client.result.SMSTOMMSTOResultParser (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.client.result.SMSTOMMSTOResultParser (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/class-use/SMTPResultParser.html b/docs/apidocs/com/google/zxing/client/result/class-use/SMTPResultParser.html
index 60f47b2..1e89096 100644
--- a/docs/apidocs/com/google/zxing/client/result/class-use/SMTPResultParser.html
+++ b/docs/apidocs/com/google/zxing/client/result/class-use/SMTPResultParser.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.client.result.SMTPResultParser (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.client.result.SMTPResultParser (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.client.result.SMTPResultParser (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.client.result.SMTPResultParser (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/class-use/TelParsedResult.html b/docs/apidocs/com/google/zxing/client/result/class-use/TelParsedResult.html
index fdc11dc..c844da1 100644
--- a/docs/apidocs/com/google/zxing/client/result/class-use/TelParsedResult.html
+++ b/docs/apidocs/com/google/zxing/client/result/class-use/TelParsedResult.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.client.result.TelParsedResult (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.client.result.TelParsedResult (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.client.result.TelParsedResult (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.client.result.TelParsedResult (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -160,6 +160,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/class-use/TelResultParser.html b/docs/apidocs/com/google/zxing/client/result/class-use/TelResultParser.html
index 870e740..c0d7d66 100644
--- a/docs/apidocs/com/google/zxing/client/result/class-use/TelResultParser.html
+++ b/docs/apidocs/com/google/zxing/client/result/class-use/TelResultParser.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.client.result.TelResultParser (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.client.result.TelResultParser (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.client.result.TelResultParser (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.client.result.TelResultParser (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/class-use/TextParsedResult.html b/docs/apidocs/com/google/zxing/client/result/class-use/TextParsedResult.html
index 502ec65..777207e 100644
--- a/docs/apidocs/com/google/zxing/client/result/class-use/TextParsedResult.html
+++ b/docs/apidocs/com/google/zxing/client/result/class-use/TextParsedResult.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.client.result.TextParsedResult (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.client.result.TextParsedResult (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.client.result.TextParsedResult (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.client.result.TextParsedResult (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/class-use/URIParsedResult.html b/docs/apidocs/com/google/zxing/client/result/class-use/URIParsedResult.html
index 163f718..d962c31 100644
--- a/docs/apidocs/com/google/zxing/client/result/class-use/URIParsedResult.html
+++ b/docs/apidocs/com/google/zxing/client/result/class-use/URIParsedResult.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.client.result.URIParsedResult (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.client.result.URIParsedResult (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.client.result.URIParsedResult (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.client.result.URIParsedResult (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -104,15 +104,15 @@
 <tbody>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../../com/google/zxing/client/result/URIParsedResult.html" title="class in com.google.zxing.client.result">URIParsedResult</a></code></td>
-<td class="colLast"><span class="typeNameLabel">URIResultParser.</span><code><span class="memberNameLink"><a href="../../../../../../com/google/zxing/client/result/URIResultParser.html#parse-com.google.zxing.Result-">parse</a></span>(<a href="../../../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a>&nbsp;result)</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">URLTOResultParser.</span><code><span class="memberNameLink"><a href="../../../../../../com/google/zxing/client/result/URLTOResultParser.html#parse-com.google.zxing.Result-">parse</a></span>(<a href="../../../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a>&nbsp;result)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../../com/google/zxing/client/result/URIParsedResult.html" title="class in com.google.zxing.client.result">URIParsedResult</a></code></td>
-<td class="colLast"><span class="typeNameLabel">BookmarkDoCoMoResultParser.</span><code><span class="memberNameLink"><a href="../../../../../../com/google/zxing/client/result/BookmarkDoCoMoResultParser.html#parse-com.google.zxing.Result-">parse</a></span>(<a href="../../../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a>&nbsp;result)</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">URIResultParser.</span><code><span class="memberNameLink"><a href="../../../../../../com/google/zxing/client/result/URIResultParser.html#parse-com.google.zxing.Result-">parse</a></span>(<a href="../../../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a>&nbsp;result)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../../com/google/zxing/client/result/URIParsedResult.html" title="class in com.google.zxing.client.result">URIParsedResult</a></code></td>
-<td class="colLast"><span class="typeNameLabel">URLTOResultParser.</span><code><span class="memberNameLink"><a href="../../../../../../com/google/zxing/client/result/URLTOResultParser.html#parse-com.google.zxing.Result-">parse</a></span>(<a href="../../../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a>&nbsp;result)</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">BookmarkDoCoMoResultParser.</span><code><span class="memberNameLink"><a href="../../../../../../com/google/zxing/client/result/BookmarkDoCoMoResultParser.html#parse-com.google.zxing.Result-">parse</a></span>(<a href="../../../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a>&nbsp;result)</code>&nbsp;</td>
 </tr>
 </tbody>
 </table>
@@ -168,6 +168,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/class-use/URIResultParser.html b/docs/apidocs/com/google/zxing/client/result/class-use/URIResultParser.html
index 9173c86..8fefe2a 100644
--- a/docs/apidocs/com/google/zxing/client/result/class-use/URIResultParser.html
+++ b/docs/apidocs/com/google/zxing/client/result/class-use/URIResultParser.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.client.result.URIResultParser (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.client.result.URIResultParser (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.client.result.URIResultParser (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.client.result.URIResultParser (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/class-use/URLTOResultParser.html b/docs/apidocs/com/google/zxing/client/result/class-use/URLTOResultParser.html
index 998d29a..8ec9b01 100644
--- a/docs/apidocs/com/google/zxing/client/result/class-use/URLTOResultParser.html
+++ b/docs/apidocs/com/google/zxing/client/result/class-use/URLTOResultParser.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.client.result.URLTOResultParser (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.client.result.URLTOResultParser (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.client.result.URLTOResultParser (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.client.result.URLTOResultParser (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/class-use/VCardResultParser.html b/docs/apidocs/com/google/zxing/client/result/class-use/VCardResultParser.html
index 1aeaefb..af60532 100644
--- a/docs/apidocs/com/google/zxing/client/result/class-use/VCardResultParser.html
+++ b/docs/apidocs/com/google/zxing/client/result/class-use/VCardResultParser.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.client.result.VCardResultParser (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.client.result.VCardResultParser (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.client.result.VCardResultParser (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.client.result.VCardResultParser (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/class-use/VEventResultParser.html b/docs/apidocs/com/google/zxing/client/result/class-use/VEventResultParser.html
index d1c874a..2db5d7c 100644
--- a/docs/apidocs/com/google/zxing/client/result/class-use/VEventResultParser.html
+++ b/docs/apidocs/com/google/zxing/client/result/class-use/VEventResultParser.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.client.result.VEventResultParser (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.client.result.VEventResultParser (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.client.result.VEventResultParser (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.client.result.VEventResultParser (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/class-use/VINParsedResult.html b/docs/apidocs/com/google/zxing/client/result/class-use/VINParsedResult.html
index 01bf11e..52260b1 100644
--- a/docs/apidocs/com/google/zxing/client/result/class-use/VINParsedResult.html
+++ b/docs/apidocs/com/google/zxing/client/result/class-use/VINParsedResult.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.client.result.VINParsedResult (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.client.result.VINParsedResult (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.client.result.VINParsedResult (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.client.result.VINParsedResult (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -160,6 +160,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/class-use/VINResultParser.html b/docs/apidocs/com/google/zxing/client/result/class-use/VINResultParser.html
index ed897e5..0f7c3b3 100644
--- a/docs/apidocs/com/google/zxing/client/result/class-use/VINResultParser.html
+++ b/docs/apidocs/com/google/zxing/client/result/class-use/VINResultParser.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.client.result.VINResultParser (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.client.result.VINResultParser (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.client.result.VINResultParser (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.client.result.VINResultParser (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/class-use/WifiParsedResult.html b/docs/apidocs/com/google/zxing/client/result/class-use/WifiParsedResult.html
index 783bce1..835cf71 100644
--- a/docs/apidocs/com/google/zxing/client/result/class-use/WifiParsedResult.html
+++ b/docs/apidocs/com/google/zxing/client/result/class-use/WifiParsedResult.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.client.result.WifiParsedResult (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.client.result.WifiParsedResult (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.client.result.WifiParsedResult (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.client.result.WifiParsedResult (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -160,6 +160,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/class-use/WifiResultParser.html b/docs/apidocs/com/google/zxing/client/result/class-use/WifiResultParser.html
index 6fd9a13..bc610bf 100644
--- a/docs/apidocs/com/google/zxing/client/result/class-use/WifiResultParser.html
+++ b/docs/apidocs/com/google/zxing/client/result/class-use/WifiResultParser.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.client.result.WifiResultParser (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.client.result.WifiResultParser (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.client.result.WifiResultParser (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.client.result.WifiResultParser (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/package-frame.html b/docs/apidocs/com/google/zxing/client/result/package-frame.html
index 35d6f66..a2786b8 100644
--- a/docs/apidocs/com/google/zxing/client/result/package-frame.html
+++ b/docs/apidocs/com/google/zxing/client/result/package-frame.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.client.result (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.client.result (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
diff --git a/docs/apidocs/com/google/zxing/client/result/package-summary.html b/docs/apidocs/com/google/zxing/client/result/package-summary.html
index 4c411fe..7a2663f 100644
--- a/docs/apidocs/com/google/zxing/client/result/package-summary.html
+++ b/docs/apidocs/com/google/zxing/client/result/package-summary.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.client.result (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.client.result (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.client.result (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.client.result (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -302,9 +302,7 @@
 </tr>
 <tr class="altColor">
 <td class="colFirst"><a href="../../../../../com/google/zxing/client/result/WifiResultParser.html" title="class in com.google.zxing.client.result">WifiResultParser</a></td>
-<td class="colLast">
-<div class="block">Parses a WIFI configuration string.</div>
-</td>
+<td class="colLast">&nbsp;</td>
 </tr>
 </tbody>
 </table>
@@ -376,6 +374,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/package-tree.html b/docs/apidocs/com/google/zxing/client/result/package-tree.html
index 92f5905..3aabcf8 100644
--- a/docs/apidocs/com/google/zxing/client/result/package-tree.html
+++ b/docs/apidocs/com/google/zxing/client/result/package-tree.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.client.result Class Hierarchy (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.client.result Class Hierarchy (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.client.result Class Hierarchy (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.client.result Class Hierarchy (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -185,6 +185,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/client/result/package-use.html b/docs/apidocs/com/google/zxing/client/result/package-use.html
index c83afda..08ec61f 100644
--- a/docs/apidocs/com/google/zxing/client/result/package-use.html
+++ b/docs/apidocs/com/google/zxing/client/result/package-use.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Package com.google.zxing.client.result (ZXing 3.4.0 API)</title>
+<title>Uses of Package com.google.zxing.client.result (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Package com.google.zxing.client.result (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Package com.google.zxing.client.result (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -234,6 +234,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/common/BitArray.html b/docs/apidocs/com/google/zxing/common/BitArray.html
index 7b00efe..3cdbe1b 100644
--- a/docs/apidocs/com/google/zxing/common/BitArray.html
+++ b/docs/apidocs/com/google/zxing/common/BitArray.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>BitArray (ZXing 3.4.0 API)</title>
+<title>BitArray (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="BitArray (ZXing 3.4.0 API)";
+            parent.document.title="BitArray (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -691,6 +691,6 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Cloneabl
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/common/BitMatrix.html b/docs/apidocs/com/google/zxing/common/BitMatrix.html
index bf0fec0..124aec4 100644
--- a/docs/apidocs/com/google/zxing/common/BitMatrix.html
+++ b/docs/apidocs/com/google/zxing/common/BitMatrix.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>BitMatrix (ZXing 3.4.0 API)</title>
+<title>BitMatrix (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,13 +12,13 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="BitMatrix (ZXing 3.4.0 API)";
+            parent.document.title="BitMatrix (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":9,"i14":9,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":42,"i22":10,"i23":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":9,"i15":9,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":42,"i25":10,"i26":10};
 var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"],32:["t6","Deprecated Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -189,83 +189,101 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Cloneabl
 </tr>
 <tr id="i3" class="rowColor">
 <td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/BitMatrix.html#flip--">flip</a></span>()</code>
+<div class="block">Flips every bit in the matrix.</div>
+</td>
+</tr>
+<tr id="i4" class="altColor">
+<td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/BitMatrix.html#flip-int-int-">flip</a></span>(int&nbsp;x,
     int&nbsp;y)</code>
 <div class="block">Flips the given bit.</div>
 </td>
 </tr>
-<tr id="i4" class="altColor">
+<tr id="i5" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/BitMatrix.html#get-int-int-">get</a></span>(int&nbsp;x,
    int&nbsp;y)</code>
 <div class="block">Gets the requested bit, where true means black.</div>
 </td>
 </tr>
-<tr id="i5" class="rowColor">
+<tr id="i6" class="altColor">
 <td class="colFirst"><code>int[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/BitMatrix.html#getBottomRightOnBit--">getBottomRightOnBit</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i6" class="altColor">
+<tr id="i7" class="rowColor">
 <td class="colFirst"><code>int[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/BitMatrix.html#getEnclosingRectangle--">getEnclosingRectangle</a></span>()</code>
 <div class="block">This is useful in detecting the enclosing rectangle of a 'pure' barcode.</div>
 </td>
 </tr>
-<tr id="i7" class="rowColor">
+<tr id="i8" class="altColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/BitMatrix.html#getHeight--">getHeight</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i8" class="altColor">
+<tr id="i9" class="rowColor">
 <td class="colFirst"><code><a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/BitMatrix.html#getRow-int-com.google.zxing.common.BitArray-">getRow</a></span>(int&nbsp;y,
       <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row)</code>
 <div class="block">A fast method to retrieve one row of data from the matrix as a BitArray.</div>
 </td>
 </tr>
-<tr id="i9" class="rowColor">
+<tr id="i10" class="altColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/BitMatrix.html#getRowSize--">getRowSize</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i10" class="altColor">
+<tr id="i11" class="rowColor">
 <td class="colFirst"><code>int[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/BitMatrix.html#getTopLeftOnBit--">getTopLeftOnBit</a></span>()</code>
 <div class="block">This is useful in detecting a corner of a 'pure' barcode.</div>
 </td>
 </tr>
-<tr id="i11" class="rowColor">
+<tr id="i12" class="altColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/BitMatrix.html#getWidth--">getWidth</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i12" class="altColor">
+<tr id="i13" class="rowColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/BitMatrix.html#hashCode--">hashCode</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i13" class="rowColor">
+<tr id="i14" class="altColor">
 <td class="colFirst"><code>static <a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/BitMatrix.html#parse-boolean:A:A-">parse</a></span>(boolean[][]&nbsp;image)</code>
 <div class="block">Interprets a 2D array of booleans as a <code>BitMatrix</code>, where "true" means an "on" bit.</div>
 </td>
 </tr>
-<tr id="i14" class="altColor">
+<tr id="i15" class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/BitMatrix.html#parse-java.lang.String-java.lang.String-java.lang.String-">parse</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;stringRepresentation,
      <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;setString,
      <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;unsetString)</code>&nbsp;</td>
 </tr>
-<tr id="i15" class="rowColor">
+<tr id="i16" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/BitMatrix.html#rotate-int-">rotate</a></span>(int&nbsp;degrees)</code>
+<div class="block">Modifies this <code>BitMatrix</code> to represent the same but rotated the given degrees (0, 90, 180, 270)</div>
+</td>
+</tr>
+<tr id="i17" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/BitMatrix.html#rotate180--">rotate180</a></span>()</code>
 <div class="block">Modifies this <code>BitMatrix</code> to represent the same but rotated 180 degrees</div>
 </td>
 </tr>
-<tr id="i16" class="altColor">
+<tr id="i18" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/BitMatrix.html#rotate90--">rotate90</a></span>()</code>
+<div class="block">Modifies this <code>BitMatrix</code> to represent the same but rotated 90 degrees counterclockwise</div>
+</td>
+</tr>
+<tr id="i19" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/BitMatrix.html#set-int-int-">set</a></span>(int&nbsp;x,
    int&nbsp;y)</code>
 <div class="block">Sets the given bit to true.</div>
 </td>
 </tr>
-<tr id="i17" class="rowColor">
+<tr id="i20" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/BitMatrix.html#setRegion-int-int-int-int-">setRegion</a></span>(int&nbsp;left,
          int&nbsp;top,
@@ -274,21 +292,21 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Cloneabl
 <div class="block">Sets a square region of the bit matrix to true.</div>
 </td>
 </tr>
-<tr id="i18" class="altColor">
+<tr id="i21" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/BitMatrix.html#setRow-int-com.google.zxing.common.BitArray-">setRow</a></span>(int&nbsp;y,
       <a href="../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row)</code>&nbsp;</td>
 </tr>
-<tr id="i19" class="rowColor">
+<tr id="i22" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/BitMatrix.html#toString--">toString</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i20" class="altColor">
+<tr id="i23" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/BitMatrix.html#toString-java.lang.String-java.lang.String-">toString</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;setString,
         <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;unsetString)</code>&nbsp;</td>
 </tr>
-<tr id="i21" class="rowColor">
+<tr id="i24" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/BitMatrix.html#toString-java.lang.String-java.lang.String-java.lang.String-">toString</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;setString,
         <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;unsetString,
@@ -298,12 +316,12 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Cloneabl
 </div>
 </td>
 </tr>
-<tr id="i22" class="altColor">
+<tr id="i25" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/BitMatrix.html#unset-int-int-">unset</a></span>(int&nbsp;x,
      int&nbsp;y)</code>&nbsp;</td>
 </tr>
-<tr id="i23" class="rowColor">
+<tr id="i26" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/BitMatrix.html#xor-com.google.zxing.common.BitMatrix-">xor</a></span>(<a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a>&nbsp;mask)</code>
 <div class="block">Exclusive-or (XOR): Flip the bit in this <code>BitMatrix</code> if the corresponding
@@ -457,6 +475,16 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Cloneabl
 </dl>
 </li>
 </ul>
+<a name="flip--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>flip</h4>
+<pre>public&nbsp;void&nbsp;flip()</pre>
+<div class="block"><p>Flips every bit in the matrix.</p></div>
+</li>
+</ul>
 <a name="xor-com.google.zxing.common.BitMatrix-">
 <!--   -->
 </a>
@@ -536,6 +564,20 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Cloneabl
 </dl>
 </li>
 </ul>
+<a name="rotate-int-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>rotate</h4>
+<pre>public&nbsp;void&nbsp;rotate(int&nbsp;degrees)</pre>
+<div class="block">Modifies this <code>BitMatrix</code> to represent the same but rotated the given degrees (0, 90, 180, 270)</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>degrees</code> - number of degrees to rotate through counter-clockwise (0, 90, 180, 270)</dd>
+</dl>
+</li>
+</ul>
 <a name="rotate180--">
 <!--   -->
 </a>
@@ -546,6 +588,16 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Cloneabl
 <div class="block">Modifies this <code>BitMatrix</code> to represent the same but rotated 180 degrees</div>
 </li>
 </ul>
+<a name="rotate90--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>rotate90</h4>
+<pre>public&nbsp;void&nbsp;rotate90()</pre>
+<div class="block">Modifies this <code>BitMatrix</code> to represent the same but rotated 90 degrees counterclockwise</div>
+</li>
+</ul>
 <a name="getEnclosingRectangle--">
 <!--   -->
 </a>
@@ -783,6 +835,6 @@ public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/common/BitSource.html b/docs/apidocs/com/google/zxing/common/BitSource.html
index 2a7bc83..82e1863 100644
--- a/docs/apidocs/com/google/zxing/common/BitSource.html
+++ b/docs/apidocs/com/google/zxing/common/BitSource.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>BitSource (ZXing 3.4.0 API)</title>
+<title>BitSource (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="BitSource (ZXing 3.4.0 API)";
+            parent.document.title="BitSource (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -341,6 +341,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/common/CharacterSetECI.html b/docs/apidocs/com/google/zxing/common/CharacterSetECI.html
index 4e67d10..ccbc837 100644
--- a/docs/apidocs/com/google/zxing/common/CharacterSetECI.html
+++ b/docs/apidocs/com/google/zxing/common/CharacterSetECI.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>CharacterSetECI (ZXing 3.4.0 API)</title>
+<title>CharacterSetECI (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,13 +12,13 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="CharacterSetECI (ZXing 3.4.0 API)";
+            parent.document.title="CharacterSetECI (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
     }
 //-->
-var methods = {"i0":9,"i1":9,"i2":10,"i3":9,"i4":9};
+var methods = {"i0":9,"i1":9,"i2":9,"i3":10,"i4":10,"i5":9,"i6":9};
 var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -174,54 +174,39 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?i
 <td class="colOne"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/CharacterSetECI.html#ISO8859_1">ISO8859_1</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/CharacterSetECI.html#ISO8859_10">ISO8859_10</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/CharacterSetECI.html#ISO8859_11">ISO8859_11</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
 <td class="colOne"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/CharacterSetECI.html#ISO8859_13">ISO8859_13</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/CharacterSetECI.html#ISO8859_14">ISO8859_14</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
 <td class="colOne"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/CharacterSetECI.html#ISO8859_15">ISO8859_15</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/CharacterSetECI.html#ISO8859_16">ISO8859_16</a></span></code>&nbsp;</td>
-</tr>
 <tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/CharacterSetECI.html#ISO8859_2">ISO8859_2</a></span></code>&nbsp;</td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/CharacterSetECI.html#ISO8859_16">ISO8859_16</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/CharacterSetECI.html#ISO8859_3">ISO8859_3</a></span></code>&nbsp;</td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/CharacterSetECI.html#ISO8859_2">ISO8859_2</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/CharacterSetECI.html#ISO8859_4">ISO8859_4</a></span></code>&nbsp;</td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/CharacterSetECI.html#ISO8859_3">ISO8859_3</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/CharacterSetECI.html#ISO8859_5">ISO8859_5</a></span></code>&nbsp;</td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/CharacterSetECI.html#ISO8859_4">ISO8859_4</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/CharacterSetECI.html#ISO8859_6">ISO8859_6</a></span></code>&nbsp;</td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/CharacterSetECI.html#ISO8859_5">ISO8859_5</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colOne"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/CharacterSetECI.html#ISO8859_7">ISO8859_7</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/CharacterSetECI.html#ISO8859_8">ISO8859_8</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
 <td class="colOne"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/CharacterSetECI.html#ISO8859_9">ISO8859_9</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/CharacterSetECI.html#SJIS">SJIS</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/CharacterSetECI.html#UnicodeBigUnmarked">UnicodeBigUnmarked</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/CharacterSetECI.html#UTF8">UTF8</a></span></code>&nbsp;</td>
 </tr>
 </table>
@@ -241,23 +226,31 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?i
 </tr>
 <tr id="i0" class="altColor">
 <td class="colFirst"><code>static <a href="../../../../com/google/zxing/common/CharacterSetECI.html" title="enum in com.google.zxing.common">CharacterSetECI</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/CharacterSetECI.html#getCharacterSetECIByName-java.lang.String-">getCharacterSetECIByName</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/CharacterSetECI.html#getCharacterSetECI-java.nio.charset.Charset-">getCharacterSetECI</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</a>&nbsp;charset)</code>&nbsp;</td>
 </tr>
 <tr id="i1" class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../com/google/zxing/common/CharacterSetECI.html" title="enum in com.google.zxing.common">CharacterSetECI</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/CharacterSetECI.html#getCharacterSetECIByValue-int-">getCharacterSetECIByValue</a></span>(int&nbsp;value)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/CharacterSetECI.html#getCharacterSetECIByName-java.lang.String-">getCharacterSetECIByName</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</code>&nbsp;</td>
 </tr>
 <tr id="i2" class="altColor">
+<td class="colFirst"><code>static <a href="../../../../com/google/zxing/common/CharacterSetECI.html" title="enum in com.google.zxing.common">CharacterSetECI</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/CharacterSetECI.html#getCharacterSetECIByValue-int-">getCharacterSetECIByValue</a></span>(int&nbsp;value)</code>&nbsp;</td>
+</tr>
+<tr id="i3" class="rowColor">
+<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/CharacterSetECI.html#getCharset--">getCharset</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i4" class="altColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/CharacterSetECI.html#getValue--">getValue</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i3" class="rowColor">
+<tr id="i5" class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../com/google/zxing/common/CharacterSetECI.html" title="enum in com.google.zxing.common">CharacterSetECI</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/CharacterSetECI.html#valueOf-java.lang.String-">valueOf</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</code>
 <div class="block">Returns the enum constant of this type with the specified name.</div>
 </td>
 </tr>
-<tr id="i4" class="altColor">
+<tr id="i6" class="altColor">
 <td class="colFirst"><code>static <a href="../../../../com/google/zxing/common/CharacterSetECI.html" title="enum in com.google.zxing.common">CharacterSetECI</a>[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/CharacterSetECI.html#values--">values</a></span>()</code>
 <div class="block">Returns an array containing the constants of this enum type, in
@@ -347,15 +340,6 @@ the order they are declared.</div>
 <pre>public static final&nbsp;<a href="../../../../com/google/zxing/common/CharacterSetECI.html" title="enum in com.google.zxing.common">CharacterSetECI</a> ISO8859_5</pre>
 </li>
 </ul>
-<a name="ISO8859_6">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>ISO8859_6</h4>
-<pre>public static final&nbsp;<a href="../../../../com/google/zxing/common/CharacterSetECI.html" title="enum in com.google.zxing.common">CharacterSetECI</a> ISO8859_6</pre>
-</li>
-</ul>
 <a name="ISO8859_7">
 <!--   -->
 </a>
@@ -365,15 +349,6 @@ the order they are declared.</div>
 <pre>public static final&nbsp;<a href="../../../../com/google/zxing/common/CharacterSetECI.html" title="enum in com.google.zxing.common">CharacterSetECI</a> ISO8859_7</pre>
 </li>
 </ul>
-<a name="ISO8859_8">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>ISO8859_8</h4>
-<pre>public static final&nbsp;<a href="../../../../com/google/zxing/common/CharacterSetECI.html" title="enum in com.google.zxing.common">CharacterSetECI</a> ISO8859_8</pre>
-</li>
-</ul>
 <a name="ISO8859_9">
 <!--   -->
 </a>
@@ -383,24 +358,6 @@ the order they are declared.</div>
 <pre>public static final&nbsp;<a href="../../../../com/google/zxing/common/CharacterSetECI.html" title="enum in com.google.zxing.common">CharacterSetECI</a> ISO8859_9</pre>
 </li>
 </ul>
-<a name="ISO8859_10">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>ISO8859_10</h4>
-<pre>public static final&nbsp;<a href="../../../../com/google/zxing/common/CharacterSetECI.html" title="enum in com.google.zxing.common">CharacterSetECI</a> ISO8859_10</pre>
-</li>
-</ul>
-<a name="ISO8859_11">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>ISO8859_11</h4>
-<pre>public static final&nbsp;<a href="../../../../com/google/zxing/common/CharacterSetECI.html" title="enum in com.google.zxing.common">CharacterSetECI</a> ISO8859_11</pre>
-</li>
-</ul>
 <a name="ISO8859_13">
 <!--   -->
 </a>
@@ -410,15 +367,6 @@ the order they are declared.</div>
 <pre>public static final&nbsp;<a href="../../../../com/google/zxing/common/CharacterSetECI.html" title="enum in com.google.zxing.common">CharacterSetECI</a> ISO8859_13</pre>
 </li>
 </ul>
-<a name="ISO8859_14">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>ISO8859_14</h4>
-<pre>public static final&nbsp;<a href="../../../../com/google/zxing/common/CharacterSetECI.html" title="enum in com.google.zxing.common">CharacterSetECI</a> ISO8859_14</pre>
-</li>
-</ul>
 <a name="ISO8859_15">
 <!--   -->
 </a>
@@ -595,6 +543,31 @@ not permitted.)</div>
 <pre>public&nbsp;int&nbsp;getValue()</pre>
 </li>
 </ul>
+<a name="getCharset--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getCharset</h4>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</a>&nbsp;getCharset()</pre>
+</li>
+</ul>
+<a name="getCharacterSetECI-java.nio.charset.Charset-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getCharacterSetECI</h4>
+<pre>public static&nbsp;<a href="../../../../com/google/zxing/common/CharacterSetECI.html" title="enum in com.google.zxing.common">CharacterSetECI</a>&nbsp;getCharacterSetECI(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</a>&nbsp;charset)</pre>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>charset</code> - Java character set object</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>CharacterSetECI representing ECI for character encoding, or null if it is legal
+   but unsupported</dd>
+</dl>
+</li>
+</ul>
 <a name="getCharacterSetECIByValue-int-">
 <!--   -->
 </a>
@@ -699,6 +672,6 @@ not permitted.)</div>
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/common/DecoderResult.html b/docs/apidocs/com/google/zxing/common/DecoderResult.html
index c1637f4..9c720ca 100644
--- a/docs/apidocs/com/google/zxing/common/DecoderResult.html
+++ b/docs/apidocs/com/google/zxing/common/DecoderResult.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>DecoderResult (ZXing 3.4.0 API)</title>
+<title>DecoderResult (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,13 +12,13 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="DecoderResult (ZXing 3.4.0 API)";
+            parent.document.title="DecoderResult (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -142,6 +142,13 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
              <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;ecLevel)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/DecoderResult.html#DecoderResult-byte:A-java.lang.String-java.util.List-java.lang.String-int-">DecoderResult</a></span>(byte[]&nbsp;rawBytes,
+             <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;text,
+             <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;byte[]&gt;&nbsp;byteSegments,
+             <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;ecLevel,
+             int&nbsp;symbologyModifier)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colOne"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/DecoderResult.html#DecoderResult-byte:A-java.lang.String-java.util.List-java.lang.String-int-int-">DecoderResult</a></span>(byte[]&nbsp;rawBytes,
              <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;text,
              <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;byte[]&gt;&nbsp;byteSegments,
@@ -149,6 +156,15 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
              int&nbsp;saSequence,
              int&nbsp;saParity)</code>&nbsp;</td>
 </tr>
+<tr class="rowColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/DecoderResult.html#DecoderResult-byte:A-java.lang.String-java.util.List-java.lang.String-int-int-int-">DecoderResult</a></span>(byte[]&nbsp;rawBytes,
+             <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;text,
+             <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;byte[]&gt;&nbsp;byteSegments,
+             <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;ecLevel,
+             int&nbsp;saSequence,
+             int&nbsp;saParity,
+             int&nbsp;symbologyModifier)</code>&nbsp;</td>
+</tr>
 </table>
 </li>
 </ul>
@@ -201,26 +217,30 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/DecoderResult.html#getStructuredAppendSequenceNumber--">getStructuredAppendSequenceNumber</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i9" class="rowColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/DecoderResult.html#getSymbologyModifier--">getSymbologyModifier</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i10" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/DecoderResult.html#getText--">getText</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i10" class="altColor">
+<tr id="i11" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/DecoderResult.html#hasStructuredAppend--">hasStructuredAppend</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i11" class="rowColor">
+<tr id="i12" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/DecoderResult.html#setErasures-java.lang.Integer-">setErasures</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&nbsp;erasures)</code>&nbsp;</td>
 </tr>
-<tr id="i12" class="altColor">
+<tr id="i13" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/DecoderResult.html#setErrorsCorrected-java.lang.Integer-">setErrorsCorrected</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&nbsp;errorsCorrected)</code>&nbsp;</td>
 </tr>
-<tr id="i13" class="rowColor">
+<tr id="i14" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/DecoderResult.html#setNumBits-int-">setNumBits</a></span>(int&nbsp;numBits)</code>&nbsp;</td>
 </tr>
-<tr id="i14" class="altColor">
+<tr id="i15" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/DecoderResult.html#setOther-java.lang.Object-">setOther</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;other)</code>&nbsp;</td>
 </tr>
@@ -258,10 +278,23 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
                      <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;ecLevel)</pre>
 </li>
 </ul>
+<a name="DecoderResult-byte:A-java.lang.String-java.util.List-java.lang.String-int-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>DecoderResult</h4>
+<pre>public&nbsp;DecoderResult(byte[]&nbsp;rawBytes,
+                     <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;text,
+                     <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;byte[]&gt;&nbsp;byteSegments,
+                     <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;ecLevel,
+                     int&nbsp;symbologyModifier)</pre>
+</li>
+</ul>
 <a name="DecoderResult-byte:A-java.lang.String-java.util.List-java.lang.String-int-int-">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>DecoderResult</h4>
 <pre>public&nbsp;DecoderResult(byte[]&nbsp;rawBytes,
@@ -272,6 +305,21 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
                      int&nbsp;saParity)</pre>
 </li>
 </ul>
+<a name="DecoderResult-byte:A-java.lang.String-java.util.List-java.lang.String-int-int-int-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>DecoderResult</h4>
+<pre>public&nbsp;DecoderResult(byte[]&nbsp;rawBytes,
+                     <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;text,
+                     <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;byte[]&gt;&nbsp;byteSegments,
+                     <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;ecLevel,
+                     int&nbsp;saSequence,
+                     int&nbsp;saParity,
+                     int&nbsp;symbologyModifier)</pre>
+</li>
+</ul>
 </li>
 </ul>
 <!-- ============ METHOD DETAIL ========== -->
@@ -449,12 +497,21 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <a name="getStructuredAppendSequenceNumber--">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>getStructuredAppendSequenceNumber</h4>
 <pre>public&nbsp;int&nbsp;getStructuredAppendSequenceNumber()</pre>
 </li>
 </ul>
+<a name="getSymbologyModifier--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>getSymbologyModifier</h4>
+<pre>public&nbsp;int&nbsp;getSymbologyModifier()</pre>
+</li>
+</ul>
 </li>
 </ul>
 </li>
@@ -524,6 +581,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/common/DefaultGridSampler.html b/docs/apidocs/com/google/zxing/common/DefaultGridSampler.html
index e0e820c..c4ac502 100644
--- a/docs/apidocs/com/google/zxing/common/DefaultGridSampler.html
+++ b/docs/apidocs/com/google/zxing/common/DefaultGridSampler.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>DefaultGridSampler (ZXing 3.4.0 API)</title>
+<title>DefaultGridSampler (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="DefaultGridSampler (ZXing 3.4.0 API)";
+            parent.document.title="DefaultGridSampler (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -382,6 +382,6 @@ extends <a href="../../../../com/google/zxing/common/GridSampler.html" title="cl
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/common/DetectorResult.html b/docs/apidocs/com/google/zxing/common/DetectorResult.html
index ffa929c..09accf8 100644
--- a/docs/apidocs/com/google/zxing/common/DetectorResult.html
+++ b/docs/apidocs/com/google/zxing/common/DetectorResult.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>DetectorResult (ZXing 3.4.0 API)</title>
+<title>DetectorResult (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="DetectorResult (ZXing 3.4.0 API)";
+            parent.document.title="DetectorResult (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -50,7 +50,7 @@ var activeTableTab = "activeTableTab";
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../com/google/zxing/common/DefaultGridSampler.html" title="class in com.google.zxing.common"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../com/google/zxing/common/GlobalHistogramBinarizer.html" title="class in com.google.zxing.common"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../com/google/zxing/common/ECIEncoderSet.html" title="class in com.google.zxing.common"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../index.html?com/google/zxing/common/DetectorResult.html" target="_top">Frames</a></li>
@@ -253,7 +253,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../com/google/zxing/common/DefaultGridSampler.html" title="class in com.google.zxing.common"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../com/google/zxing/common/GlobalHistogramBinarizer.html" title="class in com.google.zxing.common"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../com/google/zxing/common/ECIEncoderSet.html" title="class in com.google.zxing.common"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../index.html?com/google/zxing/common/DetectorResult.html" target="_top">Frames</a></li>
@@ -293,6 +293,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/common/ECIEncoderSet.html b/docs/apidocs/com/google/zxing/common/ECIEncoderSet.html
new file mode 100644
index 0000000..91df269
--- /dev/null
+++ b/docs/apidocs/com/google/zxing/common/ECIEncoderSet.html
@@ -0,0 +1,397 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>ECIEncoderSet (ZXing 3.5.1 API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="ECIEncoderSet (ZXing 3.5.1 API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10};
+var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/ECIEncoderSet.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../com/google/zxing/common/DetectorResult.html" title="class in com.google.zxing.common"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../com/google/zxing/common/ECIInput.html" title="interface in com.google.zxing.common"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?com/google/zxing/common/ECIEncoderSet.html" target="_top">Frames</a></li>
+<li><a href="ECIEncoderSet.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">com.google.zxing.common</div>
+<h2 title="Class ECIEncoderSet" class="title">Class ECIEncoderSet</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>com.google.zxing.common.ECIEncoderSet</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre>public final class <span class="typeNameLabel">ECIEncoderSet</span>
+extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
+<div class="block">Set of CharsetEncoders for a given input string
+
+ Invariants:
+ - The list contains only encoders from CharacterSetECI (list is shorter then the list of encoders available on
+   the platform for which ECI values are defined).
+ - The list contains encoders at least one encoder for every character in the input.
+ - The first encoder in the list is always the ISO-8859-1 encoder even of no character in the input can be encoded
+       by it.
+ - If the input contains a character that is not in ISO-8859-1 then the last two entries in the list will be the
+   UTF-8 encoder and the UTF-16BE encoder.</div>
+<dl>
+<dt><span class="simpleTagLabel">Author:</span></dt>
+<dd>Alex Geller</dd>
+</dl>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/ECIEncoderSet.html#ECIEncoderSet-java.lang.String-java.nio.charset.Charset-int-">ECIEncoderSet</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;stringToEncode,
+             <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</a>&nbsp;priorityCharset,
+             int&nbsp;fnc1)</code>
+<div class="block">Constructs an encoder set</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/ECIEncoderSet.html#canEncode-char-int-">canEncode</a></span>(char&nbsp;c,
+         int&nbsp;encoderIndex)</code>&nbsp;</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>byte[]</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/ECIEncoderSet.html#encode-char-int-">encode</a></span>(char&nbsp;c,
+      int&nbsp;encoderIndex)</code>&nbsp;</td>
+</tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code>byte[]</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/ECIEncoderSet.html#encode-java.lang.String-int-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;s,
+      int&nbsp;encoderIndex)</code>&nbsp;</td>
+</tr>
+<tr id="i3" class="rowColor">
+<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/ECIEncoderSet.html#getCharset-int-">getCharset</a></span>(int&nbsp;index)</code>&nbsp;</td>
+</tr>
+<tr id="i4" class="altColor">
+<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/ECIEncoderSet.html#getCharsetName-int-">getCharsetName</a></span>(int&nbsp;index)</code>&nbsp;</td>
+</tr>
+<tr id="i5" class="rowColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/ECIEncoderSet.html#getECIValue-int-">getECIValue</a></span>(int&nbsp;encoderIndex)</code>&nbsp;</td>
+</tr>
+<tr id="i6" class="altColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/ECIEncoderSet.html#getPriorityEncoderIndex--">getPriorityEncoderIndex</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i7" class="rowColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/ECIEncoderSet.html#length--">length</a></span>()</code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="ECIEncoderSet-java.lang.String-java.nio.charset.Charset-int-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>ECIEncoderSet</h4>
+<pre>public&nbsp;ECIEncoderSet(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;stringToEncode,
+                     <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</a>&nbsp;priorityCharset,
+                     int&nbsp;fnc1)</pre>
+<div class="block">Constructs an encoder set</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>stringToEncode</code> - the string that needs to be encoded</dd>
+<dd><code>priorityCharset</code> - The preferred <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset"><code>Charset</code></a> or null.</dd>
+<dd><code>fnc1</code> - fnc1 denotes the character in the input that represents the FNC1 character or -1 for a non-GS1 bar
+ code. When specified, it is considered an error to pass it as argument to the methods canEncode() or encode().</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="length--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>length</h4>
+<pre>public&nbsp;int&nbsp;length()</pre>
+</li>
+</ul>
+<a name="getCharsetName-int-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getCharsetName</h4>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;getCharsetName(int&nbsp;index)</pre>
+</li>
+</ul>
+<a name="getCharset-int-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getCharset</h4>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</a>&nbsp;getCharset(int&nbsp;index)</pre>
+</li>
+</ul>
+<a name="getECIValue-int-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getECIValue</h4>
+<pre>public&nbsp;int&nbsp;getECIValue(int&nbsp;encoderIndex)</pre>
+</li>
+</ul>
+<a name="getPriorityEncoderIndex--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getPriorityEncoderIndex</h4>
+<pre>public&nbsp;int&nbsp;getPriorityEncoderIndex()</pre>
+</li>
+</ul>
+<a name="canEncode-char-int-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>canEncode</h4>
+<pre>public&nbsp;boolean&nbsp;canEncode(char&nbsp;c,
+                         int&nbsp;encoderIndex)</pre>
+</li>
+</ul>
+<a name="encode-char-int-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>encode</h4>
+<pre>public&nbsp;byte[]&nbsp;encode(char&nbsp;c,
+                     int&nbsp;encoderIndex)</pre>
+</li>
+</ul>
+<a name="encode-java.lang.String-int-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>encode</h4>
+<pre>public&nbsp;byte[]&nbsp;encode(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;s,
+                     int&nbsp;encoderIndex)</pre>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/ECIEncoderSet.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../com/google/zxing/common/DetectorResult.html" title="class in com.google.zxing.common"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../com/google/zxing/common/ECIInput.html" title="interface in com.google.zxing.common"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?com/google/zxing/common/ECIEncoderSet.html" target="_top">Frames</a></li>
+<li><a href="ECIEncoderSet.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/com/google/zxing/common/ECIInput.html b/docs/apidocs/com/google/zxing/common/ECIInput.html
new file mode 100644
index 0000000..bee6813
--- /dev/null
+++ b/docs/apidocs/com/google/zxing/common/ECIInput.html
@@ -0,0 +1,374 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>ECIInput (ZXing 3.5.1 API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="ECIInput (ZXing 3.5.1 API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+var methods = {"i0":6,"i1":6,"i2":6,"i3":6,"i4":6,"i5":6};
+var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/ECIInput.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../com/google/zxing/common/ECIEncoderSet.html" title="class in com.google.zxing.common"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../com/google/zxing/common/ECIStringBuilder.html" title="class in com.google.zxing.common"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?com/google/zxing/common/ECIInput.html" target="_top">Frames</a></li>
+<li><a href="ECIInput.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li>Constr&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li>Constr&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">com.google.zxing.common</div>
+<h2 title="Interface ECIInput" class="title">Interface ECIInput</h2>
+</div>
+<div class="contentContainer">
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>All Known Implementing Classes:</dt>
+<dd><a href="../../../../com/google/zxing/common/MinimalECIInput.html" title="class in com.google.zxing.common">MinimalECIInput</a></dd>
+</dl>
+<hr>
+<br>
+<pre>public interface <span class="typeNameLabel">ECIInput</span></pre>
+<div class="block">Interface to navigate a sequence of ECIs and bytes.</div>
+<dl>
+<dt><span class="simpleTagLabel">Author:</span></dt>
+<dd>Alex Geller</dd>
+</dl>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t3" class="tableTab"><span><a href="javascript:show(4);">Abstract Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>char</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/ECIInput.html#charAt-int-">charAt</a></span>(int&nbsp;index)</code>
+<div class="block">Returns the <code>byte</code> value at the specified index.</div>
+</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/ECIInput.html#getECIValue-int-">getECIValue</a></span>(int&nbsp;index)</code>
+<div class="block">Returns the <code>int</code> ECI value at the specified index.</div>
+</td>
+</tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/ECIInput.html#haveNCharacters-int-int-">haveNCharacters</a></span>(int&nbsp;index,
+               int&nbsp;n)</code>&nbsp;</td>
+</tr>
+<tr id="i3" class="rowColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/ECIInput.html#isECI-int-">isECI</a></span>(int&nbsp;index)</code>
+<div class="block">Determines if a value is an ECI</div>
+</td>
+</tr>
+<tr id="i4" class="altColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/ECIInput.html#length--">length</a></span>()</code>
+<div class="block">Returns the length of this input.</div>
+</td>
+</tr>
+<tr id="i5" class="rowColor">
+<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/CharSequence.html?is-external=true" title="class or interface in java.lang">CharSequence</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/ECIInput.html#subSequence-int-int-">subSequence</a></span>(int&nbsp;start,
+           int&nbsp;end)</code>
+<div class="block">Returns a <code>CharSequence</code> that is a subsequence of this sequence.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="length--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>length</h4>
+<pre>int&nbsp;length()</pre>
+<div class="block">Returns the length of this input.  The length is the number
+ of <code>byte</code>s in or ECIs in the sequence.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the number of <code>char</code>s in this sequence</dd>
+</dl>
+</li>
+</ul>
+<a name="charAt-int-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>charAt</h4>
+<pre>char&nbsp;charAt(int&nbsp;index)</pre>
+<div class="block">Returns the <code>byte</code> value at the specified index.  An index ranges from zero
+ to <code>length() - 1</code>.  The first <code>byte</code> value of the sequence is at
+ index zero, the next at index one, and so on, as for array
+ indexing.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>index</code> - the index of the <code>byte</code> value to be returned</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the specified <code>byte</code> value as character or the FNC1 character</dd>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/IndexOutOfBoundsException.html?is-external=true" title="class or interface in java.lang">IndexOutOfBoundsException</a></code> - if the <code>index</code> argument is negative or not less than
+          <code>length()</code></dd>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</a></code> - if the value at the <code>index</code> argument is an ECI (@see #isECI)</dd>
+</dl>
+</li>
+</ul>
+<a name="subSequence-int-int-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>subSequence</h4>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/CharSequence.html?is-external=true" title="class or interface in java.lang">CharSequence</a>&nbsp;subSequence(int&nbsp;start,
+                         int&nbsp;end)</pre>
+<div class="block">Returns a <code>CharSequence</code> that is a subsequence of this sequence.
+ The subsequence starts with the <code>char</code> value at the specified index and
+ ends with the <code>char</code> value at index <code>end - 1</code>.  The length
+ (in <code>char</code>s) of the
+ returned sequence is <code>end - start</code>, so if <code>start == end</code>
+ then an empty sequence is returned.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>start</code> - the start index, inclusive</dd>
+<dd><code>end</code> - the end index, exclusive</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the specified subsequence</dd>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/IndexOutOfBoundsException.html?is-external=true" title="class or interface in java.lang">IndexOutOfBoundsException</a></code> - if <code>start</code> or <code>end</code> are negative,
+          if <code>end</code> is greater than <code>length()</code>,
+          or if <code>start</code> is greater than <code>end</code></dd>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</a></code> - if a value in the range <code>start</code>-<code>end</code> is an ECI (@see #isECI)</dd>
+</dl>
+</li>
+</ul>
+<a name="isECI-int-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>isECI</h4>
+<pre>boolean&nbsp;isECI(int&nbsp;index)</pre>
+<div class="block">Determines if a value is an ECI</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>index</code> - the index of the value</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>true if the value at position <code>index</code> is an ECI</dd>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/IndexOutOfBoundsException.html?is-external=true" title="class or interface in java.lang">IndexOutOfBoundsException</a></code> - if the <code>index</code> argument is negative or not less than
+          <code>length()</code></dd>
+</dl>
+</li>
+</ul>
+<a name="getECIValue-int-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getECIValue</h4>
+<pre>int&nbsp;getECIValue(int&nbsp;index)</pre>
+<div class="block">Returns the <code>int</code> ECI value at the specified index.  An index ranges from zero
+ to <code>length() - 1</code>.  The first <code>byte</code> value of the sequence is at
+ index zero, the next at index one, and so on, as for array
+ indexing.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>index</code> - the index of the <code>int</code> value to be returned</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the specified <code>int</code> ECI value. 
+          The ECI specified the encoding of all bytes with a higher index until the
+          next ECI or until the end of the input if no other ECI follows.</dd>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/IndexOutOfBoundsException.html?is-external=true" title="class or interface in java.lang">IndexOutOfBoundsException</a></code> - if the <code>index</code> argument is negative or not less than
+          <code>length()</code></dd>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</a></code> - if the value at the <code>index</code> argument is not an ECI (@see #isECI)</dd>
+</dl>
+</li>
+</ul>
+<a name="haveNCharacters-int-int-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>haveNCharacters</h4>
+<pre>boolean&nbsp;haveNCharacters(int&nbsp;index,
+                        int&nbsp;n)</pre>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/ECIInput.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../com/google/zxing/common/ECIEncoderSet.html" title="class in com.google.zxing.common"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../com/google/zxing/common/ECIStringBuilder.html" title="class in com.google.zxing.common"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?com/google/zxing/common/ECIInput.html" target="_top">Frames</a></li>
+<li><a href="ECIInput.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li>Constr&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li>Constr&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/com/google/zxing/common/ECIStringBuilder.html b/docs/apidocs/com/google/zxing/common/ECIStringBuilder.html
new file mode 100644
index 0000000..c438eaf
--- /dev/null
+++ b/docs/apidocs/com/google/zxing/common/ECIStringBuilder.html
@@ -0,0 +1,453 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>ECIStringBuilder (ZXing 3.5.1 API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="ECIStringBuilder (ZXing 3.5.1 API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10};
+var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/ECIStringBuilder.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../com/google/zxing/common/ECIInput.html" title="interface in com.google.zxing.common"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../com/google/zxing/common/GlobalHistogramBinarizer.html" title="class in com.google.zxing.common"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?com/google/zxing/common/ECIStringBuilder.html" target="_top">Frames</a></li>
+<li><a href="ECIStringBuilder.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">com.google.zxing.common</div>
+<h2 title="Class ECIStringBuilder" class="title">Class ECIStringBuilder</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>com.google.zxing.common.ECIStringBuilder</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre>public final class <span class="typeNameLabel">ECIStringBuilder</span>
+extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
+<div class="block">Class that converts a sequence of ECIs and bytes into a string</div>
+<dl>
+<dt><span class="simpleTagLabel">Author:</span></dt>
+<dd>Alex Geller</dd>
+</dl>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/ECIStringBuilder.html#ECIStringBuilder--">ECIStringBuilder</a></span>()</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/ECIStringBuilder.html#ECIStringBuilder-int-">ECIStringBuilder</a></span>(int&nbsp;initialCapacity)</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/ECIStringBuilder.html#append-byte-">append</a></span>(byte&nbsp;value)</code>
+<div class="block">Appends <code>value</code> as a byte value</div>
+</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/ECIStringBuilder.html#append-char-">append</a></span>(char&nbsp;value)</code>
+<div class="block">Appends <code>value</code> as a byte value</div>
+</td>
+</tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/ECIStringBuilder.html#append-int-">append</a></span>(int&nbsp;value)</code>
+<div class="block">Append the string repesentation of <code>value</code> (short for <code>append(String.valueOf(value))</code>)</div>
+</td>
+</tr>
+<tr id="i3" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/ECIStringBuilder.html#append-java.lang.String-">append</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;value)</code>
+<div class="block">Appends the characters in <code>value</code> as bytes values</div>
+</td>
+</tr>
+<tr id="i4" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/ECIStringBuilder.html#appendCharacters-java.lang.StringBuilder-">appendCharacters</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a>&nbsp;value)</code>
+<div class="block">Appends the characters from <code>value</code> (unlike all other append methods of this class who append bytes)</div>
+</td>
+</tr>
+<tr id="i5" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/ECIStringBuilder.html#appendECI-int-">appendECI</a></span>(int&nbsp;value)</code>
+<div class="block">Appends ECI value to output.</div>
+</td>
+</tr>
+<tr id="i6" class="altColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/ECIStringBuilder.html#isEmpty--">isEmpty</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i7" class="rowColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/ECIStringBuilder.html#length--">length</a></span>()</code>
+<div class="block">Short for <code>toString().length()</code> (if possible, use <a href="../../../../com/google/zxing/common/ECIStringBuilder.html#isEmpty--"><code>isEmpty()</code></a> instead)</div>
+</td>
+</tr>
+<tr id="i8" class="altColor">
+<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/ECIStringBuilder.html#toString--">toString</a></span>()</code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="ECIStringBuilder--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>ECIStringBuilder</h4>
+<pre>public&nbsp;ECIStringBuilder()</pre>
+</li>
+</ul>
+<a name="ECIStringBuilder-int-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>ECIStringBuilder</h4>
+<pre>public&nbsp;ECIStringBuilder(int&nbsp;initialCapacity)</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="append-char-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>append</h4>
+<pre>public&nbsp;void&nbsp;append(char&nbsp;value)</pre>
+<div class="block">Appends <code>value</code> as a byte value</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>value</code> - character whose lowest byte is to be appended</dd>
+</dl>
+</li>
+</ul>
+<a name="append-byte-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>append</h4>
+<pre>public&nbsp;void&nbsp;append(byte&nbsp;value)</pre>
+<div class="block">Appends <code>value</code> as a byte value</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>value</code> - byte to append</dd>
+</dl>
+</li>
+</ul>
+<a name="append-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>append</h4>
+<pre>public&nbsp;void&nbsp;append(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;value)</pre>
+<div class="block">Appends the characters in <code>value</code> as bytes values</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>value</code> - string to append</dd>
+</dl>
+</li>
+</ul>
+<a name="append-int-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>append</h4>
+<pre>public&nbsp;void&nbsp;append(int&nbsp;value)</pre>
+<div class="block">Append the string repesentation of <code>value</code> (short for <code>append(String.valueOf(value))</code>)</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>value</code> - int to append as a string</dd>
+</dl>
+</li>
+</ul>
+<a name="appendECI-int-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>appendECI</h4>
+<pre>public&nbsp;void&nbsp;appendECI(int&nbsp;value)
+               throws <a href="../../../../com/google/zxing/FormatException.html" title="class in com.google.zxing">FormatException</a></pre>
+<div class="block">Appends ECI value to output.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>value</code> - ECI value to append, as an int</dd>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="../../../../com/google/zxing/FormatException.html" title="class in com.google.zxing">FormatException</a></code> - on invalid ECI value</dd>
+</dl>
+</li>
+</ul>
+<a name="appendCharacters-java.lang.StringBuilder-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>appendCharacters</h4>
+<pre>public&nbsp;void&nbsp;appendCharacters(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a>&nbsp;value)</pre>
+<div class="block">Appends the characters from <code>value</code> (unlike all other append methods of this class who append bytes)</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>value</code> - characters to append</dd>
+</dl>
+</li>
+</ul>
+<a name="length--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>length</h4>
+<pre>public&nbsp;int&nbsp;length()</pre>
+<div class="block">Short for <code>toString().length()</code> (if possible, use <a href="../../../../com/google/zxing/common/ECIStringBuilder.html#isEmpty--"><code>isEmpty()</code></a> instead)</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>length of string representation in characters</dd>
+</dl>
+</li>
+</ul>
+<a name="isEmpty--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>isEmpty</h4>
+<pre>public&nbsp;boolean&nbsp;isEmpty()</pre>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>true iff nothing has been appended</dd>
+</dl>
+</li>
+</ul>
+<a name="toString--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>toString</h4>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;toString()</pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/ECIStringBuilder.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../com/google/zxing/common/ECIInput.html" title="interface in com.google.zxing.common"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../com/google/zxing/common/GlobalHistogramBinarizer.html" title="class in com.google.zxing.common"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?com/google/zxing/common/ECIStringBuilder.html" target="_top">Frames</a></li>
+<li><a href="ECIStringBuilder.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/com/google/zxing/common/GlobalHistogramBinarizer.html b/docs/apidocs/com/google/zxing/common/GlobalHistogramBinarizer.html
index 1354761..2ad5abf 100644
--- a/docs/apidocs/com/google/zxing/common/GlobalHistogramBinarizer.html
+++ b/docs/apidocs/com/google/zxing/common/GlobalHistogramBinarizer.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GlobalHistogramBinarizer (ZXing 3.4.0 API)</title>
+<title>GlobalHistogramBinarizer (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="GlobalHistogramBinarizer (ZXing 3.4.0 API)";
+            parent.document.title="GlobalHistogramBinarizer (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -49,7 +49,7 @@ var activeTableTab = "activeTableTab";
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../com/google/zxing/common/DetectorResult.html" title="class in com.google.zxing.common"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../com/google/zxing/common/ECIStringBuilder.html" title="class in com.google.zxing.common"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../com/google/zxing/common/GridSampler.html" title="class in com.google.zxing.common"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
@@ -333,7 +333,7 @@ extends <a href="../../../../com/google/zxing/Binarizer.html" title="class in co
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../com/google/zxing/common/DetectorResult.html" title="class in com.google.zxing.common"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../com/google/zxing/common/ECIStringBuilder.html" title="class in com.google.zxing.common"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../com/google/zxing/common/GridSampler.html" title="class in com.google.zxing.common"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
@@ -374,6 +374,6 @@ extends <a href="../../../../com/google/zxing/Binarizer.html" title="class in co
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/common/GridSampler.html b/docs/apidocs/com/google/zxing/common/GridSampler.html
index 9540dda..88da0e8 100644
--- a/docs/apidocs/com/google/zxing/common/GridSampler.html
+++ b/docs/apidocs/com/google/zxing/common/GridSampler.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GridSampler (ZXing 3.4.0 API)</title>
+<title>GridSampler (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="GridSampler (ZXing 3.4.0 API)";
+            parent.document.title="GridSampler (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -454,6 +454,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/common/HybridBinarizer.html b/docs/apidocs/com/google/zxing/common/HybridBinarizer.html
index 09782b8..1344ca6 100644
--- a/docs/apidocs/com/google/zxing/common/HybridBinarizer.html
+++ b/docs/apidocs/com/google/zxing/common/HybridBinarizer.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>HybridBinarizer (ZXing 3.4.0 API)</title>
+<title>HybridBinarizer (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="HybridBinarizer (ZXing 3.4.0 API)";
+            parent.document.title="HybridBinarizer (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -50,7 +50,7 @@ var activeTableTab = "activeTableTab";
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../com/google/zxing/common/GridSampler.html" title="class in com.google.zxing.common"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../com/google/zxing/common/PerspectiveTransform.html" title="class in com.google.zxing.common"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../com/google/zxing/common/MinimalECIInput.html" title="class in com.google.zxing.common"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../index.html?com/google/zxing/common/HybridBinarizer.html" target="_top">Frames</a></li>
@@ -310,7 +310,7 @@ extends <a href="../../../../com/google/zxing/common/GlobalHistogramBinarizer.ht
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../com/google/zxing/common/GridSampler.html" title="class in com.google.zxing.common"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../com/google/zxing/common/PerspectiveTransform.html" title="class in com.google.zxing.common"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../com/google/zxing/common/MinimalECIInput.html" title="class in com.google.zxing.common"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../index.html?com/google/zxing/common/HybridBinarizer.html" target="_top">Frames</a></li>
@@ -350,6 +350,6 @@ extends <a href="../../../../com/google/zxing/common/GlobalHistogramBinarizer.ht
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/common/MinimalECIInput.html b/docs/apidocs/com/google/zxing/common/MinimalECIInput.html
new file mode 100644
index 0000000..ccf7003
--- /dev/null
+++ b/docs/apidocs/com/google/zxing/common/MinimalECIInput.html
@@ -0,0 +1,513 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>MinimalECIInput (ZXing 3.5.1 API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="MinimalECIInput (ZXing 3.5.1 API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10};
+var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/MinimalECIInput.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../com/google/zxing/common/HybridBinarizer.html" title="class in com.google.zxing.common"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../com/google/zxing/common/PerspectiveTransform.html" title="class in com.google.zxing.common"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?com/google/zxing/common/MinimalECIInput.html" target="_top">Frames</a></li>
+<li><a href="MinimalECIInput.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">com.google.zxing.common</div>
+<h2 title="Class MinimalECIInput" class="title">Class MinimalECIInput</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>com.google.zxing.common.MinimalECIInput</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>All Implemented Interfaces:</dt>
+<dd><a href="../../../../com/google/zxing/common/ECIInput.html" title="interface in com.google.zxing.common">ECIInput</a></dd>
+</dl>
+<hr>
+<br>
+<pre>public class <span class="typeNameLabel">MinimalECIInput</span>
+extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
+implements <a href="../../../../com/google/zxing/common/ECIInput.html" title="interface in com.google.zxing.common">ECIInput</a></pre>
+<div class="block">Class that converts a character string into a sequence of ECIs and bytes
+
+ The implementation uses the Dijkstra algorithm to produce minimal encodings</div>
+<dl>
+<dt><span class="simpleTagLabel">Author:</span></dt>
+<dd>Alex Geller</dd>
+</dl>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/MinimalECIInput.html#MinimalECIInput-java.lang.String-java.nio.charset.Charset-int-">MinimalECIInput</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;stringToEncode,
+               <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</a>&nbsp;priorityCharset,
+               int&nbsp;fnc1)</code>
+<div class="block">Constructs a minimal input</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>char</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/MinimalECIInput.html#charAt-int-">charAt</a></span>(int&nbsp;index)</code>
+<div class="block">Returns the <code>byte</code> value at the specified index.</div>
+</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/MinimalECIInput.html#getECIValue-int-">getECIValue</a></span>(int&nbsp;index)</code>
+<div class="block">Returns the <code>int</code> ECI value at the specified index.</div>
+</td>
+</tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/MinimalECIInput.html#getFNC1Character--">getFNC1Character</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i3" class="rowColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/MinimalECIInput.html#haveNCharacters-int-int-">haveNCharacters</a></span>(int&nbsp;index,
+               int&nbsp;n)</code>&nbsp;</td>
+</tr>
+<tr id="i4" class="altColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/MinimalECIInput.html#isECI-int-">isECI</a></span>(int&nbsp;index)</code>
+<div class="block">Determines if a value is an ECI</div>
+</td>
+</tr>
+<tr id="i5" class="rowColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/MinimalECIInput.html#isFNC1-int-">isFNC1</a></span>(int&nbsp;index)</code>
+<div class="block">Determines if a value is the FNC1 character</div>
+</td>
+</tr>
+<tr id="i6" class="altColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/MinimalECIInput.html#length--">length</a></span>()</code>
+<div class="block">Returns the length of this input.</div>
+</td>
+</tr>
+<tr id="i7" class="rowColor">
+<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/CharSequence.html?is-external=true" title="class or interface in java.lang">CharSequence</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/MinimalECIInput.html#subSequence-int-int-">subSequence</a></span>(int&nbsp;start,
+           int&nbsp;end)</code>
+<div class="block">Returns a <code>CharSequence</code> that is a subsequence of this sequence.</div>
+</td>
+</tr>
+<tr id="i8" class="altColor">
+<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/MinimalECIInput.html#toString--">toString</a></span>()</code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="MinimalECIInput-java.lang.String-java.nio.charset.Charset-int-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>MinimalECIInput</h4>
+<pre>public&nbsp;MinimalECIInput(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;stringToEncode,
+                       <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</a>&nbsp;priorityCharset,
+                       int&nbsp;fnc1)</pre>
+<div class="block">Constructs a minimal input</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>stringToEncode</code> - the character string to encode</dd>
+<dd><code>priorityCharset</code> - The preferred <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset"><code>Charset</code></a>. When the value of the argument is null, the algorithm
+   chooses charsets that leads to a minimal representation. Otherwise the algorithm will use the priority
+   charset to encode any character in the input that can be encoded by it if the charset is among the
+   supported charsets.</dd>
+<dd><code>fnc1</code> - denotes the character in the input that represents the FNC1 character or -1 if this is not GS1
+   input.</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="getFNC1Character--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getFNC1Character</h4>
+<pre>public&nbsp;int&nbsp;getFNC1Character()</pre>
+</li>
+</ul>
+<a name="length--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>length</h4>
+<pre>public&nbsp;int&nbsp;length()</pre>
+<div class="block">Returns the length of this input.  The length is the number
+ of <code>byte</code>s, FNC1 characters or ECIs in the sequence.</div>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="../../../../com/google/zxing/common/ECIInput.html#length--">length</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../com/google/zxing/common/ECIInput.html" title="interface in com.google.zxing.common">ECIInput</a></code></dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the number of <code>char</code>s in this sequence</dd>
+</dl>
+</li>
+</ul>
+<a name="haveNCharacters-int-int-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>haveNCharacters</h4>
+<pre>public&nbsp;boolean&nbsp;haveNCharacters(int&nbsp;index,
+                               int&nbsp;n)</pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="../../../../com/google/zxing/common/ECIInput.html#haveNCharacters-int-int-">haveNCharacters</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../com/google/zxing/common/ECIInput.html" title="interface in com.google.zxing.common">ECIInput</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="charAt-int-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>charAt</h4>
+<pre>public&nbsp;char&nbsp;charAt(int&nbsp;index)</pre>
+<div class="block">Returns the <code>byte</code> value at the specified index.  An index ranges from zero
+ to <code>length() - 1</code>.  The first <code>byte</code> value of the sequence is at
+ index zero, the next at index one, and so on, as for array
+ indexing.</div>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="../../../../com/google/zxing/common/ECIInput.html#charAt-int-">charAt</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../com/google/zxing/common/ECIInput.html" title="interface in com.google.zxing.common">ECIInput</a></code></dd>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>index</code> - the index of the <code>byte</code> value to be returned</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the specified <code>byte</code> value as character or the FNC1 character</dd>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/IndexOutOfBoundsException.html?is-external=true" title="class or interface in java.lang">IndexOutOfBoundsException</a></code> - if the <code>index</code> argument is negative or not less than
+          <code>length()</code></dd>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</a></code> - if the value at the <code>index</code> argument is an ECI (@see #isECI)</dd>
+</dl>
+</li>
+</ul>
+<a name="subSequence-int-int-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>subSequence</h4>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/CharSequence.html?is-external=true" title="class or interface in java.lang">CharSequence</a>&nbsp;subSequence(int&nbsp;start,
+                                int&nbsp;end)</pre>
+<div class="block">Returns a <code>CharSequence</code> that is a subsequence of this sequence.
+ The subsequence starts with the <code>char</code> value at the specified index and
+ ends with the <code>char</code> value at index <code>end - 1</code>.  The length
+ (in <code>char</code>s) of the
+ returned sequence is <code>end - start</code>, so if <code>start == end</code>
+ then an empty sequence is returned.</div>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="../../../../com/google/zxing/common/ECIInput.html#subSequence-int-int-">subSequence</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../com/google/zxing/common/ECIInput.html" title="interface in com.google.zxing.common">ECIInput</a></code></dd>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>start</code> - the start index, inclusive</dd>
+<dd><code>end</code> - the end index, exclusive</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the specified subsequence</dd>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/IndexOutOfBoundsException.html?is-external=true" title="class or interface in java.lang">IndexOutOfBoundsException</a></code> - if <code>start</code> or <code>end</code> are negative,
+          if <code>end</code> is greater than <code>length()</code>,
+          or if <code>start</code> is greater than <code>end</code></dd>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</a></code> - if a value in the range <code>start</code>-<code>end</code> is an ECI (@see #isECI)</dd>
+</dl>
+</li>
+</ul>
+<a name="isECI-int-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>isECI</h4>
+<pre>public&nbsp;boolean&nbsp;isECI(int&nbsp;index)</pre>
+<div class="block">Determines if a value is an ECI</div>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="../../../../com/google/zxing/common/ECIInput.html#isECI-int-">isECI</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../com/google/zxing/common/ECIInput.html" title="interface in com.google.zxing.common">ECIInput</a></code></dd>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>index</code> - the index of the value</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>true if the value at position <code>index</code> is an ECI</dd>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/IndexOutOfBoundsException.html?is-external=true" title="class or interface in java.lang">IndexOutOfBoundsException</a></code> - if the <code>index</code> argument is negative or not less than
+          <code>length()</code></dd>
+</dl>
+</li>
+</ul>
+<a name="isFNC1-int-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>isFNC1</h4>
+<pre>public&nbsp;boolean&nbsp;isFNC1(int&nbsp;index)</pre>
+<div class="block">Determines if a value is the FNC1 character</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>index</code> - the index of the value</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>true if the value at position <code>index</code> is the FNC1 character</dd>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/IndexOutOfBoundsException.html?is-external=true" title="class or interface in java.lang">IndexOutOfBoundsException</a></code> - if the <code>index</code> argument is negative or not less than
+          <code>length()</code></dd>
+</dl>
+</li>
+</ul>
+<a name="getECIValue-int-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getECIValue</h4>
+<pre>public&nbsp;int&nbsp;getECIValue(int&nbsp;index)</pre>
+<div class="block">Returns the <code>int</code> ECI value at the specified index.  An index ranges from zero
+ to <code>length() - 1</code>.  The first <code>byte</code> value of the sequence is at
+ index zero, the next at index one, and so on, as for array
+ indexing.</div>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="../../../../com/google/zxing/common/ECIInput.html#getECIValue-int-">getECIValue</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../com/google/zxing/common/ECIInput.html" title="interface in com.google.zxing.common">ECIInput</a></code></dd>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>index</code> - the index of the <code>int</code> value to be returned</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the specified <code>int</code> ECI value.
+          The ECI specified the encoding of all bytes with a higher index until the
+          next ECI or until the end of the input if no other ECI follows.</dd>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/IndexOutOfBoundsException.html?is-external=true" title="class or interface in java.lang">IndexOutOfBoundsException</a></code> - if the <code>index</code> argument is negative or not less than
+          <code>length()</code></dd>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</a></code> - if the value at the <code>index</code> argument is not an ECI (@see #isECI)</dd>
+</dl>
+</li>
+</ul>
+<a name="toString--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>toString</h4>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;toString()</pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/MinimalECIInput.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../com/google/zxing/common/HybridBinarizer.html" title="class in com.google.zxing.common"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../com/google/zxing/common/PerspectiveTransform.html" title="class in com.google.zxing.common"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?com/google/zxing/common/MinimalECIInput.html" target="_top">Frames</a></li>
+<li><a href="MinimalECIInput.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/com/google/zxing/common/PerspectiveTransform.html b/docs/apidocs/com/google/zxing/common/PerspectiveTransform.html
index d22a52e..0650353 100644
--- a/docs/apidocs/com/google/zxing/common/PerspectiveTransform.html
+++ b/docs/apidocs/com/google/zxing/common/PerspectiveTransform.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>PerspectiveTransform (ZXing 3.4.0 API)</title>
+<title>PerspectiveTransform (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="PerspectiveTransform (ZXing 3.4.0 API)";
+            parent.document.title="PerspectiveTransform (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -49,7 +49,7 @@ var activeTableTab = "activeTableTab";
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../com/google/zxing/common/HybridBinarizer.html" title="class in com.google.zxing.common"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../com/google/zxing/common/MinimalECIInput.html" title="class in com.google.zxing.common"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../com/google/zxing/common/StringUtils.html" title="class in com.google.zxing.common"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
@@ -311,7 +311,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../com/google/zxing/common/HybridBinarizer.html" title="class in com.google.zxing.common"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../com/google/zxing/common/MinimalECIInput.html" title="class in com.google.zxing.common"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../com/google/zxing/common/StringUtils.html" title="class in com.google.zxing.common"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
@@ -352,6 +352,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/common/StringUtils.html b/docs/apidocs/com/google/zxing/common/StringUtils.html
index 79a6b6d..9db3e7a 100644
--- a/docs/apidocs/com/google/zxing/common/StringUtils.html
+++ b/docs/apidocs/com/google/zxing/common/StringUtils.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>StringUtils (ZXing 3.4.0 API)</title>
+<title>StringUtils (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,13 +12,13 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="StringUtils (ZXing 3.4.0 API)";
+            parent.document.title="StringUtils (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
     }
 //-->
-var methods = {"i0":9};
+var methods = {"i0":9,"i1":9};
 var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -139,9 +139,17 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/StringUtils.html#GB2312">GB2312</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/StringUtils.html#GB2312_CHARSET">GB2312_CHARSET</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/StringUtils.html#SHIFT_JIS">SHIFT_JIS</a></span></code>&nbsp;</td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/StringUtils.html#SHIFT_JIS_CHARSET">SHIFT_JIS_CHARSET</a></span></code>&nbsp;</td>
+</tr>
 </table>
 </li>
 </ul>
@@ -158,6 +166,11 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <th class="colLast" scope="col">Method and Description</th>
 </tr>
 <tr id="i0" class="altColor">
+<td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/StringUtils.html#guessCharset-byte:A-java.util.Map-">guessCharset</a></span>(byte[]&nbsp;bytes,
+            <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
+</tr>
+<tr id="i1" class="rowColor">
 <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/common/StringUtils.html#guessEncoding-byte:A-java.util.Map-">guessEncoding</a></span>(byte[]&nbsp;bytes,
              <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
@@ -184,6 +197,24 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a>
 <h3>Field Detail</h3>
+<a name="SHIFT_JIS_CHARSET">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>SHIFT_JIS_CHARSET</h4>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</a> SHIFT_JIS_CHARSET</pre>
+</li>
+</ul>
+<a name="GB2312_CHARSET">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>GB2312_CHARSET</h4>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</a> GB2312_CHARSET</pre>
+</li>
+</ul>
 <a name="SHIFT_JIS">
 <!--   -->
 </a>
@@ -221,7 +252,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <a name="guessEncoding-byte:A-java.util.Map-">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>guessEncoding</h4>
 <pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;guessEncoding(byte[]&nbsp;bytes,
@@ -232,8 +263,29 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <dd><code>hints</code> - decode hints if applicable</dd>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>name of guessed encoding; at the moment will only guess one of:
-  <a href="../../../../com/google/zxing/common/StringUtils.html#SHIFT_JIS"><code>SHIFT_JIS</code></a>, <a href="../../../../com/google/zxing/common/StringUtils.html#UTF8"><code>UTF8</code></a>, <a href="../../../../com/google/zxing/common/StringUtils.html#ISO88591"><code>ISO88591</code></a>, or the platform
-  default encoding if none of these can possibly be correct</dd>
+  "SJIS", "UTF8", "ISO8859_1", or the platform default encoding if none
+  of these can possibly be correct</dd>
+</dl>
+</li>
+</ul>
+<a name="guessCharset-byte:A-java.util.Map-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>guessCharset</h4>
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</a>&nbsp;guessCharset(byte[]&nbsp;bytes,
+                                   <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</pre>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>bytes</code> - bytes encoding a string, whose encoding should be guessed</dd>
+<dd><code>hints</code> - decode hints if applicable</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>Charset of guessed encoding; at the moment will only guess one of:
+  <a href="../../../../com/google/zxing/common/StringUtils.html#SHIFT_JIS_CHARSET"><code>SHIFT_JIS_CHARSET</code></a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/charset/StandardCharsets.html?is-external=true#UTF_8" title="class or interface in java.nio.charset"><code>StandardCharsets.UTF_8</code></a>,
+  <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/charset/StandardCharsets.html?is-external=true#ISO_8859_1" title="class or interface in java.nio.charset"><code>StandardCharsets.ISO_8859_1</code></a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/charset/StandardCharsets.html?is-external=true#UTF_16" title="class or interface in java.nio.charset"><code>StandardCharsets.UTF_16</code></a>,
+  or the platform default encoding if
+  none of these can possibly be correct</dd>
 </dl>
 </li>
 </ul>
@@ -306,6 +358,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/common/class-use/BitArray.html b/docs/apidocs/com/google/zxing/common/class-use/BitArray.html
index e298327..2aef3f5 100644
--- a/docs/apidocs/com/google/zxing/common/class-use/BitArray.html
+++ b/docs/apidocs/com/google/zxing/common/class-use/BitArray.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.common.BitArray (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.common.BitArray (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.common.BitArray (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.common.BitArray (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -127,15 +127,15 @@
 </tr>
 <tbody>
 <tr class="altColor">
-<td class="colFirst"><code><a href="../../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a></code></td>
-<td class="colLast"><span class="typeNameLabel">BinaryBitmap.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/BinaryBitmap.html#getBlackRow-int-com.google.zxing.common.BitArray-">getBlackRow</a></span>(int&nbsp;y,
+<td class="colFirst"><code>abstract <a href="../../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a></code></td>
+<td class="colLast"><span class="typeNameLabel">Binarizer.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/Binarizer.html#getBlackRow-int-com.google.zxing.common.BitArray-">getBlackRow</a></span>(int&nbsp;y,
            <a href="../../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row)</code>
 <div class="block">Converts one row of luminance data to 1 bit data.</div>
 </td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>abstract <a href="../../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a></code></td>
-<td class="colLast"><span class="typeNameLabel">Binarizer.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/Binarizer.html#getBlackRow-int-com.google.zxing.common.BitArray-">getBlackRow</a></span>(int&nbsp;y,
+<td class="colFirst"><code><a href="../../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a></code></td>
+<td class="colLast"><span class="typeNameLabel">BinaryBitmap.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/BinaryBitmap.html#getBlackRow-int-com.google.zxing.common.BitArray-">getBlackRow</a></span>(int&nbsp;y,
            <a href="../../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row)</code>
 <div class="block">Converts one row of luminance data to 1 bit data.</div>
 </td>
@@ -150,15 +150,15 @@
 </tr>
 <tbody>
 <tr class="altColor">
-<td class="colFirst"><code><a href="../../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a></code></td>
-<td class="colLast"><span class="typeNameLabel">BinaryBitmap.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/BinaryBitmap.html#getBlackRow-int-com.google.zxing.common.BitArray-">getBlackRow</a></span>(int&nbsp;y,
+<td class="colFirst"><code>abstract <a href="../../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a></code></td>
+<td class="colLast"><span class="typeNameLabel">Binarizer.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/Binarizer.html#getBlackRow-int-com.google.zxing.common.BitArray-">getBlackRow</a></span>(int&nbsp;y,
            <a href="../../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row)</code>
 <div class="block">Converts one row of luminance data to 1 bit data.</div>
 </td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>abstract <a href="../../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a></code></td>
-<td class="colLast"><span class="typeNameLabel">Binarizer.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/Binarizer.html#getBlackRow-int-com.google.zxing.common.BitArray-">getBlackRow</a></span>(int&nbsp;y,
+<td class="colFirst"><code><a href="../../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a></code></td>
+<td class="colLast"><span class="typeNameLabel">BinaryBitmap.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/BinaryBitmap.html#getBlackRow-int-com.google.zxing.common.BitArray-">getBlackRow</a></span>(int&nbsp;y,
            <a href="../../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row)</code>
 <div class="block">Converts one row of luminance data to 1 bit data.</div>
 </td>
@@ -266,9 +266,9 @@
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>protected int</code></td>
-<td class="colLast"><span class="typeNameLabel">EAN8Reader.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/oned/EAN8Reader.html#decodeMiddle-com.google.zxing.common.BitArray-int:A-java.lang.StringBuilder-">decodeMiddle</a></span>(<a href="../../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
+<td class="colLast"><span class="typeNameLabel">UPCAReader.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/oned/UPCAReader.html#decodeMiddle-com.google.zxing.common.BitArray-int:A-java.lang.StringBuilder-">decodeMiddle</a></span>(<a href="../../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
             int[]&nbsp;startRange,
-            <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a>&nbsp;result)</code>&nbsp;</td>
+            <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a>&nbsp;resultString)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>protected abstract int</code></td>
@@ -287,9 +287,9 @@
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>protected int</code></td>
-<td class="colLast"><span class="typeNameLabel">UPCAReader.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/oned/UPCAReader.html#decodeMiddle-com.google.zxing.common.BitArray-int:A-java.lang.StringBuilder-">decodeMiddle</a></span>(<a href="../../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
+<td class="colLast"><span class="typeNameLabel">EAN8Reader.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/oned/EAN8Reader.html#decodeMiddle-com.google.zxing.common.BitArray-int:A-java.lang.StringBuilder-">decodeMiddle</a></span>(<a href="../../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
             int[]&nbsp;startRange,
-            <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a>&nbsp;resultString)</code>&nbsp;</td>
+            <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a>&nbsp;result)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>protected int</code></td>
@@ -299,6 +299,13 @@
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
+<td class="colLast"><span class="typeNameLabel">UPCAReader.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/oned/UPCAReader.html#decodeRow-int-com.google.zxing.common.BitArray-int:A-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
+         <a href="../../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
+         int[]&nbsp;startGuardRange,
+         <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
 <td class="colLast"><span class="typeNameLabel">UPCEANReader.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/oned/UPCEANReader.html#decodeRow-int-com.google.zxing.common.BitArray-int:A-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
          <a href="../../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
          int[]&nbsp;startGuardRange,
@@ -308,75 +315,68 @@
  found.</div>
 </td>
 </tr>
-<tr class="rowColor">
-<td class="colFirst"><code><a href="../../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">UPCAReader.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/oned/UPCAReader.html#decodeRow-int-com.google.zxing.common.BitArray-int:A-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
-         <a href="../../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
-         int[]&nbsp;startGuardRange,
-         <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
-</tr>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ITFReader.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/oned/ITFReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
+<td class="colLast"><span class="typeNameLabel">UPCAReader.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/oned/UPCAReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
          <a href="../../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
          <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>abstract <a href="../../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">OneDReader.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/oned/OneDReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
+<td class="colFirst"><code><a href="../../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
+<td class="colLast"><span class="typeNameLabel">Code39Reader.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/oned/Code39Reader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
          <a href="../../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
-         <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>
-<div class="block">Attempts to decode a one-dimensional barcode format given a single row of
- an image.</div>
-</td>
+         <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">Code128Reader.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/oned/Code128Reader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
+<td class="colLast"><span class="typeNameLabel">UPCEANReader.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/oned/UPCEANReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
          <a href="../../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
          <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">MultiFormatOneDReader.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/oned/MultiFormatOneDReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
+<td class="colLast"><span class="typeNameLabel">Code93Reader.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/oned/Code93Reader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
          <a href="../../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
          <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">UPCEANReader.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/oned/UPCEANReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
+<td class="colLast"><span class="typeNameLabel">CodaBarReader.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/oned/CodaBarReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
          <a href="../../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
          <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">UPCAReader.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/oned/UPCAReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
+<td class="colLast"><span class="typeNameLabel">MultiFormatUPCEANReader.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/oned/MultiFormatUPCEANReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
          <a href="../../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
          <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">MultiFormatUPCEANReader.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/oned/MultiFormatUPCEANReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
+<td class="colLast"><span class="typeNameLabel">ITFReader.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/oned/ITFReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
          <a href="../../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
          <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">CodaBarReader.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/oned/CodaBarReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
+<td class="colLast"><span class="typeNameLabel">Code128Reader.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/oned/Code128Reader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
          <a href="../../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
          <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">Code39Reader.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/oned/Code39Reader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
+<td class="colLast"><span class="typeNameLabel">MultiFormatOneDReader.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/oned/MultiFormatOneDReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
          <a href="../../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
          <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code><a href="../../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
-<td class="colLast"><span class="typeNameLabel">Code93Reader.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/oned/Code93Reader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
+<td class="colFirst"><code>abstract <a href="../../../../../com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></code></td>
+<td class="colLast"><span class="typeNameLabel">OneDReader.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/oned/OneDReader.html#decodeRow-int-com.google.zxing.common.BitArray-java.util.Map-">decodeRow</a></span>(int&nbsp;rowNumber,
          <a href="../../../../../com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a>&nbsp;row,
-         <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
+         <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>
+<div class="block">Attempts to decode a one-dimensional barcode format given a single row of
+ an image.</div>
+</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>protected static void</code></td>
@@ -517,6 +517,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/common/class-use/BitMatrix.html b/docs/apidocs/com/google/zxing/common/class-use/BitMatrix.html
index 285b02f..ee89438 100644
--- a/docs/apidocs/com/google/zxing/common/class-use/BitMatrix.html
+++ b/docs/apidocs/com/google/zxing/common/class-use/BitMatrix.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.common.BitMatrix (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.common.BitMatrix (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.common.BitMatrix (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.common.BitMatrix (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -176,23 +176,23 @@
 <tbody>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">Writer.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/Writer.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
+<td class="colLast"><span class="typeNameLabel">MultiFormatWriter.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/MultiFormatWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
       <a href="../../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
       int&nbsp;width,
-      int&nbsp;height)</code>
-<div class="block">Encode a barcode using the default settings.</div>
-</td>
+      int&nbsp;height)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">MultiFormatWriter.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/MultiFormatWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
+<td class="colLast"><span class="typeNameLabel">Writer.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/Writer.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
       <a href="../../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
       int&nbsp;width,
-      int&nbsp;height)</code>&nbsp;</td>
+      int&nbsp;height)</code>
+<div class="block">Encode a barcode using the default settings.</div>
+</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">Writer.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/Writer.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
+<td class="colLast"><span class="typeNameLabel">MultiFormatWriter.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/MultiFormatWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
       <a href="../../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
       int&nbsp;width,
       int&nbsp;height,
@@ -200,24 +200,24 @@
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">MultiFormatWriter.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/MultiFormatWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
+<td class="colLast"><span class="typeNameLabel">Writer.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/Writer.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
       <a href="../../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
       int&nbsp;width,
       int&nbsp;height,
       <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code><a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">BinaryBitmap.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/BinaryBitmap.html#getBlackMatrix--">getBlackMatrix</a></span>()</code>
-<div class="block">Converts a 2D array of luminance data to 1 bit.</div>
-</td>
-</tr>
-<tr class="rowColor">
 <td class="colFirst"><code>abstract <a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
 <td class="colLast"><span class="typeNameLabel">Binarizer.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/Binarizer.html#getBlackMatrix--">getBlackMatrix</a></span>()</code>
 <div class="block">Converts a 2D array of luminance data to 1 bit data.</div>
 </td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
+<td class="colLast"><span class="typeNameLabel">BinaryBitmap.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/BinaryBitmap.html#getBlackMatrix--">getBlackMatrix</a></span>()</code>
+<div class="block">Converts a 2D array of luminance data to 1 bit.</div>
+</td>
+</tr>
 </tbody>
 </table>
 </li>
@@ -437,8 +437,8 @@
      <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;unsetString)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code>abstract <a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">GridSampler.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/common/GridSampler.html#sampleGrid-com.google.zxing.common.BitMatrix-int-int-float-float-float-float-float-float-float-float-float-float-float-float-float-float-float-float-">sampleGrid</a></span>(<a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a>&nbsp;image,
+<td class="colFirst"><code><a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
+<td class="colLast"><span class="typeNameLabel">DefaultGridSampler.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/common/DefaultGridSampler.html#sampleGrid-com.google.zxing.common.BitMatrix-int-int-float-float-float-float-float-float-float-float-float-float-float-float-float-float-float-float-">sampleGrid</a></span>(<a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a>&nbsp;image,
           int&nbsp;dimensionX,
           int&nbsp;dimensionY,
           float&nbsp;p1ToX,
@@ -456,13 +456,11 @@
           float&nbsp;p3FromX,
           float&nbsp;p3FromY,
           float&nbsp;p4FromX,
-          float&nbsp;p4FromY)</code>
-<div class="block">Samples an image for a rectangular matrix of bits of the given dimension.</div>
-</td>
+          float&nbsp;p4FromY)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code><a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">DefaultGridSampler.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/common/DefaultGridSampler.html#sampleGrid-com.google.zxing.common.BitMatrix-int-int-float-float-float-float-float-float-float-float-float-float-float-float-float-float-float-float-">sampleGrid</a></span>(<a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a>&nbsp;image,
+<td class="colFirst"><code>abstract <a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
+<td class="colLast"><span class="typeNameLabel">GridSampler.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/common/GridSampler.html#sampleGrid-com.google.zxing.common.BitMatrix-int-int-float-float-float-float-float-float-float-float-float-float-float-float-float-float-float-float-">sampleGrid</a></span>(<a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a>&nbsp;image,
           int&nbsp;dimensionX,
           int&nbsp;dimensionY,
           float&nbsp;p1ToX,
@@ -480,18 +478,20 @@
           float&nbsp;p3FromX,
           float&nbsp;p3FromY,
           float&nbsp;p4FromX,
-          float&nbsp;p4FromY)</code>&nbsp;</td>
+          float&nbsp;p4FromY)</code>
+<div class="block">Samples an image for a rectangular matrix of bits of the given dimension.</div>
+</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code>abstract <a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">GridSampler.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/common/GridSampler.html#sampleGrid-com.google.zxing.common.BitMatrix-int-int-com.google.zxing.common.PerspectiveTransform-">sampleGrid</a></span>(<a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a>&nbsp;image,
+<td class="colFirst"><code><a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
+<td class="colLast"><span class="typeNameLabel">DefaultGridSampler.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/common/DefaultGridSampler.html#sampleGrid-com.google.zxing.common.BitMatrix-int-int-com.google.zxing.common.PerspectiveTransform-">sampleGrid</a></span>(<a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a>&nbsp;image,
           int&nbsp;dimensionX,
           int&nbsp;dimensionY,
           <a href="../../../../../com/google/zxing/common/PerspectiveTransform.html" title="class in com.google.zxing.common">PerspectiveTransform</a>&nbsp;transform)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code><a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">DefaultGridSampler.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/common/DefaultGridSampler.html#sampleGrid-com.google.zxing.common.BitMatrix-int-int-com.google.zxing.common.PerspectiveTransform-">sampleGrid</a></span>(<a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a>&nbsp;image,
+<td class="colFirst"><code>abstract <a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
+<td class="colLast"><span class="typeNameLabel">GridSampler.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/common/GridSampler.html#sampleGrid-com.google.zxing.common.BitMatrix-int-int-com.google.zxing.common.PerspectiveTransform-">sampleGrid</a></span>(<a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a>&nbsp;image,
           int&nbsp;dimensionX,
           int&nbsp;dimensionY,
           <a href="../../../../../com/google/zxing/common/PerspectiveTransform.html" title="class in com.google.zxing.common">PerspectiveTransform</a>&nbsp;transform)</code>&nbsp;</td>
@@ -514,8 +514,8 @@
 </td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>abstract <a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">GridSampler.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/common/GridSampler.html#sampleGrid-com.google.zxing.common.BitMatrix-int-int-float-float-float-float-float-float-float-float-float-float-float-float-float-float-float-float-">sampleGrid</a></span>(<a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a>&nbsp;image,
+<td class="colFirst"><code><a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
+<td class="colLast"><span class="typeNameLabel">DefaultGridSampler.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/common/DefaultGridSampler.html#sampleGrid-com.google.zxing.common.BitMatrix-int-int-float-float-float-float-float-float-float-float-float-float-float-float-float-float-float-float-">sampleGrid</a></span>(<a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a>&nbsp;image,
           int&nbsp;dimensionX,
           int&nbsp;dimensionY,
           float&nbsp;p1ToX,
@@ -533,13 +533,11 @@
           float&nbsp;p3FromX,
           float&nbsp;p3FromY,
           float&nbsp;p4FromX,
-          float&nbsp;p4FromY)</code>
-<div class="block">Samples an image for a rectangular matrix of bits of the given dimension.</div>
-</td>
+          float&nbsp;p4FromY)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code><a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">DefaultGridSampler.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/common/DefaultGridSampler.html#sampleGrid-com.google.zxing.common.BitMatrix-int-int-float-float-float-float-float-float-float-float-float-float-float-float-float-float-float-float-">sampleGrid</a></span>(<a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a>&nbsp;image,
+<td class="colFirst"><code>abstract <a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
+<td class="colLast"><span class="typeNameLabel">GridSampler.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/common/GridSampler.html#sampleGrid-com.google.zxing.common.BitMatrix-int-int-float-float-float-float-float-float-float-float-float-float-float-float-float-float-float-float-">sampleGrid</a></span>(<a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a>&nbsp;image,
           int&nbsp;dimensionX,
           int&nbsp;dimensionY,
           float&nbsp;p1ToX,
@@ -557,18 +555,20 @@
           float&nbsp;p3FromX,
           float&nbsp;p3FromY,
           float&nbsp;p4FromX,
-          float&nbsp;p4FromY)</code>&nbsp;</td>
+          float&nbsp;p4FromY)</code>
+<div class="block">Samples an image for a rectangular matrix of bits of the given dimension.</div>
+</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>abstract <a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">GridSampler.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/common/GridSampler.html#sampleGrid-com.google.zxing.common.BitMatrix-int-int-com.google.zxing.common.PerspectiveTransform-">sampleGrid</a></span>(<a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a>&nbsp;image,
+<td class="colFirst"><code><a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
+<td class="colLast"><span class="typeNameLabel">DefaultGridSampler.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/common/DefaultGridSampler.html#sampleGrid-com.google.zxing.common.BitMatrix-int-int-com.google.zxing.common.PerspectiveTransform-">sampleGrid</a></span>(<a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a>&nbsp;image,
           int&nbsp;dimensionX,
           int&nbsp;dimensionY,
           <a href="../../../../../com/google/zxing/common/PerspectiveTransform.html" title="class in com.google.zxing.common">PerspectiveTransform</a>&nbsp;transform)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code><a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">DefaultGridSampler.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/common/DefaultGridSampler.html#sampleGrid-com.google.zxing.common.BitMatrix-int-int-com.google.zxing.common.PerspectiveTransform-">sampleGrid</a></span>(<a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a>&nbsp;image,
+<td class="colFirst"><code>abstract <a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
+<td class="colLast"><span class="typeNameLabel">GridSampler.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/common/GridSampler.html#sampleGrid-com.google.zxing.common.BitMatrix-int-int-com.google.zxing.common.PerspectiveTransform-">sampleGrid</a></span>(<a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a>&nbsp;image,
           int&nbsp;dimensionX,
           int&nbsp;dimensionY,
           <a href="../../../../../com/google/zxing/common/PerspectiveTransform.html" title="class in com.google.zxing.common">PerspectiveTransform</a>&nbsp;transform)</code>&nbsp;</td>
@@ -723,6 +723,10 @@
 <tr class="altColor">
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/multi/qrcode/detector/MultiDetector.html#MultiDetector-com.google.zxing.common.BitMatrix-">MultiDetector</a></span>(<a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a>&nbsp;image)</code>&nbsp;</td>
 </tr>
+<tr class="rowColor">
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/multi/qrcode/detector/MultiFinderPatternFinder.html#MultiFinderPatternFinder-com.google.zxing.common.BitMatrix-com.google.zxing.ResultPointCallback-">MultiFinderPatternFinder</a></span>(<a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a>&nbsp;image,
+                        <a href="../../../../../com/google/zxing/ResultPointCallback.html" title="interface in com.google.zxing">ResultPointCallback</a>&nbsp;resultPointCallback)</code>&nbsp;</td>
+</tr>
 </tbody>
 </table>
 </li>
@@ -739,21 +743,21 @@
 <tbody>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">OneDimensionalCodeWriter.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
+<td class="colLast"><span class="typeNameLabel">UPCAWriter.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/oned/UPCAWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
       <a href="../../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
       int&nbsp;width,
       int&nbsp;height)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">UPCAWriter.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/oned/UPCAWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
+<td class="colLast"><span class="typeNameLabel">OneDimensionalCodeWriter.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
       <a href="../../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
       int&nbsp;width,
       int&nbsp;height)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">Code39Writer.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/oned/Code39Writer.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
+<td class="colLast"><span class="typeNameLabel">UPCAWriter.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/oned/UPCAWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
       <a href="../../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
       int&nbsp;width,
       int&nbsp;height,
@@ -761,14 +765,6 @@
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">Code93Writer.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/oned/Code93Writer.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
-      <a href="../../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
-      int&nbsp;width,
-      int&nbsp;height,
-      <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code><a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
 <td class="colLast"><span class="typeNameLabel">OneDimensionalCodeWriter.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
       <a href="../../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
       int&nbsp;width,
@@ -777,54 +773,6 @@
 <div class="block">Encode the contents following specified format.</div>
 </td>
 </tr>
-<tr class="rowColor">
-<td class="colFirst"><code><a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">UPCEWriter.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/oned/UPCEWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
-      <a href="../../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
-      int&nbsp;width,
-      int&nbsp;height,
-      <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code><a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">EAN13Writer.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/oned/EAN13Writer.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
-      <a href="../../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
-      int&nbsp;width,
-      int&nbsp;height,
-      <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code><a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">UPCAWriter.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/oned/UPCAWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
-      <a href="../../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
-      int&nbsp;width,
-      int&nbsp;height,
-      <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code><a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">EAN8Writer.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/oned/EAN8Writer.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
-      <a href="../../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
-      int&nbsp;width,
-      int&nbsp;height,
-      <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code><a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">Code128Writer.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/oned/Code128Writer.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
-      <a href="../../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
-      int&nbsp;width,
-      int&nbsp;height,
-      <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code><a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ITFWriter.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/oned/ITFWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
-      <a href="../../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
-      int&nbsp;width,
-      int&nbsp;height,
-      <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
-</tr>
 </tbody>
 </table>
 </li>
@@ -908,6 +856,11 @@
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/pdf417/detector/PDF417DetectorResult.html#PDF417DetectorResult-com.google.zxing.common.BitMatrix-java.util.List-">PDF417DetectorResult</a></span>(<a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a>&nbsp;bits,
                     <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../com/google/zxing/ResultPoint.html" title="class in com.google.zxing">ResultPoint</a>[]&gt;&nbsp;points)</code>&nbsp;</td>
 </tr>
+<tr class="rowColor">
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/pdf417/detector/PDF417DetectorResult.html#PDF417DetectorResult-com.google.zxing.common.BitMatrix-java.util.List-int-">PDF417DetectorResult</a></span>(<a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a>&nbsp;bits,
+                    <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../com/google/zxing/ResultPoint.html" title="class in com.google.zxing">ResultPoint</a>[]&gt;&nbsp;points,
+                    int&nbsp;rotation)</code>&nbsp;</td>
+</tr>
 </tbody>
 </table>
 </li>
@@ -1058,6 +1011,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/common/class-use/CharacterSetECI.html b/docs/apidocs/com/google/zxing/common/class-use/CharacterSetECI.html
index c28700d..509e1ac 100644
--- a/docs/apidocs/com/google/zxing/common/class-use/CharacterSetECI.html
+++ b/docs/apidocs/com/google/zxing/common/class-use/CharacterSetECI.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.common.CharacterSetECI (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.common.CharacterSetECI (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.common.CharacterSetECI (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.common.CharacterSetECI (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -104,19 +104,23 @@
 <tbody>
 <tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../com/google/zxing/common/CharacterSetECI.html" title="enum in com.google.zxing.common">CharacterSetECI</a></code></td>
-<td class="colLast"><span class="typeNameLabel">CharacterSetECI.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/common/CharacterSetECI.html#getCharacterSetECIByName-java.lang.String-">getCharacterSetECIByName</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">CharacterSetECI.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/common/CharacterSetECI.html#getCharacterSetECI-java.nio.charset.Charset-">getCharacterSetECI</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</a>&nbsp;charset)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../com/google/zxing/common/CharacterSetECI.html" title="enum in com.google.zxing.common">CharacterSetECI</a></code></td>
-<td class="colLast"><span class="typeNameLabel">CharacterSetECI.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/common/CharacterSetECI.html#getCharacterSetECIByValue-int-">getCharacterSetECIByValue</a></span>(int&nbsp;value)</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">CharacterSetECI.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/common/CharacterSetECI.html#getCharacterSetECIByName-java.lang.String-">getCharacterSetECIByName</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../com/google/zxing/common/CharacterSetECI.html" title="enum in com.google.zxing.common">CharacterSetECI</a></code></td>
+<td class="colLast"><span class="typeNameLabel">CharacterSetECI.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/common/CharacterSetECI.html#getCharacterSetECIByValue-int-">getCharacterSetECIByValue</a></span>(int&nbsp;value)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <a href="../../../../../com/google/zxing/common/CharacterSetECI.html" title="enum in com.google.zxing.common">CharacterSetECI</a></code></td>
 <td class="colLast"><span class="typeNameLabel">CharacterSetECI.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/common/CharacterSetECI.html#valueOf-java.lang.String-">valueOf</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</code>
 <div class="block">Returns the enum constant of this type with the specified name.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../com/google/zxing/common/CharacterSetECI.html" title="enum in com.google.zxing.common">CharacterSetECI</a>[]</code></td>
 <td class="colLast"><span class="typeNameLabel">CharacterSetECI.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/common/CharacterSetECI.html#values--">values</a></span>()</code>
 <div class="block">Returns an array containing the constants of this enum type, in
@@ -177,6 +181,6 @@ the order they are declared.</div>
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/common/class-use/DecoderResult.html b/docs/apidocs/com/google/zxing/common/class-use/DecoderResult.html
index f0bc73b..7b16b21 100644
--- a/docs/apidocs/com/google/zxing/common/class-use/DecoderResult.html
+++ b/docs/apidocs/com/google/zxing/common/class-use/DecoderResult.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.common.DecoderResult (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.common.DecoderResult (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.common.DecoderResult (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.common.DecoderResult (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -285,6 +285,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/common/class-use/DefaultGridSampler.html b/docs/apidocs/com/google/zxing/common/class-use/DefaultGridSampler.html
index f529a5c..58ccde5 100644
--- a/docs/apidocs/com/google/zxing/common/class-use/DefaultGridSampler.html
+++ b/docs/apidocs/com/google/zxing/common/class-use/DefaultGridSampler.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.common.DefaultGridSampler (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.common.DefaultGridSampler (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.common.DefaultGridSampler (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.common.DefaultGridSampler (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/common/class-use/DetectorResult.html b/docs/apidocs/com/google/zxing/common/class-use/DetectorResult.html
index 54c373e..ca3d145 100644
--- a/docs/apidocs/com/google/zxing/common/class-use/DetectorResult.html
+++ b/docs/apidocs/com/google/zxing/common/class-use/DetectorResult.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.common.DetectorResult (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.common.DetectorResult (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.common.DetectorResult (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.common.DetectorResult (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -243,6 +243,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/common/class-use/BitSource.html b/docs/apidocs/com/google/zxing/common/class-use/ECIEncoderSet.html
similarity index 80%
rename from docs/apidocs/com/google/zxing/common/class-use/BitSource.html
rename to docs/apidocs/com/google/zxing/common/class-use/ECIEncoderSet.html
index f0b5baf..91d59bd 100644
--- a/docs/apidocs/com/google/zxing/common/class-use/BitSource.html
+++ b/docs/apidocs/com/google/zxing/common/class-use/ECIEncoderSet.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.common.BitSource (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.common.ECIEncoderSet (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.common.BitSource (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.common.ECIEncoderSet (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -33,7 +33,7 @@
 <ul class="navList" title="Navigation">
 <li><a href="../../../../../overview-summary.html">Overview</a></li>
 <li><a href="../package-summary.html">Package</a></li>
-<li><a href="../../../../../com/google/zxing/common/BitSource.html" title="class in com.google.zxing.common">Class</a></li>
+<li><a href="../../../../../com/google/zxing/common/ECIEncoderSet.html" title="class in com.google.zxing.common">Class</a></li>
 <li class="navBarCell1Rev">Use</li>
 <li><a href="../package-tree.html">Tree</a></li>
 <li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
@@ -47,8 +47,8 @@
 <li>Next</li>
 </ul>
 <ul class="navList">
-<li><a href="../../../../../index.html?com/google/zxing/common/class-use/BitSource.html" target="_top">Frames</a></li>
-<li><a href="BitSource.html" target="_top">No&nbsp;Frames</a></li>
+<li><a href="../../../../../index.html?com/google/zxing/common/class-use/ECIEncoderSet.html" target="_top">Frames</a></li>
+<li><a href="ECIEncoderSet.html" target="_top">No&nbsp;Frames</a></li>
 </ul>
 <ul class="navList" id="allclasses_navbar_top">
 <li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
@@ -70,9 +70,9 @@
 </a></div>
 <!-- ========= END OF TOP NAVBAR ========= -->
 <div class="header">
-<h2 title="Uses of Class com.google.zxing.common.BitSource" class="title">Uses of Class<br>com.google.zxing.common.BitSource</h2>
+<h2 title="Uses of Class com.google.zxing.common.ECIEncoderSet" class="title">Uses of Class<br>com.google.zxing.common.ECIEncoderSet</h2>
 </div>
-<div class="classUseContainer">No usage of com.google.zxing.common.BitSource</div>
+<div class="classUseContainer">No usage of com.google.zxing.common.ECIEncoderSet</div>
 <!-- ======= START OF BOTTOM NAVBAR ====== -->
 <div class="bottomNav"><a name="navbar.bottom">
 <!--   -->
@@ -84,7 +84,7 @@
 <ul class="navList" title="Navigation">
 <li><a href="../../../../../overview-summary.html">Overview</a></li>
 <li><a href="../package-summary.html">Package</a></li>
-<li><a href="../../../../../com/google/zxing/common/BitSource.html" title="class in com.google.zxing.common">Class</a></li>
+<li><a href="../../../../../com/google/zxing/common/ECIEncoderSet.html" title="class in com.google.zxing.common">Class</a></li>
 <li class="navBarCell1Rev">Use</li>
 <li><a href="../package-tree.html">Tree</a></li>
 <li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
@@ -98,8 +98,8 @@
 <li>Next</li>
 </ul>
 <ul class="navList">
-<li><a href="../../../../../index.html?com/google/zxing/common/class-use/BitSource.html" target="_top">Frames</a></li>
-<li><a href="BitSource.html" target="_top">No&nbsp;Frames</a></li>
+<li><a href="../../../../../index.html?com/google/zxing/common/class-use/ECIEncoderSet.html" target="_top">Frames</a></li>
+<li><a href="ECIEncoderSet.html" target="_top">No&nbsp;Frames</a></li>
 </ul>
 <ul class="navList" id="allclasses_navbar_bottom">
 <li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/common/class-use/ECIInput.html b/docs/apidocs/com/google/zxing/common/class-use/ECIInput.html
new file mode 100644
index 0000000..6c4b1fe
--- /dev/null
+++ b/docs/apidocs/com/google/zxing/common/class-use/ECIInput.html
@@ -0,0 +1,169 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Interface com.google.zxing.common.ECIInput (ZXing 3.5.1 API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Uses of Interface com.google.zxing.common.ECIInput (ZXing 3.5.1 API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../com/google/zxing/common/ECIInput.html" title="interface in com.google.zxing.common">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?com/google/zxing/common/class-use/ECIInput.html" target="_top">Frames</a></li>
+<li><a href="ECIInput.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Interface com.google.zxing.common.ECIInput" class="title">Uses of Interface<br>com.google.zxing.common.ECIInput</h2>
+</div>
+<div class="classUseContainer">
+<ul class="blockList">
+<li class="blockList">
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing packages, and an explanation">
+<caption><span>Packages that use <a href="../../../../../com/google/zxing/common/ECIInput.html" title="interface in com.google.zxing.common">ECIInput</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Package</th>
+<th class="colLast" scope="col">Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><a href="#com.google.zxing.common">com.google.zxing.common</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+</tbody>
+</table>
+</li>
+<li class="blockList">
+<ul class="blockList">
+<li class="blockList"><a name="com.google.zxing.common">
+<!--   -->
+</a>
+<h3>Uses of <a href="../../../../../com/google/zxing/common/ECIInput.html" title="interface in com.google.zxing.common">ECIInput</a> in <a href="../../../../../com/google/zxing/common/package-summary.html">com.google.zxing.common</a></h3>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing classes, and an explanation">
+<caption><span>Classes in <a href="../../../../../com/google/zxing/common/package-summary.html">com.google.zxing.common</a> that implement <a href="../../../../../com/google/zxing/common/ECIInput.html" title="interface in com.google.zxing.common">ECIInput</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Class and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>class&nbsp;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/common/MinimalECIInput.html" title="class in com.google.zxing.common">MinimalECIInput</a></span></code>
+<div class="block">Class that converts a character string into a sequence of ECIs and bytes
+
+ The implementation uses the Dijkstra algorithm to produce minimal encodings</div>
+</td>
+</tr>
+</tbody>
+</table>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../com/google/zxing/common/ECIInput.html" title="interface in com.google.zxing.common">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?com/google/zxing/common/class-use/ECIInput.html" target="_top">Frames</a></li>
+<li><a href="ECIInput.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/com/google/zxing/common/class-use/ECIStringBuilder.html b/docs/apidocs/com/google/zxing/common/class-use/ECIStringBuilder.html
new file mode 100644
index 0000000..49af43a
--- /dev/null
+++ b/docs/apidocs/com/google/zxing/common/class-use/ECIStringBuilder.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class com.google.zxing.common.ECIStringBuilder (ZXing 3.5.1 API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Uses of Class com.google.zxing.common.ECIStringBuilder (ZXing 3.5.1 API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../com/google/zxing/common/ECIStringBuilder.html" title="class in com.google.zxing.common">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?com/google/zxing/common/class-use/ECIStringBuilder.html" target="_top">Frames</a></li>
+<li><a href="ECIStringBuilder.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class com.google.zxing.common.ECIStringBuilder" class="title">Uses of Class<br>com.google.zxing.common.ECIStringBuilder</h2>
+</div>
+<div class="classUseContainer">No usage of com.google.zxing.common.ECIStringBuilder</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../com/google/zxing/common/ECIStringBuilder.html" title="class in com.google.zxing.common">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?com/google/zxing/common/class-use/ECIStringBuilder.html" target="_top">Frames</a></li>
+<li><a href="ECIStringBuilder.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/com/google/zxing/common/class-use/GlobalHistogramBinarizer.html b/docs/apidocs/com/google/zxing/common/class-use/GlobalHistogramBinarizer.html
index 9c9c273..0a268ff 100644
--- a/docs/apidocs/com/google/zxing/common/class-use/GlobalHistogramBinarizer.html
+++ b/docs/apidocs/com/google/zxing/common/class-use/GlobalHistogramBinarizer.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.common.GlobalHistogramBinarizer (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.common.GlobalHistogramBinarizer (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.common.GlobalHistogramBinarizer (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.common.GlobalHistogramBinarizer (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -163,6 +163,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/common/class-use/GridSampler.html b/docs/apidocs/com/google/zxing/common/class-use/GridSampler.html
index 523d128..628918a 100644
--- a/docs/apidocs/com/google/zxing/common/class-use/GridSampler.html
+++ b/docs/apidocs/com/google/zxing/common/class-use/GridSampler.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.common.GridSampler (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.common.GridSampler (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.common.GridSampler (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.common.GridSampler (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -188,6 +188,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/common/class-use/HybridBinarizer.html b/docs/apidocs/com/google/zxing/common/class-use/HybridBinarizer.html
index 2196715..554fb7a 100644
--- a/docs/apidocs/com/google/zxing/common/class-use/HybridBinarizer.html
+++ b/docs/apidocs/com/google/zxing/common/class-use/HybridBinarizer.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.common.HybridBinarizer (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.common.HybridBinarizer (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.common.HybridBinarizer (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.common.HybridBinarizer (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/common/class-use/MinimalECIInput.html b/docs/apidocs/com/google/zxing/common/class-use/MinimalECIInput.html
new file mode 100644
index 0000000..0d49d12
--- /dev/null
+++ b/docs/apidocs/com/google/zxing/common/class-use/MinimalECIInput.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class com.google.zxing.common.MinimalECIInput (ZXing 3.5.1 API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Uses of Class com.google.zxing.common.MinimalECIInput (ZXing 3.5.1 API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../com/google/zxing/common/MinimalECIInput.html" title="class in com.google.zxing.common">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?com/google/zxing/common/class-use/MinimalECIInput.html" target="_top">Frames</a></li>
+<li><a href="MinimalECIInput.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class com.google.zxing.common.MinimalECIInput" class="title">Uses of Class<br>com.google.zxing.common.MinimalECIInput</h2>
+</div>
+<div class="classUseContainer">No usage of com.google.zxing.common.MinimalECIInput</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../com/google/zxing/common/MinimalECIInput.html" title="class in com.google.zxing.common">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?com/google/zxing/common/class-use/MinimalECIInput.html" target="_top">Frames</a></li>
+<li><a href="MinimalECIInput.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/com/google/zxing/common/class-use/PerspectiveTransform.html b/docs/apidocs/com/google/zxing/common/class-use/PerspectiveTransform.html
index 9b4ac56..88bc653 100644
--- a/docs/apidocs/com/google/zxing/common/class-use/PerspectiveTransform.html
+++ b/docs/apidocs/com/google/zxing/common/class-use/PerspectiveTransform.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.common.PerspectiveTransform (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.common.PerspectiveTransform (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.common.PerspectiveTransform (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.common.PerspectiveTransform (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -153,15 +153,15 @@
 </tr>
 <tbody>
 <tr class="altColor">
-<td class="colFirst"><code>abstract <a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">GridSampler.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/common/GridSampler.html#sampleGrid-com.google.zxing.common.BitMatrix-int-int-com.google.zxing.common.PerspectiveTransform-">sampleGrid</a></span>(<a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a>&nbsp;image,
+<td class="colFirst"><code><a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
+<td class="colLast"><span class="typeNameLabel">DefaultGridSampler.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/common/DefaultGridSampler.html#sampleGrid-com.google.zxing.common.BitMatrix-int-int-com.google.zxing.common.PerspectiveTransform-">sampleGrid</a></span>(<a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a>&nbsp;image,
           int&nbsp;dimensionX,
           int&nbsp;dimensionY,
           <a href="../../../../../com/google/zxing/common/PerspectiveTransform.html" title="class in com.google.zxing.common">PerspectiveTransform</a>&nbsp;transform)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code><a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><span class="typeNameLabel">DefaultGridSampler.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/common/DefaultGridSampler.html#sampleGrid-com.google.zxing.common.BitMatrix-int-int-com.google.zxing.common.PerspectiveTransform-">sampleGrid</a></span>(<a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a>&nbsp;image,
+<td class="colFirst"><code>abstract <a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
+<td class="colLast"><span class="typeNameLabel">GridSampler.</span><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/common/GridSampler.html#sampleGrid-com.google.zxing.common.BitMatrix-int-int-com.google.zxing.common.PerspectiveTransform-">sampleGrid</a></span>(<a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a>&nbsp;image,
           int&nbsp;dimensionX,
           int&nbsp;dimensionY,
           <a href="../../../../../com/google/zxing/common/PerspectiveTransform.html" title="class in com.google.zxing.common">PerspectiveTransform</a>&nbsp;transform)</code>&nbsp;</td>
@@ -220,6 +220,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/common/class-use/StringUtils.html b/docs/apidocs/com/google/zxing/common/class-use/StringUtils.html
index 4e4d77e..e0e66e9 100644
--- a/docs/apidocs/com/google/zxing/common/class-use/StringUtils.html
+++ b/docs/apidocs/com/google/zxing/common/class-use/StringUtils.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.common.StringUtils (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.common.StringUtils (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.common.StringUtils (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.common.StringUtils (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/common/detector/MathUtils.html b/docs/apidocs/com/google/zxing/common/detector/MathUtils.html
index bf6cf4d..6a75476 100644
--- a/docs/apidocs/com/google/zxing/common/detector/MathUtils.html
+++ b/docs/apidocs/com/google/zxing/common/detector/MathUtils.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>MathUtils (ZXing 3.4.0 API)</title>
+<title>MathUtils (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="MathUtils (ZXing 3.4.0 API)";
+            parent.document.title="MathUtils (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -321,6 +321,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/common/detector/MonochromeRectangleDetector.html b/docs/apidocs/com/google/zxing/common/detector/MonochromeRectangleDetector.html
index 90b0caf..79de1ab 100644
--- a/docs/apidocs/com/google/zxing/common/detector/MonochromeRectangleDetector.html
+++ b/docs/apidocs/com/google/zxing/common/detector/MonochromeRectangleDetector.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>MonochromeRectangleDetector (ZXing 3.4.0 API)</title>
+<title>MonochromeRectangleDetector (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="MonochromeRectangleDetector (ZXing 3.4.0 API)";
+            parent.document.title="MonochromeRectangleDetector (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -298,6 +298,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/common/detector/WhiteRectangleDetector.html b/docs/apidocs/com/google/zxing/common/detector/WhiteRectangleDetector.html
index a6faca1..962a3d1 100644
--- a/docs/apidocs/com/google/zxing/common/detector/WhiteRectangleDetector.html
+++ b/docs/apidocs/com/google/zxing/common/detector/WhiteRectangleDetector.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>WhiteRectangleDetector (ZXing 3.4.0 API)</title>
+<title>WhiteRectangleDetector (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="WhiteRectangleDetector (ZXing 3.4.0 API)";
+            parent.document.title="WhiteRectangleDetector (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -329,6 +329,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/common/detector/class-use/MathUtils.html b/docs/apidocs/com/google/zxing/common/detector/class-use/MathUtils.html
index 9ce4760..9b1d156 100644
--- a/docs/apidocs/com/google/zxing/common/detector/class-use/MathUtils.html
+++ b/docs/apidocs/com/google/zxing/common/detector/class-use/MathUtils.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.common.detector.MathUtils (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.common.detector.MathUtils (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.common.detector.MathUtils (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.common.detector.MathUtils (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/common/detector/class-use/MonochromeRectangleDetector.html b/docs/apidocs/com/google/zxing/common/detector/class-use/MonochromeRectangleDetector.html
index fbec61a..5b11538 100644
--- a/docs/apidocs/com/google/zxing/common/detector/class-use/MonochromeRectangleDetector.html
+++ b/docs/apidocs/com/google/zxing/common/detector/class-use/MonochromeRectangleDetector.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.common.detector.MonochromeRectangleDetector (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.common.detector.MonochromeRectangleDetector (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.common.detector.MonochromeRectangleDetector (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.common.detector.MonochromeRectangleDetector (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/common/detector/class-use/WhiteRectangleDetector.html b/docs/apidocs/com/google/zxing/common/detector/class-use/WhiteRectangleDetector.html
index 3afa87f..ff43082 100644
--- a/docs/apidocs/com/google/zxing/common/detector/class-use/WhiteRectangleDetector.html
+++ b/docs/apidocs/com/google/zxing/common/detector/class-use/WhiteRectangleDetector.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.common.detector.WhiteRectangleDetector (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.common.detector.WhiteRectangleDetector (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.common.detector.WhiteRectangleDetector (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.common.detector.WhiteRectangleDetector (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/common/detector/package-frame.html b/docs/apidocs/com/google/zxing/common/detector/package-frame.html
index 4e67a63..3aaf9e5 100644
--- a/docs/apidocs/com/google/zxing/common/detector/package-frame.html
+++ b/docs/apidocs/com/google/zxing/common/detector/package-frame.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.common.detector (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.common.detector (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
diff --git a/docs/apidocs/com/google/zxing/common/detector/package-summary.html b/docs/apidocs/com/google/zxing/common/detector/package-summary.html
index f3f65bc..524780e 100644
--- a/docs/apidocs/com/google/zxing/common/detector/package-summary.html
+++ b/docs/apidocs/com/google/zxing/common/detector/package-summary.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.common.detector (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.common.detector (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.common.detector (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.common.detector (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -153,6 +153,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/common/detector/package-tree.html b/docs/apidocs/com/google/zxing/common/detector/package-tree.html
index 4cea76a..3fd6d89 100644
--- a/docs/apidocs/com/google/zxing/common/detector/package-tree.html
+++ b/docs/apidocs/com/google/zxing/common/detector/package-tree.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.common.detector Class Hierarchy (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.common.detector Class Hierarchy (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.common.detector Class Hierarchy (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.common.detector Class Hierarchy (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -135,6 +135,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/common/detector/package-use.html b/docs/apidocs/com/google/zxing/common/detector/package-use.html
index 89bf49a..3d0c4ad 100644
--- a/docs/apidocs/com/google/zxing/common/detector/package-use.html
+++ b/docs/apidocs/com/google/zxing/common/detector/package-use.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Package com.google.zxing.common.detector (ZXing 3.4.0 API)</title>
+<title>Uses of Package com.google.zxing.common.detector (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Package com.google.zxing.common.detector (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Package com.google.zxing.common.detector (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/common/package-frame.html b/docs/apidocs/com/google/zxing/common/package-frame.html
index d41de5e..2619bb0 100644
--- a/docs/apidocs/com/google/zxing/common/package-frame.html
+++ b/docs/apidocs/com/google/zxing/common/package-frame.html
@@ -4,13 +4,17 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.common (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.common (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
 <body>
 <h1 class="bar"><a href="../../../../com/google/zxing/common/package-summary.html" target="classFrame">com.google.zxing.common</a></h1>
 <div class="indexContainer">
+<h2 title="Interfaces">Interfaces</h2>
+<ul title="Interfaces">
+<li><a href="ECIInput.html" title="interface in com.google.zxing.common" target="classFrame"><span class="interfaceName">ECIInput</span></a></li>
+</ul>
 <h2 title="Classes">Classes</h2>
 <ul title="Classes">
 <li><a href="BitArray.html" title="class in com.google.zxing.common" target="classFrame">BitArray</a></li>
@@ -19,9 +23,12 @@
 <li><a href="DecoderResult.html" title="class in com.google.zxing.common" target="classFrame">DecoderResult</a></li>
 <li><a href="DefaultGridSampler.html" title="class in com.google.zxing.common" target="classFrame">DefaultGridSampler</a></li>
 <li><a href="DetectorResult.html" title="class in com.google.zxing.common" target="classFrame">DetectorResult</a></li>
+<li><a href="ECIEncoderSet.html" title="class in com.google.zxing.common" target="classFrame">ECIEncoderSet</a></li>
+<li><a href="ECIStringBuilder.html" title="class in com.google.zxing.common" target="classFrame">ECIStringBuilder</a></li>
 <li><a href="GlobalHistogramBinarizer.html" title="class in com.google.zxing.common" target="classFrame">GlobalHistogramBinarizer</a></li>
 <li><a href="GridSampler.html" title="class in com.google.zxing.common" target="classFrame">GridSampler</a></li>
 <li><a href="HybridBinarizer.html" title="class in com.google.zxing.common" target="classFrame">HybridBinarizer</a></li>
+<li><a href="MinimalECIInput.html" title="class in com.google.zxing.common" target="classFrame">MinimalECIInput</a></li>
 <li><a href="PerspectiveTransform.html" title="class in com.google.zxing.common" target="classFrame">PerspectiveTransform</a></li>
 <li><a href="StringUtils.html" title="class in com.google.zxing.common" target="classFrame">StringUtils</a></li>
 </ul>
diff --git a/docs/apidocs/com/google/zxing/common/package-summary.html b/docs/apidocs/com/google/zxing/common/package-summary.html
index 7b214cf..5c960a8 100644
--- a/docs/apidocs/com/google/zxing/common/package-summary.html
+++ b/docs/apidocs/com/google/zxing/common/package-summary.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.common (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.common (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.common (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.common (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -75,6 +75,23 @@
 <div class="contentContainer">
 <ul class="blockList">
 <li class="blockList">
+<table class="typeSummary" border="0" cellpadding="3" cellspacing="0" summary="Interface Summary table, listing interfaces, and an explanation">
+<caption><span>Interface Summary</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Interface</th>
+<th class="colLast" scope="col">Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><a href="../../../../com/google/zxing/common/ECIInput.html" title="interface in com.google.zxing.common">ECIInput</a></td>
+<td class="colLast">
+<div class="block">Interface to navigate a sequence of ECIs and bytes.</div>
+</td>
+</tr>
+</tbody>
+</table>
+</li>
+<li class="blockList">
 <table class="typeSummary" border="0" cellpadding="3" cellspacing="0" summary="Class Summary table, listing classes, and an explanation">
 <caption><span>Class Summary</span><span class="tabEnd">&nbsp;</span></caption>
 <tr>
@@ -118,6 +135,22 @@
 </td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><a href="../../../../com/google/zxing/common/ECIEncoderSet.html" title="class in com.google.zxing.common">ECIEncoderSet</a></td>
+<td class="colLast">
+<div class="block">Set of CharsetEncoders for a given input string
+
+ Invariants:
+ - The list contains only encoders from CharacterSetECI (list is shorter then the list of encoders available on
+   the platform for which ECI values are defined).</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a href="../../../../com/google/zxing/common/ECIStringBuilder.html" title="class in com.google.zxing.common">ECIStringBuilder</a></td>
+<td class="colLast">
+<div class="block">Class that converts a sequence of ECIs and bytes into a string</div>
+</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../com/google/zxing/common/GlobalHistogramBinarizer.html" title="class in com.google.zxing.common">GlobalHistogramBinarizer</a></td>
 <td class="colLast">
 <div class="block">This Binarizer implementation uses the old ZXing global histogram approach.</div>
@@ -139,12 +172,20 @@
 </td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><a href="../../../../com/google/zxing/common/MinimalECIInput.html" title="class in com.google.zxing.common">MinimalECIInput</a></td>
+<td class="colLast">
+<div class="block">Class that converts a character string into a sequence of ECIs and bytes
+
+ The implementation uses the Dijkstra algorithm to produce minimal encodings</div>
+</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../com/google/zxing/common/PerspectiveTransform.html" title="class in com.google.zxing.common">PerspectiveTransform</a></td>
 <td class="colLast">
 <div class="block">This class implements a perspective transform in two dimensions.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../com/google/zxing/common/StringUtils.html" title="class in com.google.zxing.common">StringUtils</a></td>
 <td class="colLast">
 <div class="block">Common string-related functions.</div>
@@ -220,6 +261,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/common/package-tree.html b/docs/apidocs/com/google/zxing/common/package-tree.html
index 07987b0..b66fb9c 100644
--- a/docs/apidocs/com/google/zxing/common/package-tree.html
+++ b/docs/apidocs/com/google/zxing/common/package-tree.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.common Class Hierarchy (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.common Class Hierarchy (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.common Class Hierarchy (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.common Class Hierarchy (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -95,16 +95,23 @@
 <li type="circle">com.google.zxing.common.<a href="../../../../com/google/zxing/common/BitSource.html" title="class in com.google.zxing.common"><span class="typeNameLink">BitSource</span></a></li>
 <li type="circle">com.google.zxing.common.<a href="../../../../com/google/zxing/common/DecoderResult.html" title="class in com.google.zxing.common"><span class="typeNameLink">DecoderResult</span></a></li>
 <li type="circle">com.google.zxing.common.<a href="../../../../com/google/zxing/common/DetectorResult.html" title="class in com.google.zxing.common"><span class="typeNameLink">DetectorResult</span></a></li>
+<li type="circle">com.google.zxing.common.<a href="../../../../com/google/zxing/common/ECIEncoderSet.html" title="class in com.google.zxing.common"><span class="typeNameLink">ECIEncoderSet</span></a></li>
+<li type="circle">com.google.zxing.common.<a href="../../../../com/google/zxing/common/ECIStringBuilder.html" title="class in com.google.zxing.common"><span class="typeNameLink">ECIStringBuilder</span></a></li>
 <li type="circle">com.google.zxing.common.<a href="../../../../com/google/zxing/common/GridSampler.html" title="class in com.google.zxing.common"><span class="typeNameLink">GridSampler</span></a>
 <ul>
 <li type="circle">com.google.zxing.common.<a href="../../../../com/google/zxing/common/DefaultGridSampler.html" title="class in com.google.zxing.common"><span class="typeNameLink">DefaultGridSampler</span></a></li>
 </ul>
 </li>
+<li type="circle">com.google.zxing.common.<a href="../../../../com/google/zxing/common/MinimalECIInput.html" title="class in com.google.zxing.common"><span class="typeNameLink">MinimalECIInput</span></a> (implements com.google.zxing.common.<a href="../../../../com/google/zxing/common/ECIInput.html" title="interface in com.google.zxing.common">ECIInput</a>)</li>
 <li type="circle">com.google.zxing.common.<a href="../../../../com/google/zxing/common/PerspectiveTransform.html" title="class in com.google.zxing.common"><span class="typeNameLink">PerspectiveTransform</span></a></li>
 <li type="circle">com.google.zxing.common.<a href="../../../../com/google/zxing/common/StringUtils.html" title="class in com.google.zxing.common"><span class="typeNameLink">StringUtils</span></a></li>
 </ul>
 </li>
 </ul>
+<h2 title="Interface Hierarchy">Interface Hierarchy</h2>
+<ul>
+<li type="circle">com.google.zxing.common.<a href="../../../../com/google/zxing/common/ECIInput.html" title="interface in com.google.zxing.common"><span class="typeNameLink">ECIInput</span></a></li>
+</ul>
 <h2 title="Enum Hierarchy">Enum Hierarchy</h2>
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Object</span></a>
@@ -165,6 +172,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/common/package-use.html b/docs/apidocs/com/google/zxing/common/package-use.html
index a7f08eb..811c797 100644
--- a/docs/apidocs/com/google/zxing/common/package-use.html
+++ b/docs/apidocs/com/google/zxing/common/package-use.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Package com.google.zxing.common (ZXing 3.4.0 API)</title>
+<title>Uses of Package com.google.zxing.common (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Package com.google.zxing.common (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Package com.google.zxing.common (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -91,31 +91,31 @@
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><a href="#com.google.zxing.aztec.decoder">com.google.zxing.aztec.decoder</a></td>
+<td class="colFirst"><a href="#com.google.zxing.aztec.encoder">com.google.zxing.aztec.encoder</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a href="#com.google.zxing.aztec.detector">com.google.zxing.aztec.detector</a></td>
+<td class="colFirst"><a href="#com.google.zxing.client.j2se">com.google.zxing.client.j2se</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><a href="#com.google.zxing.aztec.encoder">com.google.zxing.aztec.encoder</a></td>
+<td class="colFirst"><a href="#com.google.zxing.common">com.google.zxing.common</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a href="#com.google.zxing.client.j2se">com.google.zxing.client.j2se</a></td>
+<td class="colFirst"><a href="#com.google.zxing.common.detector">com.google.zxing.common.detector</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><a href="#com.google.zxing.common">com.google.zxing.common</a></td>
+<td class="colFirst"><a href="#com.google.zxing.datamatrix">com.google.zxing.datamatrix</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a href="#com.google.zxing.common.detector">com.google.zxing.common.detector</a></td>
+<td class="colFirst"><a href="#com.google.zxing.datamatrix.decoder">com.google.zxing.datamatrix.decoder</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><a href="#com.google.zxing.datamatrix">com.google.zxing.datamatrix</a></td>
+<td class="colFirst"><a href="#com.google.zxing.datamatrix.detector">com.google.zxing.datamatrix.detector</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
@@ -155,10 +155,6 @@
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><a href="#com.google.zxing.qrcode.decoder">com.google.zxing.qrcode.decoder</a></td>
-<td class="colLast">&nbsp;</td>
-</tr>
-<tr class="rowColor">
 <td class="colFirst"><a href="#com.google.zxing.qrcode.detector">com.google.zxing.qrcode.detector</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
@@ -209,40 +205,6 @@
 </tbody>
 </table>
 </li>
-<li class="blockList"><a name="com.google.zxing.aztec.decoder">
-<!--   -->
-</a>
-<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing classes, and an explanation">
-<caption><span>Classes in <a href="../../../../com/google/zxing/common/package-summary.html">com.google.zxing.common</a> used by <a href="../../../../com/google/zxing/aztec/decoder/package-summary.html">com.google.zxing.aztec.decoder</a></span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colOne" scope="col">Class and Description</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colOne"><a href="../../../../com/google/zxing/common/class-use/DecoderResult.html#com.google.zxing.aztec.decoder">DecoderResult</a>
-<div class="block">Encapsulates the result of decoding a matrix of bits.</div>
-</td>
-</tr>
-</tbody>
-</table>
-</li>
-<li class="blockList"><a name="com.google.zxing.aztec.detector">
-<!--   -->
-</a>
-<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing classes, and an explanation">
-<caption><span>Classes in <a href="../../../../com/google/zxing/common/package-summary.html">com.google.zxing.common</a> used by <a href="../../../../com/google/zxing/aztec/detector/package-summary.html">com.google.zxing.aztec.detector</a></span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colOne" scope="col">Class and Description</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colOne"><a href="../../../../com/google/zxing/common/class-use/BitMatrix.html#com.google.zxing.aztec.detector">BitMatrix</a>
-<div class="block">Represents a 2D matrix of bits.</div>
-</td>
-</tr>
-</tbody>
-</table>
-</li>
 <li class="blockList"><a name="com.google.zxing.aztec.encoder">
 <!--   -->
 </a>
@@ -308,18 +270,23 @@
 </td>
 </tr>
 <tr class="rowColor">
+<td class="colOne"><a href="../../../../com/google/zxing/common/class-use/ECIInput.html#com.google.zxing.common">ECIInput</a>
+<div class="block">Interface to navigate a sequence of ECIs and bytes.</div>
+</td>
+</tr>
+<tr class="altColor">
 <td class="colOne"><a href="../../../../com/google/zxing/common/class-use/GlobalHistogramBinarizer.html#com.google.zxing.common">GlobalHistogramBinarizer</a>
 <div class="block">This Binarizer implementation uses the old ZXing global histogram approach.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../com/google/zxing/common/class-use/GridSampler.html#com.google.zxing.common">GridSampler</a>
 <div class="block">Implementations of this class can, given locations of finder patterns for a QR code in an
  image, sample the right points in the image to reconstruct the QR code, accounting for
  perspective distortion.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../com/google/zxing/common/class-use/PerspectiveTransform.html#com.google.zxing.common">PerspectiveTransform</a>
 <div class="block">This class implements a perspective transform in two dimensions.</div>
 </td>
@@ -361,6 +328,50 @@
 </tbody>
 </table>
 </li>
+<li class="blockList"><a name="com.google.zxing.datamatrix.decoder">
+<!--   -->
+</a>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing classes, and an explanation">
+<caption><span>Classes in <a href="../../../../com/google/zxing/common/package-summary.html">com.google.zxing.common</a> used by <a href="../../../../com/google/zxing/datamatrix/decoder/package-summary.html">com.google.zxing.datamatrix.decoder</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Class and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colOne"><a href="../../../../com/google/zxing/common/class-use/BitMatrix.html#com.google.zxing.datamatrix.decoder">BitMatrix</a>
+<div class="block">Represents a 2D matrix of bits.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colOne"><a href="../../../../com/google/zxing/common/class-use/DecoderResult.html#com.google.zxing.datamatrix.decoder">DecoderResult</a>
+<div class="block">Encapsulates the result of decoding a matrix of bits.</div>
+</td>
+</tr>
+</tbody>
+</table>
+</li>
+<li class="blockList"><a name="com.google.zxing.datamatrix.detector">
+<!--   -->
+</a>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing classes, and an explanation">
+<caption><span>Classes in <a href="../../../../com/google/zxing/common/package-summary.html">com.google.zxing.common</a> used by <a href="../../../../com/google/zxing/datamatrix/detector/package-summary.html">com.google.zxing.datamatrix.detector</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Class and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colOne"><a href="../../../../com/google/zxing/common/class-use/BitMatrix.html#com.google.zxing.datamatrix.detector">BitMatrix</a>
+<div class="block">Represents a 2D matrix of bits.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colOne"><a href="../../../../com/google/zxing/common/class-use/DetectorResult.html#com.google.zxing.datamatrix.detector">DetectorResult</a>
+<div class="block">Encapsulates the result of detecting a barcode in an image.</div>
+</td>
+</tr>
+</tbody>
+</table>
+</li>
 <li class="blockList"><a name="com.google.zxing.multi.qrcode.detector">
 <!--   -->
 </a>
@@ -529,23 +540,6 @@
 </tbody>
 </table>
 </li>
-<li class="blockList"><a name="com.google.zxing.qrcode.decoder">
-<!--   -->
-</a>
-<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing classes, and an explanation">
-<caption><span>Classes in <a href="../../../../com/google/zxing/common/package-summary.html">com.google.zxing.common</a> used by <a href="../../../../com/google/zxing/qrcode/decoder/package-summary.html">com.google.zxing.qrcode.decoder</a></span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colOne" scope="col">Class and Description</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colOne"><a href="../../../../com/google/zxing/common/class-use/BitMatrix.html#com.google.zxing.qrcode.decoder">BitMatrix</a>
-<div class="block">Represents a 2D matrix of bits.</div>
-</td>
-</tr>
-</tbody>
-</table>
-</li>
 <li class="blockList"><a name="com.google.zxing.qrcode.detector">
 <!--   -->
 </a>
@@ -560,11 +554,6 @@
 <div class="block">Represents a 2D matrix of bits.</div>
 </td>
 </tr>
-<tr class="rowColor">
-<td class="colOne"><a href="../../../../com/google/zxing/common/class-use/DetectorResult.html#com.google.zxing.qrcode.detector">DetectorResult</a>
-<div class="block">Encapsulates the result of detecting a barcode in an image.</div>
-</td>
-</tr>
 </tbody>
 </table>
 </li>
@@ -617,6 +606,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/common/reedsolomon/GenericGF.html b/docs/apidocs/com/google/zxing/common/reedsolomon/GenericGF.html
index 41e47a1..b444f78 100644
--- a/docs/apidocs/com/google/zxing/common/reedsolomon/GenericGF.html
+++ b/docs/apidocs/com/google/zxing/common/reedsolomon/GenericGF.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GenericGF (ZXing 3.4.0 API)</title>
+<title>GenericGF (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="GenericGF (ZXing 3.4.0 API)";
+            parent.document.title="GenericGF (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -451,6 +451,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/common/reedsolomon/ReedSolomonDecoder.html b/docs/apidocs/com/google/zxing/common/reedsolomon/ReedSolomonDecoder.html
index 21dad6a..504eb73 100644
--- a/docs/apidocs/com/google/zxing/common/reedsolomon/ReedSolomonDecoder.html
+++ b/docs/apidocs/com/google/zxing/common/reedsolomon/ReedSolomonDecoder.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>ReedSolomonDecoder (ZXing 3.4.0 API)</title>
+<title>ReedSolomonDecoder (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="ReedSolomonDecoder (ZXing 3.4.0 API)";
+            parent.document.title="ReedSolomonDecoder (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -303,6 +303,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/common/reedsolomon/ReedSolomonEncoder.html b/docs/apidocs/com/google/zxing/common/reedsolomon/ReedSolomonEncoder.html
index 1f3fc24..ff13554 100644
--- a/docs/apidocs/com/google/zxing/common/reedsolomon/ReedSolomonEncoder.html
+++ b/docs/apidocs/com/google/zxing/common/reedsolomon/ReedSolomonEncoder.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>ReedSolomonEncoder (ZXing 3.4.0 API)</title>
+<title>ReedSolomonEncoder (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="ReedSolomonEncoder (ZXing 3.4.0 API)";
+            parent.document.title="ReedSolomonEncoder (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -274,6 +274,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/common/reedsolomon/ReedSolomonException.html b/docs/apidocs/com/google/zxing/common/reedsolomon/ReedSolomonException.html
index cc2330d..2408142 100644
--- a/docs/apidocs/com/google/zxing/common/reedsolomon/ReedSolomonException.html
+++ b/docs/apidocs/com/google/zxing/common/reedsolomon/ReedSolomonException.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>ReedSolomonException (ZXing 3.4.0 API)</title>
+<title>ReedSolomonException (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="ReedSolomonException (ZXing 3.4.0 API)";
+            parent.document.title="ReedSolomonException (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -262,6 +262,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.h
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/common/reedsolomon/class-use/GenericGF.html b/docs/apidocs/com/google/zxing/common/reedsolomon/class-use/GenericGF.html
index 1c3c051..2d6560f 100644
--- a/docs/apidocs/com/google/zxing/common/reedsolomon/class-use/GenericGF.html
+++ b/docs/apidocs/com/google/zxing/common/reedsolomon/class-use/GenericGF.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.common.reedsolomon.GenericGF (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.common.reedsolomon.GenericGF (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.common.reedsolomon.GenericGF (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.common.reedsolomon.GenericGF (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -202,6 +202,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/common/reedsolomon/class-use/ReedSolomonDecoder.html b/docs/apidocs/com/google/zxing/common/reedsolomon/class-use/ReedSolomonDecoder.html
index 0a03573..f06af92 100644
--- a/docs/apidocs/com/google/zxing/common/reedsolomon/class-use/ReedSolomonDecoder.html
+++ b/docs/apidocs/com/google/zxing/common/reedsolomon/class-use/ReedSolomonDecoder.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.common.reedsolomon.ReedSolomonDecoder (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.common.reedsolomon.ReedSolomonDecoder (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.common.reedsolomon.ReedSolomonDecoder (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.common.reedsolomon.ReedSolomonDecoder (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/common/reedsolomon/class-use/ReedSolomonEncoder.html b/docs/apidocs/com/google/zxing/common/reedsolomon/class-use/ReedSolomonEncoder.html
index 6299e93..1c435a6 100644
--- a/docs/apidocs/com/google/zxing/common/reedsolomon/class-use/ReedSolomonEncoder.html
+++ b/docs/apidocs/com/google/zxing/common/reedsolomon/class-use/ReedSolomonEncoder.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.common.reedsolomon.ReedSolomonEncoder (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.common.reedsolomon.ReedSolomonEncoder (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.common.reedsolomon.ReedSolomonEncoder (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.common.reedsolomon.ReedSolomonEncoder (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/common/reedsolomon/class-use/ReedSolomonException.html b/docs/apidocs/com/google/zxing/common/reedsolomon/class-use/ReedSolomonException.html
index b059ce4..ec52eaf 100644
--- a/docs/apidocs/com/google/zxing/common/reedsolomon/class-use/ReedSolomonException.html
+++ b/docs/apidocs/com/google/zxing/common/reedsolomon/class-use/ReedSolomonException.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.common.reedsolomon.ReedSolomonException (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.common.reedsolomon.ReedSolomonException (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.common.reedsolomon.ReedSolomonException (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.common.reedsolomon.ReedSolomonException (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -164,6 +164,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/common/reedsolomon/package-frame.html b/docs/apidocs/com/google/zxing/common/reedsolomon/package-frame.html
index 46abf1e..b5ba534 100644
--- a/docs/apidocs/com/google/zxing/common/reedsolomon/package-frame.html
+++ b/docs/apidocs/com/google/zxing/common/reedsolomon/package-frame.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.common.reedsolomon (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.common.reedsolomon (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
diff --git a/docs/apidocs/com/google/zxing/common/reedsolomon/package-summary.html b/docs/apidocs/com/google/zxing/common/reedsolomon/package-summary.html
index 9bc0cd5..e217147 100644
--- a/docs/apidocs/com/google/zxing/common/reedsolomon/package-summary.html
+++ b/docs/apidocs/com/google/zxing/common/reedsolomon/package-summary.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.common.reedsolomon (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.common.reedsolomon (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.common.reedsolomon (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.common.reedsolomon (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -171,6 +171,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/common/reedsolomon/package-tree.html b/docs/apidocs/com/google/zxing/common/reedsolomon/package-tree.html
index 2ee151b..28536a9 100644
--- a/docs/apidocs/com/google/zxing/common/reedsolomon/package-tree.html
+++ b/docs/apidocs/com/google/zxing/common/reedsolomon/package-tree.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.common.reedsolomon Class Hierarchy (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.common.reedsolomon Class Hierarchy (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.common.reedsolomon Class Hierarchy (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.common.reedsolomon Class Hierarchy (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -144,6 +144,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/common/reedsolomon/package-use.html b/docs/apidocs/com/google/zxing/common/reedsolomon/package-use.html
index ff019e2..85a81ed 100644
--- a/docs/apidocs/com/google/zxing/common/reedsolomon/package-use.html
+++ b/docs/apidocs/com/google/zxing/common/reedsolomon/package-use.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Package com.google.zxing.common.reedsolomon (ZXing 3.4.0 API)</title>
+<title>Uses of Package com.google.zxing.common.reedsolomon (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Package com.google.zxing.common.reedsolomon (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Package com.google.zxing.common.reedsolomon (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -162,6 +162,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/datamatrix/DataMatrixReader.html b/docs/apidocs/com/google/zxing/datamatrix/DataMatrixReader.html
index 3e813a9..b25a71d 100644
--- a/docs/apidocs/com/google/zxing/datamatrix/DataMatrixReader.html
+++ b/docs/apidocs/com/google/zxing/datamatrix/DataMatrixReader.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>DataMatrixReader (ZXing 3.4.0 API)</title>
+<title>DataMatrixReader (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="DataMatrixReader (ZXing 3.4.0 API)";
+            parent.document.title="DataMatrixReader (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -357,6 +357,6 @@ implements <a href="../../../../com/google/zxing/Reader.html" title="interface i
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/datamatrix/DataMatrixWriter.html b/docs/apidocs/com/google/zxing/datamatrix/DataMatrixWriter.html
index a38fee9..7e5ceb6 100644
--- a/docs/apidocs/com/google/zxing/datamatrix/DataMatrixWriter.html
+++ b/docs/apidocs/com/google/zxing/datamatrix/DataMatrixWriter.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>DataMatrixWriter (ZXing 3.4.0 API)</title>
+<title>DataMatrixWriter (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="DataMatrixWriter (ZXing 3.4.0 API)";
+            parent.document.title="DataMatrixWriter (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -331,6 +331,6 @@ implements <a href="../../../../com/google/zxing/Writer.html" title="interface i
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/datamatrix/class-use/DataMatrixReader.html b/docs/apidocs/com/google/zxing/datamatrix/class-use/DataMatrixReader.html
index 2ae58c7..4e98a6a 100644
--- a/docs/apidocs/com/google/zxing/datamatrix/class-use/DataMatrixReader.html
+++ b/docs/apidocs/com/google/zxing/datamatrix/class-use/DataMatrixReader.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.datamatrix.DataMatrixReader (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.datamatrix.DataMatrixReader (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.datamatrix.DataMatrixReader (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.datamatrix.DataMatrixReader (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/datamatrix/class-use/DataMatrixWriter.html b/docs/apidocs/com/google/zxing/datamatrix/class-use/DataMatrixWriter.html
index 57ff099..7e03293 100644
--- a/docs/apidocs/com/google/zxing/datamatrix/class-use/DataMatrixWriter.html
+++ b/docs/apidocs/com/google/zxing/datamatrix/class-use/DataMatrixWriter.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.datamatrix.DataMatrixWriter (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.datamatrix.DataMatrixWriter (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.datamatrix.DataMatrixWriter (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.datamatrix.DataMatrixWriter (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/datamatrix/decoder/Decoder.html b/docs/apidocs/com/google/zxing/datamatrix/decoder/Decoder.html
index 94baccb..7bab792 100644
--- a/docs/apidocs/com/google/zxing/datamatrix/decoder/Decoder.html
+++ b/docs/apidocs/com/google/zxing/datamatrix/decoder/Decoder.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Decoder (ZXing 3.4.0 API)</title>
+<title>Decoder (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Decoder (ZXing 3.4.0 API)";
+            parent.document.title="Decoder (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -316,6 +316,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/datamatrix/decoder/Version.html b/docs/apidocs/com/google/zxing/datamatrix/decoder/Version.html
index da48423..c257dea 100644
--- a/docs/apidocs/com/google/zxing/datamatrix/decoder/Version.html
+++ b/docs/apidocs/com/google/zxing/datamatrix/decoder/Version.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Version (ZXing 3.4.0 API)</title>
+<title>Version (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Version (ZXing 3.4.0 API)";
+            parent.document.title="Version (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -349,6 +349,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/datamatrix/decoder/class-use/Decoder.html b/docs/apidocs/com/google/zxing/datamatrix/decoder/class-use/Decoder.html
index 41e22df..0322f74 100644
--- a/docs/apidocs/com/google/zxing/datamatrix/decoder/class-use/Decoder.html
+++ b/docs/apidocs/com/google/zxing/datamatrix/decoder/class-use/Decoder.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.datamatrix.decoder.Decoder (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.datamatrix.decoder.Decoder (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.datamatrix.decoder.Decoder (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.datamatrix.decoder.Decoder (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/datamatrix/decoder/class-use/Version.html b/docs/apidocs/com/google/zxing/datamatrix/decoder/class-use/Version.html
index b8389ea..aca4c1d 100644
--- a/docs/apidocs/com/google/zxing/datamatrix/decoder/class-use/Version.html
+++ b/docs/apidocs/com/google/zxing/datamatrix/decoder/class-use/Version.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.datamatrix.decoder.Version (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.datamatrix.decoder.Version (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.datamatrix.decoder.Version (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.datamatrix.decoder.Version (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -163,6 +163,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/datamatrix/decoder/package-frame.html b/docs/apidocs/com/google/zxing/datamatrix/decoder/package-frame.html
index 74a89da..b56924c 100644
--- a/docs/apidocs/com/google/zxing/datamatrix/decoder/package-frame.html
+++ b/docs/apidocs/com/google/zxing/datamatrix/decoder/package-frame.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.datamatrix.decoder (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.datamatrix.decoder (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
diff --git a/docs/apidocs/com/google/zxing/datamatrix/decoder/package-summary.html b/docs/apidocs/com/google/zxing/datamatrix/decoder/package-summary.html
index 95c9928..ecb9266 100644
--- a/docs/apidocs/com/google/zxing/datamatrix/decoder/package-summary.html
+++ b/docs/apidocs/com/google/zxing/datamatrix/decoder/package-summary.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.datamatrix.decoder (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.datamatrix.decoder (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.datamatrix.decoder (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.datamatrix.decoder (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -148,6 +148,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/datamatrix/decoder/package-tree.html b/docs/apidocs/com/google/zxing/datamatrix/decoder/package-tree.html
index 8a614dd..826a76b 100644
--- a/docs/apidocs/com/google/zxing/datamatrix/decoder/package-tree.html
+++ b/docs/apidocs/com/google/zxing/datamatrix/decoder/package-tree.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.datamatrix.decoder Class Hierarchy (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.datamatrix.decoder Class Hierarchy (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.datamatrix.decoder Class Hierarchy (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.datamatrix.decoder Class Hierarchy (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -134,6 +134,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/datamatrix/decoder/package-use.html b/docs/apidocs/com/google/zxing/datamatrix/decoder/package-use.html
index 86c8f8a..ded7ef8 100644
--- a/docs/apidocs/com/google/zxing/datamatrix/decoder/package-use.html
+++ b/docs/apidocs/com/google/zxing/datamatrix/decoder/package-use.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Package com.google.zxing.datamatrix.decoder (ZXing 3.4.0 API)</title>
+<title>Uses of Package com.google.zxing.datamatrix.decoder (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Package com.google.zxing.datamatrix.decoder (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Package com.google.zxing.datamatrix.decoder (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -156,6 +156,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/datamatrix/detector/Detector.html b/docs/apidocs/com/google/zxing/datamatrix/detector/Detector.html
index 71b4b73..189a2f1 100644
--- a/docs/apidocs/com/google/zxing/datamatrix/detector/Detector.html
+++ b/docs/apidocs/com/google/zxing/datamatrix/detector/Detector.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Detector (ZXing 3.4.0 API)</title>
+<title>Detector (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Detector (ZXing 3.4.0 API)";
+            parent.document.title="Detector (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -288,6 +288,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/datamatrix/detector/class-use/Detector.html b/docs/apidocs/com/google/zxing/datamatrix/detector/class-use/Detector.html
index 7bdd972..1ea77f9 100644
--- a/docs/apidocs/com/google/zxing/datamatrix/detector/class-use/Detector.html
+++ b/docs/apidocs/com/google/zxing/datamatrix/detector/class-use/Detector.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.datamatrix.detector.Detector (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.datamatrix.detector.Detector (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.datamatrix.detector.Detector (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.datamatrix.detector.Detector (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/datamatrix/detector/package-frame.html b/docs/apidocs/com/google/zxing/datamatrix/detector/package-frame.html
index 3044e69..ab105bf 100644
--- a/docs/apidocs/com/google/zxing/datamatrix/detector/package-frame.html
+++ b/docs/apidocs/com/google/zxing/datamatrix/detector/package-frame.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.datamatrix.detector (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.datamatrix.detector (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
diff --git a/docs/apidocs/com/google/zxing/datamatrix/detector/package-summary.html b/docs/apidocs/com/google/zxing/datamatrix/detector/package-summary.html
index 5b52f8d..f235223 100644
--- a/docs/apidocs/com/google/zxing/datamatrix/detector/package-summary.html
+++ b/docs/apidocs/com/google/zxing/datamatrix/detector/package-summary.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.datamatrix.detector (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.datamatrix.detector (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.datamatrix.detector (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.datamatrix.detector (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -141,6 +141,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/datamatrix/detector/package-tree.html b/docs/apidocs/com/google/zxing/datamatrix/detector/package-tree.html
index 18f6676..2ee0b1d 100644
--- a/docs/apidocs/com/google/zxing/datamatrix/detector/package-tree.html
+++ b/docs/apidocs/com/google/zxing/datamatrix/detector/package-tree.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.datamatrix.detector Class Hierarchy (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.datamatrix.detector Class Hierarchy (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.datamatrix.detector Class Hierarchy (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.datamatrix.detector Class Hierarchy (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -133,6 +133,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/datamatrix/detector/package-use.html b/docs/apidocs/com/google/zxing/datamatrix/detector/package-use.html
index ef0c609..4687b81 100644
--- a/docs/apidocs/com/google/zxing/datamatrix/detector/package-use.html
+++ b/docs/apidocs/com/google/zxing/datamatrix/detector/package-use.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Package com.google.zxing.datamatrix.detector (ZXing 3.4.0 API)</title>
+<title>Uses of Package com.google.zxing.datamatrix.detector (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Package com.google.zxing.datamatrix.detector (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Package com.google.zxing.datamatrix.detector (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/datamatrix/encoder/DefaultPlacement.html b/docs/apidocs/com/google/zxing/datamatrix/encoder/DefaultPlacement.html
index 42a5f4d..7a70c90 100644
--- a/docs/apidocs/com/google/zxing/datamatrix/encoder/DefaultPlacement.html
+++ b/docs/apidocs/com/google/zxing/datamatrix/encoder/DefaultPlacement.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>DefaultPlacement (ZXing 3.4.0 API)</title>
+<title>DefaultPlacement (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="DefaultPlacement (ZXing 3.4.0 API)";
+            parent.document.title="DefaultPlacement (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -296,6 +296,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/datamatrix/encoder/HighLevelEncoder.html b/docs/apidocs/com/google/zxing/datamatrix/encoder/MinimalEncoder.html
similarity index 67%
rename from docs/apidocs/com/google/zxing/datamatrix/encoder/HighLevelEncoder.html
rename to docs/apidocs/com/google/zxing/datamatrix/encoder/MinimalEncoder.html
index 42e3abb..d6e456b 100644
--- a/docs/apidocs/com/google/zxing/datamatrix/encoder/HighLevelEncoder.html
+++ b/docs/apidocs/com/google/zxing/datamatrix/encoder/MinimalEncoder.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>HighLevelEncoder (ZXing 3.4.0 API)</title>
+<title>MinimalEncoder (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,13 +12,13 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="HighLevelEncoder (ZXing 3.4.0 API)";
+            parent.document.title="MinimalEncoder (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
     }
 //-->
-var methods = {"i0":9,"i1":9,"i2":9};
+var methods = {"i0":9,"i1":9};
 var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -40,7 +40,7 @@ var activeTableTab = "activeTableTab";
 <li><a href="../../../../../overview-summary.html">Overview</a></li>
 <li><a href="package-summary.html">Package</a></li>
 <li class="navBarCell1Rev">Class</li>
-<li><a href="class-use/HighLevelEncoder.html">Use</a></li>
+<li><a href="class-use/MinimalEncoder.html">Use</a></li>
 <li><a href="package-tree.html">Tree</a></li>
 <li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
 <li><a href="../../../../../index-all.html">Index</a></li>
@@ -49,12 +49,12 @@ var activeTableTab = "activeTableTab";
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../com/google/zxing/datamatrix/encoder/ErrorCorrection.html" title="class in com.google.zxing.datamatrix.encoder"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../com/google/zxing/datamatrix/encoder/HighLevelEncoder.html" title="class in com.google.zxing.datamatrix.encoder"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../com/google/zxing/datamatrix/encoder/SymbolInfo.html" title="class in com.google.zxing.datamatrix.encoder"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
-<li><a href="../../../../../index.html?com/google/zxing/datamatrix/encoder/HighLevelEncoder.html" target="_top">Frames</a></li>
-<li><a href="HighLevelEncoder.html" target="_top">No&nbsp;Frames</a></li>
+<li><a href="../../../../../index.html?com/google/zxing/datamatrix/encoder/MinimalEncoder.html" target="_top">Frames</a></li>
+<li><a href="MinimalEncoder.html" target="_top">No&nbsp;Frames</a></li>
 </ul>
 <ul class="navList" id="allclasses_navbar_top">
 <li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
@@ -93,14 +93,14 @@ var activeTableTab = "activeTableTab";
 <!-- ======== START OF CLASS DATA ======== -->
 <div class="header">
 <div class="subTitle">com.google.zxing.datamatrix.encoder</div>
-<h2 title="Class HighLevelEncoder" class="title">Class HighLevelEncoder</h2>
+<h2 title="Class MinimalEncoder" class="title">Class MinimalEncoder</h2>
 </div>
 <div class="contentContainer">
 <ul class="inheritance">
 <li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
 <li>
 <ul class="inheritance">
-<li>com.google.zxing.datamatrix.encoder.HighLevelEncoder</li>
+<li>com.google.zxing.datamatrix.encoder.MinimalEncoder</li>
 </ul>
 </li>
 </ul>
@@ -109,10 +109,43 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <hr>
 <br>
-<pre>public final class <span class="typeNameLabel">HighLevelEncoder</span>
+<pre>public final class <span class="typeNameLabel">MinimalEncoder</span>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
-<div class="block">DataMatrix ECC 200 data encoder following the algorithm described in ISO/IEC 16022:200(E) in
- annex S.</div>
+<div class="block">Encoder that encodes minimally
+
+ Algorithm:
+
+ Uses Dijkstra to produce mathematically minimal encodings that are in some cases smaller than the results produced
+ by the algorithm described in annex S in the specification ISO/IEC 16022:200(E). The biggest improvment of this
+ algorithm over that one is the case when the algorithm enters the most inefficient mode, the B256 mode. The
+ algorithm from the specification algorithm will exit this mode only if it encounters digits so that arbitrarily
+ inefficient results can be produced if the postfix contains no digits.
+
+ Multi ECI support and ECI switching:
+
+ For multi language content the algorithm selects the most compact representation using ECI modes. Note that unlike
+ the compaction algorithm used for QR-Codes, this implementation operates in two stages and therfore is not
+ mathematically optimal. In the first stage, the input string is encoded minimally as a stream of ECI character set
+ selectors and bytes encoded in the selected encoding. In this stage the algorithm might for example decide to
+ encode ocurrences of the characters "ŐŜ" (O-double-acute, S-circumflex) in UTF-8 by a single ECI or
+ alternatively by multiple ECIs that switch between IS0-8859-2 and ISO-8859-3 (e.g. in the case that the input
+ contains many * characters from ISO-8859-2 (Latin 2) and few from ISO-8859-3 (Latin 3)).
+ In a second stage this stream of ECIs and bytes is minimally encoded using the various Data Matrix encoding modes.
+ While both stages encode mathematically minimally it is not ensured that the result is mathematically minimal since
+ the size growth for inserting an ECI in the first stage can only be approximated as the first stage does not know
+ in which mode the ECI will occur in the second stage (may, or may not require an extra latch to ASCII depending on
+ the current mode). The reason for this shortcoming are difficulties in implementing it in a straightforward and
+ readable manner.
+
+ GS1 support
+
+ FNC1 delimiters can be encoded in the input string by using the FNC1 character specified in the encoding function.
+ When a FNC1 character is specified then a leading FNC1 will be encoded and all ocurrences of delimiter characters
+ while result in FNC1 codewords in the symbol.</div>
+<dl>
+<dt><span class="simpleTagLabel">Author:</span></dt>
+<dd>Alex Geller</dd>
+</dl>
 </li>
 </ul>
 </div>
@@ -132,27 +165,18 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <th class="colLast" scope="col">Method and Description</th>
 </tr>
 <tr id="i0" class="altColor">
-<td class="colFirst"><code>static int</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/datamatrix/encoder/HighLevelEncoder.html#determineConsecutiveDigitCount-java.lang.CharSequence-int-">determineConsecutiveDigitCount</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/CharSequence.html?is-external=true" title="class or interface in java.lang">CharSequence</a>&nbsp;msg,
-                              int&nbsp;startpos)</code>
-<div class="block">Determines the number of consecutive characters that are encodable using numeric compaction.</div>
-</td>
-</tr>
-<tr id="i1" class="rowColor">
 <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/datamatrix/encoder/HighLevelEncoder.html#encodeHighLevel-java.lang.String-">encodeHighLevel</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg)</code>
-<div class="block">Performs message encoding of a DataMatrix message using the algorithm described in annex P
- of ISO/IEC 16022:2000(E).</div>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/datamatrix/encoder/MinimalEncoder.html#encodeHighLevel-java.lang.String-">encodeHighLevel</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg)</code>
+<div class="block">Performs message encoding of a DataMatrix message</div>
 </td>
 </tr>
-<tr id="i2" class="altColor">
+<tr id="i1" class="rowColor">
 <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/datamatrix/encoder/HighLevelEncoder.html#encodeHighLevel-java.lang.String-com.google.zxing.datamatrix.encoder.SymbolShapeHint-com.google.zxing.Dimension-com.google.zxing.Dimension-">encodeHighLevel</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg,
-               <a href="../../../../../com/google/zxing/datamatrix/encoder/SymbolShapeHint.html" title="enum in com.google.zxing.datamatrix.encoder">SymbolShapeHint</a>&nbsp;shape,
-               <a href="../../../../../com/google/zxing/Dimension.html" title="class in com.google.zxing">Dimension</a>&nbsp;minSize,
-               <a href="../../../../../com/google/zxing/Dimension.html" title="class in com.google.zxing">Dimension</a>&nbsp;maxSize)</code>
-<div class="block">Performs message encoding of a DataMatrix message using the algorithm described in annex P
- of ISO/IEC 16022:2000(E).</div>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/datamatrix/encoder/MinimalEncoder.html#encodeHighLevel-java.lang.String-java.nio.charset.Charset-int-com.google.zxing.datamatrix.encoder.SymbolShapeHint-">encodeHighLevel</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg,
+               <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</a>&nbsp;priorityCharset,
+               int&nbsp;fnc1,
+               <a href="../../../../../com/google/zxing/datamatrix/encoder/SymbolShapeHint.html" title="enum in com.google.zxing.datamatrix.encoder">SymbolShapeHint</a>&nbsp;shape)</code>
+<div class="block">Performs message encoding of a DataMatrix message</div>
 </td>
 </tr>
 </table>
@@ -184,8 +208,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <li class="blockList">
 <h4>encodeHighLevel</h4>
 <pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;encodeHighLevel(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg)</pre>
-<div class="block">Performs message encoding of a DataMatrix message using the algorithm described in annex P
- of ISO/IEC 16022:2000(E).</div>
+<div class="block">Performs message encoding of a DataMatrix message</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>msg</code> - the message</dd>
@@ -194,48 +217,32 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </dl>
 </li>
 </ul>
-<a name="encodeHighLevel-java.lang.String-com.google.zxing.datamatrix.encoder.SymbolShapeHint-com.google.zxing.Dimension-com.google.zxing.Dimension-">
+<a name="encodeHighLevel-java.lang.String-java.nio.charset.Charset-int-com.google.zxing.datamatrix.encoder.SymbolShapeHint-">
 <!--   -->
 </a>
-<ul class="blockList">
+<ul class="blockListLast">
 <li class="blockList">
 <h4>encodeHighLevel</h4>
 <pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;encodeHighLevel(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg,
-                                     <a href="../../../../../com/google/zxing/datamatrix/encoder/SymbolShapeHint.html" title="enum in com.google.zxing.datamatrix.encoder">SymbolShapeHint</a>&nbsp;shape,
-                                     <a href="../../../../../com/google/zxing/Dimension.html" title="class in com.google.zxing">Dimension</a>&nbsp;minSize,
-                                     <a href="../../../../../com/google/zxing/Dimension.html" title="class in com.google.zxing">Dimension</a>&nbsp;maxSize)</pre>
-<div class="block">Performs message encoding of a DataMatrix message using the algorithm described in annex P
- of ISO/IEC 16022:2000(E).</div>
+                                     <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</a>&nbsp;priorityCharset,
+                                     int&nbsp;fnc1,
+                                     <a href="../../../../../com/google/zxing/datamatrix/encoder/SymbolShapeHint.html" title="enum in com.google.zxing.datamatrix.encoder">SymbolShapeHint</a>&nbsp;shape)</pre>
+<div class="block">Performs message encoding of a DataMatrix message</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>msg</code> - the message</dd>
-<dd><code>shape</code> - requested shape. May be <code>SymbolShapeHint.FORCE_NONE</code>,
-                <code>SymbolShapeHint.FORCE_SQUARE</code> or <code>SymbolShapeHint.FORCE_RECTANGLE</code>.</dd>
-<dd><code>minSize</code> - the minimum symbol size constraint or null for no constraint</dd>
-<dd><code>maxSize</code> - the maximum symbol size constraint or null for no constraint</dd>
+<dd><code>priorityCharset</code> - The preferred <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset"><code>Charset</code></a>. When the value of the argument is null, the algorithm
+   chooses charsets that leads to a minimal representation. Otherwise the algorithm will use the priority
+   charset to encode any character in the input that can be encoded by it if the charset is among the
+   supported charsets.</dd>
+<dd><code>fnc1</code> - denotes the character in the input that represents the FNC1 character or -1 if this is not a GS1
+   bar code. If the value is not -1 then a FNC1 is also prepended.</dd>
+<dd><code>shape</code> - requested shape.</dd>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>the encoded message (the char values range from 0 to 255)</dd>
 </dl>
 </li>
 </ul>
-<a name="determineConsecutiveDigitCount-java.lang.CharSequence-int-">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>determineConsecutiveDigitCount</h4>
-<pre>public static&nbsp;int&nbsp;determineConsecutiveDigitCount(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/CharSequence.html?is-external=true" title="class or interface in java.lang">CharSequence</a>&nbsp;msg,
-                                                 int&nbsp;startpos)</pre>
-<div class="block">Determines the number of consecutive characters that are encodable using numeric compaction.</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>msg</code> - the message</dd>
-<dd><code>startpos</code> - the start position within the message</dd>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>the requested character count</dd>
-</dl>
-</li>
-</ul>
 </li>
 </ul>
 </li>
@@ -255,7 +262,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <li><a href="../../../../../overview-summary.html">Overview</a></li>
 <li><a href="package-summary.html">Package</a></li>
 <li class="navBarCell1Rev">Class</li>
-<li><a href="class-use/HighLevelEncoder.html">Use</a></li>
+<li><a href="class-use/MinimalEncoder.html">Use</a></li>
 <li><a href="package-tree.html">Tree</a></li>
 <li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
 <li><a href="../../../../../index-all.html">Index</a></li>
@@ -264,12 +271,12 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../com/google/zxing/datamatrix/encoder/ErrorCorrection.html" title="class in com.google.zxing.datamatrix.encoder"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../com/google/zxing/datamatrix/encoder/HighLevelEncoder.html" title="class in com.google.zxing.datamatrix.encoder"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../com/google/zxing/datamatrix/encoder/SymbolInfo.html" title="class in com.google.zxing.datamatrix.encoder"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
-<li><a href="../../../../../index.html?com/google/zxing/datamatrix/encoder/HighLevelEncoder.html" target="_top">Frames</a></li>
-<li><a href="HighLevelEncoder.html" target="_top">No&nbsp;Frames</a></li>
+<li><a href="../../../../../index.html?com/google/zxing/datamatrix/encoder/MinimalEncoder.html" target="_top">Frames</a></li>
+<li><a href="MinimalEncoder.html" target="_top">No&nbsp;Frames</a></li>
 </ul>
 <ul class="navList" id="allclasses_navbar_bottom">
 <li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
@@ -305,6 +312,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/datamatrix/encoder/SymbolInfo.html b/docs/apidocs/com/google/zxing/datamatrix/encoder/SymbolInfo.html
index ca66705..d19fb32 100644
--- a/docs/apidocs/com/google/zxing/datamatrix/encoder/SymbolInfo.html
+++ b/docs/apidocs/com/google/zxing/datamatrix/encoder/SymbolInfo.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>SymbolInfo (ZXing 3.4.0 API)</title>
+<title>SymbolInfo (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="SymbolInfo (ZXing 3.4.0 API)";
+            parent.document.title="SymbolInfo (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -49,7 +49,7 @@ var activeTableTab = "activeTableTab";
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../com/google/zxing/datamatrix/encoder/HighLevelEncoder.html" title="class in com.google.zxing.datamatrix.encoder"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../com/google/zxing/datamatrix/encoder/MinimalEncoder.html" title="class in com.google.zxing.datamatrix.encoder"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../com/google/zxing/datamatrix/encoder/SymbolShapeHint.html" title="enum in com.google.zxing.datamatrix.encoder"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
@@ -510,7 +510,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../com/google/zxing/datamatrix/encoder/HighLevelEncoder.html" title="class in com.google.zxing.datamatrix.encoder"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../com/google/zxing/datamatrix/encoder/MinimalEncoder.html" title="class in com.google.zxing.datamatrix.encoder"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../com/google/zxing/datamatrix/encoder/SymbolShapeHint.html" title="enum in com.google.zxing.datamatrix.encoder"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
@@ -551,6 +551,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/datamatrix/encoder/SymbolShapeHint.html b/docs/apidocs/com/google/zxing/datamatrix/encoder/SymbolShapeHint.html
index d827df2..b254354 100644
--- a/docs/apidocs/com/google/zxing/datamatrix/encoder/SymbolShapeHint.html
+++ b/docs/apidocs/com/google/zxing/datamatrix/encoder/SymbolShapeHint.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>SymbolShapeHint (ZXing 3.4.0 API)</title>
+<title>SymbolShapeHint (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="SymbolShapeHint (ZXing 3.4.0 API)";
+            parent.document.title="SymbolShapeHint (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -351,6 +351,6 @@ not permitted.)</div>
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/datamatrix/encoder/class-use/ErrorCorrection.html b/docs/apidocs/com/google/zxing/datamatrix/encoder/class-use/ErrorCorrection.html
index a0ae69e..ffc01a1 100644
--- a/docs/apidocs/com/google/zxing/datamatrix/encoder/class-use/ErrorCorrection.html
+++ b/docs/apidocs/com/google/zxing/datamatrix/encoder/class-use/ErrorCorrection.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.datamatrix.encoder.ErrorCorrection (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.datamatrix.encoder.ErrorCorrection (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.datamatrix.encoder.ErrorCorrection (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.datamatrix.encoder.ErrorCorrection (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/datamatrix/encoder/class-use/HighLevelEncoder.html b/docs/apidocs/com/google/zxing/datamatrix/encoder/class-use/HighLevelEncoder.html
index e0ef621..94ded51 100644
--- a/docs/apidocs/com/google/zxing/datamatrix/encoder/class-use/HighLevelEncoder.html
+++ b/docs/apidocs/com/google/zxing/datamatrix/encoder/class-use/HighLevelEncoder.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.datamatrix.encoder.HighLevelEncoder (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.datamatrix.encoder.HighLevelEncoder (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.datamatrix.encoder.HighLevelEncoder (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.datamatrix.encoder.HighLevelEncoder (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/datamatrix/encoder/class-use/DefaultPlacement.html b/docs/apidocs/com/google/zxing/datamatrix/encoder/class-use/MinimalEncoder.html
similarity index 80%
rename from docs/apidocs/com/google/zxing/datamatrix/encoder/class-use/DefaultPlacement.html
rename to docs/apidocs/com/google/zxing/datamatrix/encoder/class-use/MinimalEncoder.html
index be7198c..241c7f2 100644
--- a/docs/apidocs/com/google/zxing/datamatrix/encoder/class-use/DefaultPlacement.html
+++ b/docs/apidocs/com/google/zxing/datamatrix/encoder/class-use/MinimalEncoder.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.datamatrix.encoder.DefaultPlacement (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.datamatrix.encoder.MinimalEncoder (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.datamatrix.encoder.DefaultPlacement (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.datamatrix.encoder.MinimalEncoder (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -33,7 +33,7 @@
 <ul class="navList" title="Navigation">
 <li><a href="../../../../../../overview-summary.html">Overview</a></li>
 <li><a href="../package-summary.html">Package</a></li>
-<li><a href="../../../../../../com/google/zxing/datamatrix/encoder/DefaultPlacement.html" title="class in com.google.zxing.datamatrix.encoder">Class</a></li>
+<li><a href="../../../../../../com/google/zxing/datamatrix/encoder/MinimalEncoder.html" title="class in com.google.zxing.datamatrix.encoder">Class</a></li>
 <li class="navBarCell1Rev">Use</li>
 <li><a href="../package-tree.html">Tree</a></li>
 <li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
@@ -47,8 +47,8 @@
 <li>Next</li>
 </ul>
 <ul class="navList">
-<li><a href="../../../../../../index.html?com/google/zxing/datamatrix/encoder/class-use/DefaultPlacement.html" target="_top">Frames</a></li>
-<li><a href="DefaultPlacement.html" target="_top">No&nbsp;Frames</a></li>
+<li><a href="../../../../../../index.html?com/google/zxing/datamatrix/encoder/class-use/MinimalEncoder.html" target="_top">Frames</a></li>
+<li><a href="MinimalEncoder.html" target="_top">No&nbsp;Frames</a></li>
 </ul>
 <ul class="navList" id="allclasses_navbar_top">
 <li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
@@ -70,9 +70,9 @@
 </a></div>
 <!-- ========= END OF TOP NAVBAR ========= -->
 <div class="header">
-<h2 title="Uses of Class com.google.zxing.datamatrix.encoder.DefaultPlacement" class="title">Uses of Class<br>com.google.zxing.datamatrix.encoder.DefaultPlacement</h2>
+<h2 title="Uses of Class com.google.zxing.datamatrix.encoder.MinimalEncoder" class="title">Uses of Class<br>com.google.zxing.datamatrix.encoder.MinimalEncoder</h2>
 </div>
-<div class="classUseContainer">No usage of com.google.zxing.datamatrix.encoder.DefaultPlacement</div>
+<div class="classUseContainer">No usage of com.google.zxing.datamatrix.encoder.MinimalEncoder</div>
 <!-- ======= START OF BOTTOM NAVBAR ====== -->
 <div class="bottomNav"><a name="navbar.bottom">
 <!--   -->
@@ -84,7 +84,7 @@
 <ul class="navList" title="Navigation">
 <li><a href="../../../../../../overview-summary.html">Overview</a></li>
 <li><a href="../package-summary.html">Package</a></li>
-<li><a href="../../../../../../com/google/zxing/datamatrix/encoder/DefaultPlacement.html" title="class in com.google.zxing.datamatrix.encoder">Class</a></li>
+<li><a href="../../../../../../com/google/zxing/datamatrix/encoder/MinimalEncoder.html" title="class in com.google.zxing.datamatrix.encoder">Class</a></li>
 <li class="navBarCell1Rev">Use</li>
 <li><a href="../package-tree.html">Tree</a></li>
 <li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
@@ -98,8 +98,8 @@
 <li>Next</li>
 </ul>
 <ul class="navList">
-<li><a href="../../../../../../index.html?com/google/zxing/datamatrix/encoder/class-use/DefaultPlacement.html" target="_top">Frames</a></li>
-<li><a href="DefaultPlacement.html" target="_top">No&nbsp;Frames</a></li>
+<li><a href="../../../../../../index.html?com/google/zxing/datamatrix/encoder/class-use/MinimalEncoder.html" target="_top">Frames</a></li>
+<li><a href="MinimalEncoder.html" target="_top">No&nbsp;Frames</a></li>
 </ul>
 <ul class="navList" id="allclasses_navbar_bottom">
 <li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/datamatrix/encoder/class-use/SymbolInfo.html b/docs/apidocs/com/google/zxing/datamatrix/encoder/class-use/SymbolInfo.html
index f63e30e..45e9e14 100644
--- a/docs/apidocs/com/google/zxing/datamatrix/encoder/class-use/SymbolInfo.html
+++ b/docs/apidocs/com/google/zxing/datamatrix/encoder/class-use/SymbolInfo.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.datamatrix.encoder.SymbolInfo (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.datamatrix.encoder.SymbolInfo (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.datamatrix.encoder.SymbolInfo (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.datamatrix.encoder.SymbolInfo (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -201,6 +201,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/datamatrix/encoder/class-use/SymbolShapeHint.html b/docs/apidocs/com/google/zxing/datamatrix/encoder/class-use/SymbolShapeHint.html
index 4302d7f..a87f478 100644
--- a/docs/apidocs/com/google/zxing/datamatrix/encoder/class-use/SymbolShapeHint.html
+++ b/docs/apidocs/com/google/zxing/datamatrix/encoder/class-use/SymbolShapeHint.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.datamatrix.encoder.SymbolShapeHint (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.datamatrix.encoder.SymbolShapeHint (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.datamatrix.encoder.SymbolShapeHint (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.datamatrix.encoder.SymbolShapeHint (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -126,6 +126,15 @@ the order they are declared.</div>
 <tbody>
 <tr class="altColor">
 <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><span class="typeNameLabel">MinimalEncoder.</span><code><span class="memberNameLink"><a href="../../../../../../com/google/zxing/datamatrix/encoder/MinimalEncoder.html#encodeHighLevel-java.lang.String-java.nio.charset.Charset-int-com.google.zxing.datamatrix.encoder.SymbolShapeHint-">encodeHighLevel</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg,
+               <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</a>&nbsp;priorityCharset,
+               int&nbsp;fnc1,
+               <a href="../../../../../../com/google/zxing/datamatrix/encoder/SymbolShapeHint.html" title="enum in com.google.zxing.datamatrix.encoder">SymbolShapeHint</a>&nbsp;shape)</code>
+<div class="block">Performs message encoding of a DataMatrix message</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><span class="typeNameLabel">HighLevelEncoder.</span><code><span class="memberNameLink"><a href="../../../../../../com/google/zxing/datamatrix/encoder/HighLevelEncoder.html#encodeHighLevel-java.lang.String-com.google.zxing.datamatrix.encoder.SymbolShapeHint-com.google.zxing.Dimension-com.google.zxing.Dimension-">encodeHighLevel</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg,
                <a href="../../../../../../com/google/zxing/datamatrix/encoder/SymbolShapeHint.html" title="enum in com.google.zxing.datamatrix.encoder">SymbolShapeHint</a>&nbsp;shape,
                <a href="../../../../../../com/google/zxing/Dimension.html" title="class in com.google.zxing">Dimension</a>&nbsp;minSize,
@@ -134,6 +143,17 @@ the order they are declared.</div>
  of ISO/IEC 16022:2000(E).</div>
 </td>
 </tr>
+<tr class="altColor">
+<td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><span class="typeNameLabel">HighLevelEncoder.</span><code><span class="memberNameLink"><a href="../../../../../../com/google/zxing/datamatrix/encoder/HighLevelEncoder.html#encodeHighLevel-java.lang.String-com.google.zxing.datamatrix.encoder.SymbolShapeHint-com.google.zxing.Dimension-com.google.zxing.Dimension-boolean-">encodeHighLevel</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg,
+               <a href="../../../../../../com/google/zxing/datamatrix/encoder/SymbolShapeHint.html" title="enum in com.google.zxing.datamatrix.encoder">SymbolShapeHint</a>&nbsp;shape,
+               <a href="../../../../../../com/google/zxing/Dimension.html" title="class in com.google.zxing">Dimension</a>&nbsp;minSize,
+               <a href="../../../../../../com/google/zxing/Dimension.html" title="class in com.google.zxing">Dimension</a>&nbsp;maxSize,
+               boolean&nbsp;forceC40)</code>
+<div class="block">Performs message encoding of a DataMatrix message using the algorithm described in annex P
+ of ISO/IEC 16022:2000(E).</div>
+</td>
+</tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../../com/google/zxing/datamatrix/encoder/SymbolInfo.html" title="class in com.google.zxing.datamatrix.encoder">SymbolInfo</a></code></td>
 <td class="colLast"><span class="typeNameLabel">SymbolInfo.</span><code><span class="memberNameLink"><a href="../../../../../../com/google/zxing/datamatrix/encoder/SymbolInfo.html#lookup-int-com.google.zxing.datamatrix.encoder.SymbolShapeHint-">lookup</a></span>(int&nbsp;dataCodewords,
@@ -201,6 +221,6 @@ the order they are declared.</div>
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/datamatrix/encoder/package-frame.html b/docs/apidocs/com/google/zxing/datamatrix/encoder/package-frame.html
index 2878a4b..3a7a07a 100644
--- a/docs/apidocs/com/google/zxing/datamatrix/encoder/package-frame.html
+++ b/docs/apidocs/com/google/zxing/datamatrix/encoder/package-frame.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.datamatrix.encoder (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.datamatrix.encoder (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -16,6 +16,7 @@
 <li><a href="DefaultPlacement.html" title="class in com.google.zxing.datamatrix.encoder" target="classFrame">DefaultPlacement</a></li>
 <li><a href="ErrorCorrection.html" title="class in com.google.zxing.datamatrix.encoder" target="classFrame">ErrorCorrection</a></li>
 <li><a href="HighLevelEncoder.html" title="class in com.google.zxing.datamatrix.encoder" target="classFrame">HighLevelEncoder</a></li>
+<li><a href="MinimalEncoder.html" title="class in com.google.zxing.datamatrix.encoder" target="classFrame">MinimalEncoder</a></li>
 <li><a href="SymbolInfo.html" title="class in com.google.zxing.datamatrix.encoder" target="classFrame">SymbolInfo</a></li>
 </ul>
 <h2 title="Enums">Enums</h2>
diff --git a/docs/apidocs/com/google/zxing/datamatrix/encoder/package-summary.html b/docs/apidocs/com/google/zxing/datamatrix/encoder/package-summary.html
index f7a3033..a9b7d86 100644
--- a/docs/apidocs/com/google/zxing/datamatrix/encoder/package-summary.html
+++ b/docs/apidocs/com/google/zxing/datamatrix/encoder/package-summary.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.datamatrix.encoder (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.datamatrix.encoder (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.datamatrix.encoder (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.datamatrix.encoder (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -102,6 +102,17 @@
 </td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><a href="../../../../../com/google/zxing/datamatrix/encoder/MinimalEncoder.html" title="class in com.google.zxing.datamatrix.encoder">MinimalEncoder</a></td>
+<td class="colLast">
+<div class="block">Encoder that encodes minimally
+
+ Algorithm:
+
+ Uses Dijkstra to produce mathematically minimal encodings that are in some cases smaller than the results produced
+ by the algorithm described in annex S in the specification ISO/IEC 16022:200(E).</div>
+</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../com/google/zxing/datamatrix/encoder/SymbolInfo.html" title="class in com.google.zxing.datamatrix.encoder">SymbolInfo</a></td>
 <td class="colLast">
 <div class="block">Symbol info table for DataMatrix.</div>
@@ -176,6 +187,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/datamatrix/encoder/package-tree.html b/docs/apidocs/com/google/zxing/datamatrix/encoder/package-tree.html
index a258069..b83ffb6 100644
--- a/docs/apidocs/com/google/zxing/datamatrix/encoder/package-tree.html
+++ b/docs/apidocs/com/google/zxing/datamatrix/encoder/package-tree.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.datamatrix.encoder Class Hierarchy (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.datamatrix.encoder Class Hierarchy (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.datamatrix.encoder Class Hierarchy (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.datamatrix.encoder Class Hierarchy (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -84,6 +84,7 @@
 <li type="circle">com.google.zxing.datamatrix.encoder.<a href="../../../../../com/google/zxing/datamatrix/encoder/DefaultPlacement.html" title="class in com.google.zxing.datamatrix.encoder"><span class="typeNameLink">DefaultPlacement</span></a></li>
 <li type="circle">com.google.zxing.datamatrix.encoder.<a href="../../../../../com/google/zxing/datamatrix/encoder/ErrorCorrection.html" title="class in com.google.zxing.datamatrix.encoder"><span class="typeNameLink">ErrorCorrection</span></a></li>
 <li type="circle">com.google.zxing.datamatrix.encoder.<a href="../../../../../com/google/zxing/datamatrix/encoder/HighLevelEncoder.html" title="class in com.google.zxing.datamatrix.encoder"><span class="typeNameLink">HighLevelEncoder</span></a></li>
+<li type="circle">com.google.zxing.datamatrix.encoder.<a href="../../../../../com/google/zxing/datamatrix/encoder/MinimalEncoder.html" title="class in com.google.zxing.datamatrix.encoder"><span class="typeNameLink">MinimalEncoder</span></a></li>
 <li type="circle">com.google.zxing.datamatrix.encoder.<a href="../../../../../com/google/zxing/datamatrix/encoder/SymbolInfo.html" title="class in com.google.zxing.datamatrix.encoder"><span class="typeNameLink">SymbolInfo</span></a></li>
 </ul>
 </li>
@@ -148,6 +149,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/datamatrix/encoder/package-use.html b/docs/apidocs/com/google/zxing/datamatrix/encoder/package-use.html
index 3309790..c737c1c 100644
--- a/docs/apidocs/com/google/zxing/datamatrix/encoder/package-use.html
+++ b/docs/apidocs/com/google/zxing/datamatrix/encoder/package-use.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Package com.google.zxing.datamatrix.encoder (ZXing 3.4.0 API)</title>
+<title>Uses of Package com.google.zxing.datamatrix.encoder (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Package com.google.zxing.datamatrix.encoder (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Package com.google.zxing.datamatrix.encoder (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -160,6 +160,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/datamatrix/package-frame.html b/docs/apidocs/com/google/zxing/datamatrix/package-frame.html
index 4a9fdc9..6ef8a26 100644
--- a/docs/apidocs/com/google/zxing/datamatrix/package-frame.html
+++ b/docs/apidocs/com/google/zxing/datamatrix/package-frame.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.datamatrix (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.datamatrix (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
diff --git a/docs/apidocs/com/google/zxing/datamatrix/package-summary.html b/docs/apidocs/com/google/zxing/datamatrix/package-summary.html
index 3fc0ee2..4c13fce 100644
--- a/docs/apidocs/com/google/zxing/datamatrix/package-summary.html
+++ b/docs/apidocs/com/google/zxing/datamatrix/package-summary.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.datamatrix (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.datamatrix (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.datamatrix (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.datamatrix (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -146,6 +146,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/datamatrix/package-tree.html b/docs/apidocs/com/google/zxing/datamatrix/package-tree.html
index 936b12d..a3c64dd 100644
--- a/docs/apidocs/com/google/zxing/datamatrix/package-tree.html
+++ b/docs/apidocs/com/google/zxing/datamatrix/package-tree.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.datamatrix Class Hierarchy (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.datamatrix Class Hierarchy (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.datamatrix Class Hierarchy (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.datamatrix Class Hierarchy (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -134,6 +134,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/datamatrix/package-use.html b/docs/apidocs/com/google/zxing/datamatrix/package-use.html
index 5960519..98a891c 100644
--- a/docs/apidocs/com/google/zxing/datamatrix/package-use.html
+++ b/docs/apidocs/com/google/zxing/datamatrix/package-use.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Package com.google.zxing.datamatrix (ZXing 3.4.0 API)</title>
+<title>Uses of Package com.google.zxing.datamatrix (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Package com.google.zxing.datamatrix (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Package com.google.zxing.datamatrix (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/maxicode/MaxiCodeReader.html b/docs/apidocs/com/google/zxing/maxicode/MaxiCodeReader.html
index 1731649..63118a2 100644
--- a/docs/apidocs/com/google/zxing/maxicode/MaxiCodeReader.html
+++ b/docs/apidocs/com/google/zxing/maxicode/MaxiCodeReader.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>MaxiCodeReader (ZXing 3.4.0 API)</title>
+<title>MaxiCodeReader (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="MaxiCodeReader (ZXing 3.4.0 API)";
+            parent.document.title="MaxiCodeReader (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -353,6 +353,6 @@ implements <a href="../../../../com/google/zxing/Reader.html" title="interface i
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/maxicode/class-use/MaxiCodeReader.html b/docs/apidocs/com/google/zxing/maxicode/class-use/MaxiCodeReader.html
index 7abf7b8..3ee8ad3 100644
--- a/docs/apidocs/com/google/zxing/maxicode/class-use/MaxiCodeReader.html
+++ b/docs/apidocs/com/google/zxing/maxicode/class-use/MaxiCodeReader.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.maxicode.MaxiCodeReader (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.maxicode.MaxiCodeReader (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.maxicode.MaxiCodeReader (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.maxicode.MaxiCodeReader (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/maxicode/decoder/Decoder.html b/docs/apidocs/com/google/zxing/maxicode/decoder/Decoder.html
index ca2889b..27a0adf 100644
--- a/docs/apidocs/com/google/zxing/maxicode/decoder/Decoder.html
+++ b/docs/apidocs/com/google/zxing/maxicode/decoder/Decoder.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Decoder (ZXing 3.4.0 API)</title>
+<title>Decoder (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Decoder (ZXing 3.4.0 API)";
+            parent.document.title="Decoder (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -302,6 +302,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/maxicode/decoder/class-use/Decoder.html b/docs/apidocs/com/google/zxing/maxicode/decoder/class-use/Decoder.html
index 375a442..4efd92b 100644
--- a/docs/apidocs/com/google/zxing/maxicode/decoder/class-use/Decoder.html
+++ b/docs/apidocs/com/google/zxing/maxicode/decoder/class-use/Decoder.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.maxicode.decoder.Decoder (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.maxicode.decoder.Decoder (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.maxicode.decoder.Decoder (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.maxicode.decoder.Decoder (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/maxicode/decoder/package-frame.html b/docs/apidocs/com/google/zxing/maxicode/decoder/package-frame.html
index 0e43b97..eb6d0fa 100644
--- a/docs/apidocs/com/google/zxing/maxicode/decoder/package-frame.html
+++ b/docs/apidocs/com/google/zxing/maxicode/decoder/package-frame.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.maxicode.decoder (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.maxicode.decoder (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
diff --git a/docs/apidocs/com/google/zxing/maxicode/decoder/package-summary.html b/docs/apidocs/com/google/zxing/maxicode/decoder/package-summary.html
index 67d81cd..ff0d535 100644
--- a/docs/apidocs/com/google/zxing/maxicode/decoder/package-summary.html
+++ b/docs/apidocs/com/google/zxing/maxicode/decoder/package-summary.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.maxicode.decoder (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.maxicode.decoder (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.maxicode.decoder (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.maxicode.decoder (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -141,6 +141,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/maxicode/decoder/package-tree.html b/docs/apidocs/com/google/zxing/maxicode/decoder/package-tree.html
index 4e51a38..7b79860 100644
--- a/docs/apidocs/com/google/zxing/maxicode/decoder/package-tree.html
+++ b/docs/apidocs/com/google/zxing/maxicode/decoder/package-tree.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.maxicode.decoder Class Hierarchy (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.maxicode.decoder Class Hierarchy (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.maxicode.decoder Class Hierarchy (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.maxicode.decoder Class Hierarchy (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -133,6 +133,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/maxicode/decoder/package-use.html b/docs/apidocs/com/google/zxing/maxicode/decoder/package-use.html
index 58efc6d..17663fa 100644
--- a/docs/apidocs/com/google/zxing/maxicode/decoder/package-use.html
+++ b/docs/apidocs/com/google/zxing/maxicode/decoder/package-use.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Package com.google.zxing.maxicode.decoder (ZXing 3.4.0 API)</title>
+<title>Uses of Package com.google.zxing.maxicode.decoder (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Package com.google.zxing.maxicode.decoder (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Package com.google.zxing.maxicode.decoder (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/maxicode/package-frame.html b/docs/apidocs/com/google/zxing/maxicode/package-frame.html
index 68a3b3e..05d37db 100644
--- a/docs/apidocs/com/google/zxing/maxicode/package-frame.html
+++ b/docs/apidocs/com/google/zxing/maxicode/package-frame.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.maxicode (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.maxicode (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
diff --git a/docs/apidocs/com/google/zxing/maxicode/package-summary.html b/docs/apidocs/com/google/zxing/maxicode/package-summary.html
index aa2a712..58ccddd 100644
--- a/docs/apidocs/com/google/zxing/maxicode/package-summary.html
+++ b/docs/apidocs/com/google/zxing/maxicode/package-summary.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.maxicode (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.maxicode (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.maxicode (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.maxicode (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -140,6 +140,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/maxicode/package-tree.html b/docs/apidocs/com/google/zxing/maxicode/package-tree.html
index 561dd4d..f69de82 100644
--- a/docs/apidocs/com/google/zxing/maxicode/package-tree.html
+++ b/docs/apidocs/com/google/zxing/maxicode/package-tree.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.maxicode Class Hierarchy (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.maxicode Class Hierarchy (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.maxicode Class Hierarchy (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.maxicode Class Hierarchy (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -133,6 +133,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/maxicode/package-use.html b/docs/apidocs/com/google/zxing/maxicode/package-use.html
index 2e73471..a9c14a8 100644
--- a/docs/apidocs/com/google/zxing/maxicode/package-use.html
+++ b/docs/apidocs/com/google/zxing/maxicode/package-use.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Package com.google.zxing.maxicode (ZXing 3.4.0 API)</title>
+<title>Uses of Package com.google.zxing.maxicode (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Package com.google.zxing.maxicode (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Package com.google.zxing.maxicode (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/multi/ByQuadrantReader.html b/docs/apidocs/com/google/zxing/multi/ByQuadrantReader.html
index 647e9ba..43f8c12 100644
--- a/docs/apidocs/com/google/zxing/multi/ByQuadrantReader.html
+++ b/docs/apidocs/com/google/zxing/multi/ByQuadrantReader.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>ByQuadrantReader (ZXing 3.4.0 API)</title>
+<title>ByQuadrantReader (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="ByQuadrantReader (ZXing 3.4.0 API)";
+            parent.document.title="ByQuadrantReader (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -362,6 +362,6 @@ implements <a href="../../../../com/google/zxing/Reader.html" title="interface i
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/multi/GenericMultipleBarcodeReader.html b/docs/apidocs/com/google/zxing/multi/GenericMultipleBarcodeReader.html
index 3221f66..376a73f 100644
--- a/docs/apidocs/com/google/zxing/multi/GenericMultipleBarcodeReader.html
+++ b/docs/apidocs/com/google/zxing/multi/GenericMultipleBarcodeReader.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GenericMultipleBarcodeReader (ZXing 3.4.0 API)</title>
+<title>GenericMultipleBarcodeReader (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="GenericMultipleBarcodeReader (ZXing 3.4.0 API)";
+            parent.document.title="GenericMultipleBarcodeReader (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -315,6 +315,6 @@ implements <a href="../../../../com/google/zxing/multi/MultipleBarcodeReader.htm
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/multi/MultipleBarcodeReader.html b/docs/apidocs/com/google/zxing/multi/MultipleBarcodeReader.html
index 1d43b88..2d5df45 100644
--- a/docs/apidocs/com/google/zxing/multi/MultipleBarcodeReader.html
+++ b/docs/apidocs/com/google/zxing/multi/MultipleBarcodeReader.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>MultipleBarcodeReader (ZXing 3.4.0 API)</title>
+<title>MultipleBarcodeReader (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="MultipleBarcodeReader (ZXing 3.4.0 API)";
+            parent.document.title="MultipleBarcodeReader (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -253,6 +253,6 @@ var activeTableTab = "activeTableTab";
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/multi/class-use/ByQuadrantReader.html b/docs/apidocs/com/google/zxing/multi/class-use/ByQuadrantReader.html
index 0b275cf..d634a43 100644
--- a/docs/apidocs/com/google/zxing/multi/class-use/ByQuadrantReader.html
+++ b/docs/apidocs/com/google/zxing/multi/class-use/ByQuadrantReader.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.multi.ByQuadrantReader (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.multi.ByQuadrantReader (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.multi.ByQuadrantReader (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.multi.ByQuadrantReader (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/multi/class-use/GenericMultipleBarcodeReader.html b/docs/apidocs/com/google/zxing/multi/class-use/GenericMultipleBarcodeReader.html
index c926dad..f1ed118 100644
--- a/docs/apidocs/com/google/zxing/multi/class-use/GenericMultipleBarcodeReader.html
+++ b/docs/apidocs/com/google/zxing/multi/class-use/GenericMultipleBarcodeReader.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.multi.GenericMultipleBarcodeReader (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.multi.GenericMultipleBarcodeReader (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.multi.GenericMultipleBarcodeReader (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.multi.GenericMultipleBarcodeReader (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/multi/class-use/MultipleBarcodeReader.html b/docs/apidocs/com/google/zxing/multi/class-use/MultipleBarcodeReader.html
index 5b1b57a..741f3db 100644
--- a/docs/apidocs/com/google/zxing/multi/class-use/MultipleBarcodeReader.html
+++ b/docs/apidocs/com/google/zxing/multi/class-use/MultipleBarcodeReader.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Interface com.google.zxing.multi.MultipleBarcodeReader (ZXing 3.4.0 API)</title>
+<title>Uses of Interface com.google.zxing.multi.MultipleBarcodeReader (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Interface com.google.zxing.multi.MultipleBarcodeReader (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Interface com.google.zxing.multi.MultipleBarcodeReader (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -210,6 +210,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/multi/package-frame.html b/docs/apidocs/com/google/zxing/multi/package-frame.html
index c3e69b8..a059f5e 100644
--- a/docs/apidocs/com/google/zxing/multi/package-frame.html
+++ b/docs/apidocs/com/google/zxing/multi/package-frame.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.multi (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.multi (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
diff --git a/docs/apidocs/com/google/zxing/multi/package-summary.html b/docs/apidocs/com/google/zxing/multi/package-summary.html
index ae6a461..ffd7f21 100644
--- a/docs/apidocs/com/google/zxing/multi/package-summary.html
+++ b/docs/apidocs/com/google/zxing/multi/package-summary.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.multi (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.multi (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.multi (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.multi (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -164,6 +164,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/multi/package-tree.html b/docs/apidocs/com/google/zxing/multi/package-tree.html
index a155052..ccadc3a 100644
--- a/docs/apidocs/com/google/zxing/multi/package-tree.html
+++ b/docs/apidocs/com/google/zxing/multi/package-tree.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.multi Class Hierarchy (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.multi Class Hierarchy (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.multi Class Hierarchy (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.multi Class Hierarchy (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -138,6 +138,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/multi/package-use.html b/docs/apidocs/com/google/zxing/multi/package-use.html
index 0a5858b..2e07bfb 100644
--- a/docs/apidocs/com/google/zxing/multi/package-use.html
+++ b/docs/apidocs/com/google/zxing/multi/package-use.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Package com.google.zxing.multi (ZXing 3.4.0 API)</title>
+<title>Uses of Package com.google.zxing.multi (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Package com.google.zxing.multi (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Package com.google.zxing.multi (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -197,6 +197,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/multi/qrcode/QRCodeMultiReader.html b/docs/apidocs/com/google/zxing/multi/qrcode/QRCodeMultiReader.html
index 8982bfe..443d913 100644
--- a/docs/apidocs/com/google/zxing/multi/qrcode/QRCodeMultiReader.html
+++ b/docs/apidocs/com/google/zxing/multi/qrcode/QRCodeMultiReader.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>QRCodeMultiReader (ZXing 3.4.0 API)</title>
+<title>QRCodeMultiReader (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="QRCodeMultiReader (ZXing 3.4.0 API)";
+            parent.document.title="QRCodeMultiReader (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -318,6 +318,6 @@ implements <a href="../../../../../com/google/zxing/multi/MultipleBarcodeReader.
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/multi/qrcode/class-use/QRCodeMultiReader.html b/docs/apidocs/com/google/zxing/multi/qrcode/class-use/QRCodeMultiReader.html
index 0a278ab..de7e308 100644
--- a/docs/apidocs/com/google/zxing/multi/qrcode/class-use/QRCodeMultiReader.html
+++ b/docs/apidocs/com/google/zxing/multi/qrcode/class-use/QRCodeMultiReader.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.multi.qrcode.QRCodeMultiReader (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.multi.qrcode.QRCodeMultiReader (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.multi.qrcode.QRCodeMultiReader (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.multi.qrcode.QRCodeMultiReader (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/multi/qrcode/detector/MultiDetector.html b/docs/apidocs/com/google/zxing/multi/qrcode/detector/MultiDetector.html
index 8e0a081..261125c 100644
--- a/docs/apidocs/com/google/zxing/multi/qrcode/detector/MultiDetector.html
+++ b/docs/apidocs/com/google/zxing/multi/qrcode/detector/MultiDetector.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>MultiDetector (ZXing 3.4.0 API)</title>
+<title>MultiDetector (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="MultiDetector (ZXing 3.4.0 API)";
+            parent.document.title="MultiDetector (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -50,7 +50,7 @@ var activeTableTab = "activeTableTab";
 <div class="subNav">
 <ul class="navList">
 <li>Prev&nbsp;Class</li>
-<li>Next&nbsp;Class</li>
+<li><a href="../../../../../../com/google/zxing/multi/qrcode/detector/MultiFinderPatternFinder.html" title="class in com.google.zxing.multi.qrcode.detector"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../../index.html?com/google/zxing/multi/qrcode/detector/MultiDetector.html" target="_top">Frames</a></li>
@@ -250,7 +250,7 @@ extends <a href="../../../../../../com/google/zxing/qrcode/detector/Detector.htm
 <div class="subNav">
 <ul class="navList">
 <li>Prev&nbsp;Class</li>
-<li>Next&nbsp;Class</li>
+<li><a href="../../../../../../com/google/zxing/multi/qrcode/detector/MultiFinderPatternFinder.html" title="class in com.google.zxing.multi.qrcode.detector"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../../index.html?com/google/zxing/multi/qrcode/detector/MultiDetector.html" target="_top">Frames</a></li>
@@ -290,6 +290,6 @@ extends <a href="../../../../../../com/google/zxing/qrcode/detector/Detector.htm
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/multi/qrcode/detector/MultiFinderPatternFinder.html b/docs/apidocs/com/google/zxing/multi/qrcode/detector/MultiFinderPatternFinder.html
new file mode 100644
index 0000000..94c717e
--- /dev/null
+++ b/docs/apidocs/com/google/zxing/multi/qrcode/detector/MultiFinderPatternFinder.html
@@ -0,0 +1,319 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>MultiFinderPatternFinder (ZXing 3.5.1 API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="MultiFinderPatternFinder (ZXing 3.5.1 API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+var methods = {"i0":10};
+var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/MultiFinderPatternFinder.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../com/google/zxing/multi/qrcode/detector/MultiDetector.html" title="class in com.google.zxing.multi.qrcode.detector"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li>Next&nbsp;Class</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?com/google/zxing/multi/qrcode/detector/MultiFinderPatternFinder.html" target="_top">Frames</a></li>
+<li><a href="MultiFinderPatternFinder.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#fields.inherited.from.class.com.google.zxing.qrcode.detector.FinderPatternFinder">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">com.google.zxing.multi.qrcode.detector</div>
+<h2 title="Class MultiFinderPatternFinder" class="title">Class MultiFinderPatternFinder</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li><a href="../../../../../../com/google/zxing/qrcode/detector/FinderPatternFinder.html" title="class in com.google.zxing.qrcode.detector">com.google.zxing.qrcode.detector.FinderPatternFinder</a></li>
+<li>
+<ul class="inheritance">
+<li>com.google.zxing.multi.qrcode.detector.MultiFinderPatternFinder</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre>public final class <span class="typeNameLabel">MultiFinderPatternFinder</span>
+extends <a href="../../../../../../com/google/zxing/qrcode/detector/FinderPatternFinder.html" title="class in com.google.zxing.qrcode.detector">FinderPatternFinder</a></pre>
+<div class="block"><p>This class attempts to find finder patterns in a QR Code. Finder patterns are the square
+ markers at three corners of a QR Code.</p>
+
+ <p>This class is thread-safe but not reentrant. Each thread must allocate its own object.
+
+ <p>In contrast to <a href="../../../../../../com/google/zxing/qrcode/detector/FinderPatternFinder.html" title="class in com.google.zxing.qrcode.detector"><code>FinderPatternFinder</code></a>, this class will return an array of all possible
+ QR code locations in the image.</p>
+
+ <p>Use the TRY_HARDER hint to ask for a more thorough detection.</p></div>
+<dl>
+<dt><span class="simpleTagLabel">Author:</span></dt>
+<dd>Sean Owen, Hannes Erven</dd>
+</dl>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.summary">
+<!--   -->
+</a>
+<h3>Field Summary</h3>
+<ul class="blockList">
+<li class="blockList"><a name="fields.inherited.from.class.com.google.zxing.qrcode.detector.FinderPatternFinder">
+<!--   -->
+</a>
+<h3>Fields inherited from class&nbsp;com.google.zxing.qrcode.detector.<a href="../../../../../../com/google/zxing/qrcode/detector/FinderPatternFinder.html" title="class in com.google.zxing.qrcode.detector">FinderPatternFinder</a></h3>
+<code><a href="../../../../../../com/google/zxing/qrcode/detector/FinderPatternFinder.html#MAX_MODULES">MAX_MODULES</a>, <a href="../../../../../../com/google/zxing/qrcode/detector/FinderPatternFinder.html#MIN_SKIP">MIN_SKIP</a></code></li>
+</ul>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../com/google/zxing/multi/qrcode/detector/MultiFinderPatternFinder.html#MultiFinderPatternFinder-com.google.zxing.common.BitMatrix-com.google.zxing.ResultPointCallback-">MultiFinderPatternFinder</a></span>(<a href="../../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a>&nbsp;image,
+                        <a href="../../../../../../com/google/zxing/ResultPointCallback.html" title="interface in com.google.zxing">ResultPointCallback</a>&nbsp;resultPointCallback)</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code><a href="../../../../../../com/google/zxing/qrcode/detector/FinderPatternInfo.html" title="class in com.google.zxing.qrcode.detector">FinderPatternInfo</a>[]</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../com/google/zxing/multi/qrcode/detector/MultiFinderPatternFinder.html#findMulti-java.util.Map-">findMulti</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.com.google.zxing.qrcode.detector.FinderPatternFinder">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;com.google.zxing.qrcode.detector.<a href="../../../../../../com/google/zxing/qrcode/detector/FinderPatternFinder.html" title="class in com.google.zxing.qrcode.detector">FinderPatternFinder</a></h3>
+<code><a href="../../../../../../com/google/zxing/qrcode/detector/FinderPatternFinder.html#clearCounts-int:A-">clearCounts</a>, <a href="../../../../../../com/google/zxing/qrcode/detector/FinderPatternFinder.html#doClearCounts-int:A-">doClearCounts</a>, <a href="../../../../../../com/google/zxing/qrcode/detector/FinderPatternFinder.html#doShiftCounts2-int:A-">doShiftCounts2</a>, <a href="../../../../../../com/google/zxing/qrcode/detector/FinderPatternFinder.html#foundPatternCross-int:A-">foundPatternCross</a>, <a href="../../../../../../com/google/zxing/qrcode/detector/FinderPatternFinder.html#foundPatternDiagonal-int:A-">foundPatternDiagonal</a>, <a href="../../../../../../com/google/zxing/qrcode/detector/FinderPatternFinder.html#getImage--">getImage</a>, <a href="../../../../../../com/google/zxing/qrcode/detector/FinderPatternFinder.html#getPossibleCenters--">getPossibleCenters</a>, <a href="../../../../../../com/google/zxing/qrcode/detector/FinderPatternFinder.html#handlePossibleCenter-int:A-int-int-">handlePossibleCenter</a>, <a href="../../../../../../com/google/zxing/qrcode/detector/FinderPatternFinder.html#handlePossibleCenter-int:A-int-int-boolean-">handlePossibleCenter</a>, <a href="../../../../../../com/google/zxing/qrcode/detector/FinderPatternFinder.html#shiftCounts2-int:A-">shiftCounts2</a></code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="MultiFinderPatternFinder-com.google.zxing.common.BitMatrix-com.google.zxing.ResultPointCallback-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>MultiFinderPatternFinder</h4>
+<pre>public&nbsp;MultiFinderPatternFinder(<a href="../../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a>&nbsp;image,
+                                <a href="../../../../../../com/google/zxing/ResultPointCallback.html" title="interface in com.google.zxing">ResultPointCallback</a>&nbsp;resultPointCallback)</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="findMulti-java.util.Map-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>findMulti</h4>
+<pre>public&nbsp;<a href="../../../../../../com/google/zxing/qrcode/detector/FinderPatternInfo.html" title="class in com.google.zxing.qrcode.detector">FinderPatternInfo</a>[]&nbsp;findMulti(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)
+                              throws <a href="../../../../../../com/google/zxing/NotFoundException.html" title="class in com.google.zxing">NotFoundException</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="../../../../../../com/google/zxing/NotFoundException.html" title="class in com.google.zxing">NotFoundException</a></code></dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/MultiFinderPatternFinder.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../com/google/zxing/multi/qrcode/detector/MultiDetector.html" title="class in com.google.zxing.multi.qrcode.detector"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li>Next&nbsp;Class</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?com/google/zxing/multi/qrcode/detector/MultiFinderPatternFinder.html" target="_top">Frames</a></li>
+<li><a href="MultiFinderPatternFinder.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#fields.inherited.from.class.com.google.zxing.qrcode.detector.FinderPatternFinder">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/com/google/zxing/multi/qrcode/detector/class-use/MultiDetector.html b/docs/apidocs/com/google/zxing/multi/qrcode/detector/class-use/MultiFinderPatternFinder.html
similarity index 81%
rename from docs/apidocs/com/google/zxing/multi/qrcode/detector/class-use/MultiDetector.html
rename to docs/apidocs/com/google/zxing/multi/qrcode/detector/class-use/MultiFinderPatternFinder.html
index 366bd2d..29eeb80 100644
--- a/docs/apidocs/com/google/zxing/multi/qrcode/detector/class-use/MultiDetector.html
+++ b/docs/apidocs/com/google/zxing/multi/qrcode/detector/class-use/MultiFinderPatternFinder.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.multi.qrcode.detector.MultiDetector (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.multi.qrcode.detector.MultiFinderPatternFinder (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.multi.qrcode.detector.MultiDetector (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.multi.qrcode.detector.MultiFinderPatternFinder (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -33,7 +33,7 @@
 <ul class="navList" title="Navigation">
 <li><a href="../../../../../../../overview-summary.html">Overview</a></li>
 <li><a href="../package-summary.html">Package</a></li>
-<li><a href="../../../../../../../com/google/zxing/multi/qrcode/detector/MultiDetector.html" title="class in com.google.zxing.multi.qrcode.detector">Class</a></li>
+<li><a href="../../../../../../../com/google/zxing/multi/qrcode/detector/MultiFinderPatternFinder.html" title="class in com.google.zxing.multi.qrcode.detector">Class</a></li>
 <li class="navBarCell1Rev">Use</li>
 <li><a href="../package-tree.html">Tree</a></li>
 <li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
@@ -47,8 +47,8 @@
 <li>Next</li>
 </ul>
 <ul class="navList">
-<li><a href="../../../../../../../index.html?com/google/zxing/multi/qrcode/detector/class-use/MultiDetector.html" target="_top">Frames</a></li>
-<li><a href="MultiDetector.html" target="_top">No&nbsp;Frames</a></li>
+<li><a href="../../../../../../../index.html?com/google/zxing/multi/qrcode/detector/class-use/MultiFinderPatternFinder.html" target="_top">Frames</a></li>
+<li><a href="MultiFinderPatternFinder.html" target="_top">No&nbsp;Frames</a></li>
 </ul>
 <ul class="navList" id="allclasses_navbar_top">
 <li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
@@ -70,9 +70,9 @@
 </a></div>
 <!-- ========= END OF TOP NAVBAR ========= -->
 <div class="header">
-<h2 title="Uses of Class com.google.zxing.multi.qrcode.detector.MultiDetector" class="title">Uses of Class<br>com.google.zxing.multi.qrcode.detector.MultiDetector</h2>
+<h2 title="Uses of Class com.google.zxing.multi.qrcode.detector.MultiFinderPatternFinder" class="title">Uses of Class<br>com.google.zxing.multi.qrcode.detector.MultiFinderPatternFinder</h2>
 </div>
-<div class="classUseContainer">No usage of com.google.zxing.multi.qrcode.detector.MultiDetector</div>
+<div class="classUseContainer">No usage of com.google.zxing.multi.qrcode.detector.MultiFinderPatternFinder</div>
 <!-- ======= START OF BOTTOM NAVBAR ====== -->
 <div class="bottomNav"><a name="navbar.bottom">
 <!--   -->
@@ -84,7 +84,7 @@
 <ul class="navList" title="Navigation">
 <li><a href="../../../../../../../overview-summary.html">Overview</a></li>
 <li><a href="../package-summary.html">Package</a></li>
-<li><a href="../../../../../../../com/google/zxing/multi/qrcode/detector/MultiDetector.html" title="class in com.google.zxing.multi.qrcode.detector">Class</a></li>
+<li><a href="../../../../../../../com/google/zxing/multi/qrcode/detector/MultiFinderPatternFinder.html" title="class in com.google.zxing.multi.qrcode.detector">Class</a></li>
 <li class="navBarCell1Rev">Use</li>
 <li><a href="../package-tree.html">Tree</a></li>
 <li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
@@ -98,8 +98,8 @@
 <li>Next</li>
 </ul>
 <ul class="navList">
-<li><a href="../../../../../../../index.html?com/google/zxing/multi/qrcode/detector/class-use/MultiDetector.html" target="_top">Frames</a></li>
-<li><a href="MultiDetector.html" target="_top">No&nbsp;Frames</a></li>
+<li><a href="../../../../../../../index.html?com/google/zxing/multi/qrcode/detector/class-use/MultiFinderPatternFinder.html" target="_top">Frames</a></li>
+<li><a href="MultiFinderPatternFinder.html" target="_top">No&nbsp;Frames</a></li>
 </ul>
 <ul class="navList" id="allclasses_navbar_bottom">
 <li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/multi/qrcode/detector/package-frame.html b/docs/apidocs/com/google/zxing/multi/qrcode/detector/package-frame.html
index 65a18ca..7d7cff6 100644
--- a/docs/apidocs/com/google/zxing/multi/qrcode/detector/package-frame.html
+++ b/docs/apidocs/com/google/zxing/multi/qrcode/detector/package-frame.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.multi.qrcode.detector (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.multi.qrcode.detector (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -14,6 +14,7 @@
 <h2 title="Classes">Classes</h2>
 <ul title="Classes">
 <li><a href="MultiDetector.html" title="class in com.google.zxing.multi.qrcode.detector" target="classFrame">MultiDetector</a></li>
+<li><a href="MultiFinderPatternFinder.html" title="class in com.google.zxing.multi.qrcode.detector" target="classFrame">MultiFinderPatternFinder</a></li>
 </ul>
 </div>
 </body>
diff --git a/docs/apidocs/com/google/zxing/multi/qrcode/detector/package-summary.html b/docs/apidocs/com/google/zxing/multi/qrcode/detector/package-summary.html
index bb69ce3..cbf8a7b 100644
--- a/docs/apidocs/com/google/zxing/multi/qrcode/detector/package-summary.html
+++ b/docs/apidocs/com/google/zxing/multi/qrcode/detector/package-summary.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.multi.qrcode.detector (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.multi.qrcode.detector (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.multi.qrcode.detector (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.multi.qrcode.detector (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -89,6 +89,12 @@
  is rotated or skewed, or partially obscured.</div>
 </td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><a href="../../../../../../com/google/zxing/multi/qrcode/detector/MultiFinderPatternFinder.html" title="class in com.google.zxing.multi.qrcode.detector">MultiFinderPatternFinder</a></td>
+<td class="colLast">
+<div class="block">This class attempts to find finder patterns in a QR Code.</div>
+</td>
+</tr>
 </tbody>
 </table>
 </li>
@@ -141,6 +147,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/multi/qrcode/detector/package-tree.html b/docs/apidocs/com/google/zxing/multi/qrcode/detector/package-tree.html
index 694307e..6881fc4 100644
--- a/docs/apidocs/com/google/zxing/multi/qrcode/detector/package-tree.html
+++ b/docs/apidocs/com/google/zxing/multi/qrcode/detector/package-tree.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.multi.qrcode.detector Class Hierarchy (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.multi.qrcode.detector Class Hierarchy (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.multi.qrcode.detector Class Hierarchy (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.multi.qrcode.detector Class Hierarchy (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -86,6 +86,11 @@
 <li type="circle">com.google.zxing.multi.qrcode.detector.<a href="../../../../../../com/google/zxing/multi/qrcode/detector/MultiDetector.html" title="class in com.google.zxing.multi.qrcode.detector"><span class="typeNameLink">MultiDetector</span></a></li>
 </ul>
 </li>
+<li type="circle">com.google.zxing.qrcode.detector.<a href="../../../../../../com/google/zxing/qrcode/detector/FinderPatternFinder.html" title="class in com.google.zxing.qrcode.detector"><span class="typeNameLink">FinderPatternFinder</span></a>
+<ul>
+<li type="circle">com.google.zxing.multi.qrcode.detector.<a href="../../../../../../com/google/zxing/multi/qrcode/detector/MultiFinderPatternFinder.html" title="class in com.google.zxing.multi.qrcode.detector"><span class="typeNameLink">MultiFinderPatternFinder</span></a></li>
+</ul>
+</li>
 </ul>
 </li>
 </ul>
@@ -137,6 +142,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/multi/qrcode/detector/package-use.html b/docs/apidocs/com/google/zxing/multi/qrcode/detector/package-use.html
index 44ff493..e6be3a8 100644
--- a/docs/apidocs/com/google/zxing/multi/qrcode/detector/package-use.html
+++ b/docs/apidocs/com/google/zxing/multi/qrcode/detector/package-use.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Package com.google.zxing.multi.qrcode.detector (ZXing 3.4.0 API)</title>
+<title>Uses of Package com.google.zxing.multi.qrcode.detector (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Package com.google.zxing.multi.qrcode.detector (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Package com.google.zxing.multi.qrcode.detector (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/multi/qrcode/package-frame.html b/docs/apidocs/com/google/zxing/multi/qrcode/package-frame.html
index 5f3a5b0..c02d6fd 100644
--- a/docs/apidocs/com/google/zxing/multi/qrcode/package-frame.html
+++ b/docs/apidocs/com/google/zxing/multi/qrcode/package-frame.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.multi.qrcode (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.multi.qrcode (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
diff --git a/docs/apidocs/com/google/zxing/multi/qrcode/package-summary.html b/docs/apidocs/com/google/zxing/multi/qrcode/package-summary.html
index a4c6a14..8e95fd9 100644
--- a/docs/apidocs/com/google/zxing/multi/qrcode/package-summary.html
+++ b/docs/apidocs/com/google/zxing/multi/qrcode/package-summary.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.multi.qrcode (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.multi.qrcode (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.multi.qrcode (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.multi.qrcode (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -140,6 +140,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/multi/qrcode/package-tree.html b/docs/apidocs/com/google/zxing/multi/qrcode/package-tree.html
index 325628d..265a453 100644
--- a/docs/apidocs/com/google/zxing/multi/qrcode/package-tree.html
+++ b/docs/apidocs/com/google/zxing/multi/qrcode/package-tree.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.multi.qrcode Class Hierarchy (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.multi.qrcode Class Hierarchy (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.multi.qrcode Class Hierarchy (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.multi.qrcode Class Hierarchy (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -137,6 +137,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/multi/qrcode/package-use.html b/docs/apidocs/com/google/zxing/multi/qrcode/package-use.html
index 99d9d61..d5f110f 100644
--- a/docs/apidocs/com/google/zxing/multi/qrcode/package-use.html
+++ b/docs/apidocs/com/google/zxing/multi/qrcode/package-use.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Package com.google.zxing.multi.qrcode (ZXing 3.4.0 API)</title>
+<title>Uses of Package com.google.zxing.multi.qrcode (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Package com.google.zxing.multi.qrcode (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Package com.google.zxing.multi.qrcode (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/CodaBarReader.html b/docs/apidocs/com/google/zxing/oned/CodaBarReader.html
index 24f8385..d3285b8 100644
--- a/docs/apidocs/com/google/zxing/oned/CodaBarReader.html
+++ b/docs/apidocs/com/google/zxing/oned/CodaBarReader.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>CodaBarReader (ZXing 3.4.0 API)</title>
+<title>CodaBarReader (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="CodaBarReader (ZXing 3.4.0 API)";
+            parent.document.title="CodaBarReader (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -311,6 +311,6 @@ extends <a href="../../../../com/google/zxing/oned/OneDReader.html" title="class
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/CodaBarWriter.html b/docs/apidocs/com/google/zxing/oned/CodaBarWriter.html
index 3d392c2..a819471 100644
--- a/docs/apidocs/com/google/zxing/oned/CodaBarWriter.html
+++ b/docs/apidocs/com/google/zxing/oned/CodaBarWriter.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>CodaBarWriter (ZXing 3.4.0 API)</title>
+<title>CodaBarWriter (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,13 +12,13 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="CodaBarWriter (ZXing 3.4.0 API)";
+            parent.document.title="CodaBarWriter (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
     }
 //-->
-var methods = {"i0":10};
+var methods = {"i0":10,"i1":10};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -166,13 +166,17 @@ extends <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html
 <div class="block">Encode the contents to boolean array expression of one-dimensional barcode.</div>
 </td>
 </tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/CodaBarWriter.html#getSupportedWriteFormats--">getSupportedWriteFormats</a></span>()</code>&nbsp;</td>
+</tr>
 </table>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.com.google.zxing.oned.OneDimensionalCodeWriter">
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;com.google.zxing.oned.<a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html" title="class in com.google.zxing.oned">OneDimensionalCodeWriter</a></h3>
-<code><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#appendPattern-boolean:A-int-int:A-boolean-">appendPattern</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#checkNumeric-java.lang.String-">checkNumeric</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-">encode</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#getDefaultMargin--">getDefaultMargin</a></code></li>
+<code><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#appendPattern-boolean:A-int-int:A-boolean-">appendPattern</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#checkNumeric-java.lang.String-">checkNumeric</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-">encode</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-java.util.Map-">encode</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#getDefaultMargin--">getDefaultMargin</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
@@ -212,6 +216,19 @@ extends <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html
 <!--   -->
 </a>
 <h3>Method Detail</h3>
+<a name="getSupportedWriteFormats--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getSupportedWriteFormats</h4>
+<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&gt;&nbsp;getSupportedWriteFormats()</pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
+<dd><code><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#getSupportedWriteFormats--">getSupportedWriteFormats</a></code>&nbsp;in class&nbsp;<code><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html" title="class in com.google.zxing.oned">OneDimensionalCodeWriter</a></code></dd>
+</dl>
+</li>
+</ul>
 <a name="encode-java.lang.String-">
 <!--   -->
 </a>
@@ -301,6 +318,6 @@ extends <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/Code128Reader.html b/docs/apidocs/com/google/zxing/oned/Code128Reader.html
index f5c6af5..0d42cd1 100644
--- a/docs/apidocs/com/google/zxing/oned/Code128Reader.html
+++ b/docs/apidocs/com/google/zxing/oned/Code128Reader.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Code128Reader (ZXing 3.4.0 API)</title>
+<title>Code128Reader (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Code128Reader (ZXing 3.4.0 API)";
+            parent.document.title="Code128Reader (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -315,6 +315,6 @@ extends <a href="../../../../com/google/zxing/oned/OneDReader.html" title="class
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/Code128Writer.html b/docs/apidocs/com/google/zxing/oned/Code128Writer.html
index c6070f2..9b3c1b5 100644
--- a/docs/apidocs/com/google/zxing/oned/Code128Writer.html
+++ b/docs/apidocs/com/google/zxing/oned/Code128Writer.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Code128Writer (ZXing 3.4.0 API)</title>
+<title>Code128Writer (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,13 +12,13 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Code128Writer (ZXing 3.4.0 API)";
+            parent.document.title="Code128Writer (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10};
+var methods = {"i0":10,"i1":10,"i2":10};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -167,22 +167,23 @@ extends <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html
 </td>
 </tr>
 <tr id="i1" class="rowColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/Code128Writer.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
-      <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
-      int&nbsp;width,
-      int&nbsp;height,
+<td class="colFirst"><code>protected boolean[]</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/Code128Writer.html#encode-java.lang.String-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
       <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a>,?&gt;&nbsp;hints)</code>
-<div class="block">Encode the contents following specified format.</div>
+<div class="block">Can be overwritten if the encode requires to read the hints map.</div>
 </td>
 </tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/Code128Writer.html#getSupportedWriteFormats--">getSupportedWriteFormats</a></span>()</code>&nbsp;</td>
+</tr>
 </table>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.com.google.zxing.oned.OneDimensionalCodeWriter">
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;com.google.zxing.oned.<a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html" title="class in com.google.zxing.oned">OneDimensionalCodeWriter</a></h3>
-<code><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#appendPattern-boolean:A-int-int:A-boolean-">appendPattern</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#checkNumeric-java.lang.String-">checkNumeric</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-">encode</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#getDefaultMargin--">getDefaultMargin</a></code></li>
+<code><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#appendPattern-boolean:A-int-int:A-boolean-">appendPattern</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#checkNumeric-java.lang.String-">checkNumeric</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-">encode</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#getDefaultMargin--">getDefaultMargin</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
@@ -222,46 +223,23 @@ extends <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html
 <!--   -->
 </a>
 <h3>Method Detail</h3>
-<a name="encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">
+<a name="getSupportedWriteFormats--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>encode</h4>
-<pre>public&nbsp;<a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a>&nbsp;encode(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
-                        <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
-                        int&nbsp;width,
-                        int&nbsp;height,
-                        <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a>,?&gt;&nbsp;hints)
-                 throws <a href="../../../../com/google/zxing/WriterException.html" title="class in com.google.zxing">WriterException</a></pre>
-<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">OneDimensionalCodeWriter</a></code></span></div>
-<div class="block">Encode the contents following specified format.
- <code>width</code> and <code>height</code> are required size. This method may return bigger size
- <code>BitMatrix</code> when specified size is too small. The user can set both <code>width</code> and
- <code>height</code> to zero to get minimum size barcode. If negative value is set to <code>width</code>
- or <code>height</code>, <code>IllegalArgumentException</code> is thrown.</div>
+<h4>getSupportedWriteFormats</h4>
+<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&gt;&nbsp;getSupportedWriteFormats()</pre>
 <dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code><a href="../../../../com/google/zxing/Writer.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../com/google/zxing/Writer.html" title="interface in com.google.zxing">Writer</a></code></dd>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
-<dd><code><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></code>&nbsp;in class&nbsp;<code><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html" title="class in com.google.zxing.oned">OneDimensionalCodeWriter</a></code></dd>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>contents</code> - The contents to encode in the barcode</dd>
-<dd><code>format</code> - The barcode format to generate</dd>
-<dd><code>width</code> - The preferred width in pixels</dd>
-<dd><code>height</code> - The preferred height in pixels</dd>
-<dd><code>hints</code> - Additional parameters to supply to the encoder</dd>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common"><code>BitMatrix</code></a> representing encoded barcode image</dd>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="../../../../com/google/zxing/WriterException.html" title="class in com.google.zxing">WriterException</a></code> - if contents cannot be encoded legally in a format</dd>
+<dd><code><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#getSupportedWriteFormats--">getSupportedWriteFormats</a></code>&nbsp;in class&nbsp;<code><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html" title="class in com.google.zxing.oned">OneDimensionalCodeWriter</a></code></dd>
 </dl>
 </li>
 </ul>
 <a name="encode-java.lang.String-">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>encode</h4>
 <pre>public&nbsp;boolean[]&nbsp;encode(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents)</pre>
@@ -278,6 +256,27 @@ extends <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html
 </dl>
 </li>
 </ul>
+<a name="encode-java.lang.String-java.util.Map-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>encode</h4>
+<pre>protected&nbsp;boolean[]&nbsp;encode(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
+                           <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a>,?&gt;&nbsp;hints)</pre>
+<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-java.util.Map-">OneDimensionalCodeWriter</a></code></span></div>
+<div class="block">Can be overwritten if the encode requires to read the hints map. Otherwise it defaults to <code>encode</code>.</div>
+<dl>
+<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
+<dd><code><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-java.util.Map-">encode</a></code>&nbsp;in class&nbsp;<code><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html" title="class in com.google.zxing.oned">OneDimensionalCodeWriter</a></code></dd>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>contents</code> - barcode contents to encode</dd>
+<dd><code>hints</code> - encoding hints</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>a <code>boolean[]</code> of horizontal pixels (false = white, true = black)</dd>
+</dl>
+</li>
+</ul>
 </li>
 </ul>
 </li>
@@ -347,6 +346,6 @@ extends <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/Code39Reader.html b/docs/apidocs/com/google/zxing/oned/Code39Reader.html
index 59516ee..cd0fa68 100644
--- a/docs/apidocs/com/google/zxing/oned/Code39Reader.html
+++ b/docs/apidocs/com/google/zxing/oned/Code39Reader.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Code39Reader (ZXing 3.4.0 API)</title>
+<title>Code39Reader (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Code39Reader (ZXing 3.4.0 API)";
+            parent.document.title="Code39Reader (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -371,6 +371,6 @@ extends <a href="../../../../com/google/zxing/oned/OneDReader.html" title="class
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/Code39Writer.html b/docs/apidocs/com/google/zxing/oned/Code39Writer.html
index 7512ca8..0d218cf 100644
--- a/docs/apidocs/com/google/zxing/oned/Code39Writer.html
+++ b/docs/apidocs/com/google/zxing/oned/Code39Writer.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Code39Writer (ZXing 3.4.0 API)</title>
+<title>Code39Writer (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Code39Writer (ZXing 3.4.0 API)";
+            parent.document.title="Code39Writer (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -167,14 +167,8 @@ extends <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html
 </td>
 </tr>
 <tr id="i1" class="rowColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/Code39Writer.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
-      <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
-      int&nbsp;width,
-      int&nbsp;height,
-      <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a>,?&gt;&nbsp;hints)</code>
-<div class="block">Encode the contents following specified format.</div>
-</td>
+<td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/Code39Writer.html#getSupportedWriteFormats--">getSupportedWriteFormats</a></span>()</code>&nbsp;</td>
 </tr>
 </table>
 <ul class="blockList">
@@ -182,7 +176,7 @@ extends <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;com.google.zxing.oned.<a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html" title="class in com.google.zxing.oned">OneDimensionalCodeWriter</a></h3>
-<code><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#appendPattern-boolean:A-int-int:A-boolean-">appendPattern</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#checkNumeric-java.lang.String-">checkNumeric</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-">encode</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#getDefaultMargin--">getDefaultMargin</a></code></li>
+<code><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#appendPattern-boolean:A-int-int:A-boolean-">appendPattern</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#checkNumeric-java.lang.String-">checkNumeric</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-">encode</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-java.util.Map-">encode</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#getDefaultMargin--">getDefaultMargin</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
@@ -222,39 +216,16 @@ extends <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html
 <!--   -->
 </a>
 <h3>Method Detail</h3>
-<a name="encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">
+<a name="getSupportedWriteFormats--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>encode</h4>
-<pre>public&nbsp;<a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a>&nbsp;encode(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
-                        <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
-                        int&nbsp;width,
-                        int&nbsp;height,
-                        <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a>,?&gt;&nbsp;hints)
-                 throws <a href="../../../../com/google/zxing/WriterException.html" title="class in com.google.zxing">WriterException</a></pre>
-<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">OneDimensionalCodeWriter</a></code></span></div>
-<div class="block">Encode the contents following specified format.
- <code>width</code> and <code>height</code> are required size. This method may return bigger size
- <code>BitMatrix</code> when specified size is too small. The user can set both <code>width</code> and
- <code>height</code> to zero to get minimum size barcode. If negative value is set to <code>width</code>
- or <code>height</code>, <code>IllegalArgumentException</code> is thrown.</div>
+<h4>getSupportedWriteFormats</h4>
+<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&gt;&nbsp;getSupportedWriteFormats()</pre>
 <dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code><a href="../../../../com/google/zxing/Writer.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../com/google/zxing/Writer.html" title="interface in com.google.zxing">Writer</a></code></dd>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
-<dd><code><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></code>&nbsp;in class&nbsp;<code><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html" title="class in com.google.zxing.oned">OneDimensionalCodeWriter</a></code></dd>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>contents</code> - The contents to encode in the barcode</dd>
-<dd><code>format</code> - The barcode format to generate</dd>
-<dd><code>width</code> - The preferred width in pixels</dd>
-<dd><code>height</code> - The preferred height in pixels</dd>
-<dd><code>hints</code> - Additional parameters to supply to the encoder</dd>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common"><code>BitMatrix</code></a> representing encoded barcode image</dd>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="../../../../com/google/zxing/WriterException.html" title="class in com.google.zxing">WriterException</a></code> - if contents cannot be encoded legally in a format</dd>
+<dd><code><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#getSupportedWriteFormats--">getSupportedWriteFormats</a></code>&nbsp;in class&nbsp;<code><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html" title="class in com.google.zxing.oned">OneDimensionalCodeWriter</a></code></dd>
 </dl>
 </li>
 </ul>
@@ -347,6 +318,6 @@ extends <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/Code93Reader.html b/docs/apidocs/com/google/zxing/oned/Code93Reader.html
index 1e98833..77c9de8 100644
--- a/docs/apidocs/com/google/zxing/oned/Code93Reader.html
+++ b/docs/apidocs/com/google/zxing/oned/Code93Reader.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Code93Reader (ZXing 3.4.0 API)</title>
+<title>Code93Reader (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Code93Reader (ZXing 3.4.0 API)";
+            parent.document.title="Code93Reader (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -317,6 +317,6 @@ extends <a href="../../../../com/google/zxing/oned/OneDReader.html" title="class
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/Code93Writer.html b/docs/apidocs/com/google/zxing/oned/Code93Writer.html
index af993ec..99878cd 100644
--- a/docs/apidocs/com/google/zxing/oned/Code93Writer.html
+++ b/docs/apidocs/com/google/zxing/oned/Code93Writer.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Code93Writer (ZXing 3.4.0 API)</title>
+<title>Code93Writer (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Code93Writer (ZXing 3.4.0 API)";
+            parent.document.title="Code93Writer (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -174,14 +174,8 @@ extends <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html
 </td>
 </tr>
 <tr id="i2" class="altColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/Code93Writer.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
-      <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
-      int&nbsp;width,
-      int&nbsp;height,
-      <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a>,?&gt;&nbsp;hints)</code>
-<div class="block">Encode the contents following specified format.</div>
-</td>
+<td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/Code93Writer.html#getSupportedWriteFormats--">getSupportedWriteFormats</a></span>()</code>&nbsp;</td>
 </tr>
 </table>
 <ul class="blockList">
@@ -189,7 +183,7 @@ extends <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;com.google.zxing.oned.<a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html" title="class in com.google.zxing.oned">OneDimensionalCodeWriter</a></h3>
-<code><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#checkNumeric-java.lang.String-">checkNumeric</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-">encode</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#getDefaultMargin--">getDefaultMargin</a></code></li>
+<code><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#checkNumeric-java.lang.String-">checkNumeric</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-">encode</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-java.util.Map-">encode</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#getDefaultMargin--">getDefaultMargin</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
@@ -229,39 +223,16 @@ extends <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html
 <!--   -->
 </a>
 <h3>Method Detail</h3>
-<a name="encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">
+<a name="getSupportedWriteFormats--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>encode</h4>
-<pre>public&nbsp;<a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a>&nbsp;encode(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
-                        <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
-                        int&nbsp;width,
-                        int&nbsp;height,
-                        <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a>,?&gt;&nbsp;hints)
-                 throws <a href="../../../../com/google/zxing/WriterException.html" title="class in com.google.zxing">WriterException</a></pre>
-<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">OneDimensionalCodeWriter</a></code></span></div>
-<div class="block">Encode the contents following specified format.
- <code>width</code> and <code>height</code> are required size. This method may return bigger size
- <code>BitMatrix</code> when specified size is too small. The user can set both <code>width</code> and
- <code>height</code> to zero to get minimum size barcode. If negative value is set to <code>width</code>
- or <code>height</code>, <code>IllegalArgumentException</code> is thrown.</div>
+<h4>getSupportedWriteFormats</h4>
+<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&gt;&nbsp;getSupportedWriteFormats()</pre>
 <dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code><a href="../../../../com/google/zxing/Writer.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../com/google/zxing/Writer.html" title="interface in com.google.zxing">Writer</a></code></dd>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
-<dd><code><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></code>&nbsp;in class&nbsp;<code><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html" title="class in com.google.zxing.oned">OneDimensionalCodeWriter</a></code></dd>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>contents</code> - The contents to encode in the barcode</dd>
-<dd><code>format</code> - The barcode format to generate</dd>
-<dd><code>width</code> - The preferred width in pixels</dd>
-<dd><code>height</code> - The preferred height in pixels</dd>
-<dd><code>hints</code> - Additional parameters to supply to the encoder</dd>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common"><code>BitMatrix</code></a> representing encoded barcode image</dd>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="../../../../com/google/zxing/WriterException.html" title="class in com.google.zxing">WriterException</a></code> - if contents cannot be encoded legally in a format</dd>
+<dd><code><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#getSupportedWriteFormats--">getSupportedWriteFormats</a></code>&nbsp;in class&nbsp;<code><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html" title="class in com.google.zxing.oned">OneDimensionalCodeWriter</a></code></dd>
 </dl>
 </li>
 </ul>
@@ -377,6 +348,6 @@ protected static&nbsp;int&nbsp;appendPattern(boolean[]&nbsp;target,
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/EAN13Reader.html b/docs/apidocs/com/google/zxing/oned/EAN13Reader.html
index 7ae912d..114951c 100644
--- a/docs/apidocs/com/google/zxing/oned/EAN13Reader.html
+++ b/docs/apidocs/com/google/zxing/oned/EAN13Reader.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>EAN13Reader (ZXing 3.4.0 API)</title>
+<title>EAN13Reader (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="EAN13Reader (ZXing 3.4.0 API)";
+            parent.document.title="EAN13Reader (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -323,6 +323,6 @@ extends <a href="../../../../com/google/zxing/oned/UPCEANReader.html" title="cla
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/EAN13Writer.html b/docs/apidocs/com/google/zxing/oned/EAN13Writer.html
index 571a24c..5536afb 100644
--- a/docs/apidocs/com/google/zxing/oned/EAN13Writer.html
+++ b/docs/apidocs/com/google/zxing/oned/EAN13Writer.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>EAN13Writer (ZXing 3.4.0 API)</title>
+<title>EAN13Writer (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="EAN13Writer (ZXing 3.4.0 API)";
+            parent.document.title="EAN13Writer (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -172,14 +172,8 @@ extends <a href="../../../../com/google/zxing/oned/UPCEANWriter.html" title="cla
 </td>
 </tr>
 <tr id="i1" class="rowColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/EAN13Writer.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
-      <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
-      int&nbsp;width,
-      int&nbsp;height,
-      <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a>,?&gt;&nbsp;hints)</code>
-<div class="block">Encode the contents following specified format.</div>
-</td>
+<td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/EAN13Writer.html#getSupportedWriteFormats--">getSupportedWriteFormats</a></span>()</code>&nbsp;</td>
 </tr>
 </table>
 <ul class="blockList">
@@ -194,7 +188,7 @@ extends <a href="../../../../com/google/zxing/oned/UPCEANWriter.html" title="cla
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;com.google.zxing.oned.<a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html" title="class in com.google.zxing.oned">OneDimensionalCodeWriter</a></h3>
-<code><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#appendPattern-boolean:A-int-int:A-boolean-">appendPattern</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#checkNumeric-java.lang.String-">checkNumeric</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-">encode</a></code></li>
+<code><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#appendPattern-boolean:A-int-int:A-boolean-">appendPattern</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#checkNumeric-java.lang.String-">checkNumeric</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-">encode</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-java.util.Map-">encode</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
@@ -234,39 +228,16 @@ extends <a href="../../../../com/google/zxing/oned/UPCEANWriter.html" title="cla
 <!--   -->
 </a>
 <h3>Method Detail</h3>
-<a name="encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">
+<a name="getSupportedWriteFormats--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>encode</h4>
-<pre>public&nbsp;<a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a>&nbsp;encode(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
-                        <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
-                        int&nbsp;width,
-                        int&nbsp;height,
-                        <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a>,?&gt;&nbsp;hints)
-                 throws <a href="../../../../com/google/zxing/WriterException.html" title="class in com.google.zxing">WriterException</a></pre>
-<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">OneDimensionalCodeWriter</a></code></span></div>
-<div class="block">Encode the contents following specified format.
- <code>width</code> and <code>height</code> are required size. This method may return bigger size
- <code>BitMatrix</code> when specified size is too small. The user can set both <code>width</code> and
- <code>height</code> to zero to get minimum size barcode. If negative value is set to <code>width</code>
- or <code>height</code>, <code>IllegalArgumentException</code> is thrown.</div>
+<h4>getSupportedWriteFormats</h4>
+<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&gt;&nbsp;getSupportedWriteFormats()</pre>
 <dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code><a href="../../../../com/google/zxing/Writer.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../com/google/zxing/Writer.html" title="interface in com.google.zxing">Writer</a></code></dd>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
-<dd><code><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></code>&nbsp;in class&nbsp;<code><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html" title="class in com.google.zxing.oned">OneDimensionalCodeWriter</a></code></dd>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>contents</code> - The contents to encode in the barcode</dd>
-<dd><code>format</code> - The barcode format to generate</dd>
-<dd><code>width</code> - The preferred width in pixels</dd>
-<dd><code>height</code> - The preferred height in pixels</dd>
-<dd><code>hints</code> - Additional parameters to supply to the encoder</dd>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common"><code>BitMatrix</code></a> representing encoded barcode image</dd>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="../../../../com/google/zxing/WriterException.html" title="class in com.google.zxing">WriterException</a></code> - if contents cannot be encoded legally in a format</dd>
+<dd><code><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#getSupportedWriteFormats--">getSupportedWriteFormats</a></code>&nbsp;in class&nbsp;<code><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html" title="class in com.google.zxing.oned">OneDimensionalCodeWriter</a></code></dd>
 </dl>
 </li>
 </ul>
@@ -359,6 +330,6 @@ extends <a href="../../../../com/google/zxing/oned/UPCEANWriter.html" title="cla
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/EAN8Reader.html b/docs/apidocs/com/google/zxing/oned/EAN8Reader.html
index a6b6325..f9ef6e8 100644
--- a/docs/apidocs/com/google/zxing/oned/EAN8Reader.html
+++ b/docs/apidocs/com/google/zxing/oned/EAN8Reader.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>EAN8Reader (ZXing 3.4.0 API)</title>
+<title>EAN8Reader (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="EAN8Reader (ZXing 3.4.0 API)";
+            parent.document.title="EAN8Reader (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -323,6 +323,6 @@ extends <a href="../../../../com/google/zxing/oned/UPCEANReader.html" title="cla
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/EAN8Writer.html b/docs/apidocs/com/google/zxing/oned/EAN8Writer.html
index 57a431d..c785630 100644
--- a/docs/apidocs/com/google/zxing/oned/EAN8Writer.html
+++ b/docs/apidocs/com/google/zxing/oned/EAN8Writer.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>EAN8Writer (ZXing 3.4.0 API)</title>
+<title>EAN8Writer (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="EAN8Writer (ZXing 3.4.0 API)";
+            parent.document.title="EAN8Writer (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -172,14 +172,8 @@ extends <a href="../../../../com/google/zxing/oned/UPCEANWriter.html" title="cla
 </td>
 </tr>
 <tr id="i1" class="rowColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/EAN8Writer.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
-      <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
-      int&nbsp;width,
-      int&nbsp;height,
-      <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a>,?&gt;&nbsp;hints)</code>
-<div class="block">Encode the contents following specified format.</div>
-</td>
+<td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/EAN8Writer.html#getSupportedWriteFormats--">getSupportedWriteFormats</a></span>()</code>&nbsp;</td>
 </tr>
 </table>
 <ul class="blockList">
@@ -194,7 +188,7 @@ extends <a href="../../../../com/google/zxing/oned/UPCEANWriter.html" title="cla
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;com.google.zxing.oned.<a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html" title="class in com.google.zxing.oned">OneDimensionalCodeWriter</a></h3>
-<code><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#appendPattern-boolean:A-int-int:A-boolean-">appendPattern</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#checkNumeric-java.lang.String-">checkNumeric</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-">encode</a></code></li>
+<code><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#appendPattern-boolean:A-int-int:A-boolean-">appendPattern</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#checkNumeric-java.lang.String-">checkNumeric</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-">encode</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-java.util.Map-">encode</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
@@ -234,39 +228,16 @@ extends <a href="../../../../com/google/zxing/oned/UPCEANWriter.html" title="cla
 <!--   -->
 </a>
 <h3>Method Detail</h3>
-<a name="encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">
+<a name="getSupportedWriteFormats--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>encode</h4>
-<pre>public&nbsp;<a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a>&nbsp;encode(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
-                        <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
-                        int&nbsp;width,
-                        int&nbsp;height,
-                        <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a>,?&gt;&nbsp;hints)
-                 throws <a href="../../../../com/google/zxing/WriterException.html" title="class in com.google.zxing">WriterException</a></pre>
-<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">OneDimensionalCodeWriter</a></code></span></div>
-<div class="block">Encode the contents following specified format.
- <code>width</code> and <code>height</code> are required size. This method may return bigger size
- <code>BitMatrix</code> when specified size is too small. The user can set both <code>width</code> and
- <code>height</code> to zero to get minimum size barcode. If negative value is set to <code>width</code>
- or <code>height</code>, <code>IllegalArgumentException</code> is thrown.</div>
+<h4>getSupportedWriteFormats</h4>
+<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&gt;&nbsp;getSupportedWriteFormats()</pre>
 <dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code><a href="../../../../com/google/zxing/Writer.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../com/google/zxing/Writer.html" title="interface in com.google.zxing">Writer</a></code></dd>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
-<dd><code><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></code>&nbsp;in class&nbsp;<code><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html" title="class in com.google.zxing.oned">OneDimensionalCodeWriter</a></code></dd>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>contents</code> - The contents to encode in the barcode</dd>
-<dd><code>format</code> - The barcode format to generate</dd>
-<dd><code>width</code> - The preferred width in pixels</dd>
-<dd><code>height</code> - The preferred height in pixels</dd>
-<dd><code>hints</code> - Additional parameters to supply to the encoder</dd>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common"><code>BitMatrix</code></a> representing encoded barcode image</dd>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="../../../../com/google/zxing/WriterException.html" title="class in com.google.zxing">WriterException</a></code> - if contents cannot be encoded legally in a format</dd>
+<dd><code><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#getSupportedWriteFormats--">getSupportedWriteFormats</a></code>&nbsp;in class&nbsp;<code><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html" title="class in com.google.zxing.oned">OneDimensionalCodeWriter</a></code></dd>
 </dl>
 </li>
 </ul>
@@ -359,6 +330,6 @@ extends <a href="../../../../com/google/zxing/oned/UPCEANWriter.html" title="cla
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/ITFReader.html b/docs/apidocs/com/google/zxing/oned/ITFReader.html
index f50e3c8..4ac91a5 100644
--- a/docs/apidocs/com/google/zxing/oned/ITFReader.html
+++ b/docs/apidocs/com/google/zxing/oned/ITFReader.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>ITFReader (ZXing 3.4.0 API)</title>
+<title>ITFReader (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="ITFReader (ZXing 3.4.0 API)";
+            parent.document.title="ITFReader (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -324,6 +324,6 @@ extends <a href="../../../../com/google/zxing/oned/OneDReader.html" title="class
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/ITFWriter.html b/docs/apidocs/com/google/zxing/oned/ITFWriter.html
index 15f5005..4528342 100644
--- a/docs/apidocs/com/google/zxing/oned/ITFWriter.html
+++ b/docs/apidocs/com/google/zxing/oned/ITFWriter.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>ITFWriter (ZXing 3.4.0 API)</title>
+<title>ITFWriter (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="ITFWriter (ZXing 3.4.0 API)";
+            parent.document.title="ITFWriter (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -167,14 +167,8 @@ extends <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html
 </td>
 </tr>
 <tr id="i1" class="rowColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/ITFWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
-      <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
-      int&nbsp;width,
-      int&nbsp;height,
-      <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a>,?&gt;&nbsp;hints)</code>
-<div class="block">Encode the contents following specified format.</div>
-</td>
+<td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/ITFWriter.html#getSupportedWriteFormats--">getSupportedWriteFormats</a></span>()</code>&nbsp;</td>
 </tr>
 </table>
 <ul class="blockList">
@@ -182,7 +176,7 @@ extends <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;com.google.zxing.oned.<a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html" title="class in com.google.zxing.oned">OneDimensionalCodeWriter</a></h3>
-<code><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#appendPattern-boolean:A-int-int:A-boolean-">appendPattern</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#checkNumeric-java.lang.String-">checkNumeric</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-">encode</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#getDefaultMargin--">getDefaultMargin</a></code></li>
+<code><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#appendPattern-boolean:A-int-int:A-boolean-">appendPattern</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#checkNumeric-java.lang.String-">checkNumeric</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-">encode</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-java.util.Map-">encode</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#getDefaultMargin--">getDefaultMargin</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
@@ -222,39 +216,16 @@ extends <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html
 <!--   -->
 </a>
 <h3>Method Detail</h3>
-<a name="encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">
+<a name="getSupportedWriteFormats--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>encode</h4>
-<pre>public&nbsp;<a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a>&nbsp;encode(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
-                        <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
-                        int&nbsp;width,
-                        int&nbsp;height,
-                        <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a>,?&gt;&nbsp;hints)
-                 throws <a href="../../../../com/google/zxing/WriterException.html" title="class in com.google.zxing">WriterException</a></pre>
-<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">OneDimensionalCodeWriter</a></code></span></div>
-<div class="block">Encode the contents following specified format.
- <code>width</code> and <code>height</code> are required size. This method may return bigger size
- <code>BitMatrix</code> when specified size is too small. The user can set both <code>width</code> and
- <code>height</code> to zero to get minimum size barcode. If negative value is set to <code>width</code>
- or <code>height</code>, <code>IllegalArgumentException</code> is thrown.</div>
+<h4>getSupportedWriteFormats</h4>
+<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&gt;&nbsp;getSupportedWriteFormats()</pre>
 <dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code><a href="../../../../com/google/zxing/Writer.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../com/google/zxing/Writer.html" title="interface in com.google.zxing">Writer</a></code></dd>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
-<dd><code><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></code>&nbsp;in class&nbsp;<code><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html" title="class in com.google.zxing.oned">OneDimensionalCodeWriter</a></code></dd>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>contents</code> - The contents to encode in the barcode</dd>
-<dd><code>format</code> - The barcode format to generate</dd>
-<dd><code>width</code> - The preferred width in pixels</dd>
-<dd><code>height</code> - The preferred height in pixels</dd>
-<dd><code>hints</code> - Additional parameters to supply to the encoder</dd>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common"><code>BitMatrix</code></a> representing encoded barcode image</dd>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="../../../../com/google/zxing/WriterException.html" title="class in com.google.zxing">WriterException</a></code> - if contents cannot be encoded legally in a format</dd>
+<dd><code><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#getSupportedWriteFormats--">getSupportedWriteFormats</a></code>&nbsp;in class&nbsp;<code><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html" title="class in com.google.zxing.oned">OneDimensionalCodeWriter</a></code></dd>
 </dl>
 </li>
 </ul>
@@ -347,6 +318,6 @@ extends <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/MultiFormatOneDReader.html b/docs/apidocs/com/google/zxing/oned/MultiFormatOneDReader.html
index 0f7b930..3404eb6 100644
--- a/docs/apidocs/com/google/zxing/oned/MultiFormatOneDReader.html
+++ b/docs/apidocs/com/google/zxing/oned/MultiFormatOneDReader.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>MultiFormatOneDReader (ZXing 3.4.0 API)</title>
+<title>MultiFormatOneDReader (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="MultiFormatOneDReader (ZXing 3.4.0 API)";
+            parent.document.title="MultiFormatOneDReader (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -335,6 +335,6 @@ extends <a href="../../../../com/google/zxing/oned/OneDReader.html" title="class
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/MultiFormatUPCEANReader.html b/docs/apidocs/com/google/zxing/oned/MultiFormatUPCEANReader.html
index 6d6829e..3b3119a 100644
--- a/docs/apidocs/com/google/zxing/oned/MultiFormatUPCEANReader.html
+++ b/docs/apidocs/com/google/zxing/oned/MultiFormatUPCEANReader.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>MultiFormatUPCEANReader (ZXing 3.4.0 API)</title>
+<title>MultiFormatUPCEANReader (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="MultiFormatUPCEANReader (ZXing 3.4.0 API)";
+            parent.document.title="MultiFormatUPCEANReader (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -338,6 +338,6 @@ extends <a href="../../../../com/google/zxing/oned/OneDReader.html" title="class
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/OneDReader.html b/docs/apidocs/com/google/zxing/oned/OneDReader.html
index 7d82258..47a9ed1 100644
--- a/docs/apidocs/com/google/zxing/oned/OneDReader.html
+++ b/docs/apidocs/com/google/zxing/oned/OneDReader.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>OneDReader (ZXing 3.4.0 API)</title>
+<title>OneDReader (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="OneDReader (ZXing 3.4.0 API)";
+            parent.document.title="OneDReader (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -483,6 +483,6 @@ implements <a href="../../../../com/google/zxing/Reader.html" title="interface i
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/OneDimensionalCodeWriter.html b/docs/apidocs/com/google/zxing/oned/OneDimensionalCodeWriter.html
index 2035fa1..1f2317b 100644
--- a/docs/apidocs/com/google/zxing/oned/OneDimensionalCodeWriter.html
+++ b/docs/apidocs/com/google/zxing/oned/OneDimensionalCodeWriter.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>OneDimensionalCodeWriter (ZXing 3.4.0 API)</title>
+<title>OneDimensionalCodeWriter (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,13 +12,13 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="OneDimensionalCodeWriter (ZXing 3.4.0 API)";
+            parent.document.title="OneDimensionalCodeWriter (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
     }
 //-->
-var methods = {"i0":9,"i1":9,"i2":6,"i3":10,"i4":10,"i5":10};
+var methods = {"i0":9,"i1":9,"i2":6,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10};
 var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -197,9 +197,20 @@ implements <a href="../../../../com/google/zxing/Writer.html" title="interface i
 </td>
 </tr>
 <tr id="i5" class="rowColor">
+<td class="colFirst"><code>protected boolean[]</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
+      <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a>,?&gt;&nbsp;hints)</code>
+<div class="block">Can be overwritten if the encode requires to read the hints map.</div>
+</td>
+</tr>
+<tr id="i6" class="altColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#getDefaultMargin--">getDefaultMargin</a></span>()</code>&nbsp;</td>
 </tr>
+<tr id="i7" class="rowColor">
+<td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#getSupportedWriteFormats--">getSupportedWriteFormats</a></span>()</code>&nbsp;</td>
+</tr>
 </table>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
@@ -239,6 +250,41 @@ implements <a href="../../../../com/google/zxing/Writer.html" title="interface i
 <!--   -->
 </a>
 <h3>Method Detail</h3>
+<a name="encode-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>encode</h4>
+<pre>public abstract&nbsp;boolean[]&nbsp;encode(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents)</pre>
+<div class="block">Encode the contents to boolean array expression of one-dimensional barcode.
+ Start code and end code should be included in result, and side margins should not be included.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>contents</code> - barcode contents to encode</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>a <code>boolean[]</code> of horizontal pixels (false = white, true = black)</dd>
+</dl>
+</li>
+</ul>
+<a name="encode-java.lang.String-java.util.Map-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>encode</h4>
+<pre>protected&nbsp;boolean[]&nbsp;encode(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
+                           <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a>,?&gt;&nbsp;hints)</pre>
+<div class="block">Can be overwritten if the encode requires to read the hints map. Otherwise it defaults to <code>encode</code>.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>contents</code> - barcode contents to encode</dd>
+<dd><code>hints</code> - encoding hints</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>a <code>boolean[]</code> of horizontal pixels (false = white, true = black)</dd>
+</dl>
+</li>
+</ul>
 <a name="encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-">
 <!--   -->
 </a>
@@ -248,8 +294,7 @@ implements <a href="../../../../com/google/zxing/Writer.html" title="interface i
 <pre>public final&nbsp;<a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a>&nbsp;encode(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
                               <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
                               int&nbsp;width,
-                              int&nbsp;height)
-                       throws <a href="../../../../com/google/zxing/WriterException.html" title="class in com.google.zxing">WriterException</a></pre>
+                              int&nbsp;height)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../com/google/zxing/Writer.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-">Writer</a></code></span></div>
 <div class="block">Encode a barcode using the default settings.</div>
 <dl>
@@ -262,8 +307,6 @@ implements <a href="../../../../com/google/zxing/Writer.html" title="interface i
 <dd><code>height</code> - The preferred height in pixels</dd>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common"><code>BitMatrix</code></a> representing encoded barcode image</dd>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="../../../../com/google/zxing/WriterException.html" title="class in com.google.zxing">WriterException</a></code> - if contents cannot be encoded legally in a format</dd>
 </dl>
 </li>
 </ul>
@@ -277,8 +320,7 @@ implements <a href="../../../../com/google/zxing/Writer.html" title="interface i
                         <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
                         int&nbsp;width,
                         int&nbsp;height,
-                        <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a>,?&gt;&nbsp;hints)
-                 throws <a href="../../../../com/google/zxing/WriterException.html" title="class in com.google.zxing">WriterException</a></pre>
+                        <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a>,?&gt;&nbsp;hints)</pre>
 <div class="block">Encode the contents following specified format.
  <code>width</code> and <code>height</code> are required size. This method may return bigger size
  <code>BitMatrix</code> when specified size is too small. The user can set both <code>width</code> and
@@ -295,11 +337,18 @@ implements <a href="../../../../com/google/zxing/Writer.html" title="interface i
 <dd><code>hints</code> - Additional parameters to supply to the encoder</dd>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common"><code>BitMatrix</code></a> representing encoded barcode image</dd>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="../../../../com/google/zxing/WriterException.html" title="class in com.google.zxing">WriterException</a></code> - if contents cannot be encoded legally in a format</dd>
 </dl>
 </li>
 </ul>
+<a name="getSupportedWriteFormats--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getSupportedWriteFormats</h4>
+<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&gt;&nbsp;getSupportedWriteFormats()</pre>
+</li>
+</ul>
 <a name="checkNumeric-java.lang.String-">
 <!--   -->
 </a>
@@ -339,29 +388,12 @@ implements <a href="../../../../com/google/zxing/Writer.html" title="interface i
 <a name="getDefaultMargin--">
 <!--   -->
 </a>
-<ul class="blockList">
+<ul class="blockListLast">
 <li class="blockList">
 <h4>getDefaultMargin</h4>
 <pre>public&nbsp;int&nbsp;getDefaultMargin()</pre>
 </li>
 </ul>
-<a name="encode-java.lang.String-">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>encode</h4>
-<pre>public abstract&nbsp;boolean[]&nbsp;encode(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents)</pre>
-<div class="block">Encode the contents to boolean array expression of one-dimensional barcode.
- Start code and end code should be included in result, and side margins should not be included.</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>contents</code> - barcode contents to encode</dd>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>a <code>boolean[]</code> of horizontal pixels (false = white, true = black)</dd>
-</dl>
-</li>
-</ul>
 </li>
 </ul>
 </li>
@@ -431,6 +463,6 @@ implements <a href="../../../../com/google/zxing/Writer.html" title="interface i
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/UPCAReader.html b/docs/apidocs/com/google/zxing/oned/UPCAReader.html
index 3e86fa1..b5ca5e1 100644
--- a/docs/apidocs/com/google/zxing/oned/UPCAReader.html
+++ b/docs/apidocs/com/google/zxing/oned/UPCAReader.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>UPCAReader (ZXing 3.4.0 API)</title>
+<title>UPCAReader (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="UPCAReader (ZXing 3.4.0 API)";
+            parent.document.title="UPCAReader (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -472,6 +472,6 @@ extends <a href="../../../../com/google/zxing/oned/UPCEANReader.html" title="cla
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/UPCAWriter.html b/docs/apidocs/com/google/zxing/oned/UPCAWriter.html
index 51f8ebe..ae2b421 100644
--- a/docs/apidocs/com/google/zxing/oned/UPCAWriter.html
+++ b/docs/apidocs/com/google/zxing/oned/UPCAWriter.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>UPCAWriter (ZXing 3.4.0 API)</title>
+<title>UPCAWriter (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="UPCAWriter (ZXing 3.4.0 API)";
+            parent.document.title="UPCAWriter (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -221,8 +221,7 @@ implements <a href="../../../../com/google/zxing/Writer.html" title="interface i
 <pre>public&nbsp;<a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a>&nbsp;encode(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
                         <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
                         int&nbsp;width,
-                        int&nbsp;height)
-                 throws <a href="../../../../com/google/zxing/WriterException.html" title="class in com.google.zxing">WriterException</a></pre>
+                        int&nbsp;height)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../com/google/zxing/Writer.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-">Writer</a></code></span></div>
 <div class="block">Encode a barcode using the default settings.</div>
 <dl>
@@ -235,8 +234,6 @@ implements <a href="../../../../com/google/zxing/Writer.html" title="interface i
 <dd><code>height</code> - The preferred height in pixels</dd>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common"><code>BitMatrix</code></a> representing encoded barcode image</dd>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="../../../../com/google/zxing/WriterException.html" title="class in com.google.zxing">WriterException</a></code> - if contents cannot be encoded legally in a format</dd>
 </dl>
 </li>
 </ul>
@@ -250,8 +247,7 @@ implements <a href="../../../../com/google/zxing/Writer.html" title="interface i
                         <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
                         int&nbsp;width,
                         int&nbsp;height,
-                        <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a>,?&gt;&nbsp;hints)
-                 throws <a href="../../../../com/google/zxing/WriterException.html" title="class in com.google.zxing">WriterException</a></pre>
+                        <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a>,?&gt;&nbsp;hints)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../com/google/zxing/Writer.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../com/google/zxing/Writer.html" title="interface in com.google.zxing">Writer</a></code></dd>
@@ -263,8 +259,6 @@ implements <a href="../../../../com/google/zxing/Writer.html" title="interface i
 <dd><code>hints</code> - Additional parameters to supply to the encoder</dd>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common"><code>BitMatrix</code></a> representing encoded barcode image</dd>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="../../../../com/google/zxing/WriterException.html" title="class in com.google.zxing">WriterException</a></code> - if contents cannot be encoded legally in a format</dd>
 </dl>
 </li>
 </ul>
@@ -337,6 +331,6 @@ implements <a href="../../../../com/google/zxing/Writer.html" title="interface i
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/UPCEANReader.html b/docs/apidocs/com/google/zxing/oned/UPCEANReader.html
index afc15b3..db24598 100644
--- a/docs/apidocs/com/google/zxing/oned/UPCEANReader.html
+++ b/docs/apidocs/com/google/zxing/oned/UPCEANReader.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>UPCEANReader (ZXing 3.4.0 API)</title>
+<title>UPCEANReader (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="UPCEANReader (ZXing 3.4.0 API)";
+            parent.document.title="UPCEANReader (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -397,6 +397,6 @@ extends <a href="../../../../com/google/zxing/oned/OneDReader.html" title="class
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/UPCEANWriter.html b/docs/apidocs/com/google/zxing/oned/UPCEANWriter.html
index dea1e1f..5571660 100644
--- a/docs/apidocs/com/google/zxing/oned/UPCEANWriter.html
+++ b/docs/apidocs/com/google/zxing/oned/UPCEANWriter.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>UPCEANWriter (ZXing 3.4.0 API)</title>
+<title>UPCEANWriter (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="UPCEANWriter (ZXing 3.4.0 API)";
+            parent.document.title="UPCEANWriter (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -175,7 +175,7 @@ extends <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;com.google.zxing.oned.<a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html" title="class in com.google.zxing.oned">OneDimensionalCodeWriter</a></h3>
-<code><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#appendPattern-boolean:A-int-int:A-boolean-">appendPattern</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#checkNumeric-java.lang.String-">checkNumeric</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-">encode</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-">encode</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></code></li>
+<code><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#appendPattern-boolean:A-int-int:A-boolean-">appendPattern</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#checkNumeric-java.lang.String-">checkNumeric</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-">encode</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-">encode</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-java.util.Map-">encode</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#getSupportedWriteFormats--">getSupportedWriteFormats</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
@@ -297,6 +297,6 @@ extends <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/UPCEReader.html b/docs/apidocs/com/google/zxing/oned/UPCEReader.html
index 84fd705..bab348a 100644
--- a/docs/apidocs/com/google/zxing/oned/UPCEReader.html
+++ b/docs/apidocs/com/google/zxing/oned/UPCEReader.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>UPCEReader (ZXing 3.4.0 API)</title>
+<title>UPCEReader (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="UPCEReader (ZXing 3.4.0 API)";
+            parent.document.title="UPCEReader (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -389,6 +389,6 @@ extends <a href="../../../../com/google/zxing/oned/UPCEANReader.html" title="cla
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/UPCEWriter.html b/docs/apidocs/com/google/zxing/oned/UPCEWriter.html
index e0c4d36..ed5ef8c 100644
--- a/docs/apidocs/com/google/zxing/oned/UPCEWriter.html
+++ b/docs/apidocs/com/google/zxing/oned/UPCEWriter.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>UPCEWriter (ZXing 3.4.0 API)</title>
+<title>UPCEWriter (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="UPCEWriter (ZXing 3.4.0 API)";
+            parent.document.title="UPCEWriter (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -172,14 +172,8 @@ extends <a href="../../../../com/google/zxing/oned/UPCEANWriter.html" title="cla
 </td>
 </tr>
 <tr id="i1" class="rowColor">
-<td class="colFirst"><code><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCEWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
-      <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
-      int&nbsp;width,
-      int&nbsp;height,
-      <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a>,?&gt;&nbsp;hints)</code>
-<div class="block">Encode the contents following specified format.</div>
-</td>
+<td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/oned/UPCEWriter.html#getSupportedWriteFormats--">getSupportedWriteFormats</a></span>()</code>&nbsp;</td>
 </tr>
 </table>
 <ul class="blockList">
@@ -194,7 +188,7 @@ extends <a href="../../../../com/google/zxing/oned/UPCEANWriter.html" title="cla
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;com.google.zxing.oned.<a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html" title="class in com.google.zxing.oned">OneDimensionalCodeWriter</a></h3>
-<code><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#appendPattern-boolean:A-int-int:A-boolean-">appendPattern</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#checkNumeric-java.lang.String-">checkNumeric</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-">encode</a></code></li>
+<code><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#appendPattern-boolean:A-int-int:A-boolean-">appendPattern</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#checkNumeric-java.lang.String-">checkNumeric</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-">encode</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a>, <a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-java.util.Map-">encode</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
@@ -234,39 +228,16 @@ extends <a href="../../../../com/google/zxing/oned/UPCEANWriter.html" title="cla
 <!--   -->
 </a>
 <h3>Method Detail</h3>
-<a name="encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">
+<a name="getSupportedWriteFormats--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>encode</h4>
-<pre>public&nbsp;<a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a>&nbsp;encode(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contents,
-                        <a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&nbsp;format,
-                        int&nbsp;width,
-                        int&nbsp;height,
-                        <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing">EncodeHintType</a>,?&gt;&nbsp;hints)
-                 throws <a href="../../../../com/google/zxing/WriterException.html" title="class in com.google.zxing">WriterException</a></pre>
-<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">OneDimensionalCodeWriter</a></code></span></div>
-<div class="block">Encode the contents following specified format.
- <code>width</code> and <code>height</code> are required size. This method may return bigger size
- <code>BitMatrix</code> when specified size is too small. The user can set both <code>width</code> and
- <code>height</code> to zero to get minimum size barcode. If negative value is set to <code>width</code>
- or <code>height</code>, <code>IllegalArgumentException</code> is thrown.</div>
+<h4>getSupportedWriteFormats</h4>
+<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing">BarcodeFormat</a>&gt;&nbsp;getSupportedWriteFormats()</pre>
 <dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code><a href="../../../../com/google/zxing/Writer.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../com/google/zxing/Writer.html" title="interface in com.google.zxing">Writer</a></code></dd>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
-<dd><code><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode</a></code>&nbsp;in class&nbsp;<code><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html" title="class in com.google.zxing.oned">OneDimensionalCodeWriter</a></code></dd>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>contents</code> - The contents to encode in the barcode</dd>
-<dd><code>format</code> - The barcode format to generate</dd>
-<dd><code>width</code> - The preferred width in pixels</dd>
-<dd><code>height</code> - The preferred height in pixels</dd>
-<dd><code>hints</code> - Additional parameters to supply to the encoder</dd>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd><a href="../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common"><code>BitMatrix</code></a> representing encoded barcode image</dd>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="../../../../com/google/zxing/WriterException.html" title="class in com.google.zxing">WriterException</a></code> - if contents cannot be encoded legally in a format</dd>
+<dd><code><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html#getSupportedWriteFormats--">getSupportedWriteFormats</a></code>&nbsp;in class&nbsp;<code><a href="../../../../com/google/zxing/oned/OneDimensionalCodeWriter.html" title="class in com.google.zxing.oned">OneDimensionalCodeWriter</a></code></dd>
 </dl>
 </li>
 </ul>
@@ -359,6 +330,6 @@ extends <a href="../../../../com/google/zxing/oned/UPCEANWriter.html" title="cla
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/class-use/CodaBarReader.html b/docs/apidocs/com/google/zxing/oned/class-use/CodaBarReader.html
index 3b3999f..03ad200 100644
--- a/docs/apidocs/com/google/zxing/oned/class-use/CodaBarReader.html
+++ b/docs/apidocs/com/google/zxing/oned/class-use/CodaBarReader.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.oned.CodaBarReader (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.oned.CodaBarReader (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.oned.CodaBarReader (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.oned.CodaBarReader (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/class-use/CodaBarWriter.html b/docs/apidocs/com/google/zxing/oned/class-use/CodaBarWriter.html
index 251e969..0a728d2 100644
--- a/docs/apidocs/com/google/zxing/oned/class-use/CodaBarWriter.html
+++ b/docs/apidocs/com/google/zxing/oned/class-use/CodaBarWriter.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.oned.CodaBarWriter (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.oned.CodaBarWriter (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.oned.CodaBarWriter (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.oned.CodaBarWriter (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/class-use/Code128Reader.html b/docs/apidocs/com/google/zxing/oned/class-use/Code128Reader.html
index bad0da4..a4d0e1c 100644
--- a/docs/apidocs/com/google/zxing/oned/class-use/Code128Reader.html
+++ b/docs/apidocs/com/google/zxing/oned/class-use/Code128Reader.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.oned.Code128Reader (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.oned.Code128Reader (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.oned.Code128Reader (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.oned.Code128Reader (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/class-use/Code128Writer.html b/docs/apidocs/com/google/zxing/oned/class-use/Code128Writer.html
index e586958..3a09762 100644
--- a/docs/apidocs/com/google/zxing/oned/class-use/Code128Writer.html
+++ b/docs/apidocs/com/google/zxing/oned/class-use/Code128Writer.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.oned.Code128Writer (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.oned.Code128Writer (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.oned.Code128Writer (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.oned.Code128Writer (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/class-use/Code39Reader.html b/docs/apidocs/com/google/zxing/oned/class-use/Code39Reader.html
index a412343..c1251a3 100644
--- a/docs/apidocs/com/google/zxing/oned/class-use/Code39Reader.html
+++ b/docs/apidocs/com/google/zxing/oned/class-use/Code39Reader.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.oned.Code39Reader (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.oned.Code39Reader (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.oned.Code39Reader (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.oned.Code39Reader (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/class-use/Code39Writer.html b/docs/apidocs/com/google/zxing/oned/class-use/Code39Writer.html
index 7a0e40b..3ef7315 100644
--- a/docs/apidocs/com/google/zxing/oned/class-use/Code39Writer.html
+++ b/docs/apidocs/com/google/zxing/oned/class-use/Code39Writer.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.oned.Code39Writer (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.oned.Code39Writer (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.oned.Code39Writer (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.oned.Code39Writer (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/class-use/Code93Reader.html b/docs/apidocs/com/google/zxing/oned/class-use/Code93Reader.html
index 58fd028..e0fdb8b 100644
--- a/docs/apidocs/com/google/zxing/oned/class-use/Code93Reader.html
+++ b/docs/apidocs/com/google/zxing/oned/class-use/Code93Reader.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.oned.Code93Reader (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.oned.Code93Reader (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.oned.Code93Reader (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.oned.Code93Reader (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/class-use/Code93Writer.html b/docs/apidocs/com/google/zxing/oned/class-use/Code93Writer.html
index 048d542..a173cc8 100644
--- a/docs/apidocs/com/google/zxing/oned/class-use/Code93Writer.html
+++ b/docs/apidocs/com/google/zxing/oned/class-use/Code93Writer.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.oned.Code93Writer (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.oned.Code93Writer (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.oned.Code93Writer (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.oned.Code93Writer (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/class-use/EAN13Reader.html b/docs/apidocs/com/google/zxing/oned/class-use/EAN13Reader.html
index 208cf5d..9c9b530 100644
--- a/docs/apidocs/com/google/zxing/oned/class-use/EAN13Reader.html
+++ b/docs/apidocs/com/google/zxing/oned/class-use/EAN13Reader.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.oned.EAN13Reader (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.oned.EAN13Reader (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.oned.EAN13Reader (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.oned.EAN13Reader (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/class-use/EAN13Writer.html b/docs/apidocs/com/google/zxing/oned/class-use/EAN13Writer.html
index 6bb52b0..86f53ce 100644
--- a/docs/apidocs/com/google/zxing/oned/class-use/EAN13Writer.html
+++ b/docs/apidocs/com/google/zxing/oned/class-use/EAN13Writer.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.oned.EAN13Writer (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.oned.EAN13Writer (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.oned.EAN13Writer (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.oned.EAN13Writer (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/class-use/EAN8Reader.html b/docs/apidocs/com/google/zxing/oned/class-use/EAN8Reader.html
index 9c7130b..aee4968 100644
--- a/docs/apidocs/com/google/zxing/oned/class-use/EAN8Reader.html
+++ b/docs/apidocs/com/google/zxing/oned/class-use/EAN8Reader.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.oned.EAN8Reader (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.oned.EAN8Reader (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.oned.EAN8Reader (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.oned.EAN8Reader (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/class-use/EAN8Writer.html b/docs/apidocs/com/google/zxing/oned/class-use/EAN8Writer.html
index 673237c..e14f73d 100644
--- a/docs/apidocs/com/google/zxing/oned/class-use/EAN8Writer.html
+++ b/docs/apidocs/com/google/zxing/oned/class-use/EAN8Writer.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.oned.EAN8Writer (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.oned.EAN8Writer (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.oned.EAN8Writer (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.oned.EAN8Writer (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/class-use/ITFReader.html b/docs/apidocs/com/google/zxing/oned/class-use/ITFReader.html
index 2d5e832..517afef 100644
--- a/docs/apidocs/com/google/zxing/oned/class-use/ITFReader.html
+++ b/docs/apidocs/com/google/zxing/oned/class-use/ITFReader.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.oned.ITFReader (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.oned.ITFReader (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.oned.ITFReader (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.oned.ITFReader (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/class-use/ITFWriter.html b/docs/apidocs/com/google/zxing/oned/class-use/ITFWriter.html
index 9de2307..2829f1e 100644
--- a/docs/apidocs/com/google/zxing/oned/class-use/ITFWriter.html
+++ b/docs/apidocs/com/google/zxing/oned/class-use/ITFWriter.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.oned.ITFWriter (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.oned.ITFWriter (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.oned.ITFWriter (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.oned.ITFWriter (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/class-use/MultiFormatOneDReader.html b/docs/apidocs/com/google/zxing/oned/class-use/MultiFormatOneDReader.html
index b5f249c..5f6c372 100644
--- a/docs/apidocs/com/google/zxing/oned/class-use/MultiFormatOneDReader.html
+++ b/docs/apidocs/com/google/zxing/oned/class-use/MultiFormatOneDReader.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.oned.MultiFormatOneDReader (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.oned.MultiFormatOneDReader (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.oned.MultiFormatOneDReader (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.oned.MultiFormatOneDReader (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/class-use/MultiFormatUPCEANReader.html b/docs/apidocs/com/google/zxing/oned/class-use/MultiFormatUPCEANReader.html
index 710be75..896cf72 100644
--- a/docs/apidocs/com/google/zxing/oned/class-use/MultiFormatUPCEANReader.html
+++ b/docs/apidocs/com/google/zxing/oned/class-use/MultiFormatUPCEANReader.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.oned.MultiFormatUPCEANReader (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.oned.MultiFormatUPCEANReader (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.oned.MultiFormatUPCEANReader (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.oned.MultiFormatUPCEANReader (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/class-use/OneDReader.html b/docs/apidocs/com/google/zxing/oned/class-use/OneDReader.html
index 3330220..0a69b21 100644
--- a/docs/apidocs/com/google/zxing/oned/class-use/OneDReader.html
+++ b/docs/apidocs/com/google/zxing/oned/class-use/OneDReader.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.oned.OneDReader (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.oned.OneDReader (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.oned.OneDReader (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.oned.OneDReader (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -280,6 +280,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/class-use/OneDimensionalCodeWriter.html b/docs/apidocs/com/google/zxing/oned/class-use/OneDimensionalCodeWriter.html
index 4966a48..ca2f2b9 100644
--- a/docs/apidocs/com/google/zxing/oned/class-use/OneDimensionalCodeWriter.html
+++ b/docs/apidocs/com/google/zxing/oned/class-use/OneDimensionalCodeWriter.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.oned.OneDimensionalCodeWriter (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.oned.OneDimensionalCodeWriter (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.oned.OneDimensionalCodeWriter (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.oned.OneDimensionalCodeWriter (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -211,6 +211,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/class-use/UPCAReader.html b/docs/apidocs/com/google/zxing/oned/class-use/UPCAReader.html
index 47d3a18..761c852 100644
--- a/docs/apidocs/com/google/zxing/oned/class-use/UPCAReader.html
+++ b/docs/apidocs/com/google/zxing/oned/class-use/UPCAReader.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.oned.UPCAReader (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.oned.UPCAReader (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.oned.UPCAReader (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.oned.UPCAReader (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/class-use/UPCAWriter.html b/docs/apidocs/com/google/zxing/oned/class-use/UPCAWriter.html
index 8a2a47f..aedd307 100644
--- a/docs/apidocs/com/google/zxing/oned/class-use/UPCAWriter.html
+++ b/docs/apidocs/com/google/zxing/oned/class-use/UPCAWriter.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.oned.UPCAWriter (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.oned.UPCAWriter (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.oned.UPCAWriter (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.oned.UPCAWriter (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/class-use/UPCEANReader.html b/docs/apidocs/com/google/zxing/oned/class-use/UPCEANReader.html
index b7a2f84..0a8e550 100644
--- a/docs/apidocs/com/google/zxing/oned/class-use/UPCEANReader.html
+++ b/docs/apidocs/com/google/zxing/oned/class-use/UPCEANReader.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.oned.UPCEANReader (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.oned.UPCEANReader (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.oned.UPCEANReader (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.oned.UPCEANReader (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -180,6 +180,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/class-use/UPCEANWriter.html b/docs/apidocs/com/google/zxing/oned/class-use/UPCEANWriter.html
index e306e23..3a5dd60 100644
--- a/docs/apidocs/com/google/zxing/oned/class-use/UPCEANWriter.html
+++ b/docs/apidocs/com/google/zxing/oned/class-use/UPCEANWriter.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.oned.UPCEANWriter (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.oned.UPCEANWriter (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.oned.UPCEANWriter (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.oned.UPCEANWriter (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -174,6 +174,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/class-use/UPCEReader.html b/docs/apidocs/com/google/zxing/oned/class-use/UPCEReader.html
index 5775ece..c8c1139 100644
--- a/docs/apidocs/com/google/zxing/oned/class-use/UPCEReader.html
+++ b/docs/apidocs/com/google/zxing/oned/class-use/UPCEReader.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.oned.UPCEReader (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.oned.UPCEReader (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.oned.UPCEReader (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.oned.UPCEReader (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/class-use/UPCEWriter.html b/docs/apidocs/com/google/zxing/oned/class-use/UPCEWriter.html
index 2a01a8d..a598b71 100644
--- a/docs/apidocs/com/google/zxing/oned/class-use/UPCEWriter.html
+++ b/docs/apidocs/com/google/zxing/oned/class-use/UPCEWriter.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.oned.UPCEWriter (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.oned.UPCEWriter (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.oned.UPCEWriter (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.oned.UPCEWriter (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/package-frame.html b/docs/apidocs/com/google/zxing/oned/package-frame.html
index 5cd7425..85d03f5 100644
--- a/docs/apidocs/com/google/zxing/oned/package-frame.html
+++ b/docs/apidocs/com/google/zxing/oned/package-frame.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.oned (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.oned (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
diff --git a/docs/apidocs/com/google/zxing/oned/package-summary.html b/docs/apidocs/com/google/zxing/oned/package-summary.html
index 8e8c287..faa7d0c 100644
--- a/docs/apidocs/com/google/zxing/oned/package-summary.html
+++ b/docs/apidocs/com/google/zxing/oned/package-summary.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.oned (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.oned (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.oned (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.oned (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -279,6 +279,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/package-tree.html b/docs/apidocs/com/google/zxing/oned/package-tree.html
index 062b0ac..20436e0 100644
--- a/docs/apidocs/com/google/zxing/oned/package-tree.html
+++ b/docs/apidocs/com/google/zxing/oned/package-tree.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.oned Class Hierarchy (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.oned Class Hierarchy (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.oned Class Hierarchy (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.oned Class Hierarchy (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -168,6 +168,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/package-use.html b/docs/apidocs/com/google/zxing/oned/package-use.html
index 9a53ec4..db21ada 100644
--- a/docs/apidocs/com/google/zxing/oned/package-use.html
+++ b/docs/apidocs/com/google/zxing/oned/package-use.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Package com.google.zxing.oned (ZXing 3.4.0 API)</title>
+<title>Uses of Package com.google.zxing.oned (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Package com.google.zxing.oned (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Package com.google.zxing.oned (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -217,6 +217,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/rss/AbstractRSSReader.html b/docs/apidocs/com/google/zxing/oned/rss/AbstractRSSReader.html
index 2819113..ea2f289 100644
--- a/docs/apidocs/com/google/zxing/oned/rss/AbstractRSSReader.html
+++ b/docs/apidocs/com/google/zxing/oned/rss/AbstractRSSReader.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>AbstractRSSReader (ZXing 3.4.0 API)</title>
+<title>AbstractRSSReader (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="AbstractRSSReader (ZXing 3.4.0 API)";
+            parent.document.title="AbstractRSSReader (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -444,6 +444,6 @@ protected static&nbsp;int&nbsp;count(int[]&nbsp;array)</pre>
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/rss/DataCharacter.html b/docs/apidocs/com/google/zxing/oned/rss/DataCharacter.html
index 23bd282..7465ce8 100644
--- a/docs/apidocs/com/google/zxing/oned/rss/DataCharacter.html
+++ b/docs/apidocs/com/google/zxing/oned/rss/DataCharacter.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>DataCharacter (ZXing 3.4.0 API)</title>
+<title>DataCharacter (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="DataCharacter (ZXing 3.4.0 API)";
+            parent.document.title="DataCharacter (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -334,6 +334,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/rss/FinderPattern.html b/docs/apidocs/com/google/zxing/oned/rss/FinderPattern.html
index 8c79e2e..e121981 100644
--- a/docs/apidocs/com/google/zxing/oned/rss/FinderPattern.html
+++ b/docs/apidocs/com/google/zxing/oned/rss/FinderPattern.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>FinderPattern (ZXing 3.4.0 API)</title>
+<title>FinderPattern (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="FinderPattern (ZXing 3.4.0 API)";
+            parent.document.title="FinderPattern (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -336,6 +336,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/rss/RSS14Reader.html b/docs/apidocs/com/google/zxing/oned/rss/RSS14Reader.html
index a8a693d..cb4dfdb 100644
--- a/docs/apidocs/com/google/zxing/oned/rss/RSS14Reader.html
+++ b/docs/apidocs/com/google/zxing/oned/rss/RSS14Reader.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>RSS14Reader (ZXing 3.4.0 API)</title>
+<title>RSS14Reader (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="RSS14Reader (ZXing 3.4.0 API)";
+            parent.document.title="RSS14Reader (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -344,6 +344,6 @@ extends <a href="../../../../../com/google/zxing/oned/rss/AbstractRSSReader.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/rss/RSSUtils.html b/docs/apidocs/com/google/zxing/oned/rss/RSSUtils.html
index 7057f61..1cd0a91 100644
--- a/docs/apidocs/com/google/zxing/oned/rss/RSSUtils.html
+++ b/docs/apidocs/com/google/zxing/oned/rss/RSSUtils.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>RSSUtils (ZXing 3.4.0 API)</title>
+<title>RSSUtils (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="RSSUtils (ZXing 3.4.0 API)";
+            parent.document.title="RSSUtils (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -238,6 +238,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/rss/class-use/AbstractRSSReader.html b/docs/apidocs/com/google/zxing/oned/rss/class-use/AbstractRSSReader.html
index 60b175d..3c0717c 100644
--- a/docs/apidocs/com/google/zxing/oned/rss/class-use/AbstractRSSReader.html
+++ b/docs/apidocs/com/google/zxing/oned/rss/class-use/AbstractRSSReader.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.oned.rss.AbstractRSSReader (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.oned.rss.AbstractRSSReader (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.oned.rss.AbstractRSSReader (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.oned.rss.AbstractRSSReader (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -184,6 +184,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/rss/class-use/DataCharacter.html b/docs/apidocs/com/google/zxing/oned/rss/class-use/DataCharacter.html
index fe3165a..190964b 100644
--- a/docs/apidocs/com/google/zxing/oned/rss/class-use/DataCharacter.html
+++ b/docs/apidocs/com/google/zxing/oned/rss/class-use/DataCharacter.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.oned.rss.DataCharacter (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.oned.rss.DataCharacter (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.oned.rss.DataCharacter (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.oned.rss.DataCharacter (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/rss/class-use/FinderPattern.html b/docs/apidocs/com/google/zxing/oned/rss/class-use/FinderPattern.html
index 9ee8218..e99a444 100644
--- a/docs/apidocs/com/google/zxing/oned/rss/class-use/FinderPattern.html
+++ b/docs/apidocs/com/google/zxing/oned/rss/class-use/FinderPattern.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.oned.rss.FinderPattern (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.oned.rss.FinderPattern (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.oned.rss.FinderPattern (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.oned.rss.FinderPattern (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/rss/class-use/RSS14Reader.html b/docs/apidocs/com/google/zxing/oned/rss/class-use/RSS14Reader.html
index e189dde..ee52784 100644
--- a/docs/apidocs/com/google/zxing/oned/rss/class-use/RSS14Reader.html
+++ b/docs/apidocs/com/google/zxing/oned/rss/class-use/RSS14Reader.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.oned.rss.RSS14Reader (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.oned.rss.RSS14Reader (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.oned.rss.RSS14Reader (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.oned.rss.RSS14Reader (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/rss/class-use/RSSUtils.html b/docs/apidocs/com/google/zxing/oned/rss/class-use/RSSUtils.html
index 94f574e..e082999 100644
--- a/docs/apidocs/com/google/zxing/oned/rss/class-use/RSSUtils.html
+++ b/docs/apidocs/com/google/zxing/oned/rss/class-use/RSSUtils.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.oned.rss.RSSUtils (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.oned.rss.RSSUtils (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.oned.rss.RSSUtils (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.oned.rss.RSSUtils (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/rss/expanded/RSSExpandedReader.html b/docs/apidocs/com/google/zxing/oned/rss/expanded/RSSExpandedReader.html
index 07f0709..0dd437e 100644
--- a/docs/apidocs/com/google/zxing/oned/rss/expanded/RSSExpandedReader.html
+++ b/docs/apidocs/com/google/zxing/oned/rss/expanded/RSSExpandedReader.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>RSSExpandedReader (ZXing 3.4.0 API)</title>
+<title>RSSExpandedReader (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="RSSExpandedReader (ZXing 3.4.0 API)";
+            parent.document.title="RSSExpandedReader (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -349,6 +349,6 @@ extends <a href="../../../../../../com/google/zxing/oned/rss/AbstractRSSReader.h
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/rss/expanded/class-use/RSSExpandedReader.html b/docs/apidocs/com/google/zxing/oned/rss/expanded/class-use/RSSExpandedReader.html
index 1746945..034bf0d 100644
--- a/docs/apidocs/com/google/zxing/oned/rss/expanded/class-use/RSSExpandedReader.html
+++ b/docs/apidocs/com/google/zxing/oned/rss/expanded/class-use/RSSExpandedReader.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.oned.rss.expanded.RSSExpandedReader (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.oned.rss.expanded.RSSExpandedReader (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.oned.rss.expanded.RSSExpandedReader (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.oned.rss.expanded.RSSExpandedReader (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/rss/expanded/decoders/AbstractExpandedDecoder.html b/docs/apidocs/com/google/zxing/oned/rss/expanded/decoders/AbstractExpandedDecoder.html
index d13bc70..1e6591a 100644
--- a/docs/apidocs/com/google/zxing/oned/rss/expanded/decoders/AbstractExpandedDecoder.html
+++ b/docs/apidocs/com/google/zxing/oned/rss/expanded/decoders/AbstractExpandedDecoder.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>AbstractExpandedDecoder (ZXing 3.4.0 API)</title>
+<title>AbstractExpandedDecoder (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="AbstractExpandedDecoder (ZXing 3.4.0 API)";
+            parent.document.title="AbstractExpandedDecoder (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -283,6 +283,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/rss/expanded/decoders/class-use/AbstractExpandedDecoder.html b/docs/apidocs/com/google/zxing/oned/rss/expanded/decoders/class-use/AbstractExpandedDecoder.html
index 142a657..a6ed8cf 100644
--- a/docs/apidocs/com/google/zxing/oned/rss/expanded/decoders/class-use/AbstractExpandedDecoder.html
+++ b/docs/apidocs/com/google/zxing/oned/rss/expanded/decoders/class-use/AbstractExpandedDecoder.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.oned.rss.expanded.decoders.AbstractExpandedDecoder (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.oned.rss.expanded.decoders.AbstractExpandedDecoder (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.oned.rss.expanded.decoders.AbstractExpandedDecoder (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.oned.rss.expanded.decoders.AbstractExpandedDecoder (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -160,6 +160,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/rss/expanded/decoders/package-frame.html b/docs/apidocs/com/google/zxing/oned/rss/expanded/decoders/package-frame.html
index daa91f7..53a18bf 100644
--- a/docs/apidocs/com/google/zxing/oned/rss/expanded/decoders/package-frame.html
+++ b/docs/apidocs/com/google/zxing/oned/rss/expanded/decoders/package-frame.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.oned.rss.expanded.decoders (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.oned.rss.expanded.decoders (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../../script.js"></script>
 </head>
diff --git a/docs/apidocs/com/google/zxing/oned/rss/expanded/decoders/package-summary.html b/docs/apidocs/com/google/zxing/oned/rss/expanded/decoders/package-summary.html
index 468ffba..c7b4e2b 100644
--- a/docs/apidocs/com/google/zxing/oned/rss/expanded/decoders/package-summary.html
+++ b/docs/apidocs/com/google/zxing/oned/rss/expanded/decoders/package-summary.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.oned.rss.expanded.decoders (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.oned.rss.expanded.decoders (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.oned.rss.expanded.decoders (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.oned.rss.expanded.decoders (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -138,6 +138,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/rss/expanded/decoders/package-tree.html b/docs/apidocs/com/google/zxing/oned/rss/expanded/decoders/package-tree.html
index 66410d8..0898d04 100644
--- a/docs/apidocs/com/google/zxing/oned/rss/expanded/decoders/package-tree.html
+++ b/docs/apidocs/com/google/zxing/oned/rss/expanded/decoders/package-tree.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.oned.rss.expanded.decoders Class Hierarchy (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.oned.rss.expanded.decoders Class Hierarchy (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.oned.rss.expanded.decoders Class Hierarchy (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.oned.rss.expanded.decoders Class Hierarchy (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -133,6 +133,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/rss/expanded/decoders/package-use.html b/docs/apidocs/com/google/zxing/oned/rss/expanded/decoders/package-use.html
index d0d83e0..7ac84cc 100644
--- a/docs/apidocs/com/google/zxing/oned/rss/expanded/decoders/package-use.html
+++ b/docs/apidocs/com/google/zxing/oned/rss/expanded/decoders/package-use.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Package com.google.zxing.oned.rss.expanded.decoders (ZXing 3.4.0 API)</title>
+<title>Uses of Package com.google.zxing.oned.rss.expanded.decoders (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Package com.google.zxing.oned.rss.expanded.decoders (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Package com.google.zxing.oned.rss.expanded.decoders (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -153,6 +153,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/rss/expanded/package-frame.html b/docs/apidocs/com/google/zxing/oned/rss/expanded/package-frame.html
index 4739e64..41ef75b 100644
--- a/docs/apidocs/com/google/zxing/oned/rss/expanded/package-frame.html
+++ b/docs/apidocs/com/google/zxing/oned/rss/expanded/package-frame.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.oned.rss.expanded (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.oned.rss.expanded (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
diff --git a/docs/apidocs/com/google/zxing/oned/rss/expanded/package-summary.html b/docs/apidocs/com/google/zxing/oned/rss/expanded/package-summary.html
index 1b22632..a6f8b59 100644
--- a/docs/apidocs/com/google/zxing/oned/rss/expanded/package-summary.html
+++ b/docs/apidocs/com/google/zxing/oned/rss/expanded/package-summary.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.oned.rss.expanded (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.oned.rss.expanded (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.oned.rss.expanded (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.oned.rss.expanded (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -138,6 +138,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/rss/expanded/package-tree.html b/docs/apidocs/com/google/zxing/oned/rss/expanded/package-tree.html
index 780c86e..60139eb 100644
--- a/docs/apidocs/com/google/zxing/oned/rss/expanded/package-tree.html
+++ b/docs/apidocs/com/google/zxing/oned/rss/expanded/package-tree.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.oned.rss.expanded Class Hierarchy (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.oned.rss.expanded Class Hierarchy (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.oned.rss.expanded Class Hierarchy (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.oned.rss.expanded Class Hierarchy (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -141,6 +141,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/rss/expanded/package-use.html b/docs/apidocs/com/google/zxing/oned/rss/expanded/package-use.html
index 8c010fe..41c9e99 100644
--- a/docs/apidocs/com/google/zxing/oned/rss/expanded/package-use.html
+++ b/docs/apidocs/com/google/zxing/oned/rss/expanded/package-use.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Package com.google.zxing.oned.rss.expanded (ZXing 3.4.0 API)</title>
+<title>Uses of Package com.google.zxing.oned.rss.expanded (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Package com.google.zxing.oned.rss.expanded (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Package com.google.zxing.oned.rss.expanded (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/rss/package-frame.html b/docs/apidocs/com/google/zxing/oned/rss/package-frame.html
index 9a1f9d6..5ce068c 100644
--- a/docs/apidocs/com/google/zxing/oned/rss/package-frame.html
+++ b/docs/apidocs/com/google/zxing/oned/rss/package-frame.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.oned.rss (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.oned.rss (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
diff --git a/docs/apidocs/com/google/zxing/oned/rss/package-summary.html b/docs/apidocs/com/google/zxing/oned/rss/package-summary.html
index 2f382b5..1c99f7a 100644
--- a/docs/apidocs/com/google/zxing/oned/rss/package-summary.html
+++ b/docs/apidocs/com/google/zxing/oned/rss/package-summary.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.oned.rss (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.oned.rss (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.oned.rss (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.oned.rss (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -165,6 +165,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/rss/package-tree.html b/docs/apidocs/com/google/zxing/oned/rss/package-tree.html
index a0193c3..83aad2e 100644
--- a/docs/apidocs/com/google/zxing/oned/rss/package-tree.html
+++ b/docs/apidocs/com/google/zxing/oned/rss/package-tree.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.oned.rss Class Hierarchy (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.oned.rss Class Hierarchy (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.oned.rss Class Hierarchy (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.oned.rss Class Hierarchy (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -144,6 +144,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/oned/rss/package-use.html b/docs/apidocs/com/google/zxing/oned/rss/package-use.html
index abc462f..7c2dfe7 100644
--- a/docs/apidocs/com/google/zxing/oned/rss/package-use.html
+++ b/docs/apidocs/com/google/zxing/oned/rss/package-use.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Package com.google.zxing.oned.rss (ZXing 3.4.0 API)</title>
+<title>Uses of Package com.google.zxing.oned.rss (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Package com.google.zxing.oned.rss (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Package com.google.zxing.oned.rss (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -178,6 +178,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/package-frame.html b/docs/apidocs/com/google/zxing/package-frame.html
index 6179f7d..9298755 100644
--- a/docs/apidocs/com/google/zxing/package-frame.html
+++ b/docs/apidocs/com/google/zxing/package-frame.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing (ZXing 3.4.0 API)</title>
+<title>com.google.zxing (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../script.js"></script>
 </head>
diff --git a/docs/apidocs/com/google/zxing/package-summary.html b/docs/apidocs/com/google/zxing/package-summary.html
index 2477d59..96e02c8 100644
--- a/docs/apidocs/com/google/zxing/package-summary.html
+++ b/docs/apidocs/com/google/zxing/package-summary.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing (ZXing 3.4.0 API)</title>
+<title>com.google.zxing (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -317,6 +317,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/package-tree.html b/docs/apidocs/com/google/zxing/package-tree.html
index 1de6c88..fbe813c 100644
--- a/docs/apidocs/com/google/zxing/package-tree.html
+++ b/docs/apidocs/com/google/zxing/package-tree.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing Class Hierarchy (ZXing 3.4.0 API)</title>
+<title>com.google.zxing Class Hierarchy (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing Class Hierarchy (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing Class Hierarchy (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -126,8 +126,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">com.google.zxing.<a href="../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing"><span class="typeNameLink">DecodeHintType</span></a></li>
 <li type="circle">com.google.zxing.<a href="../../../com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing"><span class="typeNameLink">BarcodeFormat</span></a></li>
+<li type="circle">com.google.zxing.<a href="../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing"><span class="typeNameLink">DecodeHintType</span></a></li>
 <li type="circle">com.google.zxing.<a href="../../../com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing"><span class="typeNameLink">EncodeHintType</span></a></li>
 <li type="circle">com.google.zxing.<a href="../../../com/google/zxing/ResultMetadataType.html" title="enum in com.google.zxing"><span class="typeNameLink">ResultMetadataType</span></a></li>
 </ul>
@@ -183,6 +183,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/package-use.html b/docs/apidocs/com/google/zxing/package-use.html
index 277c151..9ef77b1 100644
--- a/docs/apidocs/com/google/zxing/package-use.html
+++ b/docs/apidocs/com/google/zxing/package-use.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Package com.google.zxing (ZXing 3.4.0 API)</title>
+<title>Uses of Package com.google.zxing (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Package com.google.zxing (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Package com.google.zxing (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -91,14 +91,6 @@
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><a href="#com.google.zxing.aztec.decoder">com.google.zxing.aztec.decoder</a></td>
-<td class="colLast">&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><a href="#com.google.zxing.aztec.detector">com.google.zxing.aztec.detector</a></td>
-<td class="colLast">&nbsp;</td>
-</tr>
-<tr class="altColor">
 <td class="colFirst"><a href="#com.google.zxing.client.j2se">com.google.zxing.client.j2se</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
@@ -119,74 +111,78 @@
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a href="#com.google.zxing.datamatrix.encoder">com.google.zxing.datamatrix.encoder</a></td>
+<td class="colFirst"><a href="#com.google.zxing.datamatrix.decoder">com.google.zxing.datamatrix.decoder</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><a href="#com.google.zxing.maxicode">com.google.zxing.maxicode</a></td>
+<td class="colFirst"><a href="#com.google.zxing.datamatrix.encoder">com.google.zxing.datamatrix.encoder</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a href="#com.google.zxing.multi">com.google.zxing.multi</a></td>
+<td class="colFirst"><a href="#com.google.zxing.maxicode">com.google.zxing.maxicode</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><a href="#com.google.zxing.multi.qrcode">com.google.zxing.multi.qrcode</a></td>
+<td class="colFirst"><a href="#com.google.zxing.multi">com.google.zxing.multi</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a href="#com.google.zxing.multi.qrcode.detector">com.google.zxing.multi.qrcode.detector</a></td>
+<td class="colFirst"><a href="#com.google.zxing.multi.qrcode">com.google.zxing.multi.qrcode</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><a href="#com.google.zxing.oned">com.google.zxing.oned</a></td>
+<td class="colFirst"><a href="#com.google.zxing.multi.qrcode.detector">com.google.zxing.multi.qrcode.detector</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a href="#com.google.zxing.oned.rss">com.google.zxing.oned.rss</a></td>
+<td class="colFirst"><a href="#com.google.zxing.oned">com.google.zxing.oned</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><a href="#com.google.zxing.oned.rss.expanded">com.google.zxing.oned.rss.expanded</a></td>
+<td class="colFirst"><a href="#com.google.zxing.oned.rss">com.google.zxing.oned.rss</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a href="#com.google.zxing.oned.rss.expanded.decoders">com.google.zxing.oned.rss.expanded.decoders</a></td>
+<td class="colFirst"><a href="#com.google.zxing.oned.rss.expanded">com.google.zxing.oned.rss.expanded</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><a href="#com.google.zxing.pdf417">com.google.zxing.pdf417</a></td>
+<td class="colFirst"><a href="#com.google.zxing.oned.rss.expanded.decoders">com.google.zxing.oned.rss.expanded.decoders</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a href="#com.google.zxing.pdf417.decoder">com.google.zxing.pdf417.decoder</a></td>
+<td class="colFirst"><a href="#com.google.zxing.pdf417">com.google.zxing.pdf417</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><a href="#com.google.zxing.pdf417.decoder.ec">com.google.zxing.pdf417.decoder.ec</a></td>
+<td class="colFirst"><a href="#com.google.zxing.pdf417.decoder">com.google.zxing.pdf417.decoder</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a href="#com.google.zxing.pdf417.detector">com.google.zxing.pdf417.detector</a></td>
+<td class="colFirst"><a href="#com.google.zxing.pdf417.decoder.ec">com.google.zxing.pdf417.decoder.ec</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><a href="#com.google.zxing.pdf417.encoder">com.google.zxing.pdf417.encoder</a></td>
+<td class="colFirst"><a href="#com.google.zxing.pdf417.detector">com.google.zxing.pdf417.detector</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a href="#com.google.zxing.qrcode">com.google.zxing.qrcode</a></td>
+<td class="colFirst"><a href="#com.google.zxing.pdf417.encoder">com.google.zxing.pdf417.encoder</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><a href="#com.google.zxing.qrcode.decoder">com.google.zxing.qrcode.decoder</a></td>
+<td class="colFirst"><a href="#com.google.zxing.qrcode">com.google.zxing.qrcode</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a href="#com.google.zxing.qrcode.detector">com.google.zxing.qrcode.detector</a></td>
+<td class="colFirst"><a href="#com.google.zxing.qrcode.decoder">com.google.zxing.qrcode.decoder</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><a href="#com.google.zxing.qrcode.detector">com.google.zxing.qrcode.detector</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><a href="#com.google.zxing.qrcode.encoder">com.google.zxing.qrcode.encoder</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
@@ -357,41 +353,6 @@
 </tbody>
 </table>
 </li>
-<li class="blockList"><a name="com.google.zxing.aztec.decoder">
-<!--   -->
-</a>
-<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing classes, and an explanation">
-<caption><span>Classes in <a href="../../../com/google/zxing/package-summary.html">com.google.zxing</a> used by <a href="../../../com/google/zxing/aztec/decoder/package-summary.html">com.google.zxing.aztec.decoder</a></span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colOne" scope="col">Class and Description</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colOne"><a href="../../../com/google/zxing/class-use/FormatException.html#com.google.zxing.aztec.decoder">FormatException</a>
-<div class="block">Thrown when a barcode was successfully detected, but some aspect of
- the content did not conform to the barcode's format rules.</div>
-</td>
-</tr>
-</tbody>
-</table>
-</li>
-<li class="blockList"><a name="com.google.zxing.aztec.detector">
-<!--   -->
-</a>
-<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing classes, and an explanation">
-<caption><span>Classes in <a href="../../../com/google/zxing/package-summary.html">com.google.zxing</a> used by <a href="../../../com/google/zxing/aztec/detector/package-summary.html">com.google.zxing.aztec.detector</a></span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colOne" scope="col">Class and Description</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colOne"><a href="../../../com/google/zxing/class-use/NotFoundException.html#com.google.zxing.aztec.detector">NotFoundException</a>
-<div class="block">Thrown when a barcode was not found in the image.</div>
-</td>
-</tr>
-</tbody>
-</table>
-</li>
 <li class="blockList"><a name="com.google.zxing.client.j2se">
 <!--   -->
 </a>
@@ -560,6 +521,30 @@
 </tbody>
 </table>
 </li>
+<li class="blockList"><a name="com.google.zxing.datamatrix.decoder">
+<!--   -->
+</a>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing classes, and an explanation">
+<caption><span>Classes in <a href="../../../com/google/zxing/package-summary.html">com.google.zxing</a> used by <a href="../../../com/google/zxing/datamatrix/decoder/package-summary.html">com.google.zxing.datamatrix.decoder</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Class and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colOne"><a href="../../../com/google/zxing/class-use/ChecksumException.html#com.google.zxing.datamatrix.decoder">ChecksumException</a>
+<div class="block">Thrown when a barcode was successfully detected and decoded, but
+ was not returned because its checksum feature failed.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colOne"><a href="../../../com/google/zxing/class-use/FormatException.html#com.google.zxing.datamatrix.decoder">FormatException</a>
+<div class="block">Thrown when a barcode was successfully detected, but some aspect of
+ the content did not conform to the barcode's format rules.</div>
+</td>
+</tr>
+</tbody>
+</table>
+</li>
 <li class="blockList"><a name="com.google.zxing.datamatrix.encoder">
 <!--   -->
 </a>
@@ -738,6 +723,12 @@
 <div class="block">Thrown when a barcode was not found in the image.</div>
 </td>
 </tr>
+<tr class="altColor">
+<td class="colOne"><a href="../../../com/google/zxing/class-use/ResultPointCallback.html#com.google.zxing.multi.qrcode.detector">ResultPointCallback</a>
+<div class="block">Callback which is invoked when a possible result point (significant
+ point in the barcode image such as a corner) is found.</div>
+</td>
+</tr>
 </tbody>
 </table>
 </li>
@@ -804,12 +795,6 @@
 <div class="block">The base class for all objects which encode/generate a barcode image.</div>
 </td>
 </tr>
-<tr class="altColor">
-<td class="colOne"><a href="../../../com/google/zxing/class-use/WriterException.html#com.google.zxing.oned">WriterException</a>
-<div class="block">A base class which covers the range of exceptions which may occur when encoding a barcode using
- the Writer framework.</div>
-</td>
-</tr>
 </tbody>
 </table>
 </li>
@@ -1048,6 +1033,17 @@
 <div class="block">This class is the core bitmap class used by ZXing to represent 1 bit data.</div>
 </td>
 </tr>
+<tr class="rowColor">
+<td class="colOne"><a href="../../../com/google/zxing/class-use/DecodeHintType.html#com.google.zxing.pdf417.detector">DecodeHintType</a>
+<div class="block">Encapsulates a type of hint that a caller may pass to a barcode reader to help it
+ more quickly or accurately decode it.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colOne"><a href="../../../com/google/zxing/class-use/NotFoundException.html#com.google.zxing.pdf417.detector">NotFoundException</a>
+<div class="block">Thrown when a barcode was not found in the image.</div>
+</td>
+</tr>
 </tbody>
 </table>
 </li>
@@ -1151,23 +1147,11 @@
 </tr>
 <tbody>
 <tr class="altColor">
-<td class="colOne"><a href="../../../com/google/zxing/class-use/ChecksumException.html#com.google.zxing.qrcode.decoder">ChecksumException</a>
-<div class="block">Thrown when a barcode was successfully detected and decoded, but
- was not returned because its checksum feature failed.</div>
-</td>
-</tr>
-<tr class="rowColor">
 <td class="colOne"><a href="../../../com/google/zxing/class-use/DecodeHintType.html#com.google.zxing.qrcode.decoder">DecodeHintType</a>
 <div class="block">Encapsulates a type of hint that a caller may pass to a barcode reader to help it
  more quickly or accurately decode it.</div>
 </td>
 </tr>
-<tr class="altColor">
-<td class="colOne"><a href="../../../com/google/zxing/class-use/FormatException.html#com.google.zxing.qrcode.decoder">FormatException</a>
-<div class="block">Thrown when a barcode was successfully detected, but some aspect of
- the content did not conform to the barcode's format rules.</div>
-</td>
-</tr>
 <tr class="rowColor">
 <td class="colOne"><a href="../../../com/google/zxing/class-use/ResultPoint.html#com.google.zxing.qrcode.decoder">ResultPoint</a>
 <div class="block">Encapsulates a point of interest in an image containing a barcode.</div>
@@ -1186,23 +1170,17 @@
 </tr>
 <tbody>
 <tr class="altColor">
-<td class="colOne"><a href="../../../com/google/zxing/class-use/DecodeHintType.html#com.google.zxing.qrcode.detector">DecodeHintType</a>
-<div class="block">Encapsulates a type of hint that a caller may pass to a barcode reader to help it
- more quickly or accurately decode it.</div>
-</td>
-</tr>
-<tr class="rowColor">
 <td class="colOne"><a href="../../../com/google/zxing/class-use/FormatException.html#com.google.zxing.qrcode.detector">FormatException</a>
 <div class="block">Thrown when a barcode was successfully detected, but some aspect of
  the content did not conform to the barcode's format rules.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../com/google/zxing/class-use/ResultPoint.html#com.google.zxing.qrcode.detector">ResultPoint</a>
 <div class="block">Encapsulates a point of interest in an image containing a barcode.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../com/google/zxing/class-use/ResultPointCallback.html#com.google.zxing.qrcode.detector">ResultPointCallback</a>
 <div class="block">Callback which is invoked when a possible result point (significant
  point in the barcode image such as a corner) is found.</div>
@@ -1283,6 +1261,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/pdf417/PDF417Common.html b/docs/apidocs/com/google/zxing/pdf417/PDF417Common.html
index 2b87c6a..66e594b 100644
--- a/docs/apidocs/com/google/zxing/pdf417/PDF417Common.html
+++ b/docs/apidocs/com/google/zxing/pdf417/PDF417Common.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>PDF417Common (ZXing 3.4.0 API)</title>
+<title>PDF417Common (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="PDF417Common (ZXing 3.4.0 API)";
+            parent.document.title="PDF417Common (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -441,6 +441,6 @@ public static&nbsp;int&nbsp;getBitCountSum(int[]&nbsp;moduleBitCount)</pre>
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/pdf417/PDF417Reader.html b/docs/apidocs/com/google/zxing/pdf417/PDF417Reader.html
index 3b627c2..b45eb93 100644
--- a/docs/apidocs/com/google/zxing/pdf417/PDF417Reader.html
+++ b/docs/apidocs/com/google/zxing/pdf417/PDF417Reader.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>PDF417Reader (ZXing 3.4.0 API)</title>
+<title>PDF417Reader (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="PDF417Reader (ZXing 3.4.0 API)";
+            parent.document.title="PDF417Reader (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -399,6 +399,6 @@ implements <a href="../../../../com/google/zxing/Reader.html" title="interface i
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/pdf417/PDF417ResultMetadata.html b/docs/apidocs/com/google/zxing/pdf417/PDF417ResultMetadata.html
index 6b622e5..6ab0a8d 100644
--- a/docs/apidocs/com/google/zxing/pdf417/PDF417ResultMetadata.html
+++ b/docs/apidocs/com/google/zxing/pdf417/PDF417ResultMetadata.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>PDF417ResultMetadata (ZXing 3.4.0 API)</title>
+<title>PDF417ResultMetadata (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="PDF417ResultMetadata (ZXing 3.4.0 API)";
+            parent.document.title="PDF417ResultMetadata (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -614,6 +614,6 @@ public&nbsp;void&nbsp;setOptionalData(int[]&nbsp;optionalData)</pre>
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/pdf417/PDF417Writer.html b/docs/apidocs/com/google/zxing/pdf417/PDF417Writer.html
index 835a613..a33e79a 100644
--- a/docs/apidocs/com/google/zxing/pdf417/PDF417Writer.html
+++ b/docs/apidocs/com/google/zxing/pdf417/PDF417Writer.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>PDF417Writer (ZXing 3.4.0 API)</title>
+<title>PDF417Writer (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="PDF417Writer (ZXing 3.4.0 API)";
+            parent.document.title="PDF417Writer (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -336,6 +336,6 @@ implements <a href="../../../../com/google/zxing/Writer.html" title="interface i
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/pdf417/class-use/PDF417Common.html b/docs/apidocs/com/google/zxing/pdf417/class-use/PDF417Common.html
index 32bc4fd..64c2a25 100644
--- a/docs/apidocs/com/google/zxing/pdf417/class-use/PDF417Common.html
+++ b/docs/apidocs/com/google/zxing/pdf417/class-use/PDF417Common.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.pdf417.PDF417Common (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.pdf417.PDF417Common (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.pdf417.PDF417Common (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.pdf417.PDF417Common (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/pdf417/class-use/PDF417Reader.html b/docs/apidocs/com/google/zxing/pdf417/class-use/PDF417Reader.html
index 32b2232..5e900e4 100644
--- a/docs/apidocs/com/google/zxing/pdf417/class-use/PDF417Reader.html
+++ b/docs/apidocs/com/google/zxing/pdf417/class-use/PDF417Reader.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.pdf417.PDF417Reader (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.pdf417.PDF417Reader (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.pdf417.PDF417Reader (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.pdf417.PDF417Reader (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/pdf417/class-use/PDF417ResultMetadata.html b/docs/apidocs/com/google/zxing/pdf417/class-use/PDF417ResultMetadata.html
index 3af2b9b..41d0d8d 100644
--- a/docs/apidocs/com/google/zxing/pdf417/class-use/PDF417ResultMetadata.html
+++ b/docs/apidocs/com/google/zxing/pdf417/class-use/PDF417ResultMetadata.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.pdf417.PDF417ResultMetadata (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.pdf417.PDF417ResultMetadata (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.pdf417.PDF417ResultMetadata (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.pdf417.PDF417ResultMetadata (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/pdf417/class-use/PDF417Writer.html b/docs/apidocs/com/google/zxing/pdf417/class-use/PDF417Writer.html
index 77eb531..5a7b195 100644
--- a/docs/apidocs/com/google/zxing/pdf417/class-use/PDF417Writer.html
+++ b/docs/apidocs/com/google/zxing/pdf417/class-use/PDF417Writer.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.pdf417.PDF417Writer (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.pdf417.PDF417Writer (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.pdf417.PDF417Writer (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.pdf417.PDF417Writer (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/pdf417/decoder/PDF417ScanningDecoder.html b/docs/apidocs/com/google/zxing/pdf417/decoder/PDF417ScanningDecoder.html
index b4f2a5f..434737c 100644
--- a/docs/apidocs/com/google/zxing/pdf417/decoder/PDF417ScanningDecoder.html
+++ b/docs/apidocs/com/google/zxing/pdf417/decoder/PDF417ScanningDecoder.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>PDF417ScanningDecoder (ZXing 3.4.0 API)</title>
+<title>PDF417ScanningDecoder (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="PDF417ScanningDecoder (ZXing 3.4.0 API)";
+            parent.document.title="PDF417ScanningDecoder (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -271,6 +271,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/pdf417/decoder/class-use/PDF417ScanningDecoder.html b/docs/apidocs/com/google/zxing/pdf417/decoder/class-use/PDF417ScanningDecoder.html
index 61f8c79..cc24a66 100644
--- a/docs/apidocs/com/google/zxing/pdf417/decoder/class-use/PDF417ScanningDecoder.html
+++ b/docs/apidocs/com/google/zxing/pdf417/decoder/class-use/PDF417ScanningDecoder.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.pdf417.decoder.PDF417ScanningDecoder (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.pdf417.decoder.PDF417ScanningDecoder (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.pdf417.decoder.PDF417ScanningDecoder (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.pdf417.decoder.PDF417ScanningDecoder (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/pdf417/decoder/ec/ErrorCorrection.html b/docs/apidocs/com/google/zxing/pdf417/decoder/ec/ErrorCorrection.html
index 05369f3..6720162 100644
--- a/docs/apidocs/com/google/zxing/pdf417/decoder/ec/ErrorCorrection.html
+++ b/docs/apidocs/com/google/zxing/pdf417/decoder/ec/ErrorCorrection.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>ErrorCorrection (ZXing 3.4.0 API)</title>
+<title>ErrorCorrection (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="ErrorCorrection (ZXing 3.4.0 API)";
+            parent.document.title="ErrorCorrection (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -292,6 +292,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/pdf417/decoder/ec/ModulusGF.html b/docs/apidocs/com/google/zxing/pdf417/decoder/ec/ModulusGF.html
index 4e8a6b5..6765b7f 100644
--- a/docs/apidocs/com/google/zxing/pdf417/decoder/ec/ModulusGF.html
+++ b/docs/apidocs/com/google/zxing/pdf417/decoder/ec/ModulusGF.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>ModulusGF (ZXing 3.4.0 API)</title>
+<title>ModulusGF (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="ModulusGF (ZXing 3.4.0 API)";
+            parent.document.title="ModulusGF (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -242,6 +242,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/pdf417/decoder/ec/class-use/ErrorCorrection.html b/docs/apidocs/com/google/zxing/pdf417/decoder/ec/class-use/ErrorCorrection.html
index f8ada3e..1aeaf4f 100644
--- a/docs/apidocs/com/google/zxing/pdf417/decoder/ec/class-use/ErrorCorrection.html
+++ b/docs/apidocs/com/google/zxing/pdf417/decoder/ec/class-use/ErrorCorrection.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.pdf417.decoder.ec.ErrorCorrection (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.pdf417.decoder.ec.ErrorCorrection (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.pdf417.decoder.ec.ErrorCorrection (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.pdf417.decoder.ec.ErrorCorrection (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/pdf417/decoder/ec/class-use/ModulusGF.html b/docs/apidocs/com/google/zxing/pdf417/decoder/ec/class-use/ModulusGF.html
index ea03fb7..e6f6503 100644
--- a/docs/apidocs/com/google/zxing/pdf417/decoder/ec/class-use/ModulusGF.html
+++ b/docs/apidocs/com/google/zxing/pdf417/decoder/ec/class-use/ModulusGF.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.pdf417.decoder.ec.ModulusGF (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.pdf417.decoder.ec.ModulusGF (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.pdf417.decoder.ec.ModulusGF (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.pdf417.decoder.ec.ModulusGF (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -160,6 +160,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/pdf417/decoder/ec/package-frame.html b/docs/apidocs/com/google/zxing/pdf417/decoder/ec/package-frame.html
index 985277f..714de95 100644
--- a/docs/apidocs/com/google/zxing/pdf417/decoder/ec/package-frame.html
+++ b/docs/apidocs/com/google/zxing/pdf417/decoder/ec/package-frame.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.pdf417.decoder.ec (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.pdf417.decoder.ec (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
diff --git a/docs/apidocs/com/google/zxing/pdf417/decoder/ec/package-summary.html b/docs/apidocs/com/google/zxing/pdf417/decoder/ec/package-summary.html
index 55f80a5..58036a8 100644
--- a/docs/apidocs/com/google/zxing/pdf417/decoder/ec/package-summary.html
+++ b/docs/apidocs/com/google/zxing/pdf417/decoder/ec/package-summary.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.pdf417.decoder.ec (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.pdf417.decoder.ec (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.pdf417.decoder.ec (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.pdf417.decoder.ec (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -146,6 +146,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/pdf417/decoder/ec/package-tree.html b/docs/apidocs/com/google/zxing/pdf417/decoder/ec/package-tree.html
index 8799c50..4a0c724 100644
--- a/docs/apidocs/com/google/zxing/pdf417/decoder/ec/package-tree.html
+++ b/docs/apidocs/com/google/zxing/pdf417/decoder/ec/package-tree.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.pdf417.decoder.ec Class Hierarchy (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.pdf417.decoder.ec Class Hierarchy (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.pdf417.decoder.ec Class Hierarchy (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.pdf417.decoder.ec Class Hierarchy (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -134,6 +134,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/pdf417/decoder/ec/package-use.html b/docs/apidocs/com/google/zxing/pdf417/decoder/ec/package-use.html
index 99c6ce6..0c0ae6c 100644
--- a/docs/apidocs/com/google/zxing/pdf417/decoder/ec/package-use.html
+++ b/docs/apidocs/com/google/zxing/pdf417/decoder/ec/package-use.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Package com.google.zxing.pdf417.decoder.ec (ZXing 3.4.0 API)</title>
+<title>Uses of Package com.google.zxing.pdf417.decoder.ec (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Package com.google.zxing.pdf417.decoder.ec (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Package com.google.zxing.pdf417.decoder.ec (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -155,6 +155,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/pdf417/decoder/package-frame.html b/docs/apidocs/com/google/zxing/pdf417/decoder/package-frame.html
index 83283e3..1ae877a 100644
--- a/docs/apidocs/com/google/zxing/pdf417/decoder/package-frame.html
+++ b/docs/apidocs/com/google/zxing/pdf417/decoder/package-frame.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.pdf417.decoder (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.pdf417.decoder (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
diff --git a/docs/apidocs/com/google/zxing/pdf417/decoder/package-summary.html b/docs/apidocs/com/google/zxing/pdf417/decoder/package-summary.html
index ec4d671..2a8837c 100644
--- a/docs/apidocs/com/google/zxing/pdf417/decoder/package-summary.html
+++ b/docs/apidocs/com/google/zxing/pdf417/decoder/package-summary.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.pdf417.decoder (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.pdf417.decoder (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.pdf417.decoder (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.pdf417.decoder (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -138,6 +138,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/pdf417/decoder/package-tree.html b/docs/apidocs/com/google/zxing/pdf417/decoder/package-tree.html
index df90be8..a903168 100644
--- a/docs/apidocs/com/google/zxing/pdf417/decoder/package-tree.html
+++ b/docs/apidocs/com/google/zxing/pdf417/decoder/package-tree.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.pdf417.decoder Class Hierarchy (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.pdf417.decoder Class Hierarchy (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.pdf417.decoder Class Hierarchy (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.pdf417.decoder Class Hierarchy (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -133,6 +133,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/pdf417/decoder/package-use.html b/docs/apidocs/com/google/zxing/pdf417/decoder/package-use.html
index c7f30c5..1eb7564 100644
--- a/docs/apidocs/com/google/zxing/pdf417/decoder/package-use.html
+++ b/docs/apidocs/com/google/zxing/pdf417/decoder/package-use.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Package com.google.zxing.pdf417.decoder (ZXing 3.4.0 API)</title>
+<title>Uses of Package com.google.zxing.pdf417.decoder (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Package com.google.zxing.pdf417.decoder (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Package com.google.zxing.pdf417.decoder (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/pdf417/detector/Detector.html b/docs/apidocs/com/google/zxing/pdf417/detector/Detector.html
index 88aa131..6b33bc4 100644
--- a/docs/apidocs/com/google/zxing/pdf417/detector/Detector.html
+++ b/docs/apidocs/com/google/zxing/pdf417/detector/Detector.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Detector (ZXing 3.4.0 API)</title>
+<title>Detector (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Detector (ZXing 3.4.0 API)";
+            parent.document.title="Detector (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -175,7 +175,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
                                           <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints,
                                           boolean&nbsp;multiple)
                                    throws <a href="../../../../../com/google/zxing/NotFoundException.html" title="class in com.google.zxing">NotFoundException</a></pre>
-<div class="block"><p>Detects a PDF417 Code in an image. Only checks 0 and 180 degree rotations.</p></div>
+<div class="block"><p>Detects a PDF417 Code in an image. Checks 0, 90, 180, and 270 degree rotations.</p></div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>image</code> - barcode image to decode</dd>
@@ -258,6 +258,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/pdf417/detector/PDF417DetectorResult.html b/docs/apidocs/com/google/zxing/pdf417/detector/PDF417DetectorResult.html
index 0179a21..62231d5 100644
--- a/docs/apidocs/com/google/zxing/pdf417/detector/PDF417DetectorResult.html
+++ b/docs/apidocs/com/google/zxing/pdf417/detector/PDF417DetectorResult.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>PDF417DetectorResult (ZXing 3.4.0 API)</title>
+<title>PDF417DetectorResult (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,13 +12,13 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="PDF417DetectorResult (ZXing 3.4.0 API)";
+            parent.document.title="PDF417DetectorResult (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10};
+var methods = {"i0":10,"i1":10,"i2":10};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -136,6 +136,11 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <td class="colOne"><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/pdf417/detector/PDF417DetectorResult.html#PDF417DetectorResult-com.google.zxing.common.BitMatrix-java.util.List-">PDF417DetectorResult</a></span>(<a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a>&nbsp;bits,
                     <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../com/google/zxing/ResultPoint.html" title="class in com.google.zxing">ResultPoint</a>[]&gt;&nbsp;points)</code>&nbsp;</td>
 </tr>
+<tr class="rowColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/pdf417/detector/PDF417DetectorResult.html#PDF417DetectorResult-com.google.zxing.common.BitMatrix-java.util.List-int-">PDF417DetectorResult</a></span>(<a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a>&nbsp;bits,
+                    <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../com/google/zxing/ResultPoint.html" title="class in com.google.zxing">ResultPoint</a>[]&gt;&nbsp;points,
+                    int&nbsp;rotation)</code>&nbsp;</td>
+</tr>
 </table>
 </li>
 </ul>
@@ -159,6 +164,10 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../com/google/zxing/ResultPoint.html" title="class in com.google.zxing">ResultPoint</a>[]&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/pdf417/detector/PDF417DetectorResult.html#getPoints--">getPoints</a></span>()</code>&nbsp;</td>
 </tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/pdf417/detector/PDF417DetectorResult.html#getRotation--">getRotation</a></span>()</code>&nbsp;</td>
+</tr>
 </table>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
@@ -181,6 +190,17 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a>
 <h3>Constructor Detail</h3>
+<a name="PDF417DetectorResult-com.google.zxing.common.BitMatrix-java.util.List-int-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>PDF417DetectorResult</h4>
+<pre>public&nbsp;PDF417DetectorResult(<a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a>&nbsp;bits,
+                            <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../com/google/zxing/ResultPoint.html" title="class in com.google.zxing">ResultPoint</a>[]&gt;&nbsp;points,
+                            int&nbsp;rotation)</pre>
+</li>
+</ul>
 <a name="PDF417DetectorResult-com.google.zxing.common.BitMatrix-java.util.List-">
 <!--   -->
 </a>
@@ -211,12 +231,21 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <a name="getPoints--">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>getPoints</h4>
 <pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../com/google/zxing/ResultPoint.html" title="class in com.google.zxing">ResultPoint</a>[]&gt;&nbsp;getPoints()</pre>
 </li>
 </ul>
+<a name="getRotation--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>getRotation</h4>
+<pre>public&nbsp;int&nbsp;getRotation()</pre>
+</li>
+</ul>
 </li>
 </ul>
 </li>
@@ -286,6 +315,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/pdf417/detector/class-use/Detector.html b/docs/apidocs/com/google/zxing/pdf417/detector/class-use/Detector.html
index d51118d..dd83f84 100644
--- a/docs/apidocs/com/google/zxing/pdf417/detector/class-use/Detector.html
+++ b/docs/apidocs/com/google/zxing/pdf417/detector/class-use/Detector.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.pdf417.detector.Detector (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.pdf417.detector.Detector (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.pdf417.detector.Detector (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.pdf417.detector.Detector (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/pdf417/detector/class-use/PDF417DetectorResult.html b/docs/apidocs/com/google/zxing/pdf417/detector/class-use/PDF417DetectorResult.html
index 421cc88..8575371 100644
--- a/docs/apidocs/com/google/zxing/pdf417/detector/class-use/PDF417DetectorResult.html
+++ b/docs/apidocs/com/google/zxing/pdf417/detector/class-use/PDF417DetectorResult.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.pdf417.detector.PDF417DetectorResult (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.pdf417.detector.PDF417DetectorResult (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.pdf417.detector.PDF417DetectorResult (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.pdf417.detector.PDF417DetectorResult (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -164,6 +164,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/pdf417/detector/package-frame.html b/docs/apidocs/com/google/zxing/pdf417/detector/package-frame.html
index 12f57cf..bc118d8 100644
--- a/docs/apidocs/com/google/zxing/pdf417/detector/package-frame.html
+++ b/docs/apidocs/com/google/zxing/pdf417/detector/package-frame.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.pdf417.detector (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.pdf417.detector (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
diff --git a/docs/apidocs/com/google/zxing/pdf417/detector/package-summary.html b/docs/apidocs/com/google/zxing/pdf417/detector/package-summary.html
index 80972db..5b5cdcc 100644
--- a/docs/apidocs/com/google/zxing/pdf417/detector/package-summary.html
+++ b/docs/apidocs/com/google/zxing/pdf417/detector/package-summary.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.pdf417.detector (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.pdf417.detector (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.pdf417.detector (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.pdf417.detector (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -145,6 +145,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/pdf417/detector/package-tree.html b/docs/apidocs/com/google/zxing/pdf417/detector/package-tree.html
index bceb799..060b40c 100644
--- a/docs/apidocs/com/google/zxing/pdf417/detector/package-tree.html
+++ b/docs/apidocs/com/google/zxing/pdf417/detector/package-tree.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.pdf417.detector Class Hierarchy (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.pdf417.detector Class Hierarchy (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.pdf417.detector Class Hierarchy (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.pdf417.detector Class Hierarchy (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -134,6 +134,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/pdf417/detector/package-use.html b/docs/apidocs/com/google/zxing/pdf417/detector/package-use.html
index ba0d72d..96d88de 100644
--- a/docs/apidocs/com/google/zxing/pdf417/detector/package-use.html
+++ b/docs/apidocs/com/google/zxing/pdf417/detector/package-use.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Package com.google.zxing.pdf417.detector (ZXing 3.4.0 API)</title>
+<title>Uses of Package com.google.zxing.pdf417.detector (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Package com.google.zxing.pdf417.detector (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Package com.google.zxing.pdf417.detector (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -153,6 +153,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/pdf417/encoder/BarcodeMatrix.html b/docs/apidocs/com/google/zxing/pdf417/encoder/BarcodeMatrix.html
index a69f662..8a13c39 100644
--- a/docs/apidocs/com/google/zxing/pdf417/encoder/BarcodeMatrix.html
+++ b/docs/apidocs/com/google/zxing/pdf417/encoder/BarcodeMatrix.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>BarcodeMatrix (ZXing 3.4.0 API)</title>
+<title>BarcodeMatrix (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="BarcodeMatrix (ZXing 3.4.0 API)";
+            parent.document.title="BarcodeMatrix (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -253,6 +253,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/pdf417/encoder/Compaction.html b/docs/apidocs/com/google/zxing/pdf417/encoder/Compaction.html
index ecdb7da..47f963b 100644
--- a/docs/apidocs/com/google/zxing/pdf417/encoder/Compaction.html
+++ b/docs/apidocs/com/google/zxing/pdf417/encoder/Compaction.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Compaction (ZXing 3.4.0 API)</title>
+<title>Compaction (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Compaction (ZXing 3.4.0 API)";
+            parent.document.title="Compaction (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -362,6 +362,6 @@ not permitted.)</div>
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/pdf417/encoder/Dimensions.html b/docs/apidocs/com/google/zxing/pdf417/encoder/Dimensions.html
index 0a796ce..82ef3fb 100644
--- a/docs/apidocs/com/google/zxing/pdf417/encoder/Dimensions.html
+++ b/docs/apidocs/com/google/zxing/pdf417/encoder/Dimensions.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Dimensions (ZXing 3.4.0 API)</title>
+<title>Dimensions (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Dimensions (ZXing 3.4.0 API)";
+            parent.document.title="Dimensions (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -317,6 +317,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/pdf417/encoder/PDF417.html b/docs/apidocs/com/google/zxing/pdf417/encoder/PDF417.html
index 0de1fca..de7044b 100644
--- a/docs/apidocs/com/google/zxing/pdf417/encoder/PDF417.html
+++ b/docs/apidocs/com/google/zxing/pdf417/encoder/PDF417.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>PDF417 (ZXing 3.4.0 API)</title>
+<title>PDF417 (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,13 +12,13 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="PDF417 (ZXing 3.4.0 API)";
+            parent.document.title="PDF417 (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -50,7 +50,7 @@ var activeTableTab = "activeTableTab";
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../com/google/zxing/pdf417/encoder/Dimensions.html" title="class in com.google.zxing.pdf417.encoder"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li>Next&nbsp;Class</li>
+<li><a href="../../../../../com/google/zxing/pdf417/encoder/PDF417HighLevelEncoderTestAdapter.html" title="class in com.google.zxing.pdf417.encoder"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?com/google/zxing/pdf417/encoder/PDF417.html" target="_top">Frames</a></li>
@@ -156,18 +156,24 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
                     int&nbsp;errorCorrectionLevel)</code>&nbsp;</td>
 </tr>
 <tr id="i1" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/pdf417/encoder/PDF417.html#generateBarcodeLogic-java.lang.String-int-boolean-">generateBarcodeLogic</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg,
+                    int&nbsp;errorCorrectionLevel,
+                    boolean&nbsp;autoECI)</code>&nbsp;</td>
+</tr>
+<tr id="i2" class="altColor">
 <td class="colFirst"><code><a href="../../../../../com/google/zxing/pdf417/encoder/BarcodeMatrix.html" title="class in com.google.zxing.pdf417.encoder">BarcodeMatrix</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/pdf417/encoder/PDF417.html#getBarcodeMatrix--">getBarcodeMatrix</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i2" class="altColor">
+<tr id="i3" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/pdf417/encoder/PDF417.html#setCompact-boolean-">setCompact</a></span>(boolean&nbsp;compact)</code>&nbsp;</td>
 </tr>
-<tr id="i3" class="rowColor">
+<tr id="i4" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/pdf417/encoder/PDF417.html#setCompaction-com.google.zxing.pdf417.encoder.Compaction-">setCompaction</a></span>(<a href="../../../../../com/google/zxing/pdf417/encoder/Compaction.html" title="enum in com.google.zxing.pdf417.encoder">Compaction</a>&nbsp;compaction)</code>&nbsp;</td>
 </tr>
-<tr id="i4" class="altColor">
+<tr id="i5" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/pdf417/encoder/PDF417.html#setDimensions-int-int-int-int-">setDimensions</a></span>(int&nbsp;maxCols,
              int&nbsp;minCols,
@@ -176,7 +182,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <div class="block">Sets max/min row/col values</div>
 </td>
 </tr>
-<tr id="i5" class="rowColor">
+<tr id="i6" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/pdf417/encoder/PDF417.html#setEncoding-java.nio.charset.Charset-">setEncoding</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</a>&nbsp;encoding)</code>&nbsp;</td>
 </tr>
@@ -255,6 +261,26 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </dl>
 </li>
 </ul>
+<a name="generateBarcodeLogic-java.lang.String-int-boolean-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>generateBarcodeLogic</h4>
+<pre>public&nbsp;void&nbsp;generateBarcodeLogic(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg,
+                                 int&nbsp;errorCorrectionLevel,
+                                 boolean&nbsp;autoECI)
+                          throws <a href="../../../../../com/google/zxing/WriterException.html" title="class in com.google.zxing">WriterException</a></pre>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>msg</code> - message to encode</dd>
+<dd><code>errorCorrectionLevel</code> - PDF417 error correction level to use</dd>
+<dd><code>autoECI</code> - automatically insert ECIs if needed</dd>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="../../../../../com/google/zxing/WriterException.html" title="class in com.google.zxing">WriterException</a></code> - if the contents cannot be encoded in this format</dd>
+</dl>
+</li>
+</ul>
 <a name="setDimensions-int-int-int-int-">
 <!--   -->
 </a>
@@ -343,7 +369,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../com/google/zxing/pdf417/encoder/Dimensions.html" title="class in com.google.zxing.pdf417.encoder"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li>Next&nbsp;Class</li>
+<li><a href="../../../../../com/google/zxing/pdf417/encoder/PDF417HighLevelEncoderTestAdapter.html" title="class in com.google.zxing.pdf417.encoder"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?com/google/zxing/pdf417/encoder/PDF417.html" target="_top">Frames</a></li>
@@ -383,6 +409,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/datamatrix/encoder/ErrorCorrection.html b/docs/apidocs/com/google/zxing/pdf417/encoder/PDF417HighLevelEncoderTestAdapter.html
similarity index 70%
rename from docs/apidocs/com/google/zxing/datamatrix/encoder/ErrorCorrection.html
rename to docs/apidocs/com/google/zxing/pdf417/encoder/PDF417HighLevelEncoderTestAdapter.html
index bbdbd7b..5dedb06 100644
--- a/docs/apidocs/com/google/zxing/datamatrix/encoder/ErrorCorrection.html
+++ b/docs/apidocs/com/google/zxing/pdf417/encoder/PDF417HighLevelEncoderTestAdapter.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>ErrorCorrection (ZXing 3.4.0 API)</title>
+<title>PDF417HighLevelEncoderTestAdapter (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="ErrorCorrection (ZXing 3.4.0 API)";
+            parent.document.title="PDF417HighLevelEncoderTestAdapter (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -40,7 +40,7 @@ var activeTableTab = "activeTableTab";
 <li><a href="../../../../../overview-summary.html">Overview</a></li>
 <li><a href="package-summary.html">Package</a></li>
 <li class="navBarCell1Rev">Class</li>
-<li><a href="class-use/ErrorCorrection.html">Use</a></li>
+<li><a href="class-use/PDF417HighLevelEncoderTestAdapter.html">Use</a></li>
 <li><a href="package-tree.html">Tree</a></li>
 <li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
 <li><a href="../../../../../index-all.html">Index</a></li>
@@ -49,12 +49,12 @@ var activeTableTab = "activeTableTab";
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../com/google/zxing/datamatrix/encoder/DefaultPlacement.html" title="class in com.google.zxing.datamatrix.encoder"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../com/google/zxing/datamatrix/encoder/HighLevelEncoder.html" title="class in com.google.zxing.datamatrix.encoder"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../com/google/zxing/pdf417/encoder/PDF417.html" title="class in com.google.zxing.pdf417.encoder"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li>Next&nbsp;Class</li>
 </ul>
 <ul class="navList">
-<li><a href="../../../../../index.html?com/google/zxing/datamatrix/encoder/ErrorCorrection.html" target="_top">Frames</a></li>
-<li><a href="ErrorCorrection.html" target="_top">No&nbsp;Frames</a></li>
+<li><a href="../../../../../index.html?com/google/zxing/pdf417/encoder/PDF417HighLevelEncoderTestAdapter.html" target="_top">Frames</a></li>
+<li><a href="PDF417HighLevelEncoderTestAdapter.html" target="_top">No&nbsp;Frames</a></li>
 </ul>
 <ul class="navList" id="allclasses_navbar_top">
 <li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
@@ -92,15 +92,15 @@ var activeTableTab = "activeTableTab";
 <!-- ========= END OF TOP NAVBAR ========= -->
 <!-- ======== START OF CLASS DATA ======== -->
 <div class="header">
-<div class="subTitle">com.google.zxing.datamatrix.encoder</div>
-<h2 title="Class ErrorCorrection" class="title">Class ErrorCorrection</h2>
+<div class="subTitle">com.google.zxing.pdf417.encoder</div>
+<h2 title="Class PDF417HighLevelEncoderTestAdapter" class="title">Class PDF417HighLevelEncoderTestAdapter</h2>
 </div>
 <div class="contentContainer">
 <ul class="inheritance">
 <li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
 <li>
 <ul class="inheritance">
-<li>com.google.zxing.datamatrix.encoder.ErrorCorrection</li>
+<li>com.google.zxing.pdf417.encoder.PDF417HighLevelEncoderTestAdapter</li>
 </ul>
 </li>
 </ul>
@@ -109,9 +109,9 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <hr>
 <br>
-<pre>public final class <span class="typeNameLabel">ErrorCorrection</span>
+<pre>public final class <span class="typeNameLabel">PDF417HighLevelEncoderTestAdapter</span>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
-<div class="block">Error Correction Code for ECC200.</div>
+<div class="block">Test adapter for PDF417HighLevelEncoder to be called solely from unit tests.</div>
 </li>
 </ul>
 </div>
@@ -132,10 +132,10 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </tr>
 <tr id="i0" class="altColor">
 <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/datamatrix/encoder/ErrorCorrection.html#encodeECC200-java.lang.String-com.google.zxing.datamatrix.encoder.SymbolInfo-">encodeECC200</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;codewords,
-            <a href="../../../../../com/google/zxing/datamatrix/encoder/SymbolInfo.html" title="class in com.google.zxing.datamatrix.encoder">SymbolInfo</a>&nbsp;symbolInfo)</code>
-<div class="block">Creates the ECC200 error correction for an encoded message.</div>
-</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/pdf417/encoder/PDF417HighLevelEncoderTestAdapter.html#encodeHighLevel-java.lang.String-com.google.zxing.pdf417.encoder.Compaction-java.nio.charset.Charset-boolean-">encodeHighLevel</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg,
+               <a href="../../../../../com/google/zxing/pdf417/encoder/Compaction.html" title="enum in com.google.zxing.pdf417.encoder">Compaction</a>&nbsp;compaction,
+               <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</a>&nbsp;encoding,
+               boolean&nbsp;autoECI)</code>&nbsp;</td>
 </tr>
 </table>
 <ul class="blockList">
@@ -159,21 +159,20 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a>
 <h3>Method Detail</h3>
-<a name="encodeECC200-java.lang.String-com.google.zxing.datamatrix.encoder.SymbolInfo-">
+<a name="encodeHighLevel-java.lang.String-com.google.zxing.pdf417.encoder.Compaction-java.nio.charset.Charset-boolean-">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>encodeECC200</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;encodeECC200(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;codewords,
-                                  <a href="../../../../../com/google/zxing/datamatrix/encoder/SymbolInfo.html" title="class in com.google.zxing.datamatrix.encoder">SymbolInfo</a>&nbsp;symbolInfo)</pre>
-<div class="block">Creates the ECC200 error correction for an encoded message.</div>
+<h4>encodeHighLevel</h4>
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;encodeHighLevel(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg,
+                                     <a href="../../../../../com/google/zxing/pdf417/encoder/Compaction.html" title="enum in com.google.zxing.pdf417.encoder">Compaction</a>&nbsp;compaction,
+                                     <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</a>&nbsp;encoding,
+                                     boolean&nbsp;autoECI)
+                              throws <a href="../../../../../com/google/zxing/WriterException.html" title="class in com.google.zxing">WriterException</a></pre>
 <dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>codewords</code> - the codewords</dd>
-<dd><code>symbolInfo</code> - information about the symbol to be encoded</dd>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>the codewords with interleaved error correction.</dd>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="../../../../../com/google/zxing/WriterException.html" title="class in com.google.zxing">WriterException</a></code></dd>
 </dl>
 </li>
 </ul>
@@ -196,7 +195,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <li><a href="../../../../../overview-summary.html">Overview</a></li>
 <li><a href="package-summary.html">Package</a></li>
 <li class="navBarCell1Rev">Class</li>
-<li><a href="class-use/ErrorCorrection.html">Use</a></li>
+<li><a href="class-use/PDF417HighLevelEncoderTestAdapter.html">Use</a></li>
 <li><a href="package-tree.html">Tree</a></li>
 <li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
 <li><a href="../../../../../index-all.html">Index</a></li>
@@ -205,12 +204,12 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../com/google/zxing/datamatrix/encoder/DefaultPlacement.html" title="class in com.google.zxing.datamatrix.encoder"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../com/google/zxing/datamatrix/encoder/HighLevelEncoder.html" title="class in com.google.zxing.datamatrix.encoder"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../com/google/zxing/pdf417/encoder/PDF417.html" title="class in com.google.zxing.pdf417.encoder"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li>Next&nbsp;Class</li>
 </ul>
 <ul class="navList">
-<li><a href="../../../../../index.html?com/google/zxing/datamatrix/encoder/ErrorCorrection.html" target="_top">Frames</a></li>
-<li><a href="ErrorCorrection.html" target="_top">No&nbsp;Frames</a></li>
+<li><a href="../../../../../index.html?com/google/zxing/pdf417/encoder/PDF417HighLevelEncoderTestAdapter.html" target="_top">Frames</a></li>
+<li><a href="PDF417HighLevelEncoderTestAdapter.html" target="_top">No&nbsp;Frames</a></li>
 </ul>
 <ul class="navList" id="allclasses_navbar_bottom">
 <li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
@@ -246,6 +245,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/pdf417/encoder/class-use/BarcodeMatrix.html b/docs/apidocs/com/google/zxing/pdf417/encoder/class-use/BarcodeMatrix.html
index e25b60e..aecdf9a 100644
--- a/docs/apidocs/com/google/zxing/pdf417/encoder/class-use/BarcodeMatrix.html
+++ b/docs/apidocs/com/google/zxing/pdf417/encoder/class-use/BarcodeMatrix.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.pdf417.encoder.BarcodeMatrix (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.pdf417.encoder.BarcodeMatrix (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.pdf417.encoder.BarcodeMatrix (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.pdf417.encoder.BarcodeMatrix (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -160,6 +160,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/pdf417/encoder/class-use/Compaction.html b/docs/apidocs/com/google/zxing/pdf417/encoder/class-use/Compaction.html
index 3ff788e..1e9f2fd 100644
--- a/docs/apidocs/com/google/zxing/pdf417/encoder/class-use/Compaction.html
+++ b/docs/apidocs/com/google/zxing/pdf417/encoder/class-use/Compaction.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.pdf417.encoder.Compaction (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.pdf417.encoder.Compaction (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.pdf417.encoder.Compaction (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.pdf417.encoder.Compaction (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -125,6 +125,13 @@ the order they are declared.</div>
 </tr>
 <tbody>
 <tr class="altColor">
+<td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><span class="typeNameLabel">PDF417HighLevelEncoderTestAdapter.</span><code><span class="memberNameLink"><a href="../../../../../../com/google/zxing/pdf417/encoder/PDF417HighLevelEncoderTestAdapter.html#encodeHighLevel-java.lang.String-com.google.zxing.pdf417.encoder.Compaction-java.nio.charset.Charset-boolean-">encodeHighLevel</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg,
+               <a href="../../../../../../com/google/zxing/pdf417/encoder/Compaction.html" title="enum in com.google.zxing.pdf417.encoder">Compaction</a>&nbsp;compaction,
+               <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</a>&nbsp;encoding,
+               boolean&nbsp;autoECI)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">PDF417.</span><code><span class="memberNameLink"><a href="../../../../../../com/google/zxing/pdf417/encoder/PDF417.html#setCompaction-com.google.zxing.pdf417.encoder.Compaction-">setCompaction</a></span>(<a href="../../../../../../com/google/zxing/pdf417/encoder/Compaction.html" title="enum in com.google.zxing.pdf417.encoder">Compaction</a>&nbsp;compaction)</code>&nbsp;</td>
 </tr>
@@ -182,6 +189,6 @@ the order they are declared.</div>
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/pdf417/encoder/class-use/Dimensions.html b/docs/apidocs/com/google/zxing/pdf417/encoder/class-use/Dimensions.html
index 8bde5b5..d92d89e 100644
--- a/docs/apidocs/com/google/zxing/pdf417/encoder/class-use/Dimensions.html
+++ b/docs/apidocs/com/google/zxing/pdf417/encoder/class-use/Dimensions.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.pdf417.encoder.Dimensions (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.pdf417.encoder.Dimensions (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.pdf417.encoder.Dimensions (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.pdf417.encoder.Dimensions (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/pdf417/encoder/class-use/PDF417.html b/docs/apidocs/com/google/zxing/pdf417/encoder/class-use/PDF417HighLevelEncoderTestAdapter.html
similarity index 78%
rename from docs/apidocs/com/google/zxing/pdf417/encoder/class-use/PDF417.html
rename to docs/apidocs/com/google/zxing/pdf417/encoder/class-use/PDF417HighLevelEncoderTestAdapter.html
index 04d1500..0f532c7 100644
--- a/docs/apidocs/com/google/zxing/pdf417/encoder/class-use/PDF417.html
+++ b/docs/apidocs/com/google/zxing/pdf417/encoder/class-use/PDF417HighLevelEncoderTestAdapter.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.pdf417.encoder.PDF417 (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.pdf417.encoder.PDF417HighLevelEncoderTestAdapter (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.pdf417.encoder.PDF417 (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.pdf417.encoder.PDF417HighLevelEncoderTestAdapter (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -33,7 +33,7 @@
 <ul class="navList" title="Navigation">
 <li><a href="../../../../../../overview-summary.html">Overview</a></li>
 <li><a href="../package-summary.html">Package</a></li>
-<li><a href="../../../../../../com/google/zxing/pdf417/encoder/PDF417.html" title="class in com.google.zxing.pdf417.encoder">Class</a></li>
+<li><a href="../../../../../../com/google/zxing/pdf417/encoder/PDF417HighLevelEncoderTestAdapter.html" title="class in com.google.zxing.pdf417.encoder">Class</a></li>
 <li class="navBarCell1Rev">Use</li>
 <li><a href="../package-tree.html">Tree</a></li>
 <li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
@@ -47,8 +47,8 @@
 <li>Next</li>
 </ul>
 <ul class="navList">
-<li><a href="../../../../../../index.html?com/google/zxing/pdf417/encoder/class-use/PDF417.html" target="_top">Frames</a></li>
-<li><a href="PDF417.html" target="_top">No&nbsp;Frames</a></li>
+<li><a href="../../../../../../index.html?com/google/zxing/pdf417/encoder/class-use/PDF417HighLevelEncoderTestAdapter.html" target="_top">Frames</a></li>
+<li><a href="PDF417HighLevelEncoderTestAdapter.html" target="_top">No&nbsp;Frames</a></li>
 </ul>
 <ul class="navList" id="allclasses_navbar_top">
 <li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
@@ -70,9 +70,9 @@
 </a></div>
 <!-- ========= END OF TOP NAVBAR ========= -->
 <div class="header">
-<h2 title="Uses of Class com.google.zxing.pdf417.encoder.PDF417" class="title">Uses of Class<br>com.google.zxing.pdf417.encoder.PDF417</h2>
+<h2 title="Uses of Class com.google.zxing.pdf417.encoder.PDF417HighLevelEncoderTestAdapter" class="title">Uses of Class<br>com.google.zxing.pdf417.encoder.PDF417HighLevelEncoderTestAdapter</h2>
 </div>
-<div class="classUseContainer">No usage of com.google.zxing.pdf417.encoder.PDF417</div>
+<div class="classUseContainer">No usage of com.google.zxing.pdf417.encoder.PDF417HighLevelEncoderTestAdapter</div>
 <!-- ======= START OF BOTTOM NAVBAR ====== -->
 <div class="bottomNav"><a name="navbar.bottom">
 <!--   -->
@@ -84,7 +84,7 @@
 <ul class="navList" title="Navigation">
 <li><a href="../../../../../../overview-summary.html">Overview</a></li>
 <li><a href="../package-summary.html">Package</a></li>
-<li><a href="../../../../../../com/google/zxing/pdf417/encoder/PDF417.html" title="class in com.google.zxing.pdf417.encoder">Class</a></li>
+<li><a href="../../../../../../com/google/zxing/pdf417/encoder/PDF417HighLevelEncoderTestAdapter.html" title="class in com.google.zxing.pdf417.encoder">Class</a></li>
 <li class="navBarCell1Rev">Use</li>
 <li><a href="../package-tree.html">Tree</a></li>
 <li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
@@ -98,8 +98,8 @@
 <li>Next</li>
 </ul>
 <ul class="navList">
-<li><a href="../../../../../../index.html?com/google/zxing/pdf417/encoder/class-use/PDF417.html" target="_top">Frames</a></li>
-<li><a href="PDF417.html" target="_top">No&nbsp;Frames</a></li>
+<li><a href="../../../../../../index.html?com/google/zxing/pdf417/encoder/class-use/PDF417HighLevelEncoderTestAdapter.html" target="_top">Frames</a></li>
+<li><a href="PDF417HighLevelEncoderTestAdapter.html" target="_top">No&nbsp;Frames</a></li>
 </ul>
 <ul class="navList" id="allclasses_navbar_bottom">
 <li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/pdf417/encoder/package-frame.html b/docs/apidocs/com/google/zxing/pdf417/encoder/package-frame.html
index 49daffe..62e922a 100644
--- a/docs/apidocs/com/google/zxing/pdf417/encoder/package-frame.html
+++ b/docs/apidocs/com/google/zxing/pdf417/encoder/package-frame.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.pdf417.encoder (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.pdf417.encoder (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -16,6 +16,7 @@
 <li><a href="BarcodeMatrix.html" title="class in com.google.zxing.pdf417.encoder" target="classFrame">BarcodeMatrix</a></li>
 <li><a href="Dimensions.html" title="class in com.google.zxing.pdf417.encoder" target="classFrame">Dimensions</a></li>
 <li><a href="PDF417.html" title="class in com.google.zxing.pdf417.encoder" target="classFrame">PDF417</a></li>
+<li><a href="PDF417HighLevelEncoderTestAdapter.html" title="class in com.google.zxing.pdf417.encoder" target="classFrame">PDF417HighLevelEncoderTestAdapter</a></li>
 </ul>
 <h2 title="Enums">Enums</h2>
 <ul title="Enums">
diff --git a/docs/apidocs/com/google/zxing/pdf417/encoder/package-summary.html b/docs/apidocs/com/google/zxing/pdf417/encoder/package-summary.html
index 9971b6e..7e9e095 100644
--- a/docs/apidocs/com/google/zxing/pdf417/encoder/package-summary.html
+++ b/docs/apidocs/com/google/zxing/pdf417/encoder/package-summary.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.pdf417.encoder (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.pdf417.encoder (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.pdf417.encoder (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.pdf417.encoder (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -100,6 +100,12 @@
 <div class="block">Top-level class for the logic part of the PDF417 implementation.</div>
 </td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><a href="../../../../../com/google/zxing/pdf417/encoder/PDF417HighLevelEncoderTestAdapter.html" title="class in com.google.zxing.pdf417.encoder">PDF417HighLevelEncoderTestAdapter</a></td>
+<td class="colLast">
+<div class="block">Test adapter for PDF417HighLevelEncoder to be called solely from unit tests.</div>
+</td>
+</tr>
 </tbody>
 </table>
 </li>
@@ -169,6 +175,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/pdf417/encoder/package-tree.html b/docs/apidocs/com/google/zxing/pdf417/encoder/package-tree.html
index a066e52..a1378c4 100644
--- a/docs/apidocs/com/google/zxing/pdf417/encoder/package-tree.html
+++ b/docs/apidocs/com/google/zxing/pdf417/encoder/package-tree.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.pdf417.encoder Class Hierarchy (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.pdf417.encoder Class Hierarchy (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.pdf417.encoder Class Hierarchy (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.pdf417.encoder Class Hierarchy (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -84,6 +84,7 @@
 <li type="circle">com.google.zxing.pdf417.encoder.<a href="../../../../../com/google/zxing/pdf417/encoder/BarcodeMatrix.html" title="class in com.google.zxing.pdf417.encoder"><span class="typeNameLink">BarcodeMatrix</span></a></li>
 <li type="circle">com.google.zxing.pdf417.encoder.<a href="../../../../../com/google/zxing/pdf417/encoder/Dimensions.html" title="class in com.google.zxing.pdf417.encoder"><span class="typeNameLink">Dimensions</span></a></li>
 <li type="circle">com.google.zxing.pdf417.encoder.<a href="../../../../../com/google/zxing/pdf417/encoder/PDF417.html" title="class in com.google.zxing.pdf417.encoder"><span class="typeNameLink">PDF417</span></a></li>
+<li type="circle">com.google.zxing.pdf417.encoder.<a href="../../../../../com/google/zxing/pdf417/encoder/PDF417HighLevelEncoderTestAdapter.html" title="class in com.google.zxing.pdf417.encoder"><span class="typeNameLink">PDF417HighLevelEncoderTestAdapter</span></a></li>
 </ul>
 </li>
 </ul>
@@ -147,6 +148,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/pdf417/encoder/package-use.html b/docs/apidocs/com/google/zxing/pdf417/encoder/package-use.html
index 168038a..3a1cbd7 100644
--- a/docs/apidocs/com/google/zxing/pdf417/encoder/package-use.html
+++ b/docs/apidocs/com/google/zxing/pdf417/encoder/package-use.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Package com.google.zxing.pdf417.encoder (ZXing 3.4.0 API)</title>
+<title>Uses of Package com.google.zxing.pdf417.encoder (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Package com.google.zxing.pdf417.encoder (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Package com.google.zxing.pdf417.encoder (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -160,6 +160,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/pdf417/package-frame.html b/docs/apidocs/com/google/zxing/pdf417/package-frame.html
index c790539..b8b0689 100644
--- a/docs/apidocs/com/google/zxing/pdf417/package-frame.html
+++ b/docs/apidocs/com/google/zxing/pdf417/package-frame.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.pdf417 (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.pdf417 (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
diff --git a/docs/apidocs/com/google/zxing/pdf417/package-summary.html b/docs/apidocs/com/google/zxing/pdf417/package-summary.html
index 0d674f0..3e42dff 100644
--- a/docs/apidocs/com/google/zxing/pdf417/package-summary.html
+++ b/docs/apidocs/com/google/zxing/pdf417/package-summary.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.pdf417 (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.pdf417 (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.pdf417 (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.pdf417 (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -152,6 +152,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/pdf417/package-tree.html b/docs/apidocs/com/google/zxing/pdf417/package-tree.html
index c8a3099..acdf65e 100644
--- a/docs/apidocs/com/google/zxing/pdf417/package-tree.html
+++ b/docs/apidocs/com/google/zxing/pdf417/package-tree.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.pdf417 Class Hierarchy (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.pdf417 Class Hierarchy (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.pdf417 Class Hierarchy (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.pdf417 Class Hierarchy (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -136,6 +136,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/pdf417/package-use.html b/docs/apidocs/com/google/zxing/pdf417/package-use.html
index d671a5c..1da0e9d 100644
--- a/docs/apidocs/com/google/zxing/pdf417/package-use.html
+++ b/docs/apidocs/com/google/zxing/pdf417/package-use.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Package com.google.zxing.pdf417 (ZXing 3.4.0 API)</title>
+<title>Uses of Package com.google.zxing.pdf417 (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Package com.google.zxing.pdf417 (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Package com.google.zxing.pdf417 (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/qrcode/QRCodeReader.html b/docs/apidocs/com/google/zxing/qrcode/QRCodeReader.html
index d91fae4..af30905 100644
--- a/docs/apidocs/com/google/zxing/qrcode/QRCodeReader.html
+++ b/docs/apidocs/com/google/zxing/qrcode/QRCodeReader.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>QRCodeReader (ZXing 3.4.0 API)</title>
+<title>QRCodeReader (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="QRCodeReader (ZXing 3.4.0 API)";
+            parent.document.title="QRCodeReader (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -374,6 +374,6 @@ implements <a href="../../../../com/google/zxing/Reader.html" title="interface i
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/qrcode/QRCodeWriter.html b/docs/apidocs/com/google/zxing/qrcode/QRCodeWriter.html
index 44d2745..3b9811f 100644
--- a/docs/apidocs/com/google/zxing/qrcode/QRCodeWriter.html
+++ b/docs/apidocs/com/google/zxing/qrcode/QRCodeWriter.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>QRCodeWriter (ZXing 3.4.0 API)</title>
+<title>QRCodeWriter (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="QRCodeWriter (ZXing 3.4.0 API)";
+            parent.document.title="QRCodeWriter (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -337,6 +337,6 @@ implements <a href="../../../../com/google/zxing/Writer.html" title="interface i
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/qrcode/class-use/QRCodeReader.html b/docs/apidocs/com/google/zxing/qrcode/class-use/QRCodeReader.html
index 94ac8ff..6876560 100644
--- a/docs/apidocs/com/google/zxing/qrcode/class-use/QRCodeReader.html
+++ b/docs/apidocs/com/google/zxing/qrcode/class-use/QRCodeReader.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.qrcode.QRCodeReader (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.qrcode.QRCodeReader (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.qrcode.QRCodeReader (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.qrcode.QRCodeReader (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -162,6 +162,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/qrcode/class-use/QRCodeWriter.html b/docs/apidocs/com/google/zxing/qrcode/class-use/QRCodeWriter.html
index 9925e75..bfe689b 100644
--- a/docs/apidocs/com/google/zxing/qrcode/class-use/QRCodeWriter.html
+++ b/docs/apidocs/com/google/zxing/qrcode/class-use/QRCodeWriter.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.qrcode.QRCodeWriter (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.qrcode.QRCodeWriter (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.qrcode.QRCodeWriter (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.qrcode.QRCodeWriter (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/qrcode/decoder/Decoder.html b/docs/apidocs/com/google/zxing/qrcode/decoder/Decoder.html
index e74adcf..023c861 100644
--- a/docs/apidocs/com/google/zxing/qrcode/decoder/Decoder.html
+++ b/docs/apidocs/com/google/zxing/qrcode/decoder/Decoder.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Decoder (ZXing 3.4.0 API)</title>
+<title>Decoder (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Decoder (ZXing 3.4.0 API)";
+            parent.document.title="Decoder (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -361,6 +361,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/qrcode/decoder/ErrorCorrectionLevel.html b/docs/apidocs/com/google/zxing/qrcode/decoder/ErrorCorrectionLevel.html
index fa98e49..0f84be1 100644
--- a/docs/apidocs/com/google/zxing/qrcode/decoder/ErrorCorrectionLevel.html
+++ b/docs/apidocs/com/google/zxing/qrcode/decoder/ErrorCorrectionLevel.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>ErrorCorrectionLevel (ZXing 3.4.0 API)</title>
+<title>ErrorCorrectionLevel (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="ErrorCorrectionLevel (ZXing 3.4.0 API)";
+            parent.document.title="ErrorCorrectionLevel (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -411,6 +411,6 @@ not permitted.)</div>
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/qrcode/decoder/Mode.html b/docs/apidocs/com/google/zxing/qrcode/decoder/Mode.html
index 30c80fc..27f5db0 100644
--- a/docs/apidocs/com/google/zxing/qrcode/decoder/Mode.html
+++ b/docs/apidocs/com/google/zxing/qrcode/decoder/Mode.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Mode (ZXing 3.4.0 API)</title>
+<title>Mode (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Mode (ZXing 3.4.0 API)";
+            parent.document.title="Mode (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -496,6 +496,6 @@ not permitted.)</div>
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/qrcode/decoder/QRCodeDecoderMetaData.html b/docs/apidocs/com/google/zxing/qrcode/decoder/QRCodeDecoderMetaData.html
index b895a32..d361ac7 100644
--- a/docs/apidocs/com/google/zxing/qrcode/decoder/QRCodeDecoderMetaData.html
+++ b/docs/apidocs/com/google/zxing/qrcode/decoder/QRCodeDecoderMetaData.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>QRCodeDecoderMetaData (ZXing 3.4.0 API)</title>
+<title>QRCodeDecoderMetaData (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="QRCodeDecoderMetaData (ZXing 3.4.0 API)";
+            parent.document.title="QRCodeDecoderMetaData (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -263,6 +263,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/qrcode/decoder/Version.ECB.html b/docs/apidocs/com/google/zxing/qrcode/decoder/Version.ECB.html
index f503d99..83f8ddd 100644
--- a/docs/apidocs/com/google/zxing/qrcode/decoder/Version.ECB.html
+++ b/docs/apidocs/com/google/zxing/qrcode/decoder/Version.ECB.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Version.ECB (ZXing 3.4.0 API)</title>
+<title>Version.ECB (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Version.ECB (ZXing 3.4.0 API)";
+            parent.document.title="Version.ECB (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -253,6 +253,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/qrcode/decoder/Version.ECBlocks.html b/docs/apidocs/com/google/zxing/qrcode/decoder/Version.ECBlocks.html
index 5341c24..ad406c4 100644
--- a/docs/apidocs/com/google/zxing/qrcode/decoder/Version.ECBlocks.html
+++ b/docs/apidocs/com/google/zxing/qrcode/decoder/Version.ECBlocks.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Version.ECBlocks (ZXing 3.4.0 API)</title>
+<title>Version.ECBlocks (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Version.ECBlocks (ZXing 3.4.0 API)";
+            parent.document.title="Version.ECBlocks (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -280,6 +280,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/qrcode/decoder/Version.html b/docs/apidocs/com/google/zxing/qrcode/decoder/Version.html
index 113cdfb..10b27ea 100644
--- a/docs/apidocs/com/google/zxing/qrcode/decoder/Version.html
+++ b/docs/apidocs/com/google/zxing/qrcode/decoder/Version.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Version (ZXing 3.4.0 API)</title>
+<title>Version (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Version (ZXing 3.4.0 API)";
+            parent.document.title="Version (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -372,6 +372,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/qrcode/decoder/class-use/Decoder.html b/docs/apidocs/com/google/zxing/qrcode/decoder/class-use/Decoder.html
index 4a96959..69488bc 100644
--- a/docs/apidocs/com/google/zxing/qrcode/decoder/class-use/Decoder.html
+++ b/docs/apidocs/com/google/zxing/qrcode/decoder/class-use/Decoder.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.qrcode.decoder.Decoder (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.qrcode.decoder.Decoder (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.qrcode.decoder.Decoder (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.qrcode.decoder.Decoder (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -160,6 +160,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/qrcode/decoder/class-use/ErrorCorrectionLevel.html b/docs/apidocs/com/google/zxing/qrcode/decoder/class-use/ErrorCorrectionLevel.html
index 4137674..abc8f0b 100644
--- a/docs/apidocs/com/google/zxing/qrcode/decoder/class-use/ErrorCorrectionLevel.html
+++ b/docs/apidocs/com/google/zxing/qrcode/decoder/class-use/ErrorCorrectionLevel.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.qrcode.decoder.ErrorCorrectionLevel (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.qrcode.decoder.ErrorCorrectionLevel (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.qrcode.decoder.ErrorCorrectionLevel (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.qrcode.decoder.ErrorCorrectionLevel (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -232,6 +232,6 @@ the order they are declared.</div>
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/qrcode/decoder/class-use/Mode.html b/docs/apidocs/com/google/zxing/qrcode/decoder/class-use/Mode.html
index eaf41c4..07484f3 100644
--- a/docs/apidocs/com/google/zxing/qrcode/decoder/class-use/Mode.html
+++ b/docs/apidocs/com/google/zxing/qrcode/decoder/class-use/Mode.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.qrcode.decoder.Mode (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.qrcode.decoder.Mode (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.qrcode.decoder.Mode (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.qrcode.decoder.Mode (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -212,6 +212,6 @@ the order they are declared.</div>
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/qrcode/decoder/class-use/QRCodeDecoderMetaData.html b/docs/apidocs/com/google/zxing/qrcode/decoder/class-use/QRCodeDecoderMetaData.html
index 7ed8d1a..00c51c7 100644
--- a/docs/apidocs/com/google/zxing/qrcode/decoder/class-use/QRCodeDecoderMetaData.html
+++ b/docs/apidocs/com/google/zxing/qrcode/decoder/class-use/QRCodeDecoderMetaData.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.qrcode.decoder.QRCodeDecoderMetaData (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.qrcode.decoder.QRCodeDecoderMetaData (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.qrcode.decoder.QRCodeDecoderMetaData (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.qrcode.decoder.QRCodeDecoderMetaData (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/qrcode/decoder/class-use/Version.ECB.html b/docs/apidocs/com/google/zxing/qrcode/decoder/class-use/Version.ECB.html
index 8930793..e72e6f3 100644
--- a/docs/apidocs/com/google/zxing/qrcode/decoder/class-use/Version.ECB.html
+++ b/docs/apidocs/com/google/zxing/qrcode/decoder/class-use/Version.ECB.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.qrcode.decoder.Version.ECB (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.qrcode.decoder.Version.ECB (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.qrcode.decoder.Version.ECB (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.qrcode.decoder.Version.ECB (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -160,6 +160,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/qrcode/decoder/class-use/Version.ECBlocks.html b/docs/apidocs/com/google/zxing/qrcode/decoder/class-use/Version.ECBlocks.html
index af158c5..8b4f2af 100644
--- a/docs/apidocs/com/google/zxing/qrcode/decoder/class-use/Version.ECBlocks.html
+++ b/docs/apidocs/com/google/zxing/qrcode/decoder/class-use/Version.ECBlocks.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.qrcode.decoder.Version.ECBlocks (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.qrcode.decoder.Version.ECBlocks (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.qrcode.decoder.Version.ECBlocks (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.qrcode.decoder.Version.ECBlocks (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -160,6 +160,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/qrcode/decoder/class-use/Version.html b/docs/apidocs/com/google/zxing/qrcode/decoder/class-use/Version.html
index f5929c9..e64ed46 100644
--- a/docs/apidocs/com/google/zxing/qrcode/decoder/class-use/Version.html
+++ b/docs/apidocs/com/google/zxing/qrcode/decoder/class-use/Version.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.qrcode.decoder.Version (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.qrcode.decoder.Version (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.qrcode.decoder.Version (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.qrcode.decoder.Version (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -214,6 +214,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/qrcode/decoder/package-frame.html b/docs/apidocs/com/google/zxing/qrcode/decoder/package-frame.html
index 299c674..e70d00b 100644
--- a/docs/apidocs/com/google/zxing/qrcode/decoder/package-frame.html
+++ b/docs/apidocs/com/google/zxing/qrcode/decoder/package-frame.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.qrcode.decoder (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.qrcode.decoder (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
diff --git a/docs/apidocs/com/google/zxing/qrcode/decoder/package-summary.html b/docs/apidocs/com/google/zxing/qrcode/decoder/package-summary.html
index f2ff21d..4f94d26 100644
--- a/docs/apidocs/com/google/zxing/qrcode/decoder/package-summary.html
+++ b/docs/apidocs/com/google/zxing/qrcode/decoder/package-summary.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.qrcode.decoder (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.qrcode.decoder (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.qrcode.decoder (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.qrcode.decoder (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -188,6 +188,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/qrcode/decoder/package-tree.html b/docs/apidocs/com/google/zxing/qrcode/decoder/package-tree.html
index 3b76893..e8f207b 100644
--- a/docs/apidocs/com/google/zxing/qrcode/decoder/package-tree.html
+++ b/docs/apidocs/com/google/zxing/qrcode/decoder/package-tree.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.qrcode.decoder Class Hierarchy (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.qrcode.decoder Class Hierarchy (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.qrcode.decoder Class Hierarchy (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.qrcode.decoder Class Hierarchy (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -95,8 +95,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">com.google.zxing.qrcode.decoder.<a href="../../../../../com/google/zxing/qrcode/decoder/Mode.html" title="enum in com.google.zxing.qrcode.decoder"><span class="typeNameLink">Mode</span></a></li>
 <li type="circle">com.google.zxing.qrcode.decoder.<a href="../../../../../com/google/zxing/qrcode/decoder/ErrorCorrectionLevel.html" title="enum in com.google.zxing.qrcode.decoder"><span class="typeNameLink">ErrorCorrectionLevel</span></a></li>
+<li type="circle">com.google.zxing.qrcode.decoder.<a href="../../../../../com/google/zxing/qrcode/decoder/Mode.html" title="enum in com.google.zxing.qrcode.decoder"><span class="typeNameLink">Mode</span></a></li>
 </ul>
 </li>
 </ul>
@@ -150,6 +150,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/qrcode/decoder/package-use.html b/docs/apidocs/com/google/zxing/qrcode/decoder/package-use.html
index d73c374..c490b30 100644
--- a/docs/apidocs/com/google/zxing/qrcode/decoder/package-use.html
+++ b/docs/apidocs/com/google/zxing/qrcode/decoder/package-use.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Package com.google.zxing.qrcode.decoder (ZXing 3.4.0 API)</title>
+<title>Uses of Package com.google.zxing.qrcode.decoder (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Package com.google.zxing.qrcode.decoder (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Package com.google.zxing.qrcode.decoder (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -228,6 +228,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/qrcode/detector/AlignmentPattern.html b/docs/apidocs/com/google/zxing/qrcode/detector/AlignmentPattern.html
index 05c71e2..a6b5fdb 100644
--- a/docs/apidocs/com/google/zxing/qrcode/detector/AlignmentPattern.html
+++ b/docs/apidocs/com/google/zxing/qrcode/detector/AlignmentPattern.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>AlignmentPattern (ZXing 3.4.0 API)</title>
+<title>AlignmentPattern (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="AlignmentPattern (ZXing 3.4.0 API)";
+            parent.document.title="AlignmentPattern (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -211,6 +211,6 @@ extends <a href="../../../../../com/google/zxing/ResultPoint.html" title="class
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/qrcode/detector/Detector.html b/docs/apidocs/com/google/zxing/qrcode/detector/Detector.html
index c122d9b..dafe0ec 100644
--- a/docs/apidocs/com/google/zxing/qrcode/detector/Detector.html
+++ b/docs/apidocs/com/google/zxing/qrcode/detector/Detector.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Detector (ZXing 3.4.0 API)</title>
+<title>Detector (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Detector (ZXing 3.4.0 API)";
+            parent.document.title="Detector (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -428,6 +428,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/qrcode/detector/FinderPattern.html b/docs/apidocs/com/google/zxing/qrcode/detector/FinderPattern.html
index a6b9469..86d5596 100644
--- a/docs/apidocs/com/google/zxing/qrcode/detector/FinderPattern.html
+++ b/docs/apidocs/com/google/zxing/qrcode/detector/FinderPattern.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>FinderPattern (ZXing 3.4.0 API)</title>
+<title>FinderPattern (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,13 +12,13 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="FinderPattern (ZXing 3.4.0 API)";
+            parent.document.title="FinderPattern (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
     }
 //-->
-var methods = {"i0":10};
+var methods = {"i0":10,"i1":10};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -142,6 +142,10 @@ extends <a href="../../../../../com/google/zxing/ResultPoint.html" title="class
 <th class="colLast" scope="col">Method and Description</th>
 </tr>
 <tr id="i0" class="altColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/qrcode/detector/FinderPattern.html#getCount--">getCount</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i1" class="rowColor">
 <td class="colFirst"><code>float</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/qrcode/detector/FinderPattern.html#getEstimatedModuleSize--">getEstimatedModuleSize</a></span>()</code>&nbsp;</td>
 </tr>
@@ -177,12 +181,21 @@ extends <a href="../../../../../com/google/zxing/ResultPoint.html" title="class
 <a name="getEstimatedModuleSize--">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>getEstimatedModuleSize</h4>
 <pre>public&nbsp;float&nbsp;getEstimatedModuleSize()</pre>
 </li>
 </ul>
+<a name="getCount--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>getCount</h4>
+<pre>public&nbsp;int&nbsp;getCount()</pre>
+</li>
+</ul>
 </li>
 </ul>
 </li>
@@ -252,6 +265,6 @@ extends <a href="../../../../../com/google/zxing/ResultPoint.html" title="class
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/qrcode/detector/FinderPatternFinder.html b/docs/apidocs/com/google/zxing/qrcode/detector/FinderPatternFinder.html
index 40e1b9b..b307b6d 100644
--- a/docs/apidocs/com/google/zxing/qrcode/detector/FinderPatternFinder.html
+++ b/docs/apidocs/com/google/zxing/qrcode/detector/FinderPatternFinder.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>FinderPatternFinder (ZXing 3.4.0 API)</title>
+<title>FinderPatternFinder (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,13 +12,13 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="FinderPatternFinder (ZXing 3.4.0 API)";
+            parent.document.title="FinderPatternFinder (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":9,"i2":9,"i3":10,"i4":10,"i5":10,"i6":42,"i7":10};
+var methods = {"i0":42,"i1":9,"i2":9,"i3":9,"i4":9,"i5":10,"i6":10,"i7":10,"i8":42,"i9":42};
 var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"],32:["t6","Deprecated Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -107,6 +107,10 @@ var activeTableTab = "activeTableTab";
 <div class="description">
 <ul class="blockList">
 <li class="blockList">
+<dl>
+<dt>Direct Known Subclasses:</dt>
+<dd><a href="../../../../../com/google/zxing/multi/qrcode/detector/MultiFinderPatternFinder.html" title="class in com.google.zxing.multi.qrcode.detector">MultiFinderPatternFinder</a></dd>
+</dl>
 <hr>
 <br>
 <pre>public class <span class="typeNameLabel">FinderPatternFinder</span>
@@ -185,25 +189,35 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </tr>
 <tr id="i0" class="altColor">
 <td class="colFirst"><code>protected void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/qrcode/detector/FinderPatternFinder.html#clearCounts-int:A-">clearCounts</a></span>(int[]&nbsp;counts)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/qrcode/detector/FinderPatternFinder.html#clearCounts-int:A-">clearCounts</a></span>(int[]&nbsp;counts)</code>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
+</td>
 </tr>
 <tr id="i1" class="rowColor">
+<td class="colFirst"><code>protected static void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/qrcode/detector/FinderPatternFinder.html#doClearCounts-int:A-">doClearCounts</a></span>(int[]&nbsp;counts)</code>&nbsp;</td>
+</tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code>protected static void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/qrcode/detector/FinderPatternFinder.html#doShiftCounts2-int:A-">doShiftCounts2</a></span>(int[]&nbsp;stateCount)</code>&nbsp;</td>
+</tr>
+<tr id="i3" class="rowColor">
 <td class="colFirst"><code>protected static boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/qrcode/detector/FinderPatternFinder.html#foundPatternCross-int:A-">foundPatternCross</a></span>(int[]&nbsp;stateCount)</code>&nbsp;</td>
 </tr>
-<tr id="i2" class="altColor">
+<tr id="i4" class="altColor">
 <td class="colFirst"><code>protected static boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/qrcode/detector/FinderPatternFinder.html#foundPatternDiagonal-int:A-">foundPatternDiagonal</a></span>(int[]&nbsp;stateCount)</code>&nbsp;</td>
 </tr>
-<tr id="i3" class="rowColor">
+<tr id="i5" class="rowColor">
 <td class="colFirst"><code>protected <a href="../../../../../com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/qrcode/detector/FinderPatternFinder.html#getImage--">getImage</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i4" class="altColor">
+<tr id="i6" class="altColor">
 <td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../com/google/zxing/qrcode/detector/FinderPattern.html" title="class in com.google.zxing.qrcode.detector">FinderPattern</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/qrcode/detector/FinderPatternFinder.html#getPossibleCenters--">getPossibleCenters</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i5" class="rowColor">
+<tr id="i7" class="rowColor">
 <td class="colFirst"><code>protected boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/qrcode/detector/FinderPatternFinder.html#handlePossibleCenter-int:A-int-int-">handlePossibleCenter</a></span>(int[]&nbsp;stateCount,
                     int&nbsp;i,
@@ -211,7 +225,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <div class="block">This is called when a horizontal scan finds a possible alignment pattern.</div>
 </td>
 </tr>
-<tr id="i6" class="altColor">
+<tr id="i8" class="altColor">
 <td class="colFirst"><code>protected boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/qrcode/detector/FinderPatternFinder.html#handlePossibleCenter-int:A-int-int-boolean-">handlePossibleCenter</a></span>(int[]&nbsp;stateCount,
                     int&nbsp;i,
@@ -222,9 +236,11 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </div>
 </td>
 </tr>
-<tr id="i7" class="rowColor">
+<tr id="i9" class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/qrcode/detector/FinderPatternFinder.html#shiftCounts2-int:A-">shiftCounts2</a></span>(int[]&nbsp;stateCount)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../com/google/zxing/qrcode/detector/FinderPatternFinder.html#shiftCounts2-int:A-">shiftCounts2</a></span>(int[]&nbsp;stateCount)</code>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
+</td>
 </tr>
 </table>
 <ul class="blockList">
@@ -370,7 +386,9 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>clearCounts</h4>
-<pre>protected final&nbsp;void&nbsp;clearCounts(int[]&nbsp;counts)</pre>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
+protected final&nbsp;void&nbsp;clearCounts(int[]&nbsp;counts)</pre>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 </li>
 </ul>
 <a name="shiftCounts2-int:A-">
@@ -379,7 +397,27 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>shiftCounts2</h4>
-<pre>protected final&nbsp;void&nbsp;shiftCounts2(int[]&nbsp;stateCount)</pre>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
+protected final&nbsp;void&nbsp;shiftCounts2(int[]&nbsp;stateCount)</pre>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
+</li>
+</ul>
+<a name="doClearCounts-int:A-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>doClearCounts</h4>
+<pre>protected static&nbsp;void&nbsp;doClearCounts(int[]&nbsp;counts)</pre>
+</li>
+</ul>
+<a name="doShiftCounts2-int:A-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>doShiftCounts2</h4>
+<pre>protected static&nbsp;void&nbsp;doShiftCounts2(int[]&nbsp;stateCount)</pre>
 </li>
 </ul>
 <a name="handlePossibleCenter-int:A-int-int-boolean-">
@@ -505,6 +543,6 @@ protected final&nbsp;boolean&nbsp;handlePossibleCenter(int[]&nbsp;stateCount,
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/qrcode/detector/FinderPatternInfo.html b/docs/apidocs/com/google/zxing/qrcode/detector/FinderPatternInfo.html
index e542329..ef0066e 100644
--- a/docs/apidocs/com/google/zxing/qrcode/detector/FinderPatternInfo.html
+++ b/docs/apidocs/com/google/zxing/qrcode/detector/FinderPatternInfo.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>FinderPatternInfo (ZXing 3.4.0 API)</title>
+<title>FinderPatternInfo (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="FinderPatternInfo (ZXing 3.4.0 API)";
+            parent.document.title="FinderPatternInfo (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -299,6 +299,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/qrcode/detector/class-use/AlignmentPattern.html b/docs/apidocs/com/google/zxing/qrcode/detector/class-use/AlignmentPattern.html
index 730ccaa..be993ef 100644
--- a/docs/apidocs/com/google/zxing/qrcode/detector/class-use/AlignmentPattern.html
+++ b/docs/apidocs/com/google/zxing/qrcode/detector/class-use/AlignmentPattern.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.qrcode.detector.AlignmentPattern (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.qrcode.detector.AlignmentPattern (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.qrcode.detector.AlignmentPattern (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.qrcode.detector.AlignmentPattern (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -166,6 +166,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/qrcode/detector/class-use/Detector.html b/docs/apidocs/com/google/zxing/qrcode/detector/class-use/Detector.html
index a31c10f..8366007 100644
--- a/docs/apidocs/com/google/zxing/qrcode/detector/class-use/Detector.html
+++ b/docs/apidocs/com/google/zxing/qrcode/detector/class-use/Detector.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.qrcode.detector.Detector (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.qrcode.detector.Detector (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.qrcode.detector.Detector (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.qrcode.detector.Detector (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -163,6 +163,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/qrcode/detector/class-use/FinderPattern.html b/docs/apidocs/com/google/zxing/qrcode/detector/class-use/FinderPattern.html
index f99fbda..d13218c 100644
--- a/docs/apidocs/com/google/zxing/qrcode/detector/class-use/FinderPattern.html
+++ b/docs/apidocs/com/google/zxing/qrcode/detector/class-use/FinderPattern.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.qrcode.detector.FinderPattern (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.qrcode.detector.FinderPattern (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.qrcode.detector.FinderPattern (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.qrcode.detector.FinderPattern (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -192,6 +192,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/qrcode/detector/class-use/FinderPatternFinder.html b/docs/apidocs/com/google/zxing/qrcode/detector/class-use/FinderPatternFinder.html
index 1b80483..580688e 100644
--- a/docs/apidocs/com/google/zxing/qrcode/detector/class-use/FinderPatternFinder.html
+++ b/docs/apidocs/com/google/zxing/qrcode/detector/class-use/FinderPatternFinder.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.qrcode.detector.FinderPatternFinder (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.qrcode.detector.FinderPatternFinder (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.qrcode.detector.FinderPatternFinder (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.qrcode.detector.FinderPatternFinder (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -72,7 +72,49 @@
 <div class="header">
 <h2 title="Uses of Class com.google.zxing.qrcode.detector.FinderPatternFinder" class="title">Uses of Class<br>com.google.zxing.qrcode.detector.FinderPatternFinder</h2>
 </div>
-<div class="classUseContainer">No usage of com.google.zxing.qrcode.detector.FinderPatternFinder</div>
+<div class="classUseContainer">
+<ul class="blockList">
+<li class="blockList">
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing packages, and an explanation">
+<caption><span>Packages that use <a href="../../../../../../com/google/zxing/qrcode/detector/FinderPatternFinder.html" title="class in com.google.zxing.qrcode.detector">FinderPatternFinder</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Package</th>
+<th class="colLast" scope="col">Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><a href="#com.google.zxing.multi.qrcode.detector">com.google.zxing.multi.qrcode.detector</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+</tbody>
+</table>
+</li>
+<li class="blockList">
+<ul class="blockList">
+<li class="blockList"><a name="com.google.zxing.multi.qrcode.detector">
+<!--   -->
+</a>
+<h3>Uses of <a href="../../../../../../com/google/zxing/qrcode/detector/FinderPatternFinder.html" title="class in com.google.zxing.qrcode.detector">FinderPatternFinder</a> in <a href="../../../../../../com/google/zxing/multi/qrcode/detector/package-summary.html">com.google.zxing.multi.qrcode.detector</a></h3>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing subclasses, and an explanation">
+<caption><span>Subclasses of <a href="../../../../../../com/google/zxing/qrcode/detector/FinderPatternFinder.html" title="class in com.google.zxing.qrcode.detector">FinderPatternFinder</a> in <a href="../../../../../../com/google/zxing/multi/qrcode/detector/package-summary.html">com.google.zxing.multi.qrcode.detector</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Class and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>class&nbsp;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../com/google/zxing/multi/qrcode/detector/MultiFinderPatternFinder.html" title="class in com.google.zxing.multi.qrcode.detector">MultiFinderPatternFinder</a></span></code>
+<div class="block">This class attempts to find finder patterns in a QR Code.</div>
+</td>
+</tr>
+</tbody>
+</table>
+</li>
+</ul>
+</li>
+</ul>
+</div>
 <!-- ======= START OF BOTTOM NAVBAR ====== -->
 <div class="bottomNav"><a name="navbar.bottom">
 <!--   -->
@@ -120,6 +162,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/qrcode/detector/class-use/FinderPatternInfo.html b/docs/apidocs/com/google/zxing/qrcode/detector/class-use/FinderPatternInfo.html
index a051bb0..a3f316d 100644
--- a/docs/apidocs/com/google/zxing/qrcode/detector/class-use/FinderPatternInfo.html
+++ b/docs/apidocs/com/google/zxing/qrcode/detector/class-use/FinderPatternInfo.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.qrcode.detector.FinderPatternInfo (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.qrcode.detector.FinderPatternInfo (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.qrcode.detector.FinderPatternInfo (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.qrcode.detector.FinderPatternInfo (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -83,6 +83,10 @@
 </tr>
 <tbody>
 <tr class="altColor">
+<td class="colFirst"><a href="#com.google.zxing.multi.qrcode.detector">com.google.zxing.multi.qrcode.detector</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><a href="#com.google.zxing.qrcode.detector">com.google.zxing.qrcode.detector</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
@@ -91,6 +95,24 @@
 </li>
 <li class="blockList">
 <ul class="blockList">
+<li class="blockList"><a name="com.google.zxing.multi.qrcode.detector">
+<!--   -->
+</a>
+<h3>Uses of <a href="../../../../../../com/google/zxing/qrcode/detector/FinderPatternInfo.html" title="class in com.google.zxing.qrcode.detector">FinderPatternInfo</a> in <a href="../../../../../../com/google/zxing/multi/qrcode/detector/package-summary.html">com.google.zxing.multi.qrcode.detector</a></h3>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
+<caption><span>Methods in <a href="../../../../../../com/google/zxing/multi/qrcode/detector/package-summary.html">com.google.zxing.multi.qrcode.detector</a> that return <a href="../../../../../../com/google/zxing/qrcode/detector/FinderPatternInfo.html" title="class in com.google.zxing.qrcode.detector">FinderPatternInfo</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../../../../../../com/google/zxing/qrcode/detector/FinderPatternInfo.html" title="class in com.google.zxing.qrcode.detector">FinderPatternInfo</a>[]</code></td>
+<td class="colLast"><span class="typeNameLabel">MultiFinderPatternFinder.</span><code><span class="memberNameLink"><a href="../../../../../../com/google/zxing/multi/qrcode/detector/MultiFinderPatternFinder.html#findMulti-java.util.Map-">findMulti</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing">DecodeHintType</a>,?&gt;&nbsp;hints)</code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
+</li>
 <li class="blockList"><a name="com.google.zxing.qrcode.detector">
 <!--   -->
 </a>
@@ -160,6 +182,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/qrcode/detector/package-frame.html b/docs/apidocs/com/google/zxing/qrcode/detector/package-frame.html
index cf38326..6761b22 100644
--- a/docs/apidocs/com/google/zxing/qrcode/detector/package-frame.html
+++ b/docs/apidocs/com/google/zxing/qrcode/detector/package-frame.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.qrcode.detector (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.qrcode.detector (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
diff --git a/docs/apidocs/com/google/zxing/qrcode/detector/package-summary.html b/docs/apidocs/com/google/zxing/qrcode/detector/package-summary.html
index 365c9c4..c6a4cc2 100644
--- a/docs/apidocs/com/google/zxing/qrcode/detector/package-summary.html
+++ b/docs/apidocs/com/google/zxing/qrcode/detector/package-summary.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.qrcode.detector (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.qrcode.detector (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.qrcode.detector (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.qrcode.detector (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -168,6 +168,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/qrcode/detector/package-tree.html b/docs/apidocs/com/google/zxing/qrcode/detector/package-tree.html
index 91ed01f..d3b7ba2 100644
--- a/docs/apidocs/com/google/zxing/qrcode/detector/package-tree.html
+++ b/docs/apidocs/com/google/zxing/qrcode/detector/package-tree.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.qrcode.detector Class Hierarchy (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.qrcode.detector Class Hierarchy (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.qrcode.detector Class Hierarchy (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.qrcode.detector Class Hierarchy (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -141,6 +141,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/qrcode/detector/package-use.html b/docs/apidocs/com/google/zxing/qrcode/detector/package-use.html
index da49c74..1903e3d 100644
--- a/docs/apidocs/com/google/zxing/qrcode/detector/package-use.html
+++ b/docs/apidocs/com/google/zxing/qrcode/detector/package-use.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Package com.google.zxing.qrcode.detector (ZXing 3.4.0 API)</title>
+<title>Uses of Package com.google.zxing.qrcode.detector (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Package com.google.zxing.qrcode.detector (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Package com.google.zxing.qrcode.detector (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -108,6 +108,17 @@
  is rotated or skewed, or partially obscured.</div>
 </td>
 </tr>
+<tr class="rowColor">
+<td class="colOne"><a href="../../../../../com/google/zxing/qrcode/detector/class-use/FinderPatternFinder.html#com.google.zxing.multi.qrcode.detector">FinderPatternFinder</a>
+<div class="block">This class attempts to find finder patterns in a QR Code.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colOne"><a href="../../../../../com/google/zxing/qrcode/detector/class-use/FinderPatternInfo.html#com.google.zxing.multi.qrcode.detector">FinderPatternInfo</a>
+<div class="block">Encapsulates information about finder patterns in an image, including the location of
+ the three finder patterns, and their estimated module size.</div>
+</td>
+</tr>
 </tbody>
 </table>
 </li>
@@ -190,6 +201,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/qrcode/encoder/ByteMatrix.html b/docs/apidocs/com/google/zxing/qrcode/encoder/ByteMatrix.html
index 6d21a11..d1b90b3 100644
--- a/docs/apidocs/com/google/zxing/qrcode/encoder/ByteMatrix.html
+++ b/docs/apidocs/com/google/zxing/qrcode/encoder/ByteMatrix.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>ByteMatrix (ZXing 3.4.0 API)</title>
+<title>ByteMatrix (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="ByteMatrix (ZXing 3.4.0 API)";
+            parent.document.title="ByteMatrix (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -401,6 +401,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/qrcode/encoder/Encoder.html b/docs/apidocs/com/google/zxing/qrcode/encoder/Encoder.html
index 2e3318a..88c3490 100644
--- a/docs/apidocs/com/google/zxing/qrcode/encoder/Encoder.html
+++ b/docs/apidocs/com/google/zxing/qrcode/encoder/Encoder.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Encoder (ZXing 3.4.0 API)</title>
+<title>Encoder (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Encoder (ZXing 3.4.0 API)";
+            parent.document.title="Encoder (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -285,6 +285,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/qrcode/encoder/QRCode.html b/docs/apidocs/com/google/zxing/qrcode/encoder/QRCode.html
index 32fdf95..4eb5e0a 100644
--- a/docs/apidocs/com/google/zxing/qrcode/encoder/QRCode.html
+++ b/docs/apidocs/com/google/zxing/qrcode/encoder/QRCode.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>QRCode (ZXing 3.4.0 API)</title>
+<title>QRCode (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="QRCode (ZXing 3.4.0 API)";
+            parent.document.title="QRCode (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -284,6 +284,10 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <li class="blockList">
 <h4>getMode</h4>
 <pre>public&nbsp;<a href="../../../../../com/google/zxing/qrcode/decoder/Mode.html" title="enum in com.google.zxing.qrcode.decoder">Mode</a>&nbsp;getMode()</pre>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the mode. Not relevant if <a href="../../../../../com/google/zxing/EncodeHintType.html#QR_COMPACT"><code>EncodeHintType.QR_COMPACT</code></a> is selected.</dd>
+</dl>
 </li>
 </ul>
 <a name="getECLevel--">
@@ -458,6 +462,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/qrcode/encoder/class-use/ByteMatrix.html b/docs/apidocs/com/google/zxing/qrcode/encoder/class-use/ByteMatrix.html
index 7ab7a30..a46d908 100644
--- a/docs/apidocs/com/google/zxing/qrcode/encoder/class-use/ByteMatrix.html
+++ b/docs/apidocs/com/google/zxing/qrcode/encoder/class-use/ByteMatrix.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.qrcode.encoder.ByteMatrix (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.qrcode.encoder.ByteMatrix (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.qrcode.encoder.ByteMatrix (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.qrcode.encoder.ByteMatrix (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -173,6 +173,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/qrcode/encoder/class-use/Encoder.html b/docs/apidocs/com/google/zxing/qrcode/encoder/class-use/Encoder.html
index 8ea970b..765eb82 100644
--- a/docs/apidocs/com/google/zxing/qrcode/encoder/class-use/Encoder.html
+++ b/docs/apidocs/com/google/zxing/qrcode/encoder/class-use/Encoder.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.qrcode.encoder.Encoder (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.qrcode.encoder.Encoder (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.qrcode.encoder.Encoder (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.qrcode.encoder.Encoder (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/qrcode/encoder/class-use/QRCode.html b/docs/apidocs/com/google/zxing/qrcode/encoder/class-use/QRCode.html
index 0c9ff7c..162643d 100644
--- a/docs/apidocs/com/google/zxing/qrcode/encoder/class-use/QRCode.html
+++ b/docs/apidocs/com/google/zxing/qrcode/encoder/class-use/QRCode.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.qrcode.encoder.QRCode (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.qrcode.encoder.QRCode (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.qrcode.encoder.QRCode (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.qrcode.encoder.QRCode (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -167,6 +167,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/qrcode/encoder/package-frame.html b/docs/apidocs/com/google/zxing/qrcode/encoder/package-frame.html
index dc1c87e..ba060eb 100644
--- a/docs/apidocs/com/google/zxing/qrcode/encoder/package-frame.html
+++ b/docs/apidocs/com/google/zxing/qrcode/encoder/package-frame.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.qrcode.encoder (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.qrcode.encoder (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
diff --git a/docs/apidocs/com/google/zxing/qrcode/encoder/package-summary.html b/docs/apidocs/com/google/zxing/qrcode/encoder/package-summary.html
index df3cbf6..2a6f114 100644
--- a/docs/apidocs/com/google/zxing/qrcode/encoder/package-summary.html
+++ b/docs/apidocs/com/google/zxing/qrcode/encoder/package-summary.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.qrcode.encoder (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.qrcode.encoder (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.qrcode.encoder (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.qrcode.encoder (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -149,6 +149,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/qrcode/encoder/package-tree.html b/docs/apidocs/com/google/zxing/qrcode/encoder/package-tree.html
index 808b8ad..8cc2685 100644
--- a/docs/apidocs/com/google/zxing/qrcode/encoder/package-tree.html
+++ b/docs/apidocs/com/google/zxing/qrcode/encoder/package-tree.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.qrcode.encoder Class Hierarchy (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.qrcode.encoder Class Hierarchy (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.qrcode.encoder Class Hierarchy (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.qrcode.encoder Class Hierarchy (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -135,6 +135,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/qrcode/encoder/package-use.html b/docs/apidocs/com/google/zxing/qrcode/encoder/package-use.html
index 56e3041..cfbbce3 100644
--- a/docs/apidocs/com/google/zxing/qrcode/encoder/package-use.html
+++ b/docs/apidocs/com/google/zxing/qrcode/encoder/package-use.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Package com.google.zxing.qrcode.encoder (ZXing 3.4.0 API)</title>
+<title>Uses of Package com.google.zxing.qrcode.encoder (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Package com.google.zxing.qrcode.encoder (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Package com.google.zxing.qrcode.encoder (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -159,6 +159,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/qrcode/package-frame.html b/docs/apidocs/com/google/zxing/qrcode/package-frame.html
index 4b6a9f4..2a8f96b 100644
--- a/docs/apidocs/com/google/zxing/qrcode/package-frame.html
+++ b/docs/apidocs/com/google/zxing/qrcode/package-frame.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.qrcode (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.qrcode (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
diff --git a/docs/apidocs/com/google/zxing/qrcode/package-summary.html b/docs/apidocs/com/google/zxing/qrcode/package-summary.html
index 4b1b182..a1cefd0 100644
--- a/docs/apidocs/com/google/zxing/qrcode/package-summary.html
+++ b/docs/apidocs/com/google/zxing/qrcode/package-summary.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.qrcode (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.qrcode (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.qrcode (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.qrcode (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -146,6 +146,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/qrcode/package-tree.html b/docs/apidocs/com/google/zxing/qrcode/package-tree.html
index 494ca73..84c1558 100644
--- a/docs/apidocs/com/google/zxing/qrcode/package-tree.html
+++ b/docs/apidocs/com/google/zxing/qrcode/package-tree.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.qrcode Class Hierarchy (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.qrcode Class Hierarchy (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.qrcode Class Hierarchy (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.qrcode Class Hierarchy (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -134,6 +134,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/qrcode/package-use.html b/docs/apidocs/com/google/zxing/qrcode/package-use.html
index dd59383..c511b5b 100644
--- a/docs/apidocs/com/google/zxing/qrcode/package-use.html
+++ b/docs/apidocs/com/google/zxing/qrcode/package-use.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Package com.google.zxing.qrcode (ZXing 3.4.0 API)</title>
+<title>Uses of Package com.google.zxing.qrcode (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Package com.google.zxing.qrcode (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Package com.google.zxing.qrcode (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -155,6 +155,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/web/ChartDoSFilter.html b/docs/apidocs/com/google/zxing/web/ChartDoSFilter.html
index 9e8d257..f1fb0bf 100644
--- a/docs/apidocs/com/google/zxing/web/ChartDoSFilter.html
+++ b/docs/apidocs/com/google/zxing/web/ChartDoSFilter.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>ChartDoSFilter (ZXing 3.4.0 API)</title>
+<title>ChartDoSFilter (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="ChartDoSFilter (ZXing 3.4.0 API)";
+            parent.document.title="ChartDoSFilter (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -112,7 +112,7 @@
 </dl>
 <hr>
 <br>
-<pre>@WebFilter(urlPatterns="/w/chart",initParams={@WebInitParam(name="maxAccessPerTime",value="250"),@WebInitParam(name="accessTimeSec",value="500"),@WebInitParam(name="maxEntries",value="10000")})
+<pre>@WebFilter(urlPatterns="/w/chart",initParams={@WebInitParam(name="maxAccessPerTime",value="120"),@WebInitParam(name="accessTimeSec",value="60"),@WebInitParam(name="maxEntries",value="100000"),@WebInitParam(name="maxLoad",value="0.9")})
 public final class <span class="typeNameLabel">ChartDoSFilter</span>
 extends <a href="../../../../com/google/zxing/web/DoSFilter.html" title="class in com.google.zxing.web">DoSFilter</a></pre>
 <div class="block">Protect the /chart endpoint from too many requests.</div>
@@ -251,6 +251,6 @@ extends <a href="../../../../com/google/zxing/web/DoSFilter.html" title="class i
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/web/ChartServlet.html b/docs/apidocs/com/google/zxing/web/ChartServlet.html
index 6721bed..76e68e3 100644
--- a/docs/apidocs/com/google/zxing/web/ChartServlet.html
+++ b/docs/apidocs/com/google/zxing/web/ChartServlet.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>ChartServlet (ZXing 3.4.0 API)</title>
+<title>ChartServlet (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="ChartServlet (ZXing 3.4.0 API)";
+            parent.document.title="ChartServlet (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -338,6 +338,6 @@ extends javax.servlet.http.HttpServlet</pre>
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/web/DecodeDoSFilter.html b/docs/apidocs/com/google/zxing/web/DecodeDoSFilter.html
index 190681d..27f8661 100644
--- a/docs/apidocs/com/google/zxing/web/DecodeDoSFilter.html
+++ b/docs/apidocs/com/google/zxing/web/DecodeDoSFilter.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>DecodeDoSFilter (ZXing 3.4.0 API)</title>
+<title>DecodeDoSFilter (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="DecodeDoSFilter (ZXing 3.4.0 API)";
+            parent.document.title="DecodeDoSFilter (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -112,7 +112,7 @@
 </dl>
 <hr>
 <br>
-<pre>@WebFilter(urlPatterns="/w/decode",initParams={@WebInitParam(name="maxAccessPerTime",value="60"),@WebInitParam(name="accessTimeSec",value="180"),@WebInitParam(name="maxEntries",value="10000")})
+<pre>@WebFilter(urlPatterns="/w/decode",initParams={@WebInitParam(name="maxAccessPerTime",value="60"),@WebInitParam(name="accessTimeSec",value="60"),@WebInitParam(name="maxEntries",value="100000"),@WebInitParam(name="maxLoad",value="0.9")})
 public final class <span class="typeNameLabel">DecodeDoSFilter</span>
 extends <a href="../../../../com/google/zxing/web/DoSFilter.html" title="class in com.google.zxing.web">DoSFilter</a></pre>
 <div class="block">Protect the /decode endpoint from too many requests.</div>
@@ -251,6 +251,6 @@ extends <a href="../../../../com/google/zxing/web/DoSFilter.html" title="class i
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/web/DecodeServlet.html b/docs/apidocs/com/google/zxing/web/DecodeServlet.html
index 625ce6c..86c4d69 100644
--- a/docs/apidocs/com/google/zxing/web/DecodeServlet.html
+++ b/docs/apidocs/com/google/zxing/web/DecodeServlet.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>DecodeServlet (ZXing 3.4.0 API)</title>
+<title>DecodeServlet (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="DecodeServlet (ZXing 3.4.0 API)";
+            parent.document.title="DecodeServlet (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -123,7 +123,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>@WebServlet(value="/w/decode",loadOnStartup=1,initParams={@WebInitParam(name="maxAccessPerTime",value="120"),@WebInitParam(name="accessTimeSec",value="120"),@WebInitParam(name="maxEntries",value="10000")})
+<pre>@WebServlet(value="/w/decode",loadOnStartup=1,initParams={@WebInitParam(name="maxAccessPerTime",value="120"),@WebInitParam(name="accessTimeSec",value="120"),@WebInitParam(name="maxEntries",value="100000")})
 public final class <span class="typeNameLabel">DecodeServlet</span>
 extends javax.servlet.http.HttpServlet</pre>
 <div class="block"><code>HttpServlet</code> which decodes images containing barcodes. Given a URL, it will
@@ -380,6 +380,6 @@ extends javax.servlet.http.HttpServlet</pre>
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/web/HTTPSFilter.html b/docs/apidocs/com/google/zxing/web/HTTPSFilter.html
index 6563a52..4a41b60 100644
--- a/docs/apidocs/com/google/zxing/web/HTTPSFilter.html
+++ b/docs/apidocs/com/google/zxing/web/HTTPSFilter.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>HTTPSFilter (ZXing 3.4.0 API)</title>
+<title>HTTPSFilter (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="HTTPSFilter (ZXing 3.4.0 API)";
+            parent.document.title="HTTPSFilter (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -318,6 +318,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/web/OutputUtils.html b/docs/apidocs/com/google/zxing/web/OutputUtils.html
index 57ba84b..bb67df0 100644
--- a/docs/apidocs/com/google/zxing/web/OutputUtils.html
+++ b/docs/apidocs/com/google/zxing/web/OutputUtils.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>OutputUtils (ZXing 3.4.0 API)</title>
+<title>OutputUtils (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="OutputUtils (ZXing 3.4.0 API)";
+            parent.document.title="OutputUtils (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -50,7 +50,7 @@ var activeTableTab = "activeTableTab";
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../com/google/zxing/web/HTTPSFilter.html" title="class in com.google.zxing.web"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../com/google/zxing/web/WelcomeFilter.html" title="class in com.google.zxing.web"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../com/google/zxing/web/TimeoutFilter.html" title="class in com.google.zxing.web"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../index.html?com/google/zxing/web/OutputUtils.html" target="_top">Frames</a></li>
@@ -198,7 +198,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../com/google/zxing/web/HTTPSFilter.html" title="class in com.google.zxing.web"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../com/google/zxing/web/WelcomeFilter.html" title="class in com.google.zxing.web"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../com/google/zxing/web/TimeoutFilter.html" title="class in com.google.zxing.web"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../index.html?com/google/zxing/web/OutputUtils.html" target="_top">Frames</a></li>
@@ -238,6 +238,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/web/DoSFilter.html b/docs/apidocs/com/google/zxing/web/TimeoutFilter.html
similarity index 83%
rename from docs/apidocs/com/google/zxing/web/DoSFilter.html
rename to docs/apidocs/com/google/zxing/web/TimeoutFilter.html
index 663071a..9ae0798 100644
--- a/docs/apidocs/com/google/zxing/web/DoSFilter.html
+++ b/docs/apidocs/com/google/zxing/web/TimeoutFilter.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>DoSFilter (ZXing 3.4.0 API)</title>
+<title>TimeoutFilter (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="DoSFilter (ZXing 3.4.0 API)";
+            parent.document.title="TimeoutFilter (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -40,7 +40,7 @@ var activeTableTab = "activeTableTab";
 <li><a href="../../../../overview-summary.html">Overview</a></li>
 <li><a href="package-summary.html">Package</a></li>
 <li class="navBarCell1Rev">Class</li>
-<li><a href="class-use/DoSFilter.html">Use</a></li>
+<li><a href="class-use/TimeoutFilter.html">Use</a></li>
 <li><a href="package-tree.html">Tree</a></li>
 <li><a href="../../../../deprecated-list.html">Deprecated</a></li>
 <li><a href="../../../../index-all.html">Index</a></li>
@@ -49,12 +49,12 @@ var activeTableTab = "activeTableTab";
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../com/google/zxing/web/DecodeServlet.html" title="class in com.google.zxing.web"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../com/google/zxing/web/HTTPSFilter.html" title="class in com.google.zxing.web"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../com/google/zxing/web/OutputUtils.html" title="class in com.google.zxing.web"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../com/google/zxing/web/WelcomeFilter.html" title="class in com.google.zxing.web"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
-<li><a href="../../../../index.html?com/google/zxing/web/DoSFilter.html" target="_top">Frames</a></li>
-<li><a href="DoSFilter.html" target="_top">No&nbsp;Frames</a></li>
+<li><a href="../../../../index.html?com/google/zxing/web/TimeoutFilter.html" target="_top">Frames</a></li>
+<li><a href="TimeoutFilter.html" target="_top">No&nbsp;Frames</a></li>
 </ul>
 <ul class="navList" id="allclasses_navbar_top">
 <li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
@@ -93,14 +93,14 @@ var activeTableTab = "activeTableTab";
 <!-- ======== START OF CLASS DATA ======== -->
 <div class="header">
 <div class="subTitle">com.google.zxing.web</div>
-<h2 title="Class DoSFilter" class="title">Class DoSFilter</h2>
+<h2 title="Class TimeoutFilter" class="title">Class TimeoutFilter</h2>
 </div>
 <div class="contentContainer">
 <ul class="inheritance">
 <li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
 <li>
 <ul class="inheritance">
-<li>com.google.zxing.web.DoSFilter</li>
+<li>com.google.zxing.web.TimeoutFilter</li>
 </ul>
 </li>
 </ul>
@@ -111,21 +111,14 @@ var activeTableTab = "activeTableTab";
 <dt>All Implemented Interfaces:</dt>
 <dd>javax.servlet.Filter</dd>
 </dl>
-<dl>
-<dt>Direct Known Subclasses:</dt>
-<dd><a href="../../../../com/google/zxing/web/ChartDoSFilter.html" title="class in com.google.zxing.web">ChartDoSFilter</a>, <a href="../../../../com/google/zxing/web/DecodeDoSFilter.html" title="class in com.google.zxing.web">DecodeDoSFilter</a></dd>
-</dl>
 <hr>
 <br>
-<pre>public abstract class <span class="typeNameLabel">DoSFilter</span>
+<pre>@WebFilter(urlPatterns="/w/decode",
+           initParams=@WebInitParam(name="timeoutSec",value="10"))
+public final class <span class="typeNameLabel">TimeoutFilter</span>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
 implements javax.servlet.Filter</pre>
-<div class="block">A simplistic <code>Filter</code> that rejects requests from hosts that are sending too many
- requests in too short a time.</div>
-<dl>
-<dt><span class="simpleTagLabel">Author:</span></dt>
-<dd>Sean Owen</dd>
-</dl>
+<div class="block">Protect the decode endpoint from long-running requests.</div>
 </li>
 </ul>
 </div>
@@ -144,7 +137,7 @@ implements javax.servlet.Filter</pre>
 <th class="colOne" scope="col">Constructor and Description</th>
 </tr>
 <tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/web/DoSFilter.html#DoSFilter--">DoSFilter</a></span>()</code>&nbsp;</td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/web/TimeoutFilter.html#TimeoutFilter--">TimeoutFilter</a></span>()</code>&nbsp;</td>
 </tr>
 </table>
 </li>
@@ -163,17 +156,17 @@ implements javax.servlet.Filter</pre>
 </tr>
 <tr id="i0" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/web/DoSFilter.html#destroy--">destroy</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/web/TimeoutFilter.html#destroy--">destroy</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i1" class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/web/DoSFilter.html#doFilter-javax.servlet.ServletRequest-javax.servlet.ServletResponse-javax.servlet.FilterChain-">doFilter</a></span>(javax.servlet.ServletRequest&nbsp;request,
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/web/TimeoutFilter.html#doFilter-javax.servlet.ServletRequest-javax.servlet.ServletResponse-javax.servlet.FilterChain-">doFilter</a></span>(javax.servlet.ServletRequest&nbsp;request,
         javax.servlet.ServletResponse&nbsp;response,
         javax.servlet.FilterChain&nbsp;chain)</code>&nbsp;</td>
 </tr>
 <tr id="i2" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/web/DoSFilter.html#init-javax.servlet.FilterConfig-">init</a></span>(javax.servlet.FilterConfig&nbsp;filterConfig)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/google/zxing/web/TimeoutFilter.html#init-javax.servlet.FilterConfig-">init</a></span>(javax.servlet.FilterConfig&nbsp;filterConfig)</code>&nbsp;</td>
 </tr>
 </table>
 <ul class="blockList">
@@ -197,13 +190,13 @@ implements javax.servlet.Filter</pre>
 <!--   -->
 </a>
 <h3>Constructor Detail</h3>
-<a name="DoSFilter--">
+<a name="TimeoutFilter--">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>DoSFilter</h4>
-<pre>public&nbsp;DoSFilter()</pre>
+<h4>TimeoutFilter</h4>
+<pre>public&nbsp;TimeoutFilter()</pre>
 </li>
 </ul>
 </li>
@@ -279,7 +272,7 @@ implements javax.servlet.Filter</pre>
 <li><a href="../../../../overview-summary.html">Overview</a></li>
 <li><a href="package-summary.html">Package</a></li>
 <li class="navBarCell1Rev">Class</li>
-<li><a href="class-use/DoSFilter.html">Use</a></li>
+<li><a href="class-use/TimeoutFilter.html">Use</a></li>
 <li><a href="package-tree.html">Tree</a></li>
 <li><a href="../../../../deprecated-list.html">Deprecated</a></li>
 <li><a href="../../../../index-all.html">Index</a></li>
@@ -288,12 +281,12 @@ implements javax.servlet.Filter</pre>
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../com/google/zxing/web/DecodeServlet.html" title="class in com.google.zxing.web"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../com/google/zxing/web/HTTPSFilter.html" title="class in com.google.zxing.web"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../com/google/zxing/web/OutputUtils.html" title="class in com.google.zxing.web"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../com/google/zxing/web/WelcomeFilter.html" title="class in com.google.zxing.web"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
-<li><a href="../../../../index.html?com/google/zxing/web/DoSFilter.html" target="_top">Frames</a></li>
-<li><a href="DoSFilter.html" target="_top">No&nbsp;Frames</a></li>
+<li><a href="../../../../index.html?com/google/zxing/web/TimeoutFilter.html" target="_top">Frames</a></li>
+<li><a href="TimeoutFilter.html" target="_top">No&nbsp;Frames</a></li>
 </ul>
 <ul class="navList" id="allclasses_navbar_bottom">
 <li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
@@ -329,6 +322,6 @@ implements javax.servlet.Filter</pre>
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/web/WelcomeFilter.html b/docs/apidocs/com/google/zxing/web/WelcomeFilter.html
index c8a98dd..dc4ef26 100644
--- a/docs/apidocs/com/google/zxing/web/WelcomeFilter.html
+++ b/docs/apidocs/com/google/zxing/web/WelcomeFilter.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>WelcomeFilter (ZXing 3.4.0 API)</title>
+<title>WelcomeFilter (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="WelcomeFilter (ZXing 3.4.0 API)";
+            parent.document.title="WelcomeFilter (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -49,7 +49,7 @@ var activeTableTab = "activeTableTab";
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../com/google/zxing/web/OutputUtils.html" title="class in com.google.zxing.web"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../com/google/zxing/web/TimeoutFilter.html" title="class in com.google.zxing.web"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li>Next&nbsp;Class</li>
 </ul>
 <ul class="navList">
@@ -270,7 +270,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../com/google/zxing/web/OutputUtils.html" title="class in com.google.zxing.web"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../com/google/zxing/web/TimeoutFilter.html" title="class in com.google.zxing.web"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li>Next&nbsp;Class</li>
 </ul>
 <ul class="navList">
@@ -311,6 +311,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/web/class-use/ChartDoSFilter.html b/docs/apidocs/com/google/zxing/web/class-use/ChartDoSFilter.html
index d649de4..404826e 100644
--- a/docs/apidocs/com/google/zxing/web/class-use/ChartDoSFilter.html
+++ b/docs/apidocs/com/google/zxing/web/class-use/ChartDoSFilter.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.web.ChartDoSFilter (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.web.ChartDoSFilter (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.web.ChartDoSFilter (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.web.ChartDoSFilter (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/web/class-use/ChartServlet.html b/docs/apidocs/com/google/zxing/web/class-use/ChartServlet.html
index 38b8154..3b4a592 100644
--- a/docs/apidocs/com/google/zxing/web/class-use/ChartServlet.html
+++ b/docs/apidocs/com/google/zxing/web/class-use/ChartServlet.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.web.ChartServlet (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.web.ChartServlet (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.web.ChartServlet (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.web.ChartServlet (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/web/class-use/DecodeDoSFilter.html b/docs/apidocs/com/google/zxing/web/class-use/DecodeDoSFilter.html
index 1b49979..fa2970e 100644
--- a/docs/apidocs/com/google/zxing/web/class-use/DecodeDoSFilter.html
+++ b/docs/apidocs/com/google/zxing/web/class-use/DecodeDoSFilter.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.web.DecodeDoSFilter (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.web.DecodeDoSFilter (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.web.DecodeDoSFilter (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.web.DecodeDoSFilter (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/web/class-use/DoSFilter.html b/docs/apidocs/com/google/zxing/web/class-use/DoSFilter.html
index 8be9e71..cb6fdba 100644
--- a/docs/apidocs/com/google/zxing/web/class-use/DoSFilter.html
+++ b/docs/apidocs/com/google/zxing/web/class-use/DoSFilter.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.web.DoSFilter (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.web.DoSFilter (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.web.DoSFilter (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.web.DoSFilter (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -168,6 +168,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/web/class-use/HTTPSFilter.html b/docs/apidocs/com/google/zxing/web/class-use/HTTPSFilter.html
index aa61fba..ac0a630 100644
--- a/docs/apidocs/com/google/zxing/web/class-use/HTTPSFilter.html
+++ b/docs/apidocs/com/google/zxing/web/class-use/HTTPSFilter.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.web.HTTPSFilter (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.web.HTTPSFilter (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.web.HTTPSFilter (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.web.HTTPSFilter (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/web/class-use/OutputUtils.html b/docs/apidocs/com/google/zxing/web/class-use/OutputUtils.html
index 2674846..940bbf9 100644
--- a/docs/apidocs/com/google/zxing/web/class-use/OutputUtils.html
+++ b/docs/apidocs/com/google/zxing/web/class-use/OutputUtils.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.web.OutputUtils (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.web.OutputUtils (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.web.OutputUtils (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.web.OutputUtils (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/web/class-use/DecodeServlet.html b/docs/apidocs/com/google/zxing/web/class-use/TimeoutFilter.html
similarity index 84%
rename from docs/apidocs/com/google/zxing/web/class-use/DecodeServlet.html
rename to docs/apidocs/com/google/zxing/web/class-use/TimeoutFilter.html
index 23df8dc..8f338d1 100644
--- a/docs/apidocs/com/google/zxing/web/class-use/DecodeServlet.html
+++ b/docs/apidocs/com/google/zxing/web/class-use/TimeoutFilter.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.web.DecodeServlet (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.web.TimeoutFilter (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.web.DecodeServlet (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.web.TimeoutFilter (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -33,7 +33,7 @@
 <ul class="navList" title="Navigation">
 <li><a href="../../../../../overview-summary.html">Overview</a></li>
 <li><a href="../package-summary.html">Package</a></li>
-<li><a href="../../../../../com/google/zxing/web/DecodeServlet.html" title="class in com.google.zxing.web">Class</a></li>
+<li><a href="../../../../../com/google/zxing/web/TimeoutFilter.html" title="class in com.google.zxing.web">Class</a></li>
 <li class="navBarCell1Rev">Use</li>
 <li><a href="../package-tree.html">Tree</a></li>
 <li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
@@ -47,8 +47,8 @@
 <li>Next</li>
 </ul>
 <ul class="navList">
-<li><a href="../../../../../index.html?com/google/zxing/web/class-use/DecodeServlet.html" target="_top">Frames</a></li>
-<li><a href="DecodeServlet.html" target="_top">No&nbsp;Frames</a></li>
+<li><a href="../../../../../index.html?com/google/zxing/web/class-use/TimeoutFilter.html" target="_top">Frames</a></li>
+<li><a href="TimeoutFilter.html" target="_top">No&nbsp;Frames</a></li>
 </ul>
 <ul class="navList" id="allclasses_navbar_top">
 <li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
@@ -70,9 +70,9 @@
 </a></div>
 <!-- ========= END OF TOP NAVBAR ========= -->
 <div class="header">
-<h2 title="Uses of Class com.google.zxing.web.DecodeServlet" class="title">Uses of Class<br>com.google.zxing.web.DecodeServlet</h2>
+<h2 title="Uses of Class com.google.zxing.web.TimeoutFilter" class="title">Uses of Class<br>com.google.zxing.web.TimeoutFilter</h2>
 </div>
-<div class="classUseContainer">No usage of com.google.zxing.web.DecodeServlet</div>
+<div class="classUseContainer">No usage of com.google.zxing.web.TimeoutFilter</div>
 <!-- ======= START OF BOTTOM NAVBAR ====== -->
 <div class="bottomNav"><a name="navbar.bottom">
 <!--   -->
@@ -84,7 +84,7 @@
 <ul class="navList" title="Navigation">
 <li><a href="../../../../../overview-summary.html">Overview</a></li>
 <li><a href="../package-summary.html">Package</a></li>
-<li><a href="../../../../../com/google/zxing/web/DecodeServlet.html" title="class in com.google.zxing.web">Class</a></li>
+<li><a href="../../../../../com/google/zxing/web/TimeoutFilter.html" title="class in com.google.zxing.web">Class</a></li>
 <li class="navBarCell1Rev">Use</li>
 <li><a href="../package-tree.html">Tree</a></li>
 <li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
@@ -98,8 +98,8 @@
 <li>Next</li>
 </ul>
 <ul class="navList">
-<li><a href="../../../../../index.html?com/google/zxing/web/class-use/DecodeServlet.html" target="_top">Frames</a></li>
-<li><a href="DecodeServlet.html" target="_top">No&nbsp;Frames</a></li>
+<li><a href="../../../../../index.html?com/google/zxing/web/class-use/TimeoutFilter.html" target="_top">Frames</a></li>
+<li><a href="TimeoutFilter.html" target="_top">No&nbsp;Frames</a></li>
 </ul>
 <ul class="navList" id="allclasses_navbar_bottom">
 <li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/web/class-use/WelcomeFilter.html b/docs/apidocs/com/google/zxing/web/class-use/WelcomeFilter.html
index 59123de..4a9e1f0 100644
--- a/docs/apidocs/com/google/zxing/web/class-use/WelcomeFilter.html
+++ b/docs/apidocs/com/google/zxing/web/class-use/WelcomeFilter.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class com.google.zxing.web.WelcomeFilter (ZXing 3.4.0 API)</title>
+<title>Uses of Class com.google.zxing.web.WelcomeFilter (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class com.google.zxing.web.WelcomeFilter (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Class com.google.zxing.web.WelcomeFilter (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -120,6 +120,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/web/package-frame.html b/docs/apidocs/com/google/zxing/web/package-frame.html
index faee8c7..8d51066 100644
--- a/docs/apidocs/com/google/zxing/web/package-frame.html
+++ b/docs/apidocs/com/google/zxing/web/package-frame.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.web (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.web (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -20,6 +20,7 @@
 <li><a href="DoSFilter.html" title="class in com.google.zxing.web" target="classFrame">DoSFilter</a></li>
 <li><a href="HTTPSFilter.html" title="class in com.google.zxing.web" target="classFrame">HTTPSFilter</a></li>
 <li><a href="OutputUtils.html" title="class in com.google.zxing.web" target="classFrame">OutputUtils</a></li>
+<li><a href="TimeoutFilter.html" title="class in com.google.zxing.web" target="classFrame">TimeoutFilter</a></li>
 <li><a href="WelcomeFilter.html" title="class in com.google.zxing.web" target="classFrame">WelcomeFilter</a></li>
 </ul>
 </div>
diff --git a/docs/apidocs/com/google/zxing/web/package-summary.html b/docs/apidocs/com/google/zxing/web/package-summary.html
index 3c764f4..60b8691 100644
--- a/docs/apidocs/com/google/zxing/web/package-summary.html
+++ b/docs/apidocs/com/google/zxing/web/package-summary.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.web (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.web (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.web (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.web (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -128,6 +128,12 @@
 </td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><a href="../../../../com/google/zxing/web/TimeoutFilter.html" title="class in com.google.zxing.web">TimeoutFilter</a></td>
+<td class="colLast">
+<div class="block">Protect the decode endpoint from long-running requests.</div>
+</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../com/google/zxing/web/WelcomeFilter.html" title="class in com.google.zxing.web">WelcomeFilter</a></td>
 <td class="colLast">
 <div class="block">Handles redirects to the app landing page.</div>
@@ -185,6 +191,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/web/package-tree.html b/docs/apidocs/com/google/zxing/web/package-tree.html
index aecdd2a..7b19541 100644
--- a/docs/apidocs/com/google/zxing/web/package-tree.html
+++ b/docs/apidocs/com/google/zxing/web/package-tree.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>com.google.zxing.web Class Hierarchy (ZXing 3.4.0 API)</title>
+<title>com.google.zxing.web Class Hierarchy (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="com.google.zxing.web Class Hierarchy (ZXing 3.4.0 API)";
+            parent.document.title="com.google.zxing.web Class Hierarchy (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -99,6 +99,7 @@
 </li>
 <li type="circle">com.google.zxing.web.<a href="../../../../com/google/zxing/web/HTTPSFilter.html" title="class in com.google.zxing.web"><span class="typeNameLink">HTTPSFilter</span></a></li>
 <li type="circle">com.google.zxing.web.<a href="../../../../com/google/zxing/web/OutputUtils.html" title="class in com.google.zxing.web"><span class="typeNameLink">OutputUtils</span></a></li>
+<li type="circle">com.google.zxing.web.<a href="../../../../com/google/zxing/web/TimeoutFilter.html" title="class in com.google.zxing.web"><span class="typeNameLink">TimeoutFilter</span></a> (implements javax.servlet.Filter)</li>
 <li type="circle">com.google.zxing.web.<a href="../../../../com/google/zxing/web/WelcomeFilter.html" title="class in com.google.zxing.web"><span class="typeNameLink">WelcomeFilter</span></a></li>
 </ul>
 </li>
@@ -151,6 +152,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/com/google/zxing/web/package-use.html b/docs/apidocs/com/google/zxing/web/package-use.html
index 4fa0780..c61f586 100644
--- a/docs/apidocs/com/google/zxing/web/package-use.html
+++ b/docs/apidocs/com/google/zxing/web/package-use.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Package com.google.zxing.web (ZXing 3.4.0 API)</title>
+<title>Uses of Package com.google.zxing.web (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Package com.google.zxing.web (ZXing 3.4.0 API)";
+            parent.document.title="Uses of Package com.google.zxing.web (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -156,6 +156,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/constant-values.html b/docs/apidocs/constant-values.html
index 98a8704..eca19fc 100644
--- a/docs/apidocs/constant-values.html
+++ b/docs/apidocs/constant-values.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Constant Field Values (ZXing 3.4.0 API)</title>
+<title>Constant Field Values (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
 <script type="text/javascript" src="script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Constant Field Values (ZXing 3.4.0 API)";
+            parent.document.title="Constant Field Values (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -352,6 +352,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/deprecated-list.html b/docs/apidocs/deprecated-list.html
index 579ed5b..373c409 100644
--- a/docs/apidocs/deprecated-list.html
+++ b/docs/apidocs/deprecated-list.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Deprecated List (ZXing 3.4.0 API)</title>
+<title>Deprecated List (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
 <script type="text/javascript" src="script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Deprecated List (ZXing 3.4.0 API)";
+            parent.document.title="Deprecated List (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -90,10 +90,20 @@
 </tr>
 <tbody>
 <tr class="altColor">
+<td class="colOne"><a href="com/google/zxing/client/j2se/HtmlAssetTranslator.html" title="class in com.google.zxing.client.j2se">com.google.zxing.client.j2se.HtmlAssetTranslator</a>
+<div class="block"><span class="deprecationComment">without replacement since 3.4.2</span></div>
+</td>
+</tr>
+<tr class="rowColor">
 <td class="colOne"><a href="com/google/zxing/common/detector/MonochromeRectangleDetector.html" title="class in com.google.zxing.common.detector">com.google.zxing.common.detector.MonochromeRectangleDetector</a>
 <div class="block"><span class="deprecationComment">without replacement since 3.3.0</span></div>
 </td>
 </tr>
+<tr class="altColor">
+<td class="colOne"><a href="com/google/zxing/client/j2se/StringsResourceTranslator.html" title="class in com.google.zxing.client.j2se">com.google.zxing.client.j2se.StringsResourceTranslator</a>
+<div class="block"><span class="deprecationComment">without replacement since 3.4.2</span></div>
+</td>
+</tr>
 </tbody>
 </table>
 </li>
@@ -115,55 +125,61 @@
 </td>
 </tr>
 <tr class="rowColor">
+<td class="colOne"><a href="com/google/zxing/qrcode/detector/FinderPatternFinder.html#clearCounts-int:A-">com.google.zxing.qrcode.detector.FinderPatternFinder.clearCounts(int[])</a></td>
+</tr>
+<tr class="altColor">
 <td class="colOne"><a href="com/google/zxing/oned/rss/AbstractRSSReader.html#count-int:A-">com.google.zxing.oned.rss.AbstractRSSReader.count(int[])</a>
 <div class="block"><span class="deprecationComment">call <a href="com/google/zxing/common/detector/MathUtils.html#sum-int:A-"><code>MathUtils.sum(int[])</code></a></span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="com/google/zxing/pdf417/PDF417Common.html#getBitCountSum-int:A-">com.google.zxing.pdf417.PDF417Common.getBitCountSum(int[])</a>
 <div class="block"><span class="deprecationComment">call <a href="com/google/zxing/common/detector/MathUtils.html#sum-int:A-"><code>MathUtils.sum(int[])</code></a></span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="com/google/zxing/client/result/EmailAddressParsedResult.html#getEmailAddress--">com.google.zxing.client.result.EmailAddressParsedResult.getEmailAddress()</a>
 <div class="block"><span class="deprecationComment">use <a href="com/google/zxing/client/result/EmailAddressParsedResult.html#getTos--"><code>EmailAddressParsedResult.getTos()</code></a></span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="com/google/zxing/client/result/CalendarParsedResult.html#getEnd--">com.google.zxing.client.result.CalendarParsedResult.getEnd()</a>
 <div class="block"><span class="deprecationComment">use <a href="com/google/zxing/client/result/CalendarParsedResult.html#getEndTimestamp--"><code>CalendarParsedResult.getEndTimestamp()</code></a></span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="com/google/zxing/client/result/EmailAddressParsedResult.html#getMailtoURI--">com.google.zxing.client.result.EmailAddressParsedResult.getMailtoURI()</a>
 <div class="block"><span class="deprecationComment">without replacement</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="com/google/zxing/pdf417/PDF417ResultMetadata.html#getOptionalData--">com.google.zxing.pdf417.PDF417ResultMetadata.getOptionalData()</a>
 <div class="block"><span class="deprecationComment">use dedicated already parsed fields</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="com/google/zxing/client/result/CalendarParsedResult.html#getStart--">com.google.zxing.client.result.CalendarParsedResult.getStart()</a>
 <div class="block"><span class="deprecationComment">use <a href="com/google/zxing/client/result/CalendarParsedResult.html#getStartTimestamp--"><code>CalendarParsedResult.getStartTimestamp()</code></a></span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="com/google/zxing/qrcode/detector/FinderPatternFinder.html#handlePossibleCenter-int:A-int-int-boolean-">com.google.zxing.qrcode.detector.FinderPatternFinder.handlePossibleCenter(int[], int, int, boolean)</a>
 <div class="block"><span class="deprecationComment">only exists for backwards compatibility</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="com/google/zxing/client/result/URIParsedResult.html#isPossiblyMaliciousURI--">com.google.zxing.client.result.URIParsedResult.isPossiblyMaliciousURI()</a>
 <div class="block"><span class="deprecationComment">see <a href="com/google/zxing/client/result/URIResultParser.html#isPossiblyMaliciousURI-java.lang.String-"><code>URIResultParser.isPossiblyMaliciousURI(String)</code></a></span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="com/google/zxing/pdf417/PDF417ResultMetadata.html#setOptionalData-int:A-">com.google.zxing.pdf417.PDF417ResultMetadata.setOptionalData(int[])</a>
 <div class="block"><span class="deprecationComment">parse and use new fields</span></div>
 </td>
 </tr>
+<tr class="altColor">
+<td class="colOne"><a href="com/google/zxing/qrcode/detector/FinderPatternFinder.html#shiftCounts2-int:A-">com.google.zxing.qrcode.detector.FinderPatternFinder.shiftCounts2(int[])</a></td>
+</tr>
 <tr class="rowColor">
 <td class="colOne"><a href="com/google/zxing/common/BitMatrix.html#toString-java.lang.String-java.lang.String-java.lang.String-">com.google.zxing.common.BitMatrix.toString(String, String, String)</a>
 <div class="block"><span class="deprecationComment">call <a href="com/google/zxing/common/BitMatrix.html#toString-java.lang.String-java.lang.String-"><code>BitMatrix.toString(String,String)</code></a> only, which uses \n line separator always</span></div>
@@ -257,6 +273,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/help-doc.html b/docs/apidocs/help-doc.html
index bdb5594..17b9987 100644
--- a/docs/apidocs/help-doc.html
+++ b/docs/apidocs/help-doc.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>API Help (ZXing 3.4.0 API)</title>
+<title>API Help (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
 <script type="text/javascript" src="script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="API Help (ZXing 3.4.0 API)";
+            parent.document.title="API Help (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -225,6 +225,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/index-all.html b/docs/apidocs/index-all.html
index 0f42a8f..7be0df5 100644
--- a/docs/apidocs/index-all.html
+++ b/docs/apidocs/index-all.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Index (ZXing 3.4.0 API)</title>
+<title>Index (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
 <script type="text/javascript" src="script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Index (ZXing 3.4.0 API)";
+            parent.document.title="Index (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -111,6 +111,22 @@
 <div class="block">Encapsulates an alignment pattern, which are the smaller square patterns found in
  all but the simplest QR Codes.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/common/ECIStringBuilder.html#append-char-">append(char)</a></span> - Method in class com.google.zxing.common.<a href="com/google/zxing/common/ECIStringBuilder.html" title="class in com.google.zxing.common">ECIStringBuilder</a></dt>
+<dd>
+<div class="block">Appends <code>value</code> as a byte value</div>
+</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/common/ECIStringBuilder.html#append-byte-">append(byte)</a></span> - Method in class com.google.zxing.common.<a href="com/google/zxing/common/ECIStringBuilder.html" title="class in com.google.zxing.common">ECIStringBuilder</a></dt>
+<dd>
+<div class="block">Appends <code>value</code> as a byte value</div>
+</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/common/ECIStringBuilder.html#append-java.lang.String-">append(String)</a></span> - Method in class com.google.zxing.common.<a href="com/google/zxing/common/ECIStringBuilder.html" title="class in com.google.zxing.common">ECIStringBuilder</a></dt>
+<dd>
+<div class="block">Appends the characters in <code>value</code> as bytes values</div>
+</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/common/ECIStringBuilder.html#append-int-">append(int)</a></span> - Method in class com.google.zxing.common.<a href="com/google/zxing/common/ECIStringBuilder.html" title="class in com.google.zxing.common">ECIStringBuilder</a></dt>
+<dd>
+<div class="block">Append the string repesentation of <code>value</code> (short for <code>append(String.valueOf(value))</code>)</div>
+</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/common/BitArray.html#appendBit-boolean-">appendBit(boolean)</a></span> - Method in class com.google.zxing.common.<a href="com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/common/BitArray.html#appendBitArray-com.google.zxing.common.BitArray-">appendBitArray(BitArray)</a></span> - Method in class com.google.zxing.common.<a href="com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a></dt>
@@ -120,6 +136,14 @@
 <div class="block">Appends the least-significant bits, from value, in order from most-significant to
  least-significant.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/common/ECIStringBuilder.html#appendCharacters-java.lang.StringBuilder-">appendCharacters(StringBuilder)</a></span> - Method in class com.google.zxing.common.<a href="com/google/zxing/common/ECIStringBuilder.html" title="class in com.google.zxing.common">ECIStringBuilder</a></dt>
+<dd>
+<div class="block">Appends the characters from <code>value</code> (unlike all other append methods of this class who append bytes)</div>
+</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/common/ECIStringBuilder.html#appendECI-int-">appendECI(int)</a></span> - Method in class com.google.zxing.common.<a href="com/google/zxing/common/ECIStringBuilder.html" title="class in com.google.zxing.common">ECIStringBuilder</a></dt>
+<dd>
+<div class="block">Appends ECI value to output.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/oned/Code93Writer.html#appendPattern-boolean:A-int-int:A-boolean-">appendPattern(boolean[], int, int[], boolean)</a></span> - Static method in class com.google.zxing.oned.<a href="com/google/zxing/oned/Code93Writer.html" title="class in com.google.zxing.oned">Code93Writer</a></dt>
 <dd>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>
@@ -280,11 +304,21 @@
 </dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/client/result/CalendarParsedResult.html#CalendarParsedResult-java.lang.String-java.lang.String-java.lang.String-java.lang.String-java.lang.String-java.lang.String-java.lang.String:A-java.lang.String-double-double-">CalendarParsedResult(String, String, String, String, String, String, String[], String, double, double)</a></span> - Constructor for class com.google.zxing.client.result.<a href="com/google/zxing/client/result/CalendarParsedResult.html" title="class in com.google.zxing.client.result">CalendarParsedResult</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/common/ECIEncoderSet.html#canEncode-char-int-">canEncode(char, int)</a></span> - Method in class com.google.zxing.common.<a href="com/google/zxing/common/ECIEncoderSet.html" title="class in com.google.zxing.common">ECIEncoderSet</a></dt>
+<dd>&nbsp;</dd>
 <dt><a href="com/google/zxing/common/CharacterSetECI.html" title="enum in com.google.zxing.common"><span class="typeNameLink">CharacterSetECI</span></a> - Enum in <a href="com/google/zxing/common/package-summary.html">com.google.zxing.common</a></dt>
 <dd>
 <div class="block">Encapsulates a Character Set ECI, according to "Extended Channel Interpretations" 5.3.1.1
  of ISO 18004.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/common/ECIInput.html#charAt-int-">charAt(int)</a></span> - Method in interface com.google.zxing.common.<a href="com/google/zxing/common/ECIInput.html" title="interface in com.google.zxing.common">ECIInput</a></dt>
+<dd>
+<div class="block">Returns the <code>byte</code> value at the specified index.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/common/MinimalECIInput.html#charAt-int-">charAt(int)</a></span> - Method in class com.google.zxing.common.<a href="com/google/zxing/common/MinimalECIInput.html" title="class in com.google.zxing.common">MinimalECIInput</a></dt>
+<dd>
+<div class="block">Returns the <code>byte</code> value at the specified index.</div>
+</dd>
 <dt><a href="com/google/zxing/web/ChartDoSFilter.html" title="class in com.google.zxing.web"><span class="typeNameLink">ChartDoSFilter</span></a> - Class in <a href="com/google/zxing/web/package-summary.html">com.google.zxing.web</a></dt>
 <dd>
 <div class="block">Protect the /chart endpoint from too many requests.</div>
@@ -326,7 +360,9 @@
 <dt><span class="memberNameLink"><a href="com/google/zxing/qrcode/encoder/ByteMatrix.html#clear-byte-">clear(byte)</a></span> - Method in class com.google.zxing.qrcode.encoder.<a href="com/google/zxing/qrcode/encoder/ByteMatrix.html" title="class in com.google.zxing.qrcode.encoder">ByteMatrix</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/qrcode/detector/FinderPatternFinder.html#clearCounts-int:A-">clearCounts(int[])</a></span> - Method in class com.google.zxing.qrcode.detector.<a href="com/google/zxing/qrcode/detector/FinderPatternFinder.html" title="class in com.google.zxing.qrcode.detector">FinderPatternFinder</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
+</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/common/BitArray.html#clone--">clone()</a></span> - Method in class com.google.zxing.common.<a href="com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/common/BitMatrix.html#clone--">clone()</a></span> - Method in class com.google.zxing.common.<a href="com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></dt>
@@ -739,8 +775,12 @@
 </dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/common/DecoderResult.html#DecoderResult-byte:A-java.lang.String-java.util.List-java.lang.String-">DecoderResult(byte[], String, List&lt;byte[]&gt;, String)</a></span> - Constructor for class com.google.zxing.common.<a href="com/google/zxing/common/DecoderResult.html" title="class in com.google.zxing.common">DecoderResult</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/common/DecoderResult.html#DecoderResult-byte:A-java.lang.String-java.util.List-java.lang.String-int-">DecoderResult(byte[], String, List&lt;byte[]&gt;, String, int)</a></span> - Constructor for class com.google.zxing.common.<a href="com/google/zxing/common/DecoderResult.html" title="class in com.google.zxing.common">DecoderResult</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/common/DecoderResult.html#DecoderResult-byte:A-java.lang.String-java.util.List-java.lang.String-int-int-">DecoderResult(byte[], String, List&lt;byte[]&gt;, String, int, int)</a></span> - Constructor for class com.google.zxing.common.<a href="com/google/zxing/common/DecoderResult.html" title="class in com.google.zxing.common">DecoderResult</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/common/DecoderResult.html#DecoderResult-byte:A-java.lang.String-java.util.List-java.lang.String-int-int-int-">DecoderResult(byte[], String, List&lt;byte[]&gt;, String, int, int, int)</a></span> - Constructor for class com.google.zxing.common.<a href="com/google/zxing/common/DecoderResult.html" title="class in com.google.zxing.common">DecoderResult</a></dt>
+<dd>&nbsp;</dd>
 <dt><a href="com/google/zxing/web/DecodeServlet.html" title="class in com.google.zxing.web"><span class="typeNameLink">DecodeServlet</span></a> - Class in <a href="com/google/zxing/web/package-summary.html">com.google.zxing.web</a></dt>
 <dd>
 <div class="block"><code>HttpServlet</code> which decodes images containing barcodes.</div>
@@ -773,6 +813,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/web/DoSFilter.html#destroy--">destroy()</a></span> - Method in class com.google.zxing.web.<a href="com/google/zxing/web/DoSFilter.html" title="class in com.google.zxing.web">DoSFilter</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/web/TimeoutFilter.html#destroy--">destroy()</a></span> - Method in class com.google.zxing.web.<a href="com/google/zxing/web/TimeoutFilter.html" title="class in com.google.zxing.web">TimeoutFilter</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/aztec/detector/Detector.html#detect--">detect()</a></span> - Method in class com.google.zxing.aztec.detector.<a href="com/google/zxing/aztec/detector/Detector.html" title="class in com.google.zxing.aztec.detector">Detector</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/aztec/detector/Detector.html#detect-boolean-">detect(boolean)</a></span> - Method in class com.google.zxing.aztec.detector.<a href="com/google/zxing/aztec/detector/Detector.html" title="class in com.google.zxing.aztec.detector">Detector</a></dt>
@@ -862,10 +904,14 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/ResultPoint.html#distance-com.google.zxing.ResultPoint-com.google.zxing.ResultPoint-">distance(ResultPoint, ResultPoint)</a></span> - Static method in class com.google.zxing.<a href="com/google/zxing/ResultPoint.html" title="class in com.google.zxing">ResultPoint</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/qrcode/detector/FinderPatternFinder.html#doClearCounts-int:A-">doClearCounts(int[])</a></span> - Static method in class com.google.zxing.qrcode.detector.<a href="com/google/zxing/qrcode/detector/FinderPatternFinder.html" title="class in com.google.zxing.qrcode.detector">FinderPatternFinder</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/web/DoSFilter.html#doFilter-javax.servlet.ServletRequest-javax.servlet.ServletResponse-javax.servlet.FilterChain-">doFilter(ServletRequest, ServletResponse, FilterChain)</a></span> - Method in class com.google.zxing.web.<a href="com/google/zxing/web/DoSFilter.html" title="class in com.google.zxing.web">DoSFilter</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/web/HTTPSFilter.html#doFilter-javax.servlet.ServletRequest-javax.servlet.ServletResponse-javax.servlet.FilterChain-">doFilter(ServletRequest, ServletResponse, FilterChain)</a></span> - Method in class com.google.zxing.web.<a href="com/google/zxing/web/HTTPSFilter.html" title="class in com.google.zxing.web">HTTPSFilter</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/web/TimeoutFilter.html#doFilter-javax.servlet.ServletRequest-javax.servlet.ServletResponse-javax.servlet.FilterChain-">doFilter(ServletRequest, ServletResponse, FilterChain)</a></span> - Method in class com.google.zxing.web.<a href="com/google/zxing/web/TimeoutFilter.html" title="class in com.google.zxing.web">TimeoutFilter</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/web/WelcomeFilter.html#doFilter-javax.servlet.ServletRequest-javax.servlet.ServletResponse-javax.servlet.FilterChain-">doFilter(ServletRequest, ServletResponse, FilterChain)</a></span> - Method in class com.google.zxing.web.<a href="com/google/zxing/web/WelcomeFilter.html" title="class in com.google.zxing.web">WelcomeFilter</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/web/ChartServlet.html#doGet-javax.servlet.http.HttpServletRequest-javax.servlet.http.HttpServletResponse-">doGet(HttpServletRequest, HttpServletResponse)</a></span> - Method in class com.google.zxing.web.<a href="com/google/zxing/web/ChartServlet.html" title="class in com.google.zxing.web">ChartServlet</a></dt>
@@ -883,6 +929,8 @@
 </dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/web/DoSFilter.html#DoSFilter--">DoSFilter()</a></span> - Constructor for class com.google.zxing.web.<a href="com/google/zxing/web/DoSFilter.html" title="class in com.google.zxing.web">DoSFilter</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/qrcode/detector/FinderPatternFinder.html#doShiftCounts2-int:A-">doShiftCounts2(int[])</a></span> - Static method in class com.google.zxing.qrcode.detector.<a href="com/google/zxing/qrcode/detector/FinderPatternFinder.html" title="class in com.google.zxing.qrcode.detector">FinderPatternFinder</a></dt>
+<dd>&nbsp;</dd>
 </dl>
 <a name="I:E">
 <!--   -->
@@ -913,6 +961,30 @@
 </dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/oned/EAN8Writer.html#EAN8Writer--">EAN8Writer()</a></span> - Constructor for class com.google.zxing.oned.<a href="com/google/zxing/oned/EAN8Writer.html" title="class in com.google.zxing.oned">EAN8Writer</a></dt>
 <dd>&nbsp;</dd>
+<dt><a href="com/google/zxing/common/ECIEncoderSet.html" title="class in com.google.zxing.common"><span class="typeNameLink">ECIEncoderSet</span></a> - Class in <a href="com/google/zxing/common/package-summary.html">com.google.zxing.common</a></dt>
+<dd>
+<div class="block">Set of CharsetEncoders for a given input string
+
+ Invariants:
+ - The list contains only encoders from CharacterSetECI (list is shorter then the list of encoders available on
+   the platform for which ECI values are defined).</div>
+</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/common/ECIEncoderSet.html#ECIEncoderSet-java.lang.String-java.nio.charset.Charset-int-">ECIEncoderSet(String, Charset, int)</a></span> - Constructor for class com.google.zxing.common.<a href="com/google/zxing/common/ECIEncoderSet.html" title="class in com.google.zxing.common">ECIEncoderSet</a></dt>
+<dd>
+<div class="block">Constructs an encoder set</div>
+</dd>
+<dt><a href="com/google/zxing/common/ECIInput.html" title="interface in com.google.zxing.common"><span class="typeNameLink">ECIInput</span></a> - Interface in <a href="com/google/zxing/common/package-summary.html">com.google.zxing.common</a></dt>
+<dd>
+<div class="block">Interface to navigate a sequence of ECIs and bytes.</div>
+</dd>
+<dt><a href="com/google/zxing/common/ECIStringBuilder.html" title="class in com.google.zxing.common"><span class="typeNameLink">ECIStringBuilder</span></a> - Class in <a href="com/google/zxing/common/package-summary.html">com.google.zxing.common</a></dt>
+<dd>
+<div class="block">Class that converts a sequence of ECIs and bytes into a string</div>
+</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/common/ECIStringBuilder.html#ECIStringBuilder--">ECIStringBuilder()</a></span> - Constructor for class com.google.zxing.common.<a href="com/google/zxing/common/ECIStringBuilder.html" title="class in com.google.zxing.common">ECIStringBuilder</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/common/ECIStringBuilder.html#ECIStringBuilder-int-">ECIStringBuilder(int)</a></span> - Constructor for class com.google.zxing.common.<a href="com/google/zxing/common/ECIStringBuilder.html" title="class in com.google.zxing.common">ECIStringBuilder</a></dt>
+<dd>&nbsp;</dd>
 <dt><a href="com/google/zxing/client/result/EmailAddressParsedResult.html" title="class in com.google.zxing.client.result"><span class="typeNameLink">EmailAddressParsedResult</span></a> - Class in <a href="com/google/zxing/client/result/package-summary.html">com.google.zxing.client.result</a></dt>
 <dd>
 <div class="block">Represents a parsed result that encodes an email message including recipients, subject
@@ -935,16 +1007,36 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/aztec/AztecWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode(String, BarcodeFormat, int, int, Map&lt;EncodeHintType, ?&gt;)</a></span> - Method in class com.google.zxing.aztec.<a href="com/google/zxing/aztec/AztecWriter.html" title="class in com.google.zxing.aztec">AztecWriter</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/aztec/encoder/Encoder.html#encode-java.lang.String-">encode(String)</a></span> - Static method in class com.google.zxing.aztec.encoder.<a href="com/google/zxing/aztec/encoder/Encoder.html" title="class in com.google.zxing.aztec.encoder">Encoder</a></dt>
+<dd>
+<div class="block">Encodes the given string content as an Aztec symbol (without ECI code)</div>
+</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/aztec/encoder/Encoder.html#encode-java.lang.String-int-int-">encode(String, int, int)</a></span> - Static method in class com.google.zxing.aztec.encoder.<a href="com/google/zxing/aztec/encoder/Encoder.html" title="class in com.google.zxing.aztec.encoder">Encoder</a></dt>
+<dd>
+<div class="block">Encodes the given string content as an Aztec symbol (without ECI code)</div>
+</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/aztec/encoder/Encoder.html#encode-java.lang.String-int-int-java.nio.charset.Charset-">encode(String, int, int, Charset)</a></span> - Static method in class com.google.zxing.aztec.encoder.<a href="com/google/zxing/aztec/encoder/Encoder.html" title="class in com.google.zxing.aztec.encoder">Encoder</a></dt>
+<dd>
+<div class="block">Encodes the given string content as an Aztec symbol</div>
+</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/aztec/encoder/Encoder.html#encode-byte:A-">encode(byte[])</a></span> - Static method in class com.google.zxing.aztec.encoder.<a href="com/google/zxing/aztec/encoder/Encoder.html" title="class in com.google.zxing.aztec.encoder">Encoder</a></dt>
 <dd>
-<div class="block">Encodes the given binary content as an Aztec symbol</div>
+<div class="block">Encodes the given binary content as an Aztec symbol (without ECI code)</div>
 </dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/aztec/encoder/Encoder.html#encode-byte:A-int-int-">encode(byte[], int, int)</a></span> - Static method in class com.google.zxing.aztec.encoder.<a href="com/google/zxing/aztec/encoder/Encoder.html" title="class in com.google.zxing.aztec.encoder">Encoder</a></dt>
 <dd>
+<div class="block">Encodes the given binary content as an Aztec symbol (without ECI code)</div>
+</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/aztec/encoder/Encoder.html#encode-byte:A-int-int-java.nio.charset.Charset-">encode(byte[], int, int, Charset)</a></span> - Static method in class com.google.zxing.aztec.encoder.<a href="com/google/zxing/aztec/encoder/Encoder.html" title="class in com.google.zxing.aztec.encoder">Encoder</a></dt>
+<dd>
 <div class="block">Encodes the given binary content as an Aztec symbol</div>
 </dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/aztec/encoder/HighLevelEncoder.html#encode--">encode()</a></span> - Method in class com.google.zxing.aztec.encoder.<a href="com/google/zxing/aztec/encoder/HighLevelEncoder.html" title="class in com.google.zxing.aztec.encoder">HighLevelEncoder</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/common/ECIEncoderSet.html#encode-char-int-">encode(char, int)</a></span> - Method in class com.google.zxing.common.<a href="com/google/zxing/common/ECIEncoderSet.html" title="class in com.google.zxing.common">ECIEncoderSet</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/common/ECIEncoderSet.html#encode-java.lang.String-int-">encode(String, int)</a></span> - Method in class com.google.zxing.common.<a href="com/google/zxing/common/ECIEncoderSet.html" title="class in com.google.zxing.common">ECIEncoderSet</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/common/reedsolomon/ReedSolomonEncoder.html#encode-int:A-int-">encode(int[], int)</a></span> - Method in class com.google.zxing.common.reedsolomon.<a href="com/google/zxing/common/reedsolomon/ReedSolomonEncoder.html" title="class in com.google.zxing.common.reedsolomon">ReedSolomonEncoder</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/datamatrix/DataMatrixWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-">encode(String, BarcodeFormat, int, int)</a></span> - Method in class com.google.zxing.datamatrix.<a href="com/google/zxing/datamatrix/DataMatrixWriter.html" title="class in com.google.zxing.datamatrix">DataMatrixWriter</a></dt>
@@ -957,46 +1049,38 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/oned/CodaBarWriter.html#encode-java.lang.String-">encode(String)</a></span> - Method in class com.google.zxing.oned.<a href="com/google/zxing/oned/CodaBarWriter.html" title="class in com.google.zxing.oned">CodaBarWriter</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="com/google/zxing/oned/Code128Writer.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode(String, BarcodeFormat, int, int, Map&lt;EncodeHintType, ?&gt;)</a></span> - Method in class com.google.zxing.oned.<a href="com/google/zxing/oned/Code128Writer.html" title="class in com.google.zxing.oned">Code128Writer</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/oned/Code128Writer.html#encode-java.lang.String-">encode(String)</a></span> - Method in class com.google.zxing.oned.<a href="com/google/zxing/oned/Code128Writer.html" title="class in com.google.zxing.oned">Code128Writer</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="com/google/zxing/oned/Code39Writer.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode(String, BarcodeFormat, int, int, Map&lt;EncodeHintType, ?&gt;)</a></span> - Method in class com.google.zxing.oned.<a href="com/google/zxing/oned/Code39Writer.html" title="class in com.google.zxing.oned">Code39Writer</a></dt>
+<dt><span class="memberNameLink"><a href="com/google/zxing/oned/Code128Writer.html#encode-java.lang.String-java.util.Map-">encode(String, Map&lt;EncodeHintType, ?&gt;)</a></span> - Method in class com.google.zxing.oned.<a href="com/google/zxing/oned/Code128Writer.html" title="class in com.google.zxing.oned">Code128Writer</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/oned/Code39Writer.html#encode-java.lang.String-">encode(String)</a></span> - Method in class com.google.zxing.oned.<a href="com/google/zxing/oned/Code39Writer.html" title="class in com.google.zxing.oned">Code39Writer</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="com/google/zxing/oned/Code93Writer.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode(String, BarcodeFormat, int, int, Map&lt;EncodeHintType, ?&gt;)</a></span> - Method in class com.google.zxing.oned.<a href="com/google/zxing/oned/Code93Writer.html" title="class in com.google.zxing.oned">Code93Writer</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/oned/Code93Writer.html#encode-java.lang.String-">encode(String)</a></span> - Method in class com.google.zxing.oned.<a href="com/google/zxing/oned/Code93Writer.html" title="class in com.google.zxing.oned">Code93Writer</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="com/google/zxing/oned/EAN13Writer.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode(String, BarcodeFormat, int, int, Map&lt;EncodeHintType, ?&gt;)</a></span> - Method in class com.google.zxing.oned.<a href="com/google/zxing/oned/EAN13Writer.html" title="class in com.google.zxing.oned">EAN13Writer</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/oned/EAN13Writer.html#encode-java.lang.String-">encode(String)</a></span> - Method in class com.google.zxing.oned.<a href="com/google/zxing/oned/EAN13Writer.html" title="class in com.google.zxing.oned">EAN13Writer</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="com/google/zxing/oned/EAN8Writer.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode(String, BarcodeFormat, int, int, Map&lt;EncodeHintType, ?&gt;)</a></span> - Method in class com.google.zxing.oned.<a href="com/google/zxing/oned/EAN8Writer.html" title="class in com.google.zxing.oned">EAN8Writer</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/oned/EAN8Writer.html#encode-java.lang.String-">encode(String)</a></span> - Method in class com.google.zxing.oned.<a href="com/google/zxing/oned/EAN8Writer.html" title="class in com.google.zxing.oned">EAN8Writer</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="com/google/zxing/oned/ITFWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode(String, BarcodeFormat, int, int, Map&lt;EncodeHintType, ?&gt;)</a></span> - Method in class com.google.zxing.oned.<a href="com/google/zxing/oned/ITFWriter.html" title="class in com.google.zxing.oned">ITFWriter</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/oned/ITFWriter.html#encode-java.lang.String-">encode(String)</a></span> - Method in class com.google.zxing.oned.<a href="com/google/zxing/oned/ITFWriter.html" title="class in com.google.zxing.oned">ITFWriter</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-">encode(String)</a></span> - Method in class com.google.zxing.oned.<a href="com/google/zxing/oned/OneDimensionalCodeWriter.html" title="class in com.google.zxing.oned">OneDimensionalCodeWriter</a></dt>
+<dd>
+<div class="block">Encode the contents to boolean array expression of one-dimensional barcode.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-java.util.Map-">encode(String, Map&lt;EncodeHintType, ?&gt;)</a></span> - Method in class com.google.zxing.oned.<a href="com/google/zxing/oned/OneDimensionalCodeWriter.html" title="class in com.google.zxing.oned">OneDimensionalCodeWriter</a></dt>
+<dd>
+<div class="block">Can be overwritten if the encode requires to read the hints map.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-">encode(String, BarcodeFormat, int, int)</a></span> - Method in class com.google.zxing.oned.<a href="com/google/zxing/oned/OneDimensionalCodeWriter.html" title="class in com.google.zxing.oned">OneDimensionalCodeWriter</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode(String, BarcodeFormat, int, int, Map&lt;EncodeHintType, ?&gt;)</a></span> - Method in class com.google.zxing.oned.<a href="com/google/zxing/oned/OneDimensionalCodeWriter.html" title="class in com.google.zxing.oned">OneDimensionalCodeWriter</a></dt>
 <dd>
 <div class="block">Encode the contents following specified format.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="com/google/zxing/oned/OneDimensionalCodeWriter.html#encode-java.lang.String-">encode(String)</a></span> - Method in class com.google.zxing.oned.<a href="com/google/zxing/oned/OneDimensionalCodeWriter.html" title="class in com.google.zxing.oned">OneDimensionalCodeWriter</a></dt>
-<dd>
-<div class="block">Encode the contents to boolean array expression of one-dimensional barcode.</div>
-</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/oned/UPCAWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-">encode(String, BarcodeFormat, int, int)</a></span> - Method in class com.google.zxing.oned.<a href="com/google/zxing/oned/UPCAWriter.html" title="class in com.google.zxing.oned">UPCAWriter</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/oned/UPCAWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode(String, BarcodeFormat, int, int, Map&lt;EncodeHintType, ?&gt;)</a></span> - Method in class com.google.zxing.oned.<a href="com/google/zxing/oned/UPCAWriter.html" title="class in com.google.zxing.oned">UPCAWriter</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="com/google/zxing/oned/UPCEWriter.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode(String, BarcodeFormat, int, int, Map&lt;EncodeHintType, ?&gt;)</a></span> - Method in class com.google.zxing.oned.<a href="com/google/zxing/oned/UPCEWriter.html" title="class in com.google.zxing.oned">UPCEWriter</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/oned/UPCEWriter.html#encode-java.lang.String-">encode(String)</a></span> - Method in class com.google.zxing.oned.<a href="com/google/zxing/oned/UPCEWriter.html" title="class in com.google.zxing.oned">UPCEWriter</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/pdf417/PDF417Writer.html#encode-java.lang.String-com.google.zxing.BarcodeFormat-int-int-java.util.Map-">encode(String, BarcodeFormat, int, int, Map&lt;EncodeHintType, ?&gt;)</a></span> - Method in class com.google.zxing.pdf417.<a href="com/google/zxing/pdf417/PDF417Writer.html" title="class in com.google.zxing.pdf417">PDF417Writer</a></dt>
@@ -1031,6 +1115,21 @@
 <div class="block">Performs message encoding of a DataMatrix message using the algorithm described in annex P
  of ISO/IEC 16022:2000(E).</div>
 </dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/datamatrix/encoder/HighLevelEncoder.html#encodeHighLevel-java.lang.String-com.google.zxing.datamatrix.encoder.SymbolShapeHint-com.google.zxing.Dimension-com.google.zxing.Dimension-boolean-">encodeHighLevel(String, SymbolShapeHint, Dimension, Dimension, boolean)</a></span> - Static method in class com.google.zxing.datamatrix.encoder.<a href="com/google/zxing/datamatrix/encoder/HighLevelEncoder.html" title="class in com.google.zxing.datamatrix.encoder">HighLevelEncoder</a></dt>
+<dd>
+<div class="block">Performs message encoding of a DataMatrix message using the algorithm described in annex P
+ of ISO/IEC 16022:2000(E).</div>
+</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/datamatrix/encoder/MinimalEncoder.html#encodeHighLevel-java.lang.String-">encodeHighLevel(String)</a></span> - Static method in class com.google.zxing.datamatrix.encoder.<a href="com/google/zxing/datamatrix/encoder/MinimalEncoder.html" title="class in com.google.zxing.datamatrix.encoder">MinimalEncoder</a></dt>
+<dd>
+<div class="block">Performs message encoding of a DataMatrix message</div>
+</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/datamatrix/encoder/MinimalEncoder.html#encodeHighLevel-java.lang.String-java.nio.charset.Charset-int-com.google.zxing.datamatrix.encoder.SymbolShapeHint-">encodeHighLevel(String, Charset, int, SymbolShapeHint)</a></span> - Static method in class com.google.zxing.datamatrix.encoder.<a href="com/google/zxing/datamatrix/encoder/MinimalEncoder.html" title="class in com.google.zxing.datamatrix.encoder">MinimalEncoder</a></dt>
+<dd>
+<div class="block">Performs message encoding of a DataMatrix message</div>
+</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/pdf417/encoder/PDF417HighLevelEncoderTestAdapter.html#encodeHighLevel-java.lang.String-com.google.zxing.pdf417.encoder.Compaction-java.nio.charset.Charset-boolean-">encodeHighLevel(String, Compaction, Charset, boolean)</a></span> - Static method in class com.google.zxing.pdf417.encoder.<a href="com/google/zxing/pdf417/encoder/PDF417HighLevelEncoderTestAdapter.html" title="class in com.google.zxing.pdf417.encoder">PDF417HighLevelEncoderTestAdapter</a></dt>
+<dd>&nbsp;</dd>
 <dt><a href="com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing"><span class="typeNameLink">EncodeHintType</span></a> - Enum in <a href="com/google/zxing/package-summary.html">com.google.zxing</a></dt>
 <dd>
 <div class="block">These are a set of hints that you may pass to Writers to specify their behavior.</div>
@@ -1123,6 +1222,8 @@
 </dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/qrcode/detector/FinderPatternInfo.html#FinderPatternInfo-com.google.zxing.qrcode.detector.FinderPattern:A-">FinderPatternInfo(FinderPattern[])</a></span> - Constructor for class com.google.zxing.qrcode.detector.<a href="com/google/zxing/qrcode/detector/FinderPatternInfo.html" title="class in com.google.zxing.qrcode.detector">FinderPatternInfo</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/multi/qrcode/detector/MultiFinderPatternFinder.html#findMulti-java.util.Map-">findMulti(Map&lt;DecodeHintType, ?&gt;)</a></span> - Method in class com.google.zxing.multi.qrcode.detector.<a href="com/google/zxing/multi/qrcode/detector/MultiFinderPatternFinder.html" title="class in com.google.zxing.multi.qrcode.detector">MultiFinderPatternFinder</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/common/BitArray.html#flip-int-">flip(int)</a></span> - Method in class com.google.zxing.common.<a href="com/google/zxing/common/BitArray.html" title="class in com.google.zxing.common">BitArray</a></dt>
 <dd>
 <div class="block">Flips bit i.</div>
@@ -1131,6 +1232,10 @@
 <dd>
 <div class="block">Flips the given bit.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/common/BitMatrix.html#flip--">flip()</a></span> - Method in class com.google.zxing.common.<a href="com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></dt>
+<dd>
+<div class="block">Flips every bit in the matrix.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/qrcode/decoder/ErrorCorrectionLevel.html#forBits-int-">forBits(int)</a></span> - Static method in enum com.google.zxing.qrcode.decoder.<a href="com/google/zxing/qrcode/decoder/ErrorCorrectionLevel.html" title="enum in com.google.zxing.qrcode.decoder">ErrorCorrectionLevel</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/qrcode/decoder/Mode.html#forBits-int-">forBits(int)</a></span> - Static method in enum com.google.zxing.qrcode.decoder.<a href="com/google/zxing/qrcode/decoder/Mode.html" title="enum in com.google.zxing.qrcode.decoder">Mode</a></dt>
@@ -1154,8 +1259,12 @@
 <dl>
 <dt><span class="memberNameLink"><a href="com/google/zxing/common/StringUtils.html#GB2312">GB2312</a></span> - Static variable in class com.google.zxing.common.<a href="com/google/zxing/common/StringUtils.html" title="class in com.google.zxing.common">StringUtils</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/common/StringUtils.html#GB2312_CHARSET">GB2312_CHARSET</a></span> - Static variable in class com.google.zxing.common.<a href="com/google/zxing/common/StringUtils.html" title="class in com.google.zxing.common">StringUtils</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/pdf417/encoder/PDF417.html#generateBarcodeLogic-java.lang.String-int-">generateBarcodeLogic(String, int)</a></span> - Method in class com.google.zxing.pdf417.encoder.<a href="com/google/zxing/pdf417/encoder/PDF417.html" title="class in com.google.zxing.pdf417.encoder">PDF417</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/pdf417/encoder/PDF417.html#generateBarcodeLogic-java.lang.String-int-boolean-">generateBarcodeLogic(String, int, boolean)</a></span> - Method in class com.google.zxing.pdf417.encoder.<a href="com/google/zxing/pdf417/encoder/PDF417.html" title="class in com.google.zxing.pdf417.encoder">PDF417</a></dt>
+<dd>&nbsp;</dd>
 <dt><a href="com/google/zxing/common/reedsolomon/GenericGF.html" title="class in com.google.zxing.common.reedsolomon"><span class="typeNameLink">GenericGF</span></a> - Class in <a href="com/google/zxing/common/reedsolomon/package-summary.html">com.google.zxing.common.reedsolomon</a></dt>
 <dd>
 <div class="block">This class contains utility methods for performing mathematical operations over
@@ -1277,10 +1386,18 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/qrcode/decoder/Mode.html#getCharacterCountBits-com.google.zxing.qrcode.decoder.Version-">getCharacterCountBits(Version)</a></span> - Method in enum com.google.zxing.qrcode.decoder.<a href="com/google/zxing/qrcode/decoder/Mode.html" title="enum in com.google.zxing.qrcode.decoder">Mode</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/common/CharacterSetECI.html#getCharacterSetECI-java.nio.charset.Charset-">getCharacterSetECI(Charset)</a></span> - Static method in enum com.google.zxing.common.<a href="com/google/zxing/common/CharacterSetECI.html" title="enum in com.google.zxing.common">CharacterSetECI</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/common/CharacterSetECI.html#getCharacterSetECIByName-java.lang.String-">getCharacterSetECIByName(String)</a></span> - Static method in enum com.google.zxing.common.<a href="com/google/zxing/common/CharacterSetECI.html" title="enum in com.google.zxing.common">CharacterSetECI</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/common/CharacterSetECI.html#getCharacterSetECIByValue-int-">getCharacterSetECIByValue(int)</a></span> - Static method in enum com.google.zxing.common.<a href="com/google/zxing/common/CharacterSetECI.html" title="enum in com.google.zxing.common">CharacterSetECI</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/common/CharacterSetECI.html#getCharset--">getCharset()</a></span> - Method in enum com.google.zxing.common.<a href="com/google/zxing/common/CharacterSetECI.html" title="enum in com.google.zxing.common">CharacterSetECI</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/common/ECIEncoderSet.html#getCharset-int-">getCharset(int)</a></span> - Method in class com.google.zxing.common.<a href="com/google/zxing/common/ECIEncoderSet.html" title="class in com.google.zxing.common">ECIEncoderSet</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/common/ECIEncoderSet.html#getCharsetName-int-">getCharsetName(int)</a></span> - Method in class com.google.zxing.common.<a href="com/google/zxing/common/ECIEncoderSet.html" title="class in com.google.zxing.common">ECIEncoderSet</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/pdf417/PDF417ResultMetadata.html#getChecksum--">getChecksum()</a></span> - Method in class com.google.zxing.pdf417.<a href="com/google/zxing/pdf417/PDF417ResultMetadata.html" title="class in com.google.zxing.pdf417">PDF417ResultMetadata</a></dt>
 <dd>
 <div class="block">16-bit CRC checksum using CCITT-16</div>
@@ -1299,6 +1416,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/qrcode/decoder/Version.ECB.html#getCount--">getCount()</a></span> - Method in class com.google.zxing.qrcode.decoder.<a href="com/google/zxing/qrcode/decoder/Version.ECB.html" title="class in com.google.zxing.qrcode.decoder">Version.ECB</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/qrcode/detector/FinderPattern.html#getCount--">getCount()</a></span> - Method in class com.google.zxing.qrcode.detector.<a href="com/google/zxing/qrcode/detector/FinderPattern.html" title="class in com.google.zxing.qrcode.detector">FinderPattern</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/client/result/VINParsedResult.html#getCountryCode--">getCountryCode()</a></span> - Method in class com.google.zxing.client.result.<a href="com/google/zxing/client/result/VINParsedResult.html" title="class in com.google.zxing.client.result">VINParsedResult</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/datamatrix/encoder/SymbolInfo.html#getDataCapacity--">getDataCapacity()</a></span> - Method in class com.google.zxing.datamatrix.encoder.<a href="com/google/zxing/datamatrix/encoder/SymbolInfo.html" title="class in com.google.zxing.datamatrix.encoder">SymbolInfo</a></dt>
@@ -1361,6 +1480,16 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/qrcode/decoder/Version.ECBlocks.html#getECCodewordsPerBlock--">getECCodewordsPerBlock()</a></span> - Method in class com.google.zxing.qrcode.decoder.<a href="com/google/zxing/qrcode/decoder/Version.ECBlocks.html" title="class in com.google.zxing.qrcode.decoder">Version.ECBlocks</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/common/ECIEncoderSet.html#getECIValue-int-">getECIValue(int)</a></span> - Method in class com.google.zxing.common.<a href="com/google/zxing/common/ECIEncoderSet.html" title="class in com.google.zxing.common">ECIEncoderSet</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/common/ECIInput.html#getECIValue-int-">getECIValue(int)</a></span> - Method in interface com.google.zxing.common.<a href="com/google/zxing/common/ECIInput.html" title="interface in com.google.zxing.common">ECIInput</a></dt>
+<dd>
+<div class="block">Returns the <code>int</code> ECI value at the specified index.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/common/MinimalECIInput.html#getECIValue-int-">getECIValue(int)</a></span> - Method in class com.google.zxing.common.<a href="com/google/zxing/common/MinimalECIInput.html" title="class in com.google.zxing.common">MinimalECIInput</a></dt>
+<dd>
+<div class="block">Returns the <code>int</code> ECI value at the specified index.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/common/DecoderResult.html#getECLevel--">getECLevel()</a></span> - Method in class com.google.zxing.common.<a href="com/google/zxing/common/DecoderResult.html" title="class in com.google.zxing.common">DecoderResult</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/qrcode/encoder/QRCode.html#getECLevel--">getECLevel()</a></span> - Method in class com.google.zxing.qrcode.encoder.<a href="com/google/zxing/qrcode/encoder/QRCode.html" title="class in com.google.zxing.qrcode.encoder">QRCode</a></dt>
@@ -1415,6 +1544,8 @@
 <dd>
 <div class="block">filesize in bytes of the encoded file</div>
 </dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/common/MinimalECIInput.html#getFNC1Character--">getFNC1Character()</a></span> - Method in class com.google.zxing.common.<a href="com/google/zxing/common/MinimalECIInput.html" title="class in com.google.zxing.common">MinimalECIInput</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/FormatException.html#getFormatInstance--">getFormatInstance()</a></span> - Static method in exception com.google.zxing.<a href="com/google/zxing/FormatException.html" title="class in com.google.zxing">FormatException</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/FormatException.html#getFormatInstance-java.lang.Throwable-">getFormatInstance(Throwable)</a></span> - Static method in exception com.google.zxing.<a href="com/google/zxing/FormatException.html" title="class in com.google.zxing">FormatException</a></dt>
@@ -1587,6 +1718,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/client/result/ExpandedProductParsedResult.html#getPriceIncrement--">getPriceIncrement()</a></span> - Method in class com.google.zxing.client.result.<a href="com/google/zxing/client/result/ExpandedProductParsedResult.html" title="class in com.google.zxing.client.result">ExpandedProductParsedResult</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/common/ECIEncoderSet.html#getPriorityEncoderIndex--">getPriorityEncoderIndex()</a></span> - Method in class com.google.zxing.common.<a href="com/google/zxing/common/ECIEncoderSet.html" title="class in com.google.zxing.common">ECIEncoderSet</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/client/result/ExpandedProductParsedResult.html#getProductID--">getProductID()</a></span> - Method in class com.google.zxing.client.result.<a href="com/google/zxing/client/result/ExpandedProductParsedResult.html" title="class in com.google.zxing.client.result">ExpandedProductParsedResult</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/client/result/ProductParsedResult.html#getProductID--">getProductID()</a></span> - Method in class com.google.zxing.client.result.<a href="com/google/zxing/client/result/ProductParsedResult.html" title="class in com.google.zxing.client.result">ProductParsedResult</a></dt>
@@ -1617,6 +1750,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/Result.html#getResultPoints--">getResultPoints()</a></span> - Method in class com.google.zxing.<a href="com/google/zxing/Result.html" title="class in com.google.zxing">Result</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/pdf417/detector/PDF417DetectorResult.html#getRotation--">getRotation()</a></span> - Method in class com.google.zxing.pdf417.detector.<a href="com/google/zxing/pdf417/detector/PDF417DetectorResult.html" title="class in com.google.zxing.pdf417.detector">PDF417DetectorResult</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/client/j2se/BufferedImageLuminanceSource.html#getRow-int-byte:A-">getRow(int, byte[])</a></span> - Method in class com.google.zxing.client.j2se.<a href="com/google/zxing/client/j2se/BufferedImageLuminanceSource.html" title="class in com.google.zxing.client.j2se">BufferedImageLuminanceSource</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/common/BitMatrix.html#getRow-int-com.google.zxing.common.BitArray-">getRow(int, BitArray)</a></span> - Method in class com.google.zxing.common.<a href="com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></dt>
@@ -1683,12 +1818,32 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/client/result/CalendarParsedResult.html#getSummary--">getSummary()</a></span> - Method in class com.google.zxing.client.result.<a href="com/google/zxing/client/result/CalendarParsedResult.html" title="class in com.google.zxing.client.result">CalendarParsedResult</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/oned/CodaBarWriter.html#getSupportedWriteFormats--">getSupportedWriteFormats()</a></span> - Method in class com.google.zxing.oned.<a href="com/google/zxing/oned/CodaBarWriter.html" title="class in com.google.zxing.oned">CodaBarWriter</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/oned/Code128Writer.html#getSupportedWriteFormats--">getSupportedWriteFormats()</a></span> - Method in class com.google.zxing.oned.<a href="com/google/zxing/oned/Code128Writer.html" title="class in com.google.zxing.oned">Code128Writer</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/oned/Code39Writer.html#getSupportedWriteFormats--">getSupportedWriteFormats()</a></span> - Method in class com.google.zxing.oned.<a href="com/google/zxing/oned/Code39Writer.html" title="class in com.google.zxing.oned">Code39Writer</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/oned/Code93Writer.html#getSupportedWriteFormats--">getSupportedWriteFormats()</a></span> - Method in class com.google.zxing.oned.<a href="com/google/zxing/oned/Code93Writer.html" title="class in com.google.zxing.oned">Code93Writer</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/oned/EAN13Writer.html#getSupportedWriteFormats--">getSupportedWriteFormats()</a></span> - Method in class com.google.zxing.oned.<a href="com/google/zxing/oned/EAN13Writer.html" title="class in com.google.zxing.oned">EAN13Writer</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/oned/EAN8Writer.html#getSupportedWriteFormats--">getSupportedWriteFormats()</a></span> - Method in class com.google.zxing.oned.<a href="com/google/zxing/oned/EAN8Writer.html" title="class in com.google.zxing.oned">EAN8Writer</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/oned/ITFWriter.html#getSupportedWriteFormats--">getSupportedWriteFormats()</a></span> - Method in class com.google.zxing.oned.<a href="com/google/zxing/oned/ITFWriter.html" title="class in com.google.zxing.oned">ITFWriter</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/oned/OneDimensionalCodeWriter.html#getSupportedWriteFormats--">getSupportedWriteFormats()</a></span> - Method in class com.google.zxing.oned.<a href="com/google/zxing/oned/OneDimensionalCodeWriter.html" title="class in com.google.zxing.oned">OneDimensionalCodeWriter</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/oned/UPCEWriter.html#getSupportedWriteFormats--">getSupportedWriteFormats()</a></span> - Method in class com.google.zxing.oned.<a href="com/google/zxing/oned/UPCEWriter.html" title="class in com.google.zxing.oned">UPCEWriter</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/datamatrix/encoder/SymbolInfo.html#getSymbolDataHeight--">getSymbolDataHeight()</a></span> - Method in class com.google.zxing.datamatrix.encoder.<a href="com/google/zxing/datamatrix/encoder/SymbolInfo.html" title="class in com.google.zxing.datamatrix.encoder">SymbolInfo</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/datamatrix/encoder/SymbolInfo.html#getSymbolDataWidth--">getSymbolDataWidth()</a></span> - Method in class com.google.zxing.datamatrix.encoder.<a href="com/google/zxing/datamatrix/encoder/SymbolInfo.html" title="class in com.google.zxing.datamatrix.encoder">SymbolInfo</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/datamatrix/encoder/SymbolInfo.html#getSymbolHeight--">getSymbolHeight()</a></span> - Method in class com.google.zxing.datamatrix.encoder.<a href="com/google/zxing/datamatrix/encoder/SymbolInfo.html" title="class in com.google.zxing.datamatrix.encoder">SymbolInfo</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/common/DecoderResult.html#getSymbologyModifier--">getSymbologyModifier()</a></span> - Method in class com.google.zxing.common.<a href="com/google/zxing/common/DecoderResult.html" title="class in com.google.zxing.common">DecoderResult</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/datamatrix/decoder/Version.html#getSymbolSizeColumns--">getSymbolSizeColumns()</a></span> - Method in class com.google.zxing.datamatrix.decoder.<a href="com/google/zxing/datamatrix/decoder/Version.html" title="class in com.google.zxing.datamatrix.decoder">Version</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/datamatrix/decoder/Version.html#getSymbolSizeRows--">getSymbolSizeRows()</a></span> - Method in class com.google.zxing.datamatrix.decoder.<a href="com/google/zxing/datamatrix/decoder/Version.html" title="class in com.google.zxing.datamatrix.decoder">Version</a></dt>
@@ -1811,6 +1966,8 @@
 </dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/common/GridSampler.html#GridSampler--">GridSampler()</a></span> - Constructor for class com.google.zxing.common.<a href="com/google/zxing/common/GridSampler.html" title="class in com.google.zxing.common">GridSampler</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/common/StringUtils.html#guessCharset-byte:A-java.util.Map-">guessCharset(byte[], Map&lt;DecodeHintType, ?&gt;)</a></span> - Static method in class com.google.zxing.common.<a href="com/google/zxing/common/StringUtils.html" title="class in com.google.zxing.common">StringUtils</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/common/StringUtils.html#guessEncoding-byte:A-java.util.Map-">guessEncoding(byte[], Map&lt;DecodeHintType, ?&gt;)</a></span> - Static method in class com.google.zxing.common.<a href="com/google/zxing/common/StringUtils.html" title="class in com.google.zxing.common">StringUtils</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="com/google/zxing/client/j2se/GUIRunner.html" title="class in com.google.zxing.client.j2se"><span class="typeNameLink">GUIRunner</span></a> - Class in <a href="com/google/zxing/client/j2se/package-summary.html">com.google.zxing.client.j2se</a></dt>
@@ -1849,6 +2006,10 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/common/DecoderResult.html#hasStructuredAppend--">hasStructuredAppend()</a></span> - Method in class com.google.zxing.common.<a href="com/google/zxing/common/DecoderResult.html" title="class in com.google.zxing.common">DecoderResult</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/common/ECIInput.html#haveNCharacters-int-int-">haveNCharacters(int, int)</a></span> - Method in interface com.google.zxing.common.<a href="com/google/zxing/common/ECIInput.html" title="interface in com.google.zxing.common">ECIInput</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/common/MinimalECIInput.html#haveNCharacters-int-int-">haveNCharacters(int, int)</a></span> - Method in class com.google.zxing.common.<a href="com/google/zxing/common/MinimalECIInput.html" title="class in com.google.zxing.common">MinimalECIInput</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/aztec/decoder/Decoder.html#highLevelDecode-boolean:A-">highLevelDecode(boolean[])</a></span> - Static method in class com.google.zxing.aztec.decoder.<a href="com/google/zxing/aztec/decoder/Decoder.html" title="class in com.google.zxing.aztec.decoder">Decoder</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="com/google/zxing/aztec/encoder/HighLevelEncoder.html" title="class in com.google.zxing.aztec.encoder"><span class="typeNameLink">HighLevelEncoder</span></a> - Class in <a href="com/google/zxing/aztec/encoder/package-summary.html">com.google.zxing.aztec.encoder</a></dt>
@@ -1858,6 +2019,8 @@
 </dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/aztec/encoder/HighLevelEncoder.html#HighLevelEncoder-byte:A-">HighLevelEncoder(byte[])</a></span> - Constructor for class com.google.zxing.aztec.encoder.<a href="com/google/zxing/aztec/encoder/HighLevelEncoder.html" title="class in com.google.zxing.aztec.encoder">HighLevelEncoder</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/aztec/encoder/HighLevelEncoder.html#HighLevelEncoder-byte:A-java.nio.charset.Charset-">HighLevelEncoder(byte[], Charset)</a></span> - Constructor for class com.google.zxing.aztec.encoder.<a href="com/google/zxing/aztec/encoder/HighLevelEncoder.html" title="class in com.google.zxing.aztec.encoder">HighLevelEncoder</a></dt>
+<dd>&nbsp;</dd>
 <dt><a href="com/google/zxing/datamatrix/encoder/HighLevelEncoder.html" title="class in com.google.zxing.datamatrix.encoder"><span class="typeNameLink">HighLevelEncoder</span></a> - Class in <a href="com/google/zxing/datamatrix/encoder/package-summary.html">com.google.zxing.datamatrix.encoder</a></dt>
 <dd>
 <div class="block">DataMatrix ECC 200 data encoder following the algorithm described in ISO/IEC 16022:200(E) in
@@ -1865,8 +2028,9 @@
 </dd>
 <dt><a href="com/google/zxing/client/j2se/HtmlAssetTranslator.html" title="class in com.google.zxing.client.j2se"><span class="typeNameLink">HtmlAssetTranslator</span></a> - Class in <a href="com/google/zxing/client/j2se/package-summary.html">com.google.zxing.client.j2se</a></dt>
 <dd>
-<div class="block">A utility which auto-translates the English-language text in a directory of HTML documents using
- Google Translate.</div>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>
+<div class="block"><span class="deprecationComment">without replacement since 3.4.2</span></div>
+</div>
 </dd>
 <dt><a href="com/google/zxing/web/HTTPSFilter.html" title="class in com.google.zxing.web"><span class="typeNameLink">HTTPSFilter</span></a> - Class in <a href="com/google/zxing/web/package-summary.html">com.google.zxing.web</a></dt>
 <dd>
@@ -1897,6 +2061,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/web/DoSFilter.html#init-javax.servlet.FilterConfig-">init(FilterConfig)</a></span> - Method in class com.google.zxing.web.<a href="com/google/zxing/web/DoSFilter.html" title="class in com.google.zxing.web">DoSFilter</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/web/TimeoutFilter.html#init-javax.servlet.FilterConfig-">init(FilterConfig)</a></span> - Method in class com.google.zxing.web.<a href="com/google/zxing/web/TimeoutFilter.html" title="class in com.google.zxing.web">TimeoutFilter</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/InvertedLuminanceSource.html#invert--">invert()</a></span> - Method in class com.google.zxing.<a href="com/google/zxing/InvertedLuminanceSource.html" title="class in com.google.zxing">InvertedLuminanceSource</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/LuminanceSource.html#invert--">invert()</a></span> - Method in class com.google.zxing.<a href="com/google/zxing/LuminanceSource.html" title="class in com.google.zxing">LuminanceSource</a></dt>
@@ -1934,10 +2100,24 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/RGBLuminanceSource.html#isCropSupported--">isCropSupported()</a></span> - Method in class com.google.zxing.<a href="com/google/zxing/RGBLuminanceSource.html" title="class in com.google.zxing">RGBLuminanceSource</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/common/ECIInput.html#isECI-int-">isECI(int)</a></span> - Method in interface com.google.zxing.common.<a href="com/google/zxing/common/ECIInput.html" title="interface in com.google.zxing.common">ECIInput</a></dt>
+<dd>
+<div class="block">Determines if a value is an ECI</div>
+</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/common/MinimalECIInput.html#isECI-int-">isECI(int)</a></span> - Method in class com.google.zxing.common.<a href="com/google/zxing/common/MinimalECIInput.html" title="class in com.google.zxing.common">MinimalECIInput</a></dt>
+<dd>
+<div class="block">Determines if a value is an ECI</div>
+</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/common/ECIStringBuilder.html#isEmpty--">isEmpty()</a></span> - Method in class com.google.zxing.common.<a href="com/google/zxing/common/ECIStringBuilder.html" title="class in com.google.zxing.common">ECIStringBuilder</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/client/result/CalendarParsedResult.html#isEndAllDay--">isEndAllDay()</a></span> - Method in class com.google.zxing.client.result.<a href="com/google/zxing/client/result/CalendarParsedResult.html" title="class in com.google.zxing.client.result">CalendarParsedResult</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/oned/rss/AbstractRSSReader.html#isFinderPattern-int:A-">isFinderPattern(int[])</a></span> - Static method in class com.google.zxing.oned.rss.<a href="com/google/zxing/oned/rss/AbstractRSSReader.html" title="class in com.google.zxing.oned.rss">AbstractRSSReader</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/common/MinimalECIInput.html#isFNC1-int-">isFNC1(int)</a></span> - Method in class com.google.zxing.common.<a href="com/google/zxing/common/MinimalECIInput.html" title="class in com.google.zxing.common">MinimalECIInput</a></dt>
+<dd>
+<div class="block">Determines if a value is the FNC1 character</div>
+</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/client/result/WifiParsedResult.html#isHidden--">isHidden()</a></span> - Method in class com.google.zxing.client.result.<a href="com/google/zxing/client/result/WifiParsedResult.html" title="class in com.google.zxing.client.result">WifiParsedResult</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/pdf417/PDF417ResultMetadata.html#isLastSegment--">isLastSegment()</a></span> - Method in class com.google.zxing.pdf417.<a href="com/google/zxing/pdf417/PDF417ResultMetadata.html" title="class in com.google.zxing.pdf417">PDF417ResultMetadata</a></dt>
@@ -2000,6 +2180,20 @@
 </a>
 <h2 class="title">L</h2>
 <dl>
+<dt><span class="memberNameLink"><a href="com/google/zxing/common/ECIEncoderSet.html#length--">length()</a></span> - Method in class com.google.zxing.common.<a href="com/google/zxing/common/ECIEncoderSet.html" title="class in com.google.zxing.common">ECIEncoderSet</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/common/ECIInput.html#length--">length()</a></span> - Method in interface com.google.zxing.common.<a href="com/google/zxing/common/ECIInput.html" title="interface in com.google.zxing.common">ECIInput</a></dt>
+<dd>
+<div class="block">Returns the length of this input.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/common/ECIStringBuilder.html#length--">length()</a></span> - Method in class com.google.zxing.common.<a href="com/google/zxing/common/ECIStringBuilder.html" title="class in com.google.zxing.common">ECIStringBuilder</a></dt>
+<dd>
+<div class="block">Short for <code>toString().length()</code> (if possible, use <a href="com/google/zxing/common/ECIStringBuilder.html#isEmpty--"><code>ECIStringBuilder.isEmpty()</code></a> instead)</div>
+</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/common/MinimalECIInput.html#length--">length()</a></span> - Method in class com.google.zxing.common.<a href="com/google/zxing/common/MinimalECIInput.html" title="class in com.google.zxing.common">MinimalECIInput</a></dt>
+<dd>
+<div class="block">Returns the length of this input.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/datamatrix/encoder/SymbolInfo.html#lookup-int-">lookup(int)</a></span> - Static method in class com.google.zxing.datamatrix.encoder.<a href="com/google/zxing/datamatrix/encoder/SymbolInfo.html" title="class in com.google.zxing.datamatrix.encoder">SymbolInfo</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/datamatrix/encoder/SymbolInfo.html#lookup-int-com.google.zxing.datamatrix.encoder.SymbolShapeHint-">lookup(int, SymbolShapeHint)</a></span> - Static method in class com.google.zxing.datamatrix.encoder.<a href="com/google/zxing/datamatrix/encoder/SymbolInfo.html" title="class in com.google.zxing.datamatrix.encoder">SymbolInfo</a></dt>
@@ -2028,9 +2222,13 @@
 <dt><span class="memberNameLink"><a href="com/google/zxing/client/j2se/GUIRunner.html#main-java.lang.String:A-">main(String[])</a></span> - Static method in class com.google.zxing.client.j2se.<a href="com/google/zxing/client/j2se/GUIRunner.html" title="class in com.google.zxing.client.j2se">GUIRunner</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/client/j2se/HtmlAssetTranslator.html#main-java.lang.String:A-">main(String[])</a></span> - Static method in class com.google.zxing.client.j2se.<a href="com/google/zxing/client/j2se/HtmlAssetTranslator.html" title="class in com.google.zxing.client.j2se">HtmlAssetTranslator</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
+&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/client/j2se/StringsResourceTranslator.html#main-java.lang.String:A-">main(String[])</a></span> - Static method in class com.google.zxing.client.j2se.<a href="com/google/zxing/client/j2se/StringsResourceTranslator.html" title="class in com.google.zxing.client.j2se">StringsResourceTranslator</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
+&nbsp;</dd>
 <dt><a href="com/google/zxing/common/detector/MathUtils.html" title="class in com.google.zxing.common.detector"><span class="typeNameLink">MathUtils</span></a> - Class in <a href="com/google/zxing/common/detector/package-summary.html">com.google.zxing.common.detector</a></dt>
 <dd>
 <div class="block">General math-related and numeric utility functions.</div>
@@ -2083,6 +2281,25 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/qrcode/detector/FinderPatternFinder.html#MIN_SKIP">MIN_SKIP</a></span> - Static variable in class com.google.zxing.qrcode.detector.<a href="com/google/zxing/qrcode/detector/FinderPatternFinder.html" title="class in com.google.zxing.qrcode.detector">FinderPatternFinder</a></dt>
 <dd>&nbsp;</dd>
+<dt><a href="com/google/zxing/common/MinimalECIInput.html" title="class in com.google.zxing.common"><span class="typeNameLink">MinimalECIInput</span></a> - Class in <a href="com/google/zxing/common/package-summary.html">com.google.zxing.common</a></dt>
+<dd>
+<div class="block">Class that converts a character string into a sequence of ECIs and bytes
+
+ The implementation uses the Dijkstra algorithm to produce minimal encodings</div>
+</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/common/MinimalECIInput.html#MinimalECIInput-java.lang.String-java.nio.charset.Charset-int-">MinimalECIInput(String, Charset, int)</a></span> - Constructor for class com.google.zxing.common.<a href="com/google/zxing/common/MinimalECIInput.html" title="class in com.google.zxing.common">MinimalECIInput</a></dt>
+<dd>
+<div class="block">Constructs a minimal input</div>
+</dd>
+<dt><a href="com/google/zxing/datamatrix/encoder/MinimalEncoder.html" title="class in com.google.zxing.datamatrix.encoder"><span class="typeNameLink">MinimalEncoder</span></a> - Class in <a href="com/google/zxing/datamatrix/encoder/package-summary.html">com.google.zxing.datamatrix.encoder</a></dt>
+<dd>
+<div class="block">Encoder that encodes minimally
+
+ Algorithm:
+
+ Uses Dijkstra to produce mathematically minimal encodings that are in some cases smaller than the results produced
+ by the algorithm described in annex S in the specification ISO/IEC 16022:200(E).</div>
+</dd>
 <dt><a href="com/google/zxing/qrcode/decoder/Mode.html" title="enum in com.google.zxing.qrcode.decoder"><span class="typeNameLink">Mode</span></a> - Enum in <a href="com/google/zxing/qrcode/decoder/package-summary.html">com.google.zxing.qrcode.decoder</a></dt>
 <dd>
 <div class="block">See ISO 18004:2006, 6.4.1, Tables 2 and 3.</div>
@@ -2112,6 +2329,12 @@
 </dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/multi/qrcode/detector/MultiDetector.html#MultiDetector-com.google.zxing.common.BitMatrix-">MultiDetector(BitMatrix)</a></span> - Constructor for class com.google.zxing.multi.qrcode.detector.<a href="com/google/zxing/multi/qrcode/detector/MultiDetector.html" title="class in com.google.zxing.multi.qrcode.detector">MultiDetector</a></dt>
 <dd>&nbsp;</dd>
+<dt><a href="com/google/zxing/multi/qrcode/detector/MultiFinderPatternFinder.html" title="class in com.google.zxing.multi.qrcode.detector"><span class="typeNameLink">MultiFinderPatternFinder</span></a> - Class in <a href="com/google/zxing/multi/qrcode/detector/package-summary.html">com.google.zxing.multi.qrcode.detector</a></dt>
+<dd>
+<div class="block">This class attempts to find finder patterns in a QR Code.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/multi/qrcode/detector/MultiFinderPatternFinder.html#MultiFinderPatternFinder-com.google.zxing.common.BitMatrix-com.google.zxing.ResultPointCallback-">MultiFinderPatternFinder(BitMatrix, ResultPointCallback)</a></span> - Constructor for class com.google.zxing.multi.qrcode.detector.<a href="com/google/zxing/multi/qrcode/detector/MultiFinderPatternFinder.html" title="class in com.google.zxing.multi.qrcode.detector">MultiFinderPatternFinder</a></dt>
+<dd>&nbsp;</dd>
 <dt><a href="com/google/zxing/oned/MultiFormatOneDReader.html" title="class in com.google.zxing.oned"><span class="typeNameLink">MultiFormatOneDReader</span></a> - Class in <a href="com/google/zxing/oned/package-summary.html">com.google.zxing.oned</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/oned/MultiFormatOneDReader.html#MultiFormatOneDReader-java.util.Map-">MultiFormatOneDReader(Map&lt;DecodeHintType, ?&gt;)</a></span> - Constructor for class com.google.zxing.oned.<a href="com/google/zxing/oned/MultiFormatOneDReader.html" title="class in com.google.zxing.oned">MultiFormatOneDReader</a></dt>
@@ -2286,8 +2509,14 @@
 <dd>&nbsp;</dd>
 <dt><a href="com/google/zxing/pdf417/detector/PDF417DetectorResult.html" title="class in com.google.zxing.pdf417.detector"><span class="typeNameLink">PDF417DetectorResult</span></a> - Class in <a href="com/google/zxing/pdf417/detector/package-summary.html">com.google.zxing.pdf417.detector</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/pdf417/detector/PDF417DetectorResult.html#PDF417DetectorResult-com.google.zxing.common.BitMatrix-java.util.List-int-">PDF417DetectorResult(BitMatrix, List&lt;ResultPoint[]&gt;, int)</a></span> - Constructor for class com.google.zxing.pdf417.detector.<a href="com/google/zxing/pdf417/detector/PDF417DetectorResult.html" title="class in com.google.zxing.pdf417.detector">PDF417DetectorResult</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/pdf417/detector/PDF417DetectorResult.html#PDF417DetectorResult-com.google.zxing.common.BitMatrix-java.util.List-">PDF417DetectorResult(BitMatrix, List&lt;ResultPoint[]&gt;)</a></span> - Constructor for class com.google.zxing.pdf417.detector.<a href="com/google/zxing/pdf417/detector/PDF417DetectorResult.html" title="class in com.google.zxing.pdf417.detector">PDF417DetectorResult</a></dt>
 <dd>&nbsp;</dd>
+<dt><a href="com/google/zxing/pdf417/encoder/PDF417HighLevelEncoderTestAdapter.html" title="class in com.google.zxing.pdf417.encoder"><span class="typeNameLink">PDF417HighLevelEncoderTestAdapter</span></a> - Class in <a href="com/google/zxing/pdf417/encoder/package-summary.html">com.google.zxing.pdf417.encoder</a></dt>
+<dd>
+<div class="block">Test adapter for PDF417HighLevelEncoder to be called solely from unit tests.</div>
+</dd>
 <dt><a href="com/google/zxing/pdf417/PDF417Reader.html" title="class in com.google.zxing.pdf417"><span class="typeNameLink">PDF417Reader</span></a> - Class in <a href="com/google/zxing/pdf417/package-summary.html">com.google.zxing.pdf417</a></dt>
 <dd>
 <div class="block">This implementation can detect and decode PDF417 codes in an image.</div>
@@ -2494,10 +2723,18 @@
 </dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/RGBLuminanceSource.html#RGBLuminanceSource-int-int-int:A-">RGBLuminanceSource(int, int, int[])</a></span> - Constructor for class com.google.zxing.<a href="com/google/zxing/RGBLuminanceSource.html" title="class in com.google.zxing">RGBLuminanceSource</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/common/BitMatrix.html#rotate-int-">rotate(int)</a></span> - Method in class com.google.zxing.common.<a href="com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></dt>
+<dd>
+<div class="block">Modifies this <code>BitMatrix</code> to represent the same but rotated the given degrees (0, 90, 180, 270)</div>
+</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/common/BitMatrix.html#rotate180--">rotate180()</a></span> - Method in class com.google.zxing.common.<a href="com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></dt>
 <dd>
 <div class="block">Modifies this <code>BitMatrix</code> to represent the same but rotated 180 degrees</div>
 </dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/common/BitMatrix.html#rotate90--">rotate90()</a></span> - Method in class com.google.zxing.common.<a href="com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common">BitMatrix</a></dt>
+<dd>
+<div class="block">Modifies this <code>BitMatrix</code> to represent the same but rotated 90 degrees counterclockwise</div>
+</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/BinaryBitmap.html#rotateCounterClockwise--">rotateCounterClockwise()</a></span> - Method in class com.google.zxing.<a href="com/google/zxing/BinaryBitmap.html" title="class in com.google.zxing">BinaryBitmap</a></dt>
 <dd>
 <div class="block">Returns a new object with rotated image data by 90 degrees counterclockwise.</div>
@@ -2652,14 +2889,22 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/aztec/encoder/AztecCode.html#setSize-int-">setSize(int)</a></span> - Method in class com.google.zxing.aztec.encoder.<a href="com/google/zxing/aztec/encoder/AztecCode.html" title="class in com.google.zxing.aztec.encoder">AztecCode</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/ReaderException.html#setStackTrace-boolean-">setStackTrace(boolean)</a></span> - Static method in exception com.google.zxing.<a href="com/google/zxing/ReaderException.html" title="class in com.google.zxing">ReaderException</a></dt>
+<dd>
+<div class="block">For testing only.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/pdf417/PDF417ResultMetadata.html#setTimestamp-long-">setTimestamp(long)</a></span> - Method in class com.google.zxing.pdf417.<a href="com/google/zxing/pdf417/PDF417ResultMetadata.html" title="class in com.google.zxing.pdf417">PDF417ResultMetadata</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/qrcode/encoder/QRCode.html#setVersion-com.google.zxing.qrcode.decoder.Version-">setVersion(Version)</a></span> - Method in class com.google.zxing.qrcode.encoder.<a href="com/google/zxing/qrcode/encoder/QRCode.html" title="class in com.google.zxing.qrcode.encoder">QRCode</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/common/StringUtils.html#SHIFT_JIS">SHIFT_JIS</a></span> - Static variable in class com.google.zxing.common.<a href="com/google/zxing/common/StringUtils.html" title="class in com.google.zxing.common">StringUtils</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="com/google/zxing/qrcode/detector/FinderPatternFinder.html#shiftCounts2-int:A-">shiftCounts2(int[])</a></span> - Method in class com.google.zxing.qrcode.detector.<a href="com/google/zxing/qrcode/detector/FinderPatternFinder.html" title="class in com.google.zxing.qrcode.detector">FinderPatternFinder</a></dt>
+<dt><span class="memberNameLink"><a href="com/google/zxing/common/StringUtils.html#SHIFT_JIS_CHARSET">SHIFT_JIS_CHARSET</a></span> - Static variable in class com.google.zxing.common.<a href="com/google/zxing/common/StringUtils.html" title="class in com.google.zxing.common">StringUtils</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/qrcode/detector/FinderPatternFinder.html#shiftCounts2-int:A-">shiftCounts2(int[])</a></span> - Method in class com.google.zxing.qrcode.detector.<a href="com/google/zxing/qrcode/detector/FinderPatternFinder.html" title="class in com.google.zxing.qrcode.detector">FinderPatternFinder</a></dt>
+<dd>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
+</dd>
 <dt><a href="com/google/zxing/client/result/SMSMMSResultParser.html" title="class in com.google.zxing.client.result"><span class="typeNameLink">SMSMMSResultParser</span></a> - Class in <a href="com/google/zxing/client/result/package-summary.html">com.google.zxing.client.result</a></dt>
 <dd>
 <div class="block">Parses an "sms:" URI result, which specifies a number to SMS.</div>
@@ -2693,13 +2938,22 @@
 <dd>&nbsp;</dd>
 <dt><a href="com/google/zxing/client/j2se/StringsResourceTranslator.html" title="class in com.google.zxing.client.j2se"><span class="typeNameLink">StringsResourceTranslator</span></a> - Class in <a href="com/google/zxing/client/j2se/package-summary.html">com.google.zxing.client.j2se</a></dt>
 <dd>
-<div class="block">A utility which auto-translates English strings in Android string resources using
- Google Translate.</div>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>
+<div class="block"><span class="deprecationComment">without replacement since 3.4.2</span></div>
+</div>
 </dd>
 <dt><a href="com/google/zxing/common/StringUtils.html" title="class in com.google.zxing.common"><span class="typeNameLink">StringUtils</span></a> - Class in <a href="com/google/zxing/common/package-summary.html">com.google.zxing.common</a></dt>
 <dd>
 <div class="block">Common string-related functions.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/common/ECIInput.html#subSequence-int-int-">subSequence(int, int)</a></span> - Method in interface com.google.zxing.common.<a href="com/google/zxing/common/ECIInput.html" title="interface in com.google.zxing.common">ECIInput</a></dt>
+<dd>
+<div class="block">Returns a <code>CharSequence</code> that is a subsequence of this sequence.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/common/MinimalECIInput.html#subSequence-int-int-">subSequence(int, int)</a></span> - Method in class com.google.zxing.common.<a href="com/google/zxing/common/MinimalECIInput.html" title="class in com.google.zxing.common">MinimalECIInput</a></dt>
+<dd>
+<div class="block">Returns a <code>CharSequence</code> that is a subsequence of this sequence.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/common/detector/MathUtils.html#sum-int:A-">sum(int[])</a></span> - Static method in class com.google.zxing.common.detector.<a href="com/google/zxing/common/detector/MathUtils.html" title="class in com.google.zxing.common.detector">MathUtils</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/pdf417/PDF417Common.html#SYMBOL_TABLE">SYMBOL_TABLE</a></span> - Static variable in class com.google.zxing.pdf417.<a href="com/google/zxing/pdf417/PDF417Common.html" title="class in com.google.zxing.pdf417">PDF417Common</a></dt>
@@ -2741,6 +2995,12 @@
 </dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/client/result/TextParsedResult.html#TextParsedResult-java.lang.String-java.lang.String-">TextParsedResult(String, String)</a></span> - Constructor for class com.google.zxing.client.result.<a href="com/google/zxing/client/result/TextParsedResult.html" title="class in com.google.zxing.client.result">TextParsedResult</a></dt>
 <dd>&nbsp;</dd>
+<dt><a href="com/google/zxing/web/TimeoutFilter.html" title="class in com.google.zxing.web"><span class="typeNameLink">TimeoutFilter</span></a> - Class in <a href="com/google/zxing/web/package-summary.html">com.google.zxing.web</a></dt>
+<dd>
+<div class="block">Protect the decode endpoint from long-running requests.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/web/TimeoutFilter.html#TimeoutFilter--">TimeoutFilter()</a></span> - Constructor for class com.google.zxing.web.<a href="com/google/zxing/web/TimeoutFilter.html" title="class in com.google.zxing.web">TimeoutFilter</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/client/j2se/MatrixToImageWriter.html#toBufferedImage-com.google.zxing.common.BitMatrix-">toBufferedImage(BitMatrix)</a></span> - Static method in class com.google.zxing.client.j2se.<a href="com/google/zxing/client/j2se/MatrixToImageWriter.html" title="class in com.google.zxing.client.j2se">MatrixToImageWriter</a></dt>
 <dd>
 <div class="block">Renders a <a href="com/google/zxing/common/BitMatrix.html" title="class in com.google.zxing.common"><code>BitMatrix</code></a> as an image, where "false" bits are rendered
@@ -2770,6 +3030,10 @@
 <div class="block"><span class="deprecationComment">call <a href="com/google/zxing/common/BitMatrix.html#toString-java.lang.String-java.lang.String-"><code>BitMatrix.toString(String,String)</code></a> only, which uses \n line separator always</span></div>
 </div>
 </dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/common/ECIStringBuilder.html#toString--">toString()</a></span> - Method in class com.google.zxing.common.<a href="com/google/zxing/common/ECIStringBuilder.html" title="class in com.google.zxing.common">ECIStringBuilder</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="com/google/zxing/common/MinimalECIInput.html#toString--">toString()</a></span> - Method in class com.google.zxing.common.<a href="com/google/zxing/common/MinimalECIInput.html" title="class in com.google.zxing.common">MinimalECIInput</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/common/reedsolomon/GenericGF.html#toString--">toString()</a></span> - Method in class com.google.zxing.common.reedsolomon.<a href="com/google/zxing/common/reedsolomon/GenericGF.html" title="class in com.google.zxing.common.reedsolomon">GenericGF</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/datamatrix/decoder/Version.html#toString--">toString()</a></span> - Method in class com.google.zxing.datamatrix.decoder.<a href="com/google/zxing/datamatrix/decoder/Version.html" title="class in com.google.zxing.datamatrix.decoder">Version</a></dt>
@@ -3036,9 +3300,7 @@ the order they are declared.</div>
 <dt><span class="memberNameLink"><a href="com/google/zxing/client/result/WifiParsedResult.html#WifiParsedResult-java.lang.String-java.lang.String-java.lang.String-boolean-java.lang.String-java.lang.String-java.lang.String-java.lang.String-">WifiParsedResult(String, String, String, boolean, String, String, String, String)</a></span> - Constructor for class com.google.zxing.client.result.<a href="com/google/zxing/client/result/WifiParsedResult.html" title="class in com.google.zxing.client.result">WifiParsedResult</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="com/google/zxing/client/result/WifiResultParser.html" title="class in com.google.zxing.client.result"><span class="typeNameLink">WifiResultParser</span></a> - Class in <a href="com/google/zxing/client/result/package-summary.html">com.google.zxing.client.result</a></dt>
-<dd>
-<div class="block">Parses a WIFI configuration string.</div>
-</dd>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="com/google/zxing/client/result/WifiResultParser.html#WifiResultParser--">WifiResultParser()</a></span> - Constructor for class com.google.zxing.client.result.<a href="com/google/zxing/client/result/WifiResultParser.html" title="class in com.google.zxing.client.result">WifiResultParser</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="com/google/zxing/Writer.html" title="interface in com.google.zxing"><span class="typeNameLink">Writer</span></a> - Interface in <a href="com/google/zxing/package-summary.html">com.google.zxing</a></dt>
@@ -3146,6 +3408,6 @@ the order they are declared.</div>
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/index.html b/docs/apidocs/index.html
index de7c842..d3b86af 100644
--- a/docs/apidocs/index.html
+++ b/docs/apidocs/index.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>ZXing 3.4.0 API</title>
+<title>ZXing 3.5.1 API</title>
 <script type="text/javascript">
     tmpTargetPage = "" + window.location.search;
     if (tmpTargetPage != "" && tmpTargetPage != "undefined")
diff --git a/docs/apidocs/overview-frame.html b/docs/apidocs/overview-frame.html
index 62cef29..07f802f 100644
--- a/docs/apidocs/overview-frame.html
+++ b/docs/apidocs/overview-frame.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Overview List (ZXing 3.4.0 API)</title>
+<title>Overview List (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
 <script type="text/javascript" src="script.js"></script>
 </head>
diff --git a/docs/apidocs/overview-summary.html b/docs/apidocs/overview-summary.html
index d6bf9eb..eeaf36b 100644
--- a/docs/apidocs/overview-summary.html
+++ b/docs/apidocs/overview-summary.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Overview (ZXing 3.4.0 API)</title>
+<title>Overview (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
 <script type="text/javascript" src="script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Overview (ZXing 3.4.0 API)";
+            parent.document.title="Overview (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -70,7 +70,7 @@
 </a></div>
 <!-- ========= END OF TOP NAVBAR ========= -->
 <div class="header">
-<h1 class="title">ZXing 3.4.0 API</h1>
+<h1 class="title">ZXing 3.5.1 API</h1>
 </div>
 <div class="contentContainer">
 <table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Common support code table, listing packages, and an explanation">
@@ -372,6 +372,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/overview-tree.html b/docs/apidocs/overview-tree.html
index 8f0c503..a30b6a8 100644
--- a/docs/apidocs/overview-tree.html
+++ b/docs/apidocs/overview-tree.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Class Hierarchy (ZXing 3.4.0 API)</title>
+<title>Class Hierarchy (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
 <script type="text/javascript" src="script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Class Hierarchy (ZXing 3.4.0 API)";
+            parent.document.title="Class Hierarchy (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -159,20 +159,20 @@
 <li type="circle">com.google.zxing.oned.rss.<a href="com/google/zxing/oned/rss/DataCharacter.html" title="class in com.google.zxing.oned.rss"><span class="typeNameLink">DataCharacter</span></a></li>
 <li type="circle">com.google.zxing.datamatrix.<a href="com/google/zxing/datamatrix/DataMatrixReader.html" title="class in com.google.zxing.datamatrix"><span class="typeNameLink">DataMatrixReader</span></a> (implements com.google.zxing.<a href="com/google/zxing/Reader.html" title="interface in com.google.zxing">Reader</a>)</li>
 <li type="circle">com.google.zxing.datamatrix.<a href="com/google/zxing/datamatrix/DataMatrixWriter.html" title="class in com.google.zxing.datamatrix"><span class="typeNameLink">DataMatrixWriter</span></a> (implements com.google.zxing.<a href="com/google/zxing/Writer.html" title="interface in com.google.zxing">Writer</a>)</li>
+<li type="circle">com.google.zxing.datamatrix.decoder.<a href="com/google/zxing/datamatrix/decoder/Decoder.html" title="class in com.google.zxing.datamatrix.decoder"><span class="typeNameLink">Decoder</span></a></li>
 <li type="circle">com.google.zxing.aztec.decoder.<a href="com/google/zxing/aztec/decoder/Decoder.html" title="class in com.google.zxing.aztec.decoder"><span class="typeNameLink">Decoder</span></a></li>
 <li type="circle">com.google.zxing.qrcode.decoder.<a href="com/google/zxing/qrcode/decoder/Decoder.html" title="class in com.google.zxing.qrcode.decoder"><span class="typeNameLink">Decoder</span></a></li>
-<li type="circle">com.google.zxing.datamatrix.decoder.<a href="com/google/zxing/datamatrix/decoder/Decoder.html" title="class in com.google.zxing.datamatrix.decoder"><span class="typeNameLink">Decoder</span></a></li>
 <li type="circle">com.google.zxing.maxicode.decoder.<a href="com/google/zxing/maxicode/decoder/Decoder.html" title="class in com.google.zxing.maxicode.decoder"><span class="typeNameLink">Decoder</span></a></li>
 <li type="circle">com.google.zxing.common.<a href="com/google/zxing/common/DecoderResult.html" title="class in com.google.zxing.common"><span class="typeNameLink">DecoderResult</span></a></li>
 <li type="circle">com.google.zxing.datamatrix.encoder.<a href="com/google/zxing/datamatrix/encoder/DefaultPlacement.html" title="class in com.google.zxing.datamatrix.encoder"><span class="typeNameLink">DefaultPlacement</span></a></li>
+<li type="circle">com.google.zxing.pdf417.detector.<a href="com/google/zxing/pdf417/detector/Detector.html" title="class in com.google.zxing.pdf417.detector"><span class="typeNameLink">Detector</span></a></li>
+<li type="circle">com.google.zxing.datamatrix.detector.<a href="com/google/zxing/datamatrix/detector/Detector.html" title="class in com.google.zxing.datamatrix.detector"><span class="typeNameLink">Detector</span></a></li>
+<li type="circle">com.google.zxing.aztec.detector.<a href="com/google/zxing/aztec/detector/Detector.html" title="class in com.google.zxing.aztec.detector"><span class="typeNameLink">Detector</span></a></li>
 <li type="circle">com.google.zxing.qrcode.detector.<a href="com/google/zxing/qrcode/detector/Detector.html" title="class in com.google.zxing.qrcode.detector"><span class="typeNameLink">Detector</span></a>
 <ul>
 <li type="circle">com.google.zxing.multi.qrcode.detector.<a href="com/google/zxing/multi/qrcode/detector/MultiDetector.html" title="class in com.google.zxing.multi.qrcode.detector"><span class="typeNameLink">MultiDetector</span></a></li>
 </ul>
 </li>
-<li type="circle">com.google.zxing.aztec.detector.<a href="com/google/zxing/aztec/detector/Detector.html" title="class in com.google.zxing.aztec.detector"><span class="typeNameLink">Detector</span></a></li>
-<li type="circle">com.google.zxing.pdf417.detector.<a href="com/google/zxing/pdf417/detector/Detector.html" title="class in com.google.zxing.pdf417.detector"><span class="typeNameLink">Detector</span></a></li>
-<li type="circle">com.google.zxing.datamatrix.detector.<a href="com/google/zxing/datamatrix/detector/Detector.html" title="class in com.google.zxing.datamatrix.detector"><span class="typeNameLink">Detector</span></a></li>
 <li type="circle">com.google.zxing.common.<a href="com/google/zxing/common/DetectorResult.html" title="class in com.google.zxing.common"><span class="typeNameLink">DetectorResult</span></a>
 <ul>
 <li type="circle">com.google.zxing.aztec.<a href="com/google/zxing/aztec/AztecDetectorResult.html" title="class in com.google.zxing.aztec"><span class="typeNameLink">AztecDetectorResult</span></a></li>
@@ -186,12 +186,18 @@
 <li type="circle">com.google.zxing.web.<a href="com/google/zxing/web/DecodeDoSFilter.html" title="class in com.google.zxing.web"><span class="typeNameLink">DecodeDoSFilter</span></a></li>
 </ul>
 </li>
+<li type="circle">com.google.zxing.common.<a href="com/google/zxing/common/ECIEncoderSet.html" title="class in com.google.zxing.common"><span class="typeNameLink">ECIEncoderSet</span></a></li>
+<li type="circle">com.google.zxing.common.<a href="com/google/zxing/common/ECIStringBuilder.html" title="class in com.google.zxing.common"><span class="typeNameLink">ECIStringBuilder</span></a></li>
 <li type="circle">com.google.zxing.aztec.encoder.<a href="com/google/zxing/aztec/encoder/Encoder.html" title="class in com.google.zxing.aztec.encoder"><span class="typeNameLink">Encoder</span></a></li>
 <li type="circle">com.google.zxing.qrcode.encoder.<a href="com/google/zxing/qrcode/encoder/Encoder.html" title="class in com.google.zxing.qrcode.encoder"><span class="typeNameLink">Encoder</span></a></li>
 <li type="circle">com.google.zxing.pdf417.decoder.ec.<a href="com/google/zxing/pdf417/decoder/ec/ErrorCorrection.html" title="class in com.google.zxing.pdf417.decoder.ec"><span class="typeNameLink">ErrorCorrection</span></a></li>
 <li type="circle">com.google.zxing.datamatrix.encoder.<a href="com/google/zxing/datamatrix/encoder/ErrorCorrection.html" title="class in com.google.zxing.datamatrix.encoder"><span class="typeNameLink">ErrorCorrection</span></a></li>
 <li type="circle">com.google.zxing.oned.rss.<a href="com/google/zxing/oned/rss/FinderPattern.html" title="class in com.google.zxing.oned.rss"><span class="typeNameLink">FinderPattern</span></a></li>
-<li type="circle">com.google.zxing.qrcode.detector.<a href="com/google/zxing/qrcode/detector/FinderPatternFinder.html" title="class in com.google.zxing.qrcode.detector"><span class="typeNameLink">FinderPatternFinder</span></a></li>
+<li type="circle">com.google.zxing.qrcode.detector.<a href="com/google/zxing/qrcode/detector/FinderPatternFinder.html" title="class in com.google.zxing.qrcode.detector"><span class="typeNameLink">FinderPatternFinder</span></a>
+<ul>
+<li type="circle">com.google.zxing.multi.qrcode.detector.<a href="com/google/zxing/multi/qrcode/detector/MultiFinderPatternFinder.html" title="class in com.google.zxing.multi.qrcode.detector"><span class="typeNameLink">MultiFinderPatternFinder</span></a></li>
+</ul>
+</li>
 <li type="circle">com.google.zxing.qrcode.detector.<a href="com/google/zxing/qrcode/detector/FinderPatternInfo.html" title="class in com.google.zxing.qrcode.detector"><span class="typeNameLink">FinderPatternInfo</span></a></li>
 <li type="circle">com.google.zxing.common.reedsolomon.<a href="com/google/zxing/common/reedsolomon/GenericGF.html" title="class in com.google.zxing.common.reedsolomon"><span class="typeNameLink">GenericGF</span></a></li>
 <li type="circle">com.google.zxing.multi.<a href="com/google/zxing/multi/GenericMultipleBarcodeReader.html" title="class in com.google.zxing.multi"><span class="typeNameLink">GenericMultipleBarcodeReader</span></a> (implements com.google.zxing.multi.<a href="com/google/zxing/multi/MultipleBarcodeReader.html" title="interface in com.google.zxing.multi">MultipleBarcodeReader</a>)</li>
@@ -210,8 +216,8 @@
 <li type="circle">com.google.zxing.common.<a href="com/google/zxing/common/DefaultGridSampler.html" title="class in com.google.zxing.common"><span class="typeNameLink">DefaultGridSampler</span></a></li>
 </ul>
 </li>
-<li type="circle">com.google.zxing.aztec.encoder.<a href="com/google/zxing/aztec/encoder/HighLevelEncoder.html" title="class in com.google.zxing.aztec.encoder"><span class="typeNameLink">HighLevelEncoder</span></a></li>
 <li type="circle">com.google.zxing.datamatrix.encoder.<a href="com/google/zxing/datamatrix/encoder/HighLevelEncoder.html" title="class in com.google.zxing.datamatrix.encoder"><span class="typeNameLink">HighLevelEncoder</span></a></li>
+<li type="circle">com.google.zxing.aztec.encoder.<a href="com/google/zxing/aztec/encoder/HighLevelEncoder.html" title="class in com.google.zxing.aztec.encoder"><span class="typeNameLink">HighLevelEncoder</span></a></li>
 <li type="circle">com.google.zxing.client.j2se.<a href="com/google/zxing/client/j2se/HtmlAssetTranslator.html" title="class in com.google.zxing.client.j2se"><span class="typeNameLink">HtmlAssetTranslator</span></a></li>
 <li type="circle">com.google.zxing.web.<a href="com/google/zxing/web/HTTPSFilter.html" title="class in com.google.zxing.web"><span class="typeNameLink">HTTPSFilter</span></a></li>
 <li type="circle">com.google.zxing.client.j2se.<a href="com/google/zxing/client/j2se/ImageReader.html" title="class in com.google.zxing.client.j2se"><span class="typeNameLink">ImageReader</span></a></li>
@@ -227,6 +233,8 @@
 <li type="circle">com.google.zxing.client.j2se.<a href="com/google/zxing/client/j2se/MatrixToImageConfig.html" title="class in com.google.zxing.client.j2se"><span class="typeNameLink">MatrixToImageConfig</span></a></li>
 <li type="circle">com.google.zxing.client.j2se.<a href="com/google/zxing/client/j2se/MatrixToImageWriter.html" title="class in com.google.zxing.client.j2se"><span class="typeNameLink">MatrixToImageWriter</span></a></li>
 <li type="circle">com.google.zxing.maxicode.<a href="com/google/zxing/maxicode/MaxiCodeReader.html" title="class in com.google.zxing.maxicode"><span class="typeNameLink">MaxiCodeReader</span></a> (implements com.google.zxing.<a href="com/google/zxing/Reader.html" title="interface in com.google.zxing">Reader</a>)</li>
+<li type="circle">com.google.zxing.common.<a href="com/google/zxing/common/MinimalECIInput.html" title="class in com.google.zxing.common"><span class="typeNameLink">MinimalECIInput</span></a> (implements com.google.zxing.common.<a href="com/google/zxing/common/ECIInput.html" title="interface in com.google.zxing.common">ECIInput</a>)</li>
+<li type="circle">com.google.zxing.datamatrix.encoder.<a href="com/google/zxing/datamatrix/encoder/MinimalEncoder.html" title="class in com.google.zxing.datamatrix.encoder"><span class="typeNameLink">MinimalEncoder</span></a></li>
 <li type="circle">com.google.zxing.pdf417.decoder.ec.<a href="com/google/zxing/pdf417/decoder/ec/ModulusGF.html" title="class in com.google.zxing.pdf417.decoder.ec"><span class="typeNameLink">ModulusGF</span></a></li>
 <li type="circle">com.google.zxing.common.detector.<a href="com/google/zxing/common/detector/MonochromeRectangleDetector.html" title="class in com.google.zxing.common.detector"><span class="typeNameLink">MonochromeRectangleDetector</span></a></li>
 <li type="circle">com.google.zxing.<a href="com/google/zxing/MultiFormatReader.html" title="class in com.google.zxing"><span class="typeNameLink">MultiFormatReader</span></a> (implements com.google.zxing.<a href="com/google/zxing/Reader.html" title="interface in com.google.zxing">Reader</a>)</li>
@@ -293,6 +301,7 @@
 <li type="circle">com.google.zxing.pdf417.encoder.<a href="com/google/zxing/pdf417/encoder/PDF417.html" title="class in com.google.zxing.pdf417.encoder"><span class="typeNameLink">PDF417</span></a></li>
 <li type="circle">com.google.zxing.pdf417.<a href="com/google/zxing/pdf417/PDF417Common.html" title="class in com.google.zxing.pdf417"><span class="typeNameLink">PDF417Common</span></a></li>
 <li type="circle">com.google.zxing.pdf417.detector.<a href="com/google/zxing/pdf417/detector/PDF417DetectorResult.html" title="class in com.google.zxing.pdf417.detector"><span class="typeNameLink">PDF417DetectorResult</span></a></li>
+<li type="circle">com.google.zxing.pdf417.encoder.<a href="com/google/zxing/pdf417/encoder/PDF417HighLevelEncoderTestAdapter.html" title="class in com.google.zxing.pdf417.encoder"><span class="typeNameLink">PDF417HighLevelEncoderTestAdapter</span></a></li>
 <li type="circle">com.google.zxing.pdf417.<a href="com/google/zxing/pdf417/PDF417Reader.html" title="class in com.google.zxing.pdf417"><span class="typeNameLink">PDF417Reader</span></a> (implements com.google.zxing.multi.<a href="com/google/zxing/multi/MultipleBarcodeReader.html" title="interface in com.google.zxing.multi">MultipleBarcodeReader</a>, com.google.zxing.<a href="com/google/zxing/Reader.html" title="interface in com.google.zxing">Reader</a>)</li>
 <li type="circle">com.google.zxing.pdf417.<a href="com/google/zxing/pdf417/PDF417ResultMetadata.html" title="class in com.google.zxing.pdf417"><span class="typeNameLink">PDF417ResultMetadata</span></a></li>
 <li type="circle">com.google.zxing.pdf417.decoder.<a href="com/google/zxing/pdf417/decoder/PDF417ScanningDecoder.html" title="class in com.google.zxing.pdf417.decoder"><span class="typeNameLink">PDF417ScanningDecoder</span></a></li>
@@ -360,9 +369,10 @@
 </li>
 </ul>
 </li>
+<li type="circle">com.google.zxing.web.<a href="com/google/zxing/web/TimeoutFilter.html" title="class in com.google.zxing.web"><span class="typeNameLink">TimeoutFilter</span></a> (implements javax.servlet.Filter)</li>
 <li type="circle">com.google.zxing.oned.<a href="com/google/zxing/oned/UPCAWriter.html" title="class in com.google.zxing.oned"><span class="typeNameLink">UPCAWriter</span></a> (implements com.google.zxing.<a href="com/google/zxing/Writer.html" title="interface in com.google.zxing">Writer</a>)</li>
-<li type="circle">com.google.zxing.qrcode.decoder.<a href="com/google/zxing/qrcode/decoder/Version.html" title="class in com.google.zxing.qrcode.decoder"><span class="typeNameLink">Version</span></a></li>
 <li type="circle">com.google.zxing.datamatrix.decoder.<a href="com/google/zxing/datamatrix/decoder/Version.html" title="class in com.google.zxing.datamatrix.decoder"><span class="typeNameLink">Version</span></a></li>
+<li type="circle">com.google.zxing.qrcode.decoder.<a href="com/google/zxing/qrcode/decoder/Version.html" title="class in com.google.zxing.qrcode.decoder"><span class="typeNameLink">Version</span></a></li>
 <li type="circle">com.google.zxing.qrcode.decoder.<a href="com/google/zxing/qrcode/decoder/Version.ECB.html" title="class in com.google.zxing.qrcode.decoder"><span class="typeNameLink">Version.ECB</span></a></li>
 <li type="circle">com.google.zxing.qrcode.decoder.<a href="com/google/zxing/qrcode/decoder/Version.ECBlocks.html" title="class in com.google.zxing.qrcode.decoder"><span class="typeNameLink">Version.ECBlocks</span></a></li>
 <li type="circle">com.google.zxing.web.<a href="com/google/zxing/web/WelcomeFilter.html" title="class in com.google.zxing.web"><span class="typeNameLink">WelcomeFilter</span></a></li>
@@ -372,6 +382,7 @@
 </ul>
 <h2 title="Interface Hierarchy">Interface Hierarchy</h2>
 <ul>
+<li type="circle">com.google.zxing.common.<a href="com/google/zxing/common/ECIInput.html" title="interface in com.google.zxing.common"><span class="typeNameLink">ECIInput</span></a></li>
 <li type="circle">com.google.zxing.multi.<a href="com/google/zxing/multi/MultipleBarcodeReader.html" title="interface in com.google.zxing.multi"><span class="typeNameLink">MultipleBarcodeReader</span></a></li>
 <li type="circle">com.google.zxing.<a href="com/google/zxing/Reader.html" title="interface in com.google.zxing"><span class="typeNameLink">Reader</span></a></li>
 <li type="circle">com.google.zxing.<a href="com/google/zxing/ResultPointCallback.html" title="interface in com.google.zxing"><span class="typeNameLink">ResultPointCallback</span></a></li>
@@ -383,16 +394,16 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">com.google.zxing.<a href="com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing"><span class="typeNameLink">DecodeHintType</span></a></li>
 <li type="circle">com.google.zxing.<a href="com/google/zxing/BarcodeFormat.html" title="enum in com.google.zxing"><span class="typeNameLink">BarcodeFormat</span></a></li>
-<li type="circle">com.google.zxing.<a href="com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing"><span class="typeNameLink">EncodeHintType</span></a></li>
-<li type="circle">com.google.zxing.<a href="com/google/zxing/ResultMetadataType.html" title="enum in com.google.zxing"><span class="typeNameLink">ResultMetadataType</span></a></li>
-<li type="circle">com.google.zxing.qrcode.decoder.<a href="com/google/zxing/qrcode/decoder/Mode.html" title="enum in com.google.zxing.qrcode.decoder"><span class="typeNameLink">Mode</span></a></li>
-<li type="circle">com.google.zxing.qrcode.decoder.<a href="com/google/zxing/qrcode/decoder/ErrorCorrectionLevel.html" title="enum in com.google.zxing.qrcode.decoder"><span class="typeNameLink">ErrorCorrectionLevel</span></a></li>
 <li type="circle">com.google.zxing.common.<a href="com/google/zxing/common/CharacterSetECI.html" title="enum in com.google.zxing.common"><span class="typeNameLink">CharacterSetECI</span></a></li>
 <li type="circle">com.google.zxing.pdf417.encoder.<a href="com/google/zxing/pdf417/encoder/Compaction.html" title="enum in com.google.zxing.pdf417.encoder"><span class="typeNameLink">Compaction</span></a></li>
-<li type="circle">com.google.zxing.datamatrix.encoder.<a href="com/google/zxing/datamatrix/encoder/SymbolShapeHint.html" title="enum in com.google.zxing.datamatrix.encoder"><span class="typeNameLink">SymbolShapeHint</span></a></li>
+<li type="circle">com.google.zxing.<a href="com/google/zxing/DecodeHintType.html" title="enum in com.google.zxing"><span class="typeNameLink">DecodeHintType</span></a></li>
+<li type="circle">com.google.zxing.<a href="com/google/zxing/EncodeHintType.html" title="enum in com.google.zxing"><span class="typeNameLink">EncodeHintType</span></a></li>
+<li type="circle">com.google.zxing.qrcode.decoder.<a href="com/google/zxing/qrcode/decoder/ErrorCorrectionLevel.html" title="enum in com.google.zxing.qrcode.decoder"><span class="typeNameLink">ErrorCorrectionLevel</span></a></li>
+<li type="circle">com.google.zxing.qrcode.decoder.<a href="com/google/zxing/qrcode/decoder/Mode.html" title="enum in com.google.zxing.qrcode.decoder"><span class="typeNameLink">Mode</span></a></li>
 <li type="circle">com.google.zxing.client.result.<a href="com/google/zxing/client/result/ParsedResultType.html" title="enum in com.google.zxing.client.result"><span class="typeNameLink">ParsedResultType</span></a></li>
+<li type="circle">com.google.zxing.<a href="com/google/zxing/ResultMetadataType.html" title="enum in com.google.zxing"><span class="typeNameLink">ResultMetadataType</span></a></li>
+<li type="circle">com.google.zxing.datamatrix.encoder.<a href="com/google/zxing/datamatrix/encoder/SymbolShapeHint.html" title="enum in com.google.zxing.datamatrix.encoder"><span class="typeNameLink">SymbolShapeHint</span></a></li>
 </ul>
 </li>
 </ul>
@@ -446,6 +457,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/apidocs/serialized-form.html b/docs/apidocs/serialized-form.html
index 34dfc32..f4e6b53 100644
--- a/docs/apidocs/serialized-form.html
+++ b/docs/apidocs/serialized-form.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Serialized Form (ZXing 3.4.0 API)</title>
+<title>Serialized Form (ZXing 3.5.1 API)</title>
 <link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
 <script type="text/javascript" src="script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Serialized Form (ZXing 3.4.0 API)";
+            parent.document.title="Serialized Form (ZXing 3.5.1 API)";
         }
     }
     catch(err) {
@@ -222,6 +222,6 @@
 <!--   -->
 </a></div>
 <!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2019. All rights reserved.</small></p>
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2022. All rights reserved.</small></p>
 </body>
 </html>
diff --git a/docs/css/apache-maven-fluido-1.8.min.css b/docs/css/apache-maven-fluido-1.8.min.css
new file mode 100644
index 0000000..b436baf
--- /dev/null
+++ b/docs/css/apache-maven-fluido-1.8.min.css
@@ -0,0 +1,17 @@
+/*!
+ * Bootstrap v2.3.2
+ *
+ * Copyright 2013 Twitter, Inc
+ * Licensed under the Apache License v2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Designed and built with all the love in the world by @mdo and @fat.
+ */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}a:hover,a:active{outline:0}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{width:auto\9;height:auto;max-width:100%;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic}#map_canvas img,.google-maps img{max-width:none}button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle}button,input{*overflow:visible;line-height:normal}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}button,html input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button}label,select,button,input[type="button"],input[type="reset"],input[type="submit"],input[type="radio"],input[type="checkbox"]{cursor:pointer}input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}textarea{overflow:auto;vertical-align:top}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:20px;color:#333;background-color:#fff}a{color:#08c;text-decoration:none}a:hover,a:focus{color:#005580;text-decoration:underline}.img-rounded{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.img-polaroid{padding:4px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.1);box-shadow:0 1px 3px rgba(0,0,0,0.1)}.img-circle{-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px}.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.span12{width:940px}.span11{width:860px}.span10{width:780px}.span9{width:700px}.span8{width:620px}.span7{width:540px}.span6{width:460px}.span5{width:380px}.span4{width:300px}.span3{width:220px}.span2{width:140px}.span1{width:60px}.offset12{margin-left:980px}.offset11{margin-left:900px}.offset10{margin-left:820px}.offset9{margin-left:740px}.offset8{margin-left:660px}.offset7{margin-left:580px}.offset6{margin-left:500px}.offset5{margin-left:420px}.offset4{margin-left:340px}.offset3{margin-left:260px}.offset2{margin-left:180px}.offset1{margin-left:100px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.127659574468085%;*margin-left:2.074468085106383%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.127659574468085%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.48936170212765%;*width:91.43617021276594%}.row-fluid .span10{width:82.97872340425532%;*width:82.92553191489361%}.row-fluid .span9{width:74.46808510638297%;*width:74.41489361702126%}.row-fluid .span8{width:65.95744680851064%;*width:65.90425531914893%}.row-fluid .span7{width:57.44680851063829%;*width:57.39361702127659%}.row-fluid .span6{width:48.93617021276595%;*width:48.88297872340425%}.row-fluid .span5{width:40.42553191489362%;*width:40.37234042553192%}.row-fluid .span4{width:31.914893617021278%;*width:31.861702127659576%}.row-fluid .span3{width:23.404255319148934%;*width:23.351063829787233%}.row-fluid .span2{width:14.893617021276595%;*width:14.840425531914894%}.row-fluid .span1{width:6.382978723404255%;*width:6.329787234042553%}.row-fluid .offset12{margin-left:104.25531914893617%;*margin-left:104.14893617021275%}.row-fluid .offset12:first-child{margin-left:102.12765957446808%;*margin-left:102.02127659574467%}.row-fluid .offset11{margin-left:95.74468085106382%;*margin-left:95.6382978723404%}.row-fluid .offset11:first-child{margin-left:93.61702127659574%;*margin-left:93.51063829787232%}.row-fluid .offset10{margin-left:87.23404255319149%;*margin-left:87.12765957446807%}.row-fluid .offset10:first-child{margin-left:85.1063829787234%;*margin-left:84.99999999999999%}.row-fluid .offset9{margin-left:78.72340425531914%;*margin-left:78.61702127659572%}.row-fluid .offset9:first-child{margin-left:76.59574468085106%;*margin-left:76.48936170212764%}.row-fluid .offset8{margin-left:70.2127659574468%;*margin-left:70.10638297872339%}.row-fluid .offset8:first-child{margin-left:68.08510638297872%;*margin-left:67.9787234042553%}.row-fluid .offset7{margin-left:61.70212765957446%;*margin-left:61.59574468085106%}.row-fluid .offset7:first-child{margin-left:59.574468085106375%;*margin-left:59.46808510638297%}.row-fluid .offset6{margin-left:53.191489361702125%;*margin-left:53.085106382978715%}.row-fluid .offset6:first-child{margin-left:51.063829787234035%;*margin-left:50.95744680851063%}.row-fluid .offset5{margin-left:44.68085106382979%;*margin-left:44.57446808510638%}.row-fluid .offset5:first-child{margin-left:42.5531914893617%;*margin-left:42.4468085106383%}.row-fluid .offset4{margin-left:36.170212765957444%;*margin-left:36.06382978723405%}.row-fluid .offset4:first-child{margin-left:34.04255319148936%;*margin-left:33.93617021276596%}.row-fluid .offset3{margin-left:27.659574468085104%;*margin-left:27.5531914893617%}.row-fluid .offset3:first-child{margin-left:25.53191489361702%;*margin-left:25.425531914893618%}.row-fluid .offset2{margin-left:19.148936170212764%;*margin-left:19.04255319148936%}.row-fluid .offset2:first-child{margin-left:17.02127659574468%;*margin-left:16.914893617021278%}.row-fluid .offset1{margin-left:10.638297872340425%;*margin-left:10.53191489361702%}.row-fluid .offset1:first-child{margin-left:8.51063829787234%;*margin-left:8.404255319148938%}[class*="span"].hide,.row-fluid [class*="span"].hide{display:none}[class*="span"].pull-right,.row-fluid [class*="span"].pull-right{float:right}.container{margin-right:auto;margin-left:auto;*zoom:1}.container:before,.container:after{display:table;line-height:0;content:""}.container:after{clear:both}.container-fluid{padding-right:20px;padding-left:20px;*zoom:1}.container-fluid:before,.container-fluid:after{display:table;line-height:0;content:""}.container-fluid:after{clear:both}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:21px;font-weight:200;line-height:30px}small{font-size:85%}strong{font-weight:bold}em{font-style:italic}cite{font-style:normal}.muted{color:#999}a.muted:hover,a.muted:focus{color:#808080}.text-warning{color:#c09853}a.text-warning:hover,a.text-warning:focus{color:#a47e3c}.text-error{color:#b94a48}a.text-error:hover,a.text-error:focus{color:#953b39}.text-info{color:#3a87ad}a.text-info:hover,a.text-info:focus{color:#2d6987}.text-success{color:#468847}a.text-success:hover,a.text-success:focus{color:#356635}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}h1,h2,h3,h4,h5,h6{margin:10px 0;font-family:inherit;font-weight:bold;line-height:20px;color:inherit;text-rendering:optimizelegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;line-height:1;color:#999}h1,h2,h3{line-height:40px}h1{font-size:38.5px}h2{font-size:31.5px}h3{font-size:24.5px}h4{font-size:17.5px}h5{font-size:14px}h6{font-size:11.9px}h1 small{font-size:24.5px}h2 small{font-size:17.5px}h3 small{font-size:14px}h4 small{font-size:14px}.page-header{padding-bottom:9px;margin:20px 0 30px;border-bottom:1px solid #eee}ul,ol{padding:0;margin:0 0 10px 25px}ul ul,ul ol,ol ol,ol ul{margin-bottom:0}li{line-height:20px}ul.unstyled,ol.unstyled{margin-left:0;list-style:none}ul.inline,ol.inline{margin-left:0;list-style:none}ul.inline>li,ol.inline>li{display:inline-block;*display:inline;padding-right:5px;padding-left:5px;*zoom:1}dl{margin-bottom:20px}dt,dd{line-height:20px}dt{font-weight:bold}dd{margin-left:10px}.dl-horizontal{*zoom:1}.dl-horizontal:before,.dl-horizontal:after{display:table;line-height:0;content:""}.dl-horizontal:after{clear:both}.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}hr{margin:20px 0;border:0;border-top:1px solid #eee;border-bottom:1px solid #fff}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:0 0 0 15px;margin:0 0 20px;border-left:5px solid #eee}blockquote p{margin-bottom:0;font-size:17.5px;font-weight:300;line-height:1.25}blockquote small{display:block;line-height:20px;color:#999}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:20px;font-style:normal;line-height:20px}code,pre{padding:0 3px 2px;font-family:Monaco,Menlo,Consolas,"Courier New",monospace;font-size:12px;color:#333;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}code{padding:2px 4px;color:#d14;white-space:nowrap;background-color:#f7f7f9;border:1px solid #e1e1e8}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:20px;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}pre.prettyprint{margin-bottom:20px}pre code{padding:0;color:inherit;white-space:pre;white-space:pre-wrap;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}form{margin:0 0 20px}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#333;border:0;border-bottom:1px solid #e5e5e5}legend small{font-size:15px;color:#999}label,input,button,select,textarea{font-size:14px;font-weight:normal;line-height:20px}input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}label{display:block;margin-bottom:5px}select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{display:inline-block;height:20px;padding:4px 6px;margin-bottom:10px;font-size:14px;line-height:20px;color:#555;vertical-align:middle;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}input,textarea,.uneditable-input{width:206px}textarea{height:auto}textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{background-color:#fff;border:1px solid #ccc;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border linear .2s,box-shadow linear .2s;-moz-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:rgba(82,168,236,0.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6)}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;*margin-top:0;line-height:normal}input[type="file"],input[type="image"],input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto}select,input[type="file"]{height:30px;*margin-top:4px;line-height:30px}select{width:220px;background-color:#fff;border:1px solid #ccc}select[multiple],select[size]{height:auto}select:focus,input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.uneditable-input,.uneditable-textarea{color:#999;cursor:not-allowed;background-color:#fcfcfc;border-color:#ccc;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);box-shadow:inset 0 1px 2px rgba(0,0,0,0.025)}.uneditable-input{overflow:hidden;white-space:nowrap}.uneditable-textarea{width:auto;height:auto}input:-moz-placeholder,textarea:-moz-placeholder{color:#999}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#999}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999}.radio,.checkbox{min-height:20px;padding-left:20px}.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-20px}.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px}.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle}.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px}.input-mini{width:60px}.input-small{width:90px}.input-medium{width:150px}.input-large{width:210px}.input-xlarge{width:270px}.input-xxlarge{width:530px}input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"]{float:none;margin-left:0}.input-append input[class*="span"],.input-append .uneditable-input[class*="span"],.input-prepend input[class*="span"],.input-prepend .uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"],.row-fluid .input-prepend [class*="span"],.row-fluid .input-append [class*="span"]{display:inline-block}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:926px}input.span11,textarea.span11,.uneditable-input.span11{width:846px}input.span10,textarea.span10,.uneditable-input.span10{width:766px}input.span9,textarea.span9,.uneditable-input.span9{width:686px}input.span8,textarea.span8,.uneditable-input.span8{width:606px}input.span7,textarea.span7,.uneditable-input.span7{width:526px}input.span6,textarea.span6,.uneditable-input.span6{width:446px}input.span5,textarea.span5,.uneditable-input.span5{width:366px}input.span4,textarea.span4,.uneditable-input.span4{width:286px}input.span3,textarea.span3,.uneditable-input.span3{width:206px}input.span2,textarea.span2,.uneditable-input.span2{width:126px}input.span1,textarea.span1,.uneditable-input.span1{width:46px}.controls-row{*zoom:1}.controls-row:before,.controls-row:after{display:table;line-height:0;content:""}.controls-row:after{clear:both}.controls-row [class*="span"],.row-fluid .controls-row [class*="span"]{float:left}.controls-row .checkbox[class*="span"],.controls-row .radio[class*="span"]{padding-top:5px}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#eee}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent}.control-group.warning .control-label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#c09853}.control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#c09853}.control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#c09853;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e}.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#c09853;background-color:#fcf8e3;border-color:#c09853}.control-group.error .control-label,.control-group.error .help-block,.control-group.error .help-inline{color:#b94a48}.control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48}.control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#b94a48;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392}.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#b94a48;background-color:#f2dede;border-color:#b94a48}.control-group.success .control-label,.control-group.success .help-block,.control-group.success .help-inline{color:#468847}.control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847}.control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#468847;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b}.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#468847;background-color:#dff0d8;border-color:#468847}.control-group.info .control-label,.control-group.info .help-block,.control-group.info .help-inline{color:#3a87ad}.control-group.info .checkbox,.control-group.info .radio,.control-group.info input,.control-group.info select,.control-group.info textarea{color:#3a87ad}.control-group.info input,.control-group.info select,.control-group.info textarea{border-color:#3a87ad;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.info input:focus,.control-group.info select:focus,.control-group.info textarea:focus{border-color:#2d6987;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3}.control-group.info .input-prepend .add-on,.control-group.info .input-append .add-on{color:#3a87ad;background-color:#d9edf7;border-color:#3a87ad}input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#b94a48;border-color:#ee5f5b}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7}.form-actions{padding:19px 20px 20px;margin-top:20px;margin-bottom:20px;background-color:#f5f5f5;border-top:1px solid #e5e5e5;*zoom:1}.form-actions:before,.form-actions:after{display:table;line-height:0;content:""}.form-actions:after{clear:both}.help-block,.help-inline{color:#595959}.help-block{display:block;margin-bottom:10px}.help-inline{display:inline-block;*display:inline;padding-left:5px;vertical-align:middle;*zoom:1}.input-append,.input-prepend{display:inline-block;margin-bottom:10px;font-size:0;white-space:nowrap;vertical-align:middle}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input,.input-append .dropdown-menu,.input-prepend .dropdown-menu,.input-append .popover,.input-prepend .popover{font-size:14px}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;vertical-align:top;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2}.input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:20px;min-width:16px;padding:4px 5px;font-size:14px;font-weight:normal;line-height:20px;text-align:center;text-shadow:0 1px 0 #fff;background-color:#eee;border:1px solid #ccc}.input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn,.input-append .btn-group>.dropdown-toggle,.input-prepend .btn-group>.dropdown-toggle{vertical-align:top;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-append .active,.input-prepend .active{background-color:#a9dba9;border-color:#46a546}.input-prepend .add-on,.input-prepend .btn{margin-right:-1px}.input-prepend .add-on:first-child,.input-prepend .btn:first-child{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input+.btn-group .btn:last-child,.input-append select+.btn-group .btn:last-child,.input-append .uneditable-input+.btn-group .btn:last-child{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append .add-on,.input-append .btn,.input-append .btn-group{margin-left:-1px}.input-append .add-on:last-child,.input-append .btn:last-child,.input-append .btn-group:last-child>.dropdown-toggle{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append input+.btn-group .btn,.input-prepend.input-append select+.btn-group .btn,.input-prepend.input-append .uneditable-input+.btn-group .btn{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .btn-group:first-child{margin-left:0}input.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.form-search .input-append .search-query,.form-search .input-prepend .search-query{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.form-search .input-append .search-query{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search .input-append .btn{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .search-query{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .btn{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;margin-bottom:0;vertical-align:middle;*zoom:1}.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none}.form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{display:inline-block}.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0}.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle}.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0}.control-group{margin-bottom:10px}legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate}.form-horizontal .control-group{margin-bottom:20px;*zoom:1}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;line-height:0;content:""}.form-horizontal .control-group:after{clear:both}.form-horizontal .control-label{float:left;width:160px;padding-top:5px;text-align:right}.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:180px;*margin-left:0}.form-horizontal .controls:first-child{*padding-left:180px}.form-horizontal .help-block{margin-bottom:0}.form-horizontal input+.help-block,.form-horizontal select+.help-block,.form-horizontal textarea+.help-block,.form-horizontal .uneditable-input+.help-block,.form-horizontal .input-prepend+.help-block,.form-horizontal .input-append+.help-block{margin-top:10px}.form-horizontal .form-actions{padding-left:180px}table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0}.table{width:100%;margin-bottom:20px}.table th,.table td{padding:8px;line-height:20px;text-align:left;vertical-align:top;border-top:1px solid #ddd}.table th{font-weight:bold}.table thead th{vertical-align:bottom}.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.table thead:first-child tr:first-child td{border-top:0}.table tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed th,.table-condensed td{padding:4px 5px}.table-bordered{border:1px solid #ddd;border-collapse:separate;*border-collapse:collapse;border-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.table-bordered th,.table-bordered td{border-left:1px solid #ddd}.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0}.table-bordered thead:first-child tr:first-child>th:first-child,.table-bordered tbody:first-child tr:first-child>td:first-child,.table-bordered tbody:first-child tr:first-child>th:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered thead:first-child tr:first-child>th:last-child,.table-bordered tbody:first-child tr:first-child>td:last-child,.table-bordered tbody:first-child tr:first-child>th:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-bordered thead:last-child tr:last-child>th:first-child,.table-bordered tbody:last-child tr:last-child>td:first-child,.table-bordered tbody:last-child tr:last-child>th:first-child,.table-bordered tfoot:last-child tr:last-child>td:first-child,.table-bordered tfoot:last-child tr:last-child>th:first-child{-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px}.table-bordered thead:last-child tr:last-child>th:last-child,.table-bordered tbody:last-child tr:last-child>td:last-child,.table-bordered tbody:last-child tr:last-child>th:last-child,.table-bordered tfoot:last-child tr:last-child>td:last-child,.table-bordered tfoot:last-child tr:last-child>th:last-child{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px}.table-bordered tfoot+tbody:last-child tr:last-child td:first-child{-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-moz-border-radius-bottomleft:0}.table-bordered tfoot+tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomright:0}.table-bordered caption+thead tr:first-child th:first-child,.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered caption+thead tr:first-child th:last-child,.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-striped tbody>tr:nth-child(odd)>td,.table-striped tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover tbody tr:hover>td,.table-hover tbody tr:hover>th{background-color:#f5f5f5}table td[class*="span"],table th[class*="span"],.row-fluid table td[class*="span"],.row-fluid table th[class*="span"]{display:table-cell;float:none;margin-left:0}.table td.span1,.table th.span1{float:none;width:44px;margin-left:0}.table td.span2,.table th.span2{float:none;width:124px;margin-left:0}.table td.span3,.table th.span3{float:none;width:204px;margin-left:0}.table td.span4,.table th.span4{float:none;width:284px;margin-left:0}.table td.span5,.table th.span5{float:none;width:364px;margin-left:0}.table td.span6,.table th.span6{float:none;width:444px;margin-left:0}.table td.span7,.table th.span7{float:none;width:524px;margin-left:0}.table td.span8,.table th.span8{float:none;width:604px;margin-left:0}.table td.span9,.table th.span9{float:none;width:684px;margin-left:0}.table td.span10,.table th.span10{float:none;width:764px;margin-left:0}.table td.span11,.table th.span11{float:none;width:844px;margin-left:0}.table td.span12,.table th.span12{float:none;width:924px;margin-left:0}.table tbody tr.success>td{background-color:#dff0d8}.table tbody tr.error>td{background-color:#f2dede}.table tbody tr.warning>td{background-color:#fcf8e3}.table tbody tr.info>td{background-color:#d9edf7}.table-hover tbody tr.success:hover>td{background-color:#d0e9c6}.table-hover tbody tr.error:hover>td{background-color:#ebcccc}.table-hover tbody tr.warning:hover>td{background-color:#faf2cc}.table-hover tbody tr.info:hover>td{background-color:#c4e3f3}[class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;margin-top:1px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url("../img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat}.icon-white,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:focus>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>li>a:focus>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:focus>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"],.dropdown-submenu:focus>a>[class*=" icon-"]{background-image:url("../img/glyphicons-halflings-white.png")}.icon-glass{background-position:0 0}.icon-music{background-position:-24px 0}.icon-search{background-position:-48px 0}.icon-envelope{background-position:-72px 0}.icon-heart{background-position:-96px 0}.icon-star{background-position:-120px 0}.icon-star-empty{background-position:-144px 0}.icon-user{background-position:-168px 0}.icon-film{background-position:-192px 0}.icon-th-large{background-position:-216px 0}.icon-th{background-position:-240px 0}.icon-th-list{background-position:-264px 0}.icon-ok{background-position:-288px 0}.icon-remove{background-position:-312px 0}.icon-zoom-in{background-position:-336px 0}.icon-zoom-out{background-position:-360px 0}.icon-off{background-position:-384px 0}.icon-signal{background-position:-408px 0}.icon-cog{background-position:-432px 0}.icon-trash{background-position:-456px 0}.icon-home{background-position:0 -24px}.icon-file{background-position:-24px -24px}.icon-time{background-position:-48px -24px}.icon-road{background-position:-72px -24px}.icon-download-alt{background-position:-96px -24px}.icon-download{background-position:-120px -24px}.icon-upload{background-position:-144px -24px}.icon-inbox{background-position:-168px -24px}.icon-play-circle{background-position:-192px -24px}.icon-repeat{background-position:-216px -24px}.icon-refresh{background-position:-240px -24px}.icon-list-alt{background-position:-264px -24px}.icon-lock{background-position:-287px -24px}.icon-flag{background-position:-312px -24px}.icon-headphones{background-position:-336px -24px}.icon-volume-off{background-position:-360px -24px}.icon-volume-down{background-position:-384px -24px}.icon-volume-up{background-position:-408px -24px}.icon-qrcode{background-position:-432px -24px}.icon-barcode{background-position:-456px -24px}.icon-tag{background-position:0 -48px}.icon-tags{background-position:-25px -48px}.icon-book{background-position:-48px -48px}.icon-bookmark{background-position:-72px -48px}.icon-print{background-position:-96px -48px}.icon-camera{background-position:-120px -48px}.icon-font{background-position:-144px -48px}.icon-bold{background-position:-167px -48px}.icon-italic{background-position:-192px -48px}.icon-text-height{background-position:-216px -48px}.icon-text-width{background-position:-240px -48px}.icon-align-left{background-position:-264px -48px}.icon-align-center{background-position:-288px -48px}.icon-align-right{background-position:-312px -48px}.icon-align-justify{background-position:-336px -48px}.icon-list{background-position:-360px -48px}.icon-indent-left{background-position:-384px -48px}.icon-indent-right{background-position:-408px -48px}.icon-facetime-video{background-position:-432px -48px}.icon-picture{background-position:-456px -48px}.icon-pencil{background-position:0 -72px}.icon-map-marker{background-position:-24px -72px}.icon-adjust{background-position:-48px -72px}.icon-tint{background-position:-72px -72px}.icon-edit{background-position:-96px -72px}.icon-share{background-position:-120px -72px}.icon-check{background-position:-144px -72px}.icon-move{background-position:-168px -72px}.icon-step-backward{background-position:-192px -72px}.icon-fast-backward{background-position:-216px -72px}.icon-backward{background-position:-240px -72px}.icon-play{background-position:-264px -72px}.icon-pause{background-position:-288px -72px}.icon-stop{background-position:-312px -72px}.icon-forward{background-position:-336px -72px}.icon-fast-forward{background-position:-360px -72px}.icon-step-forward{background-position:-384px -72px}.icon-eject{background-position:-408px -72px}.icon-chevron-left{background-position:-432px -72px}.icon-chevron-right{background-position:-456px -72px}.icon-plus-sign{background-position:0 -96px}.icon-minus-sign{background-position:-24px -96px}.icon-remove-sign{background-position:-48px -96px}.icon-ok-sign{background-position:-72px -96px}.icon-question-sign{background-position:-96px -96px}.icon-info-sign{background-position:-120px -96px}.icon-screenshot{background-position:-144px -96px}.icon-remove-circle{background-position:-168px -96px}.icon-ok-circle{background-position:-192px -96px}.icon-ban-circle{background-position:-216px -96px}.icon-arrow-left{background-position:-240px -96px}.icon-arrow-right{background-position:-264px -96px}.icon-arrow-up{background-position:-289px -96px}.icon-arrow-down{background-position:-312px -96px}.icon-share-alt{background-position:-336px -96px}.icon-resize-full{background-position:-360px -96px}.icon-resize-small{background-position:-384px -96px}.icon-plus{background-position:-408px -96px}.icon-minus{background-position:-433px -96px}.icon-asterisk{background-position:-456px -96px}.icon-exclamation-sign{background-position:0 -120px}.icon-gift{background-position:-24px -120px}.icon-leaf{background-position:-48px -120px}.icon-fire{background-position:-72px -120px}.icon-eye-open{background-position:-96px -120px}.icon-eye-close{background-position:-120px -120px}.icon-warning-sign{background-position:-144px -120px}.icon-plane{background-position:-168px -120px}.icon-calendar{background-position:-192px -120px}.icon-random{width:16px;background-position:-216px -120px}.icon-comment{background-position:-240px -120px}.icon-magnet{background-position:-264px -120px}.icon-chevron-up{background-position:-288px -120px}.icon-chevron-down{background-position:-313px -119px}.icon-retweet{background-position:-336px -120px}.icon-shopping-cart{background-position:-360px -120px}.icon-folder-close{width:16px;background-position:-384px -120px}.icon-folder-open{width:16px;background-position:-408px -120px}.icon-resize-vertical{background-position:-432px -119px}.icon-resize-horizontal{background-position:-456px -118px}.icon-hdd{background-position:0 -144px}.icon-bullhorn{background-position:-24px -144px}.icon-bell{background-position:-48px -144px}.icon-certificate{background-position:-72px -144px}.icon-thumbs-up{background-position:-96px -144px}.icon-thumbs-down{background-position:-120px -144px}.icon-hand-right{background-position:-144px -144px}.icon-hand-left{background-position:-168px -144px}.icon-hand-up{background-position:-192px -144px}.icon-hand-down{background-position:-216px -144px}.icon-circle-arrow-right{background-position:-240px -144px}.icon-circle-arrow-left{background-position:-264px -144px}.icon-circle-arrow-up{background-position:-288px -144px}.icon-circle-arrow-down{background-position:-312px -144px}.icon-globe{background-position:-336px -144px}.icon-wrench{background-position:-360px -144px}.icon-tasks{background-position:-384px -144px}.icon-filter{background-position:-408px -144px}.icon-briefcase{background-position:-432px -144px}.icon-fullscreen{background-position:-456px -144px}.dropup,.dropdown{position:relative}.dropdown-toggle{*margin-bottom:-3px}.dropdown-toggle:active,.open .dropdown-toggle{outline:0}.caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.dropdown .caret{margin-top:8px;margin-left:2px}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus,.dropdown-submenu:hover>a,.dropdown-submenu:focus>a{color:#fff;text-decoration:none;background-color:#0081c2;background-image:-moz-linear-gradient(top,#08c,#0077b3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));background-image:-webkit-linear-gradient(top,#08c,#0077b3);background-image:-o-linear-gradient(top,#08c,#0077b3);background-image:linear-gradient(to bottom,#08c,#0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0077b3',GradientType=0)}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#0081c2;background-image:-moz-linear-gradient(top,#08c,#0077b3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));background-image:-webkit-linear-gradient(top,#08c,#0077b3);background-image:-o-linear-gradient(top,#08c,#0077b3);background-image:linear-gradient(to bottom,#08c,#0077b3);background-repeat:repeat-x;outline:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0077b3',GradientType=0)}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open{*z-index:1000}.open>.dropdown-menu{display:block}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px}.dropdown-submenu:hover>.dropdown-menu{display:block}.dropup .dropdown-submenu>.dropdown-menu{top:auto;bottom:0;margin-top:0;margin-bottom:-2px;-webkit-border-radius:5px 5px 5px 0;-moz-border-radius:5px 5px 5px 0;border-radius:5px 5px 5px 0}.dropdown-submenu>a:after{display:block;float:right;width:0;height:0;margin-top:5px;margin-right:-10px;border-color:transparent;border-left-color:#ccc;border-style:solid;border-width:5px 0 5px 5px;content:" "}.dropdown-submenu:hover>a:after{border-left-color:#fff}.dropdown-submenu.pull-left{float:none}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.dropdown .dropdown-menu .nav-header{padding-right:20px;padding-left:20px}.typeahead{z-index:1051;margin-top:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-large{padding:24px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.well-small{padding:9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.fade{opacity:0;-webkit-transition:opacity .15s linear;-moz-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-moz-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.collapse.in{height:auto}.close{float:right;font-size:20px;font-weight:bold;line-height:20px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.4;filter:alpha(opacity=40)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.btn{display:inline-block;*display:inline;padding:4px 12px;margin-bottom:0;*margin-left:.3em;font-size:14px;line-height:20px;color:#333;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,0.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;*background-color:#e6e6e6;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;border:1px solid #ccc;*border:0;border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);*zoom:1;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn:hover,.btn:focus,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#333;background-color:#e6e6e6;*background-color:#d9d9d9}.btn:active,.btn.active{background-color:#ccc \9}.btn:first-child{*margin-left:0}.btn:hover,.btn:focus{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn.disabled,.btn[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-large{padding:11px 19px;font-size:17.5px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.btn-large [class^="icon-"],.btn-large [class*=" icon-"]{margin-top:4px}.btn-small{padding:2px 10px;font-size:11.9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-small [class^="icon-"],.btn-small [class*=" icon-"]{margin-top:0}.btn-mini [class^="icon-"],.btn-mini [class*=" icon-"]{margin-top:-1px}.btn-mini{padding:0 6px;font-size:10.5px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-block{display:block;width:100%;padding-right:0;padding-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255,255,255,0.75)}.btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#006dcc;*background-color:#04c;background-image:-moz-linear-gradient(top,#08c,#04c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(to bottom,#08c,#04c);background-repeat:repeat-x;border-color:#04c #0044cc #002a80;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0044cc',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#fff;background-color:#04c;*background-color:#003bb3}.btn-primary:active,.btn-primary.active{background-color:#039 \9}.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#faa732;*background-color:#f89406;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;border-color:#f89406 #f89406 #ad6704;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#fff;background-color:#f89406;*background-color:#df8505}.btn-warning:active,.btn-warning.active{background-color:#c67605 \9}.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#da4f49;*background-color:#bd362f;background-image:-moz-linear-gradient(top,#ee5f5b,#bd362f);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#bd362f));background-image:-webkit-linear-gradient(top,#ee5f5b,#bd362f);background-image:-o-linear-gradient(top,#ee5f5b,#bd362f);background-image:linear-gradient(to bottom,#ee5f5b,#bd362f);background-repeat:repeat-x;border-color:#bd362f #bd362f #802420;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffbd362f',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#fff;background-color:#bd362f;*background-color:#a9302a}.btn-danger:active,.btn-danger.active{background-color:#942a25 \9}.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#5bb75b;*background-color:#51a351;background-image:-moz-linear-gradient(top,#62c462,#51a351);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#51a351));background-image:-webkit-linear-gradient(top,#62c462,#51a351);background-image:-o-linear-gradient(top,#62c462,#51a351);background-image:linear-gradient(to bottom,#62c462,#51a351);background-repeat:repeat-x;border-color:#51a351 #51a351 #387038;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff51a351',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#fff;background-color:#51a351;*background-color:#499249}.btn-success:active,.btn-success.active{background-color:#408140 \9}.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#49afcd;*background-color:#2f96b4;background-image:-moz-linear-gradient(top,#5bc0de,#2f96b4);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#2f96b4));background-image:-webkit-linear-gradient(top,#5bc0de,#2f96b4);background-image:-o-linear-gradient(top,#5bc0de,#2f96b4);background-image:linear-gradient(to bottom,#5bc0de,#2f96b4);background-repeat:repeat-x;border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff2f96b4',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#fff;background-color:#2f96b4;*background-color:#2a85a0}.btn-info:active,.btn-info.active{background-color:#24748c \9}.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#363636;*background-color:#222;background-image:-moz-linear-gradient(top,#444,#222);background-image:-webkit-gradient(linear,0 0,0 100%,from(#444),to(#222));background-image:-webkit-linear-gradient(top,#444,#222);background-image:-o-linear-gradient(top,#444,#222);background-image:linear-gradient(to bottom,#444,#222);background-repeat:repeat-x;border-color:#222 #222222 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444',endColorstr='#ff222222',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-inverse:hover,.btn-inverse:focus,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#fff;background-color:#222;*background-color:#151515}.btn-inverse:active,.btn-inverse.active{background-color:#080808 \9}button.btn,input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0}button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px}button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px}button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px}.btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-link{color:#08c;cursor:pointer;border-color:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-link:hover,.btn-link:focus{color:#005580;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,.btn-link[disabled]:focus{color:#333;text-decoration:none}.btn-group{position:relative;display:inline-block;*display:inline;*margin-left:.3em;font-size:0;white-space:nowrap;vertical-align:middle;*zoom:1}.btn-group:first-child{*margin-left:0}.btn-group+.btn-group{margin-left:5px}.btn-toolbar{margin-top:10px;margin-bottom:10px;font-size:0}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group{margin-left:5px}.btn-group>.btn{position:relative;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group>.btn+.btn{margin-left:-1px}.btn-group>.btn,.btn-group>.dropdown-menu,.btn-group>.popover{font-size:14px}.btn-group>.btn-mini{font-size:10.5px}.btn-group>.btn-small{font-size:11.9px}.btn-group>.btn-large{font-size:17.5px}.btn-group>.btn:first-child{margin-left:0;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.btn-group>.btn.large:first-child{margin-left:0;-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{*padding-top:5px;padding-right:8px;*padding-bottom:5px;padding-left:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn-group>.btn-mini+.dropdown-toggle{*padding-top:2px;padding-right:5px;*padding-bottom:2px;padding-left:5px}.btn-group>.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px}.btn-group>.btn-large+.dropdown-toggle{*padding-top:7px;padding-right:12px;*padding-bottom:7px;padding-left:12px}.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn-group.open .btn.dropdown-toggle{background-color:#e6e6e6}.btn-group.open .btn-primary.dropdown-toggle{background-color:#04c}.btn-group.open .btn-warning.dropdown-toggle{background-color:#f89406}.btn-group.open .btn-danger.dropdown-toggle{background-color:#bd362f}.btn-group.open .btn-success.dropdown-toggle{background-color:#51a351}.btn-group.open .btn-info.dropdown-toggle{background-color:#2f96b4}.btn-group.open .btn-inverse.dropdown-toggle{background-color:#222}.btn .caret{margin-top:8px;margin-left:0}.btn-large .caret{margin-top:6px}.btn-large .caret{border-top-width:5px;border-right-width:5px;border-left-width:5px}.btn-mini .caret,.btn-small .caret{margin-top:8px}.dropup .btn-large .caret{border-bottom-width:5px}.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#fff;border-bottom-color:#fff}.btn-group-vertical{display:inline-block;*display:inline;*zoom:1}.btn-group-vertical>.btn{display:block;float:none;max-width:100%;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group-vertical>.btn+.btn{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:first-child{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.btn-group-vertical>.btn:last-child{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.btn-group-vertical>.btn-large:first-child{-webkit-border-radius:6px 6px 0 0;-moz-border-radius:6px 6px 0 0;border-radius:6px 6px 0 0}.btn-group-vertical>.btn-large:last-child{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.alert{padding:8px 35px 8px 14px;margin-bottom:20px;text-shadow:0 1px 0 rgba(255,255,255,0.5);background-color:#fcf8e3;border:1px solid #fbeed5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.alert,.alert h4{color:#c09853}.alert h4{margin:0}.alert .close{position:relative;top:-2px;right:-21px;line-height:20px}.alert-success{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.alert-success h4{color:#468847}.alert-danger,.alert-error{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.alert-danger h4,.alert-error h4{color:#b94a48}.alert-info{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.alert-info h4{color:#3a87ad}.alert-block{padding-top:14px;padding-bottom:14px}.alert-block>p,.alert-block>ul{margin-bottom:0}.alert-block p+p{margin-top:5px}.nav{margin-bottom:20px;margin-left:0;list-style:none}.nav>li>a{display:block}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li>a>img{max-width:none}.nav>.pull-right{float:right}.nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:20px;color:#999;text-shadow:0 1px 0 rgba(255,255,255,0.5);text-transform:uppercase}.nav li+.nav-header{margin-top:9px}.nav-list{padding-right:15px;padding-left:15px;margin-bottom:0}.nav-list>li>a,.nav-list .nav-header{margin-right:-15px;margin-left:-15px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.nav-list>li>a{padding:3px 15px}.nav-list>.active>a,.nav-list>.active>a:hover,.nav-list>.active>a:focus{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.2);background-color:#08c}.nav-list [class^="icon-"],.nav-list [class*=" icon-"]{margin-right:2px}.nav-list .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.nav-tabs,.nav-pills{*zoom:1}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;line-height:0;content:""}.nav-tabs:after,.nav-pills:after{clear:both}.nav-tabs>li,.nav-pills>li{float:left}.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{margin-bottom:-1px}.nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:20px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover,.nav-tabs>li>a:focus{border-color:#eee #eeeeee #ddd}.nav-tabs>.active>a,.nav-tabs>.active>a:hover,.nav-tabs>.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.nav-pills>.active>a,.nav-pills>.active>a:hover,.nav-pills>.active>a:focus{color:#fff;background-color:#08c}.nav-stacked>li{float:none}.nav-stacked>li>a{margin-right:0}.nav-tabs.nav-stacked{border-bottom:0}.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-topleft:4px}.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomright:4px;-moz-border-radius-bottomleft:4px}.nav-tabs.nav-stacked>li>a:hover,.nav-tabs.nav-stacked>li>a:focus{z-index:2;border-color:#ddd}.nav-pills.nav-stacked>li>a{margin-bottom:3px}.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px}.nav-tabs .dropdown-menu{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.nav-pills .dropdown-menu{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.nav .dropdown-toggle .caret{margin-top:6px;border-top-color:#08c;border-bottom-color:#08c}.nav .dropdown-toggle:hover .caret,.nav .dropdown-toggle:focus .caret{border-top-color:#005580;border-bottom-color:#005580}.nav-tabs .dropdown-toggle .caret{margin-top:8px}.nav .active .dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.nav-tabs .active .dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.nav>.dropdown.active>a:hover,.nav>.dropdown.active>a:focus{cursor:pointer}.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover,.nav>li.dropdown.open.active>a:focus{color:#fff;background-color:#999;border-color:#999}.nav li.dropdown.open .caret,.nav li.dropdown.open.active .caret,.nav li.dropdown.open a:hover .caret,.nav li.dropdown.open a:focus .caret{border-top-color:#fff;border-bottom-color:#fff;opacity:1;filter:alpha(opacity=100)}.tabs-stacked .open>a:hover,.tabs-stacked .open>a:focus{border-color:#999}.tabbable{*zoom:1}.tabbable:before,.tabbable:after{display:table;line-height:0;content:""}.tabbable:after{clear:both}.tab-content{overflow:auto}.tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.tabs-below>.nav-tabs{border-top:1px solid #ddd}.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0}.tabs-below>.nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.tabs-below>.nav-tabs>li>a:hover,.tabs-below>.nav-tabs>li>a:focus{border-top-color:#ddd;border-bottom-color:transparent}.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover,.tabs-below>.nav-tabs>.active>a:focus{border-color:transparent #ddd #ddd #ddd}.tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li{float:none}.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px}.tabs-left>.nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd}.tabs-left>.nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.tabs-left>.nav-tabs>li>a:hover,.tabs-left>.nav-tabs>li>a:focus{border-color:#eee #dddddd #eee #eeeeee}.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover,.tabs-left>.nav-tabs .active>a:focus{border-color:#ddd transparent #ddd #ddd;*border-right-color:#fff}.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd}.tabs-right>.nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.tabs-right>.nav-tabs>li>a:hover,.tabs-right>.nav-tabs>li>a:focus{border-color:#eee #eeeeee #eee #dddddd}.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover,.tabs-right>.nav-tabs .active>a:focus{border-color:#ddd #ddd #ddd transparent;*border-left-color:#fff}.nav>.disabled>a{color:#999}.nav>.disabled>a:hover,.nav>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent}.navbar{*position:relative;*z-index:2;margin-bottom:20px;overflow:visible}.navbar-inner{min-height:40px;padding-right:20px;padding-left:20px;background-color:#fafafa;background-image:-moz-linear-gradient(top,#fff,#f2f2f2);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#f2f2f2));background-image:-webkit-linear-gradient(top,#fff,#f2f2f2);background-image:-o-linear-gradient(top,#fff,#f2f2f2);background-image:linear-gradient(to bottom,#fff,#f2f2f2);background-repeat:repeat-x;border:1px solid #d4d4d4;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#fff2f2f2',GradientType=0);*zoom:1;-webkit-box-shadow:0 1px 4px rgba(0,0,0,0.065);-moz-box-shadow:0 1px 4px rgba(0,0,0,0.065);box-shadow:0 1px 4px rgba(0,0,0,0.065)}.navbar-inner:before,.navbar-inner:after{display:table;line-height:0;content:""}.navbar-inner:after{clear:both}.navbar .container{width:auto}.nav-collapse.collapse{height:auto;overflow:visible}.navbar .brand{display:block;float:left;padding:10px 20px 10px;margin-left:-20px;font-size:20px;font-weight:200;color:#777;text-shadow:0 1px 0 #fff}.navbar .brand:hover,.navbar .brand:focus{text-decoration:none}.navbar-text{margin-bottom:0;line-height:40px;color:#777}.navbar-link{color:#777}.navbar-link:hover,.navbar-link:focus{color:#333}.navbar .divider-vertical{height:40px;margin:0 9px;border-right:1px solid #fff;border-left:1px solid #f2f2f2}.navbar .btn,.navbar .btn-group{margin-top:5px}.navbar .btn-group .btn,.navbar .input-prepend .btn,.navbar .input-append .btn,.navbar .input-prepend .btn-group,.navbar .input-append .btn-group{margin-top:0}.navbar-form{margin-bottom:0;*zoom:1}.navbar-form:before,.navbar-form:after{display:table;line-height:0;content:""}.navbar-form:after{clear:both}.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:5px}.navbar-form input,.navbar-form select,.navbar-form .btn{display:inline-block;margin-bottom:0}.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px}.navbar-form .input-append,.navbar-form .input-prepend{margin-top:5px;white-space:nowrap}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0}.navbar-search{position:relative;float:left;margin-top:5px;margin-bottom:0}.navbar-search .search-query{padding:4px 14px;margin-bottom:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.navbar-static-top{position:static;margin-bottom:0}.navbar-static-top .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{border-width:0 0 1px}.navbar-fixed-bottom .navbar-inner{border-width:1px 0 0}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-right:0;padding-left:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.navbar-fixed-top{top:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{-webkit-box-shadow:0 1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 10px rgba(0,0,0,0.1);box-shadow:0 1px 10px rgba(0,0,0,0.1)}.navbar-fixed-bottom{bottom:0}.navbar-fixed-bottom .navbar-inner{-webkit-box-shadow:0 -1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 -1px 10px rgba(0,0,0,0.1);box-shadow:0 -1px 10px rgba(0,0,0,0.1)}.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0}.navbar .nav.pull-right{float:right;margin-right:0}.navbar .nav>li{float:left}.navbar .nav>li>a{float:none;padding:10px 15px 10px;color:#777;text-decoration:none;text-shadow:0 1px 0 #fff}.navbar .nav .dropdown-toggle .caret{margin-top:8px}.navbar .nav>li>a:focus,.navbar .nav>li>a:hover{color:#333;text-decoration:none;background-color:transparent}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{color:#555;text-decoration:none;background-color:#e5e5e5;-webkit-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);box-shadow:inset 0 3px 8px rgba(0,0,0,0.125)}.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-right:5px;margin-left:5px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#ededed;*background-color:#e5e5e5;background-image:-moz-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f2f2f2),to(#e5e5e5));background-image:-webkit-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:-o-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:linear-gradient(to bottom,#f2f2f2,#e5e5e5);background-repeat:repeat-x;border-color:#e5e5e5 #e5e5e5 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2',endColorstr='#ffe5e5e5',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075)}.navbar .btn-navbar:hover,.navbar .btn-navbar:focus,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{color:#fff;background-color:#e5e5e5;*background-color:#d9d9d9}.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#ccc \9}.navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,0.25);-moz-box-shadow:0 1px 0 rgba(0,0,0,0.25);box-shadow:0 1px 0 rgba(0,0,0,0.25)}.btn-navbar .icon-bar+.icon-bar{margin-top:3px}.navbar .nav>li>.dropdown-menu:before{position:absolute;top:-7px;left:9px;display:inline-block;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-left:7px solid transparent;border-bottom-color:rgba(0,0,0,0.2);content:''}.navbar .nav>li>.dropdown-menu:after{position:absolute;top:-6px;left:10px;display:inline-block;border-right:6px solid transparent;border-bottom:6px solid #fff;border-left:6px solid transparent;content:''}.navbar-fixed-bottom .nav>li>.dropdown-menu:before{top:auto;bottom:-7px;border-top:7px solid #ccc;border-bottom:0;border-top-color:rgba(0,0,0,0.2)}.navbar-fixed-bottom .nav>li>.dropdown-menu:after{top:auto;bottom:-6px;border-top:6px solid #fff;border-bottom:0}.navbar .nav li.dropdown>a:hover .caret,.navbar .nav li.dropdown>a:focus .caret{border-top-color:#333;border-bottom-color:#333}.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{color:#555;background-color:#e5e5e5}.navbar .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#777;border-bottom-color:#777}.navbar .nav li.dropdown.open>.dropdown-toggle .caret,.navbar .nav li.dropdown.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.navbar .pull-right>li>.dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right{right:0;left:auto}.navbar .pull-right>li>.dropdown-menu:before,.navbar .nav>li>.dropdown-menu.pull-right:before{right:12px;left:auto}.navbar .pull-right>li>.dropdown-menu:after,.navbar .nav>li>.dropdown-menu.pull-right:after{right:13px;left:auto}.navbar .pull-right>li>.dropdown-menu .dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right .dropdown-menu{right:100%;left:auto;margin-right:-1px;margin-left:0;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.navbar-inverse .navbar-inner{background-color:#1b1b1b;background-image:-moz-linear-gradient(top,#222,#111);background-image:-webkit-gradient(linear,0 0,0 100%,from(#222),to(#111));background-image:-webkit-linear-gradient(top,#222,#111);background-image:-o-linear-gradient(top,#222,#111);background-image:linear-gradient(to bottom,#222,#111);background-repeat:repeat-x;border-color:#252525;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222',endColorstr='#ff111111',GradientType=0)}.navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#999;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-inverse .brand:hover,.navbar-inverse .nav>li>a:hover,.navbar-inverse .brand:focus,.navbar-inverse .nav>li>a:focus{color:#fff}.navbar-inverse .brand{color:#999}.navbar-inverse .navbar-text{color:#999}.navbar-inverse .nav>li>a:focus,.navbar-inverse .nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .nav .active>a,.navbar-inverse .nav .active>a:hover,.navbar-inverse .nav .active>a:focus{color:#fff;background-color:#111}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover,.navbar-inverse .navbar-link:focus{color:#fff}.navbar-inverse .divider-vertical{border-right-color:#222;border-left-color:#111}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle{color:#fff;background-color:#111}.navbar-inverse .nav li.dropdown>a:hover .caret,.navbar-inverse .nav li.dropdown>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#999;border-bottom-color:#999}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-search .search-query{color:#fff;background-color:#515151;border-color:#111;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.navbar-inverse .navbar-search .search-query:-moz-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:-ms-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:focus,.navbar-inverse .navbar-search .search-query.focused{padding:5px 15px;color:#333;text-shadow:0 1px 0 #fff;background-color:#fff;border:0;outline:0;-webkit-box-shadow:0 0 3px rgba(0,0,0,0.15);-moz-box-shadow:0 0 3px rgba(0,0,0,0.15);box-shadow:0 0 3px rgba(0,0,0,0.15)}.navbar-inverse .btn-navbar{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e0e0e;*background-color:#040404;background-image:-moz-linear-gradient(top,#151515,#040404);background-image:-webkit-gradient(linear,0 0,0 100%,from(#151515),to(#040404));background-image:-webkit-linear-gradient(top,#151515,#040404);background-image:-o-linear-gradient(top,#151515,#040404);background-image:linear-gradient(to bottom,#151515,#040404);background-repeat:repeat-x;border-color:#040404 #040404 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515',endColorstr='#ff040404',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.navbar-inverse .btn-navbar:hover,.navbar-inverse .btn-navbar:focus,.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active,.navbar-inverse .btn-navbar.disabled,.navbar-inverse .btn-navbar[disabled]{color:#fff;background-color:#040404;*background-color:#000}.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active{background-color:#000 \9}.breadcrumb{padding:8px 15px;margin:0 0 20px;list-style:none;background-color:#f5f5f5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.breadcrumb>li{display:inline-block;*display:inline;text-shadow:0 1px 0 #fff;*zoom:1}.breadcrumb>li>.divider{padding:0 5px;color:#ccc}.breadcrumb>.active{color:#999}.pagination{margin:20px 0}.pagination ul{display:inline-block;*display:inline;margin-bottom:0;margin-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*zoom:1;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.pagination ul>li{display:inline}.pagination ul>li>a,.pagination ul>li>span{float:left;padding:4px 12px;line-height:20px;text-decoration:none;background-color:#fff;border:1px solid #ddd;border-left-width:0}.pagination ul>li>a:hover,.pagination ul>li>a:focus,.pagination ul>.active>a,.pagination ul>.active>span{background-color:#f5f5f5}.pagination ul>.active>a,.pagination ul>.active>span{color:#999;cursor:default}.pagination ul>.disabled>span,.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover,.pagination ul>.disabled>a:focus{color:#999;cursor:default;background-color:transparent}.pagination ul>li:first-child>a,.pagination ul>li:first-child>span{border-left-width:1px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.pagination ul>li:last-child>a,.pagination ul>li:last-child>span{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.pagination-centered{text-align:center}.pagination-right{text-align:right}.pagination-large ul>li>a,.pagination-large ul>li>span{padding:11px 19px;font-size:17.5px}.pagination-large ul>li:first-child>a,.pagination-large ul>li:first-child>span{-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.pagination-large ul>li:last-child>a,.pagination-large ul>li:last-child>span{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.pagination-mini ul>li:first-child>a,.pagination-small ul>li:first-child>a,.pagination-mini ul>li:first-child>span,.pagination-small ul>li:first-child>span{-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-bottomleft:3px;-moz-border-radius-topleft:3px}.pagination-mini ul>li:last-child>a,.pagination-small ul>li:last-child>a,.pagination-mini ul>li:last-child>span,.pagination-small ul>li:last-child>span{-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;-moz-border-radius-topright:3px;-moz-border-radius-bottomright:3px}.pagination-small ul>li>a,.pagination-small ul>li>span{padding:2px 10px;font-size:11.9px}.pagination-mini ul>li>a,.pagination-mini ul>li>span{padding:0 6px;font-size:10.5px}.pager{margin:20px 0;text-align:center;list-style:none;*zoom:1}.pager:before,.pager:after{display:table;line-height:0;content:""}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#f5f5f5}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999;cursor:default;background-color:#fff}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop,.modal-backdrop.fade.in{opacity:.8;filter:alpha(opacity=80)}.modal{position:fixed;top:10%;left:50%;z-index:1050;width:560px;margin-left:-280px;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;outline:0;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}.modal.fade{top:-25%;-webkit-transition:opacity .3s linear,top .3s ease-out;-moz-transition:opacity .3s linear,top .3s ease-out;-o-transition:opacity .3s linear,top .3s ease-out;transition:opacity .3s linear,top .3s ease-out}.modal.fade.in{top:10%}.modal-header{padding:9px 15px;border-bottom:1px solid #eee}.modal-header .close{margin-top:2px}.modal-header h3{margin:0;line-height:30px}.modal-body{position:relative;max-height:400px;padding:15px;overflow-y:auto}.modal-form{margin-bottom:0}.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;*zoom:1;-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}.modal-footer:before,.modal-footer:after{display:table;line-height:0;content:""}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.tooltip{position:absolute;z-index:1030;display:block;font-size:11px;line-height:1.4;opacity:0;filter:alpha(opacity=0);visibility:visible}.tooltip.in{opacity:.8;filter:alpha(opacity=80)}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#000;border-width:5px 5px 0}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#000;border-width:5px 5px 5px 0}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#000;border-width:5px 0 5px 5px}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#000;border-width:0 5px 5px}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:normal;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.popover-title:empty{display:none}.popover-content{padding:9px 14px}.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow{border-width:11px}.popover .arrow:after{border-width:10px;content:""}.popover.top .arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);border-bottom-width:0}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-top-color:#fff;border-bottom-width:0}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,0.25);border-left-width:0}.popover.right .arrow:after{bottom:-10px;left:1px;border-right-color:#fff;border-left-width:0}.popover.bottom .arrow{top:-11px;left:50%;margin-left:-11px;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);border-top-width:0}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-bottom-color:#fff;border-top-width:0}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-left-color:#999;border-left-color:rgba(0,0,0,0.25);border-right-width:0}.popover.left .arrow:after{right:1px;bottom:-10px;border-left-color:#fff;border-right-width:0}.thumbnails{margin-left:-20px;list-style:none;*zoom:1}.thumbnails:before,.thumbnails:after{display:table;line-height:0;content:""}.thumbnails:after{clear:both}.row-fluid .thumbnails{margin-left:0}.thumbnails>li{float:left;margin-bottom:20px;margin-left:20px}.thumbnail{display:block;padding:4px;line-height:20px;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.055);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.055);box-shadow:0 1px 3px rgba(0,0,0,0.055);-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}a.thumbnail:hover,a.thumbnail:focus{border-color:#08c;-webkit-box-shadow:0 1px 4px rgba(0,105,214,0.25);-moz-box-shadow:0 1px 4px rgba(0,105,214,0.25);box-shadow:0 1px 4px rgba(0,105,214,0.25)}.thumbnail>img{display:block;max-width:100%;margin-right:auto;margin-left:auto}.thumbnail .caption{padding:9px;color:#555}.media,.media-body{overflow:hidden;*overflow:visible;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{margin-left:0;list-style:none}.label,.badge{display:inline-block;padding:2px 4px;font-size:11.844px;font-weight:bold;line-height:14px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);white-space:nowrap;vertical-align:baseline;background-color:#999}.label{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.badge{padding-right:9px;padding-left:9px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}.label:empty,.badge:empty{display:none}a.label:hover,a.label:focus,a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.label-important,.badge-important{background-color:#b94a48}.label-important[href],.badge-important[href]{background-color:#953b39}.label-warning,.badge-warning{background-color:#f89406}.label-warning[href],.badge-warning[href]{background-color:#c67605}.label-success,.badge-success{background-color:#468847}.label-success[href],.badge-success[href]{background-color:#356635}.label-info,.badge-info{background-color:#3a87ad}.label-info[href],.badge-info[href]{background-color:#2d6987}.label-inverse,.badge-inverse{background-color:#333}.label-inverse[href],.badge-inverse[href]{background-color:#1a1a1a}.btn .label,.btn .badge{position:relative;top:-1px}.btn-mini .label,.btn-mini .badge{top:0}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-ms-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f7f7f7;background-image:-moz-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f5f5f5),to(#f9f9f9));background-image:-webkit-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-o-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:linear-gradient(to bottom,#f5f5f5,#f9f9f9);background-repeat:repeat-x;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#fff9f9f9',GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress .bar{float:left;width:0;height:100%;font-size:12px;color:#fff;text-align:center;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top,#149bdf,#0480be);background-image:-webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be));background-image:-webkit-linear-gradient(top,#149bdf,#0480be);background-image:-o-linear-gradient(top,#149bdf,#0480be);background-image:linear-gradient(to bottom,#149bdf,#0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf',endColorstr='#ff0480be',GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width .6s ease;-moz-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress .bar+.bar{-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15)}.progress-striped .bar{background-color:#149bdf;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px}.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-danger .bar,.progress .bar-danger{background-color:#dd514c;background-image:-moz-linear-gradient(top,#ee5f5b,#c43c35);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#c43c35));background-image:-webkit-linear-gradient(top,#ee5f5b,#c43c35);background-image:-o-linear-gradient(top,#ee5f5b,#c43c35);background-image:linear-gradient(to bottom,#ee5f5b,#c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffc43c35',GradientType=0)}.progress-danger.progress-striped .bar,.progress-striped .bar-danger{background-color:#ee5f5b;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-success .bar,.progress .bar-success{background-color:#5eb95e;background-image:-moz-linear-gradient(top,#62c462,#57a957);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#57a957));background-image:-webkit-linear-gradient(top,#62c462,#57a957);background-image:-o-linear-gradient(top,#62c462,#57a957);background-image:linear-gradient(to bottom,#62c462,#57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff57a957',GradientType=0)}.progress-success.progress-striped .bar,.progress-striped .bar-success{background-color:#62c462;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-info .bar,.progress .bar-info{background-color:#4bb1cf;background-image:-moz-linear-gradient(top,#5bc0de,#339bb9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#339bb9));background-image:-webkit-linear-gradient(top,#5bc0de,#339bb9);background-image:-o-linear-gradient(top,#5bc0de,#339bb9);background-image:linear-gradient(to bottom,#5bc0de,#339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff339bb9',GradientType=0)}.progress-info.progress-striped .bar,.progress-striped .bar-info{background-color:#5bc0de;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-warning .bar,.progress .bar-warning{background-color:#faa732;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=0)}.progress-warning.progress-striped .bar,.progress-striped .bar-warning{background-color:#fbb450;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.accordion{margin-bottom:20px}.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.accordion-heading{border-bottom:0}.accordion-heading .accordion-toggle{display:block;padding:8px 15px}.accordion-toggle{cursor:pointer}.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5}.carousel{position:relative;margin-bottom:20px;line-height:1}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-moz-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#fff;text-align:center;background:#222;border:3px solid #fff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:.5;filter:alpha(opacity=50)}.carousel-control.right{right:15px;left:auto}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-indicators{position:absolute;top:15px;right:15px;z-index:5;margin:0;list-style:none}.carousel-indicators li{display:block;float:left;width:10px;height:10px;margin-left:5px;text-indent:-999px;background-color:#ccc;background-color:rgba(255,255,255,0.25);border-radius:5px}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:0;bottom:0;left:0;padding:15px;background:#333;background:rgba(0,0,0,0.75)}.carousel-caption h4,.carousel-caption p{line-height:20px;color:#fff}.carousel-caption h4{margin:0 0 5px}.carousel-caption p{margin-bottom:0}.hero-unit{padding:60px;margin-bottom:30px;font-size:18px;font-weight:200;line-height:30px;color:inherit;background-color:#eee;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;letter-spacing:-1px;color:inherit}.hero-unit li{line-height:30px}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed}/*!
+ * Bootstrap Responsive v2.3.2
+ *
+ * Copyright 2013 Twitter, Inc
+ * Licensed under the Apache License v2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Designed and built with all the love in the world by @mdo and @fat.
+ */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}@-ms-viewport{width:device-width}.hidden{display:none;visibility:hidden}.visible-phone{display:none!important}.visible-tablet{display:none!important}.hidden-desktop{display:none!important}.visible-desktop{display:inherit!important}@media(min-width:768px) and (max-width:979px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-tablet{display:inherit!important}.hidden-tablet{display:none!important}}@media(max-width:767px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-phone{display:inherit!important}.hidden-phone{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:inherit!important}.hidden-print{display:none!important}}@media(min-width:1200px){.row{margin-left:-30px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:30px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:1170px}.span12{width:1170px}.span11{width:1070px}.span10{width:970px}.span9{width:870px}.span8{width:770px}.span7{width:670px}.span6{width:570px}.span5{width:470px}.span4{width:370px}.span3{width:270px}.span2{width:170px}.span1{width:70px}.offset12{margin-left:1230px}.offset11{margin-left:1130px}.offset10{margin-left:1030px}.offset9{margin-left:930px}.offset8{margin-left:830px}.offset7{margin-left:730px}.offset6{margin-left:630px}.offset5{margin-left:530px}.offset4{margin-left:430px}.offset3{margin-left:330px}.offset2{margin-left:230px}.offset1{margin-left:130px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.564102564102564%;*margin-left:2.5109110747408616%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.564102564102564%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.45299145299145%;*width:91.39979996362975%}.row-fluid .span10{width:82.90598290598291%;*width:82.8527914166212%}.row-fluid .span9{width:74.35897435897436%;*width:74.30578286961266%}.row-fluid .span8{width:65.81196581196582%;*width:65.75877432260411%}.row-fluid .span7{width:57.26495726495726%;*width:57.21176577559556%}.row-fluid .span6{width:48.717948717948715%;*width:48.664757228587014%}.row-fluid .span5{width:40.17094017094017%;*width:40.11774868157847%}.row-fluid .span4{width:31.623931623931625%;*width:31.570740134569924%}.row-fluid .span3{width:23.076923076923077%;*width:23.023731587561375%}.row-fluid .span2{width:14.52991452991453%;*width:14.476723040552828%}.row-fluid .span1{width:5.982905982905983%;*width:5.929714493544281%}.row-fluid .offset12{margin-left:105.12820512820512%;*margin-left:105.02182214948171%}.row-fluid .offset12:first-child{margin-left:102.56410256410257%;*margin-left:102.45771958537915%}.row-fluid .offset11{margin-left:96.58119658119658%;*margin-left:96.47481360247316%}.row-fluid .offset11:first-child{margin-left:94.01709401709402%;*margin-left:93.91071103837061%}.row-fluid .offset10{margin-left:88.03418803418803%;*margin-left:87.92780505546462%}.row-fluid .offset10:first-child{margin-left:85.47008547008548%;*margin-left:85.36370249136206%}.row-fluid .offset9{margin-left:79.48717948717949%;*margin-left:79.38079650845607%}.row-fluid .offset9:first-child{margin-left:76.92307692307693%;*margin-left:76.81669394435352%}.row-fluid .offset8{margin-left:70.94017094017094%;*margin-left:70.83378796144753%}.row-fluid .offset8:first-child{margin-left:68.37606837606839%;*margin-left:68.26968539734497%}.row-fluid .offset7{margin-left:62.393162393162385%;*margin-left:62.28677941443899%}.row-fluid .offset7:first-child{margin-left:59.82905982905982%;*margin-left:59.72267685033642%}.row-fluid .offset6{margin-left:53.84615384615384%;*margin-left:53.739770867430444%}.row-fluid .offset6:first-child{margin-left:51.28205128205128%;*margin-left:51.175668303327875%}.row-fluid .offset5{margin-left:45.299145299145295%;*margin-left:45.1927623204219%}.row-fluid .offset5:first-child{margin-left:42.73504273504273%;*margin-left:42.62865975631933%}.row-fluid .offset4{margin-left:36.75213675213675%;*margin-left:36.645753773413354%}.row-fluid .offset4:first-child{margin-left:34.18803418803419%;*margin-left:34.081651209310785%}.row-fluid .offset3{margin-left:28.205128205128204%;*margin-left:28.0987452264048%}.row-fluid .offset3:first-child{margin-left:25.641025641025642%;*margin-left:25.53464266230224%}.row-fluid .offset2{margin-left:19.65811965811966%;*margin-left:19.551736679396257%}.row-fluid .offset2:first-child{margin-left:17.094017094017094%;*margin-left:16.98763411529369%}.row-fluid .offset1{margin-left:11.11111111111111%;*margin-left:11.004728132387708%}.row-fluid .offset1:first-child{margin-left:8.547008547008547%;*margin-left:8.440625568285142%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:30px}input.span12,textarea.span12,.uneditable-input.span12{width:1156px}input.span11,textarea.span11,.uneditable-input.span11{width:1056px}input.span10,textarea.span10,.uneditable-input.span10{width:956px}input.span9,textarea.span9,.uneditable-input.span9{width:856px}input.span8,textarea.span8,.uneditable-input.span8{width:756px}input.span7,textarea.span7,.uneditable-input.span7{width:656px}input.span6,textarea.span6,.uneditable-input.span6{width:556px}input.span5,textarea.span5,.uneditable-input.span5{width:456px}input.span4,textarea.span4,.uneditable-input.span4{width:356px}input.span3,textarea.span3,.uneditable-input.span3{width:256px}input.span2,textarea.span2,.uneditable-input.span2{width:156px}input.span1,textarea.span1,.uneditable-input.span1{width:56px}.thumbnails{margin-left:-30px}.thumbnails>li{margin-left:30px}.row-fluid .thumbnails{margin-left:0}}@media(min-width:768px) and (max-width:979px){.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:724px}.span12{width:724px}.span11{width:662px}.span10{width:600px}.span9{width:538px}.span8{width:476px}.span7{width:414px}.span6{width:352px}.span5{width:290px}.span4{width:228px}.span3{width:166px}.span2{width:104px}.span1{width:42px}.offset12{margin-left:764px}.offset11{margin-left:702px}.offset10{margin-left:640px}.offset9{margin-left:578px}.offset8{margin-left:516px}.offset7{margin-left:454px}.offset6{margin-left:392px}.offset5{margin-left:330px}.offset4{margin-left:268px}.offset3{margin-left:206px}.offset2{margin-left:144px}.offset1{margin-left:82px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.7624309392265194%;*margin-left:2.709239449864817%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.7624309392265194%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.43646408839778%;*width:91.38327259903608%}.row-fluid .span10{width:82.87292817679558%;*width:82.81973668743387%}.row-fluid .span9{width:74.30939226519337%;*width:74.25620077583166%}.row-fluid .span8{width:65.74585635359117%;*width:65.69266486422946%}.row-fluid .span7{width:57.18232044198895%;*width:57.12912895262725%}.row-fluid .span6{width:48.61878453038674%;*width:48.56559304102504%}.row-fluid .span5{width:40.05524861878453%;*width:40.00205712942283%}.row-fluid .span4{width:31.491712707182323%;*width:31.43852121782062%}.row-fluid .span3{width:22.92817679558011%;*width:22.87498530621841%}.row-fluid .span2{width:14.3646408839779%;*width:14.311449394616199%}.row-fluid .span1{width:5.801104972375691%;*width:5.747913483013988%}.row-fluid .offset12{margin-left:105.52486187845304%;*margin-left:105.41847889972962%}.row-fluid .offset12:first-child{margin-left:102.76243093922652%;*margin-left:102.6560479605031%}.row-fluid .offset11{margin-left:96.96132596685082%;*margin-left:96.8549429881274%}.row-fluid .offset11:first-child{margin-left:94.1988950276243%;*margin-left:94.09251204890089%}.row-fluid .offset10{margin-left:88.39779005524862%;*margin-left:88.2914070765252%}.row-fluid .offset10:first-child{margin-left:85.6353591160221%;*margin-left:85.52897613729868%}.row-fluid .offset9{margin-left:79.8342541436464%;*margin-left:79.72787116492299%}.row-fluid .offset9:first-child{margin-left:77.07182320441989%;*margin-left:76.96544022569647%}.row-fluid .offset8{margin-left:71.2707182320442%;*margin-left:71.16433525332079%}.row-fluid .offset8:first-child{margin-left:68.50828729281768%;*margin-left:68.40190431409427%}.row-fluid .offset7{margin-left:62.70718232044199%;*margin-left:62.600799341718584%}.row-fluid .offset7:first-child{margin-left:59.94475138121547%;*margin-left:59.838368402492065%}.row-fluid .offset6{margin-left:54.14364640883978%;*margin-left:54.037263430116376%}.row-fluid .offset6:first-child{margin-left:51.38121546961326%;*margin-left:51.27483249088986%}.row-fluid .offset5{margin-left:45.58011049723757%;*margin-left:45.47372751851417%}.row-fluid .offset5:first-child{margin-left:42.81767955801105%;*margin-left:42.71129657928765%}.row-fluid .offset4{margin-left:37.01657458563536%;*margin-left:36.91019160691196%}.row-fluid .offset4:first-child{margin-left:34.25414364640884%;*margin-left:34.14776066768544%}.row-fluid .offset3{margin-left:28.45303867403315%;*margin-left:28.346655695309746%}.row-fluid .offset3:first-child{margin-left:25.69060773480663%;*margin-left:25.584224756083227%}.row-fluid .offset2{margin-left:19.88950276243094%;*margin-left:19.783119783707537%}.row-fluid .offset2:first-child{margin-left:17.12707182320442%;*margin-left:17.02068884448102%}.row-fluid .offset1{margin-left:11.32596685082873%;*margin-left:11.219583872105325%}.row-fluid .offset1:first-child{margin-left:8.56353591160221%;*margin-left:8.457152932878806%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:710px}input.span11,textarea.span11,.uneditable-input.span11{width:648px}input.span10,textarea.span10,.uneditable-input.span10{width:586px}input.span9,textarea.span9,.uneditable-input.span9{width:524px}input.span8,textarea.span8,.uneditable-input.span8{width:462px}input.span7,textarea.span7,.uneditable-input.span7{width:400px}input.span6,textarea.span6,.uneditable-input.span6{width:338px}input.span5,textarea.span5,.uneditable-input.span5{width:276px}input.span4,textarea.span4,.uneditable-input.span4{width:214px}input.span3,textarea.span3,.uneditable-input.span3{width:152px}input.span2,textarea.span2,.uneditable-input.span2{width:90px}input.span1,textarea.span1,.uneditable-input.span1{width:28px}}@media(max-width:767px){body{padding-right:20px;padding-left:20px}.navbar-fixed-top,.navbar-fixed-bottom,.navbar-static-top{margin-right:-20px;margin-left:-20px}.container-fluid{padding:0}.dl-horizontal dt{float:none;width:auto;clear:none;text-align:left}.dl-horizontal dd{margin-left:0}.container{width:auto}.row-fluid{width:100%}.row,.thumbnails{margin-left:0}.thumbnails>li{float:none;margin-left:0}[class*="span"],.uneditable-input[class*="span"],.row-fluid [class*="span"]{display:block;float:none;width:100%;margin-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.span12,.row-fluid .span12{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="offset"]:first-child{margin-left:0}.input-large,.input-xlarge,.input-xxlarge,input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.input-prepend input,.input-append input,.input-prepend input[class*="span"],.input-append input[class*="span"]{display:inline-block;width:auto}.controls-row [class*="span"]+[class*="span"]{margin-left:0}.modal{position:fixed;top:20px;right:20px;left:20px;width:auto;margin:0}.modal.fade{top:-100px}.modal.fade.in{top:20px}}@media(max-width:480px){.nav-collapse{-webkit-transform:translate3d(0,0,0)}.page-header h1 small{display:block;line-height:20px}input[type="checkbox"],input[type="radio"]{border:1px solid #ccc}.form-horizontal .control-label{float:none;width:auto;padding-top:0;text-align:left}.form-horizontal .controls{margin-left:0}.form-horizontal .control-list{padding-top:0}.form-horizontal .form-actions{padding-right:10px;padding-left:10px}.media .pull-left,.media .pull-right{display:block;float:none;margin-bottom:10px}.media-object{margin-right:0;margin-left:0}.modal{top:10px;right:10px;left:10px}.modal-header .close{padding:10px;margin:-10px}.carousel-caption{position:static}}@media(max-width:979px){body{padding-top:0}.navbar-fixed-top,.navbar-fixed-bottom{position:static}.navbar-fixed-top{margin-bottom:20px}.navbar-fixed-bottom{margin-top:20px}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding:5px}.navbar .container{width:auto;padding:0}.navbar .brand{padding-right:10px;padding-left:10px;margin:0 0 0 -5px}.nav-collapse{clear:both}.nav-collapse .nav{float:none;margin:0 0 10px}.nav-collapse .nav>li{float:none}.nav-collapse .nav>li>a{margin-bottom:2px}.nav-collapse .nav>.divider-vertical{display:none}.nav-collapse .nav .nav-header{color:#777;text-shadow:none}.nav-collapse .nav>li>a,.nav-collapse .dropdown-menu a{padding:9px 15px;font-weight:bold;color:#777;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.nav-collapse .btn{padding:4px 10px 4px;font-weight:normal;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.nav-collapse .dropdown-menu li+li a{margin-bottom:2px}.nav-collapse .nav>li>a:hover,.nav-collapse .nav>li>a:focus,.nav-collapse .dropdown-menu a:hover,.nav-collapse .dropdown-menu a:focus{background-color:#f2f2f2}.navbar-inverse .nav-collapse .nav>li>a,.navbar-inverse .nav-collapse .dropdown-menu a{color:#999}.navbar-inverse .nav-collapse .nav>li>a:hover,.navbar-inverse .nav-collapse .nav>li>a:focus,.navbar-inverse .nav-collapse .dropdown-menu a:hover,.navbar-inverse .nav-collapse .dropdown-menu a:focus{background-color:#111}.nav-collapse.in .btn-group{padding:0;margin-top:5px}.nav-collapse .dropdown-menu{position:static;top:auto;left:auto;display:none;float:none;max-width:none;padding:0;margin:0 15px;background-color:transparent;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.nav-collapse .open>.dropdown-menu{display:block}.nav-collapse .dropdown-menu:before,.nav-collapse .dropdown-menu:after{display:none}.nav-collapse .dropdown-menu .divider{display:none}.nav-collapse .nav>li>.dropdown-menu:before,.nav-collapse .nav>li>.dropdown-menu:after{display:none}.nav-collapse .navbar-form,.nav-collapse .navbar-search{float:none;padding:10px 15px;margin:10px 0;border-top:1px solid #f2f2f2;border-bottom:1px solid #f2f2f2;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1)}.navbar-inverse .nav-collapse .navbar-form,.navbar-inverse .nav-collapse .navbar-search{border-top-color:#111;border-bottom-color:#111}.navbar .nav-collapse .nav.pull-right{float:none;margin-left:0}.nav-collapse,.nav-collapse.collapse{height:0;overflow:hidden}.navbar .btn-navbar{display:block}.navbar-static .navbar-inner{padding-right:10px;padding-left:10px}}@media(min-width:980px){.nav-collapse.collapse{height:auto!important;overflow:visible!important}}.clear{clear:both;visibility:hidden}.clear hr{display:none}.section p,.section p,.section dt,.section dt{margin-right:7px;margin-left:7px}#ohloh{margin-bottom:10px}#poweredBy{text-align:center}a.externalLink{padding-right:18px}a.newWindow{background:url('../images/window-new.png') right center no-repeat;padding-right:18px}a.externalLink[href^=http]{background:url('../images/internet-web-browser.png') right center no-repeat;padding-right:18px}a.externalLink[href$=".asc"]{background:url('../images/accessories-text-editor.png') right center no-repeat;padding-right:18px}a.externalLink[href$=".jpg"],a.externalLink[href$=".jpeg"],a.externalLink[href$=".gif"],a.externalLink[href$=".png"]{background:url('../images/image-x-generic.png') right center no-repeat;padding-right:18px}a.externalLink[href$=".tar.gz"],a.externalLink[href$=".zip"]{background:url('../images/package-x-generic.png') right center no-repeat;padding-right:18px}a.externalLink[href$=".md5"],a.externalLink[href$=".sha1"]{background:url('../images/document-properties.png') right center no-repeat;padding-right:18px}a.externalLink[href^=https]{background:url('../images/application-certificate.png') right center no-repeat;padding-right:18px}a.externalLink[href^=file]{background:url('../images/drive-harddisk.png') right center no-repeat;padding-right:18px}a.externalLink[href^=ftp]{background:url('../images/network-server.png') right center no-repeat;padding-right:18px}a.externalLink[href^=mailto]{background:url('../images/contact-new.png') right center no-repeat;padding-right:18px}li.none{list-style:none}.search-query{background-image:url(https://cse.google.com/cse/images/google_custom_search_watermark.gif);background-attachment:initial;background-origin:initial;background-clip:initial;background-color:#fff;background-position:0 50%;background-repeat:no-repeat no-repeat;width:95%}body.topBarEnabled{padding-top:60px}body.topBarDisabled{padding-top:20px}.builtBy{display:block}img.builtBy{margin:10px auto}#search-form{margin-left:9px;margin-right:9px}.hero-unit h2{font-size:60px}tt{padding:0 3px 2px;font-family:Monaco,Andale Mono,Courier New,monospace;font-size:.9em;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;background-color:#fee9cc;color:rgba(0,0,0,0.75);padding:1px 3px}li{color:#404040}table.zebra-striped{background-color:#FFF}.footer{background-color:#EEE}.sidebar-nav{padding-left:0;padding-right:0}.sidebar-nav .icon-chevron-right,.sidebar-nav .icon-chevron-down{margin-top:2px;margin-right:-6px;float:right;opacity:.25}li.pull-right{margin-left:3px;margin-right:3px}.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0;padding-left:15px}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee}
\ No newline at end of file
diff --git a/docs/css/print.css b/docs/css/print.css
index d4df77f..cd19a8c 100644
--- a/docs/css/print.css
+++ b/docs/css/print.css
@@ -17,7 +17,5 @@
  * under the License.
  */
 
-/* $Id$ */
-
 #banner, #footer, #leftcol, #breadcrumbs, .docs #toc, .docs .courtesylinks, #leftColumn, #navColumn {display: none !important;}
 #bodyColumn, body.docs div.docs {margin: 0 !important;border: none !important}
diff --git a/docs/dependency-info.html b/docs/dependency-info.html
index e2d2741..3ca9d77 100644
--- a/docs/dependency-info.html
+++ b/docs/dependency-info.html
@@ -1,107 +1,99 @@
 <!DOCTYPE html>
 <!--
- | Generated by Apache Maven Doxia Site Renderer 1.8.1 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.0.0:dependency-info at 2019-05-17
- | Rendered using Apache Maven Fluido Skin 1.7
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0-M3 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.4.1:dependency-info at $dateFormat.format( $currentDate )
+ | Rendered using Apache Maven Fluido Skin 1.8
 -->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
   <head>
     <meta charset="UTF-8" />
-    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20190517" />
-    <meta http-equiv="Content-Language" content="en" />
+    <meta name="viewport" content="width=device-width, initial-scale=1" />
+    <meta name="generator" content="Apache Maven Doxia Site Renderer 2.0.0-M3" />
     <title>ZXing &#x2013; Dependency Information</title>
-    <link rel="stylesheet" href="./css/apache-maven-fluido-1.7.min.css" />
+    <link rel="stylesheet" href="./css/apache-maven-fluido-1.8.min.css" />
     <link rel="stylesheet" href="./css/site.css" />
     <link rel="stylesheet" href="./css/print.css" media="print" />
-    <script type="text/javascript" src="./js/apache-maven-fluido-1.7.min.js"></script>
+    <script src="./js/apache-maven-fluido-1.8.min.js"></script>
   </head>
   <body class="topBarDisabled">
     <div class="container-fluid">
-      <div id="banner">
-        <div class="pull-left"><div id="bannerLeft"><h2>ZXing</h2>
-</div>
-</div>
-        <div class="pull-right"></div>
-        <div class="clear"><hr/></div>
-      </div>
+      <header>
+        <div id="banner">
+          <div class="pull-left">            <h1>ZXing
+</h1></div>
+          <div class="pull-right"></div>
+          <div class="clear"><hr/></div>
+        </div>
 
-      <div id="breadcrumbs">
-        <ul class="breadcrumb">
-        <li id="publishDate">Last Published: 2019-05-17<span class="divider">|</span>
+        <div id="breadcrumbs">
+          <ul class="breadcrumb">
+        <li id="publishDate">$i18n.getString( "site-renderer", $locale, "template.lastpublished" ): $dateValue<span class="divider">|</span>
 </li>
-          <li id="projectVersion">Version: 3.4.0</li>
-        </ul>
-      </div>
+          <li id="projectVersion">$i18n.getString( "site-renderer", $locale, "template.version" ): 3.5.1</li>
+          </ul>
+        </div>
+      </header>
       <div class="row-fluid">
-        <div id="leftColumn" class="span2">
-          <div class="well sidebar-nav">
-    <ul class="nav nav-list">
-      <li class="nav-header">Project Documentation</li>
+        <header id="leftColumn" class="span2">
+          <nav class="well sidebar-nav">
+  <ul class="nav nav-list">
+   <li class="nav-header">Project Documentation</li>
     <li><a href="project-info.html" title="Project Information"><span class="icon-chevron-down"></span>Project Information</a>
-    <ul class="nav nav-list">
-    <li class="active"><a href="#"><span class="none"></span>Dependency Information</a></li>
-    <li><a href="dependency-management.html" title="Dependency Management"><span class="none"></span>Dependency Management</a></li>
-    <li><a href="index.html" title="About"><span class="none"></span>About</a></li>
-    <li><a href="issue-management.html" title="Issue Management"><span class="none"></span>Issue Management</a></li>
-    <li><a href="licenses.html" title="Licenses"><span class="none"></span>Licenses</a></li>
-    <li><a href="mailing-lists.html" title="Mailing Lists"><span class="none"></span>Mailing Lists</a></li>
-    <li><a href="scm.html" title="Source Code Management"><span class="none"></span>Source Code Management</a></li>
-    </ul>
-</li>
+     <ul class="nav nav-list">
+      <li class="active"><a href="#"><span class="none"></span>Dependency Information</a></li>
+      <li><a href="dependency-management.html" title="Dependency Management"><span class="none"></span>Dependency Management</a></li>
+      <li><a href="index.html" title="About"><span class="none"></span>About</a></li>
+      <li><a href="issue-management.html" title="Issue Management"><span class="none"></span>Issue Management</a></li>
+      <li><a href="licenses.html" title="Licenses"><span class="none"></span>Licenses</a></li>
+      <li><a href="mailing-lists.html" title="Mailing Lists"><span class="none"></span>Mailing Lists</a></li>
+      <li><a href="scm.html" title="Source Code Management"><span class="none"></span>Source Code Management</a></li>
+     </ul></li>
     <li><a href="project-reports.html" title="Project Reports"><span class="icon-chevron-right"></span>Project Reports</a></li>
-</ul>
-          <hr />
-          <div id="poweredBy">
-            <div class="clear"></div>
-            <div class="clear"></div>
-            <div class="clear"></div>
-            <div class="clear"></div>
-<a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
+  </ul>
+          </nav>
+          <div class="well sidebar-nav">
+            <hr />
+            <div id="poweredBy">
+              <div class="clear"></div>
+              <div class="clear"></div>
+              <div class="clear"></div>
+<a href="http://maven.apache.org/" title="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" class="poweredBy"><img class="builtBy" alt="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" src="./images/logos/maven-feather.png" /></a>
             </div>
           </div>
-        </div>
-        <div id="bodyColumn"  class="span10" >
-<div class="section">
-<h2><a name="Dependency_Information"></a>Dependency Information</h2><a name="Dependency_Information"></a>
-<div class="section">
-<h3><a name="Apache_Maven"></a>Apache Maven</h3><a name="Apache_Maven"></a>
+        </header>
+        <main id="bodyColumn"  class="span10" >
+<section>
+<h1><a name="Dependency_Information"></a>Dependency Information</h1><a name="Dependency_Information"></a><section>
+<h2><a name="Apache_Maven"></a>Apache Maven</h2><a name="Apache_Maven"></a>
 <div class="source"><pre class="prettyprint">&lt;dependency&gt;
   &lt;groupId&gt;com.google.zxing&lt;/groupId&gt;
   &lt;artifactId&gt;zxing-parent&lt;/artifactId&gt;
-  &lt;version&gt;3.4.0&lt;/version&gt;
+  &lt;version&gt;3.5.1&lt;/version&gt;
   &lt;type&gt;pom&lt;/type&gt;
-&lt;/dependency&gt;</pre></div></div>
-<div class="section">
-<h3><a name="Apache_Buildr"></a>Apache Buildr</h3><a name="Apache_Buildr"></a>
-<div class="source"><pre class="prettyprint">'com.google.zxing:zxing-parent:pom:3.4.0'</pre></div></div>
-<div class="section">
-<h3><a name="Apache_Ivy"></a>Apache Ivy</h3><a name="Apache_Ivy"></a>
-<div class="source"><pre class="prettyprint">&lt;dependency org=&quot;com.google.zxing&quot; name=&quot;zxing-parent&quot; rev=&quot;3.4.0&quot;&gt;
+&lt;/dependency&gt;</pre></div></section><section>
+<h2><a name="Apache_Buildr"></a>Apache Buildr</h2><a name="Apache_Buildr"></a>
+<div class="source"><pre class="prettyprint">'com.google.zxing:zxing-parent:pom:3.5.1'</pre></div></section><section>
+<h2><a name="Apache_Ivy"></a>Apache Ivy</h2><a name="Apache_Ivy"></a>
+<div class="source"><pre class="prettyprint">&lt;dependency org=&quot;com.google.zxing&quot; name=&quot;zxing-parent&quot; rev=&quot;3.5.1&quot;&gt;
   &lt;artifact name=&quot;zxing-parent&quot; type=&quot;pom&quot; /&gt;
-&lt;/dependency&gt;</pre></div></div>
-<div class="section">
-<h3><a name="Groovy_Grape"></a>Groovy Grape</h3><a name="Groovy_Grape"></a>
+&lt;/dependency&gt;</pre></div></section><section>
+<h2><a name="Groovy_Grape"></a>Groovy Grape</h2><a name="Groovy_Grape"></a>
 <div class="source"><pre class="prettyprint">@Grapes(
-@Grab(group='com.google.zxing', module='zxing-parent', version='3.4.0')
-)</pre></div></div>
-<div class="section">
-<h3><a name="Gradle.2FGrails"></a>Gradle/Grails</h3><a name="Gradle.2FGrails"></a>
-<div class="source"><pre class="prettyprint">compile 'com.google.zxing:zxing-parent:3.4.0'</pre></div></div>
-<div class="section">
-<h3><a name="Scala_SBT"></a>Scala SBT</h3><a name="Scala_SBT"></a>
-<div class="source"><pre class="prettyprint">libraryDependencies += &quot;com.google.zxing&quot; % &quot;zxing-parent&quot; % &quot;3.4.0&quot;</pre></div></div>
-<div class="section">
-<h3><a name="Leiningen"></a>Leiningen</h3><a name="Leiningen"></a>
-<div class="source"><pre class="prettyprint">[com.google.zxing/zxing-parent &quot;3.4.0&quot;]</pre></div></div></div>
-        </div>
+@Grab(group='com.google.zxing', module='zxing-parent', version='3.5.1')
+)</pre></div></section><section>
+<h2><a name="Gradle.2FGrails"></a>Gradle/Grails</h2><a name="Gradle.2FGrails"></a>
+<div class="source"><pre class="prettyprint">compile 'com.google.zxing:zxing-parent:3.5.1'</pre></div></section><section>
+<h2><a name="Scala_SBT"></a>Scala SBT</h2><a name="Scala_SBT"></a>
+<div class="source"><pre class="prettyprint">libraryDependencies += &quot;com.google.zxing&quot; % &quot;zxing-parent&quot; % &quot;3.5.1&quot;</pre></div></section><section>
+<h2><a name="Leiningen"></a>Leiningen</h2><a name="Leiningen"></a>
+<div class="source"><pre class="prettyprint">[com.google.zxing/zxing-parent &quot;3.5.1&quot;]</pre></div></section></section>
+        </main>
       </div>
     </div>
     <hr/>
     <footer>
       <div class="container-fluid">
         <div class="row-fluid">
-            <p>Copyright &copy;2007&#x2013;2019.
-All rights reserved.</p>
+            <p>Copyright &#169;      2007&#x2013;${currentYear}..</p>
         </div>
       </div>
     </footer>
diff --git a/docs/dependency-management.html b/docs/dependency-management.html
index be09cb9..575b2d8 100644
--- a/docs/dependency-management.html
+++ b/docs/dependency-management.html
@@ -1,70 +1,69 @@
 <!DOCTYPE html>
 <!--
- | Generated by Apache Maven Doxia Site Renderer 1.8.1 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.0.0:dependency-management at 2019-05-17
- | Rendered using Apache Maven Fluido Skin 1.7
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0-M3 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.4.1:dependency-management at $dateFormat.format( $currentDate )
+ | Rendered using Apache Maven Fluido Skin 1.8
 -->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
   <head>
     <meta charset="UTF-8" />
-    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20190517" />
-    <meta http-equiv="Content-Language" content="en" />
+    <meta name="viewport" content="width=device-width, initial-scale=1" />
+    <meta name="generator" content="Apache Maven Doxia Site Renderer 2.0.0-M3" />
     <title>ZXing &#x2013; Project Dependency Management</title>
-    <link rel="stylesheet" href="./css/apache-maven-fluido-1.7.min.css" />
+    <link rel="stylesheet" href="./css/apache-maven-fluido-1.8.min.css" />
     <link rel="stylesheet" href="./css/site.css" />
     <link rel="stylesheet" href="./css/print.css" media="print" />
-    <script type="text/javascript" src="./js/apache-maven-fluido-1.7.min.js"></script>
+    <script src="./js/apache-maven-fluido-1.8.min.js"></script>
   </head>
   <body class="topBarDisabled">
     <div class="container-fluid">
-      <div id="banner">
-        <div class="pull-left"><div id="bannerLeft"><h2>ZXing</h2>
-</div>
-</div>
-        <div class="pull-right"></div>
-        <div class="clear"><hr/></div>
-      </div>
+      <header>
+        <div id="banner">
+          <div class="pull-left">            <h1>ZXing
+</h1></div>
+          <div class="pull-right"></div>
+          <div class="clear"><hr/></div>
+        </div>
 
-      <div id="breadcrumbs">
-        <ul class="breadcrumb">
-        <li id="publishDate">Last Published: 2019-05-17<span class="divider">|</span>
+        <div id="breadcrumbs">
+          <ul class="breadcrumb">
+        <li id="publishDate">$i18n.getString( "site-renderer", $locale, "template.lastpublished" ): $dateValue<span class="divider">|</span>
 </li>
-          <li id="projectVersion">Version: 3.4.0</li>
-        </ul>
-      </div>
+          <li id="projectVersion">$i18n.getString( "site-renderer", $locale, "template.version" ): 3.5.1</li>
+          </ul>
+        </div>
+      </header>
       <div class="row-fluid">
-        <div id="leftColumn" class="span2">
-          <div class="well sidebar-nav">
-    <ul class="nav nav-list">
-      <li class="nav-header">Project Documentation</li>
+        <header id="leftColumn" class="span2">
+          <nav class="well sidebar-nav">
+  <ul class="nav nav-list">
+   <li class="nav-header">Project Documentation</li>
     <li><a href="project-info.html" title="Project Information"><span class="icon-chevron-down"></span>Project Information</a>
-    <ul class="nav nav-list">
-    <li><a href="dependency-info.html" title="Dependency Information"><span class="none"></span>Dependency Information</a></li>
-    <li class="active"><a href="#"><span class="none"></span>Dependency Management</a></li>
-    <li><a href="index.html" title="About"><span class="none"></span>About</a></li>
-    <li><a href="issue-management.html" title="Issue Management"><span class="none"></span>Issue Management</a></li>
-    <li><a href="licenses.html" title="Licenses"><span class="none"></span>Licenses</a></li>
-    <li><a href="mailing-lists.html" title="Mailing Lists"><span class="none"></span>Mailing Lists</a></li>
-    <li><a href="scm.html" title="Source Code Management"><span class="none"></span>Source Code Management</a></li>
-    </ul>
-</li>
+     <ul class="nav nav-list">
+      <li><a href="dependency-info.html" title="Dependency Information"><span class="none"></span>Dependency Information</a></li>
+      <li class="active"><a href="#"><span class="none"></span>Dependency Management</a></li>
+      <li><a href="index.html" title="About"><span class="none"></span>About</a></li>
+      <li><a href="issue-management.html" title="Issue Management"><span class="none"></span>Issue Management</a></li>
+      <li><a href="licenses.html" title="Licenses"><span class="none"></span>Licenses</a></li>
+      <li><a href="mailing-lists.html" title="Mailing Lists"><span class="none"></span>Mailing Lists</a></li>
+      <li><a href="scm.html" title="Source Code Management"><span class="none"></span>Source Code Management</a></li>
+     </ul></li>
     <li><a href="project-reports.html" title="Project Reports"><span class="icon-chevron-right"></span>Project Reports</a></li>
-</ul>
-          <hr />
-          <div id="poweredBy">
-            <div class="clear"></div>
-            <div class="clear"></div>
-            <div class="clear"></div>
-            <div class="clear"></div>
-<a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
+  </ul>
+          </nav>
+          <div class="well sidebar-nav">
+            <hr />
+            <div id="poweredBy">
+              <div class="clear"></div>
+              <div class="clear"></div>
+              <div class="clear"></div>
+<a href="http://maven.apache.org/" title="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" class="poweredBy"><img class="builtBy" alt="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" src="./images/logos/maven-feather.png" /></a>
             </div>
           </div>
-        </div>
-        <div id="bodyColumn"  class="span10" >
-<div class="section">
-<h2><a name="Project_Dependency_Management"></a>Project Dependency Management</h2><a name="Project_Dependency_Management"></a>
-<div class="section">
-<h3><a name="compile"></a>compile</h3><a name="compile"></a>
+        </header>
+        <main id="bodyColumn"  class="span10" >
+<section>
+<h1><a name="Project_Dependency_Management"></a>Project Dependency Management</h1><a name="Project_Dependency_Management"></a><section>
+<h2><a name="compile"></a>compile</h2><a name="compile"></a>
 <p>The following is a list of compile dependencies in the DependencyManagement of this project. These dependencies can be included in the submodules to compile and run the submodule:</p>
 <table border="0" class="table table-striped">
 <tr class="a">
@@ -74,59 +73,30 @@
 <th>Type</th>
 <th>License</th></tr>
 <tr class="b">
-<td>com.google.zxing</td>
+<td align="left">com.google.zxing</td>
 <td>android-core</td>
-<td>3.4.0</td>
+<td>3.5.1</td>
 <td>jar</td>
 <td>-</td></tr>
 <tr class="a">
-<td>com.google.zxing</td>
+<td align="left">com.google.zxing</td>
 <td>android-integration</td>
-<td>3.4.0</td>
+<td>3.5.1</td>
 <td>jar</td>
 <td>-</td></tr>
 <tr class="b">
-<td>com.google.zxing</td>
+<td align="left">com.google.zxing</td>
 <td><a class="externalLink" href="https://github.com/zxing/zxing/core">core</a></td>
-<td>3.4.0</td>
+<td>3.5.1</td>
 <td>jar</td>
 <td><a class="externalLink" href="https://www.apache.org/licenses/LICENSE-2.0.txt">The Apache Software License, Version 2.0</a></td></tr>
 <tr class="a">
-<td>com.google.zxing</td>
+<td align="left">com.google.zxing</td>
 <td><a class="externalLink" href="https://github.com/zxing/zxing/javase">javase</a></td>
-<td>3.4.0</td>
-<td>jar</td>
-<td><a class="externalLink" href="https://www.apache.org/licenses/LICENSE-2.0.txt">The Apache Software License, Version 2.0</a></td></tr>
-<tr class="b">
-<td>org.slf4j</td>
-<td><a class="externalLink" href="http://www.slf4j.org">slf4j-api</a></td>
-<td>1.8.0-beta4</td>
+<td>3.5.1</td>
 <td>jar</td>
-<td><a class="externalLink" href="http://www.opensource.org/licenses/mit-license.php">MIT License</a></td></tr></table></div>
-<div class="section">
-<h3><a name="runtime"></a>runtime</h3><a name="runtime"></a>
-<p>The following is a list of runtime dependencies in the DependencyManagement of this project. These dependencies can be included in the submodules to run the submodule:</p>
-<table border="0" class="table table-striped">
-<tr class="a">
-<th>GroupId</th>
-<th>ArtifactId</th>
-<th>Version</th>
-<th>Type</th>
-<th>License</th></tr>
-<tr class="b">
-<td>org.slf4j</td>
-<td><a class="externalLink" href="http://www.slf4j.org">jcl-over-slf4j</a></td>
-<td>1.8.0-beta4</td>
-<td>jar</td>
-<td><a class="externalLink" href="http://www.opensource.org/licenses/mit-license.php">MIT License</a></td></tr>
-<tr class="a">
-<td>org.slf4j</td>
-<td><a class="externalLink" href="http://www.slf4j.org">slf4j-jdk14</a></td>
-<td>1.8.0-beta4</td>
-<td>jar</td>
-<td><a class="externalLink" href="http://www.opensource.org/licenses/mit-license.php">MIT License</a></td></tr></table></div>
-<div class="section">
-<h3><a name="test"></a>test</h3><a name="test"></a>
+<td><a class="externalLink" href="https://www.apache.org/licenses/LICENSE-2.0.txt">The Apache Software License, Version 2.0</a></td></tr></table></section><section>
+<h2><a name="test"></a>test</h2><a name="test"></a>
 <p>The following is a list of test dependencies in the DependencyManagement of this project. These dependencies can be included in the submodules to compile and run unit tests for the submodule:</p>
 <table border="0" class="table table-striped">
 <tr class="a">
@@ -136,20 +106,19 @@
 <th>Type</th>
 <th>License</th></tr>
 <tr class="b">
-<td>junit</td>
+<td align="left">junit</td>
 <td><a class="externalLink" href="http://junit.org">junit</a></td>
-<td>4.13-beta-3</td>
+<td>4.13.2</td>
 <td>jar</td>
-<td><a class="externalLink" href="http://www.eclipse.org/legal/epl-v10.html">Eclipse Public License 1.0</a></td></tr></table></div></div>
-        </div>
+<td><a class="externalLink" href="http://www.eclipse.org/legal/epl-v10.html">Eclipse Public License 1.0</a></td></tr></table></section></section>
+        </main>
       </div>
     </div>
     <hr/>
     <footer>
       <div class="container-fluid">
         <div class="row-fluid">
-            <p>Copyright &copy;2007&#x2013;2019.
-All rights reserved.</p>
+            <p>Copyright &#169;      2007&#x2013;${currentYear}..</p>
         </div>
       </div>
     </footer>
diff --git a/docs/fonts/glyphicons-halflings-regular.eot b/docs/fonts/glyphicons-halflings-regular.eot
index 637452e..af587a8 100644
Binary files a/docs/fonts/glyphicons-halflings-regular.eot and b/docs/fonts/glyphicons-halflings-regular.eot differ
diff --git a/docs/fonts/glyphicons-halflings-regular.ttf b/docs/fonts/glyphicons-halflings-regular.ttf
index 2824015..8681f1e 100644
Binary files a/docs/fonts/glyphicons-halflings-regular.ttf and b/docs/fonts/glyphicons-halflings-regular.ttf differ
diff --git a/docs/fonts/glyphicons-halflings-regular.woff b/docs/fonts/glyphicons-halflings-regular.woff
index f824ac1..1e69f48 100644
Binary files a/docs/fonts/glyphicons-halflings-regular.woff and b/docs/fonts/glyphicons-halflings-regular.woff differ
diff --git a/docs/index.html b/docs/index.html
index f20d1d9..568a6e1 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -1,97 +1,95 @@
 <!DOCTYPE html>
 <!--
- | Generated by Apache Maven Doxia Site Renderer 1.8.1 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.0.0:index at 2019-05-17
- | Rendered using Apache Maven Fluido Skin 1.7
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0-M3 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.4.1:index at $dateFormat.format( $currentDate )
+ | Rendered using Apache Maven Fluido Skin 1.8
 -->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
   <head>
     <meta charset="UTF-8" />
-    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20190517" />
-    <meta http-equiv="Content-Language" content="en" />
+    <meta name="viewport" content="width=device-width, initial-scale=1" />
+    <meta name="generator" content="Apache Maven Doxia Site Renderer 2.0.0-M3" />
     <title>ZXing &#x2013; About</title>
-    <link rel="stylesheet" href="./css/apache-maven-fluido-1.7.min.css" />
+    <link rel="stylesheet" href="./css/apache-maven-fluido-1.8.min.css" />
     <link rel="stylesheet" href="./css/site.css" />
     <link rel="stylesheet" href="./css/print.css" media="print" />
-    <script type="text/javascript" src="./js/apache-maven-fluido-1.7.min.js"></script>
+    <script src="./js/apache-maven-fluido-1.8.min.js"></script>
   </head>
   <body class="topBarDisabled">
     <div class="container-fluid">
-      <div id="banner">
-        <div class="pull-left"><div id="bannerLeft"><h2>ZXing</h2>
-</div>
-</div>
-        <div class="pull-right"></div>
-        <div class="clear"><hr/></div>
-      </div>
+      <header>
+        <div id="banner">
+          <div class="pull-left">            <h1>ZXing
+</h1></div>
+          <div class="pull-right"></div>
+          <div class="clear"><hr/></div>
+        </div>
 
-      <div id="breadcrumbs">
-        <ul class="breadcrumb">
-        <li id="publishDate">Last Published: 2019-05-17<span class="divider">|</span>
+        <div id="breadcrumbs">
+          <ul class="breadcrumb">
+        <li id="publishDate">$i18n.getString( "site-renderer", $locale, "template.lastpublished" ): $dateValue<span class="divider">|</span>
 </li>
-          <li id="projectVersion">Version: 3.4.0</li>
-        </ul>
-      </div>
+          <li id="projectVersion">$i18n.getString( "site-renderer", $locale, "template.version" ): 3.5.1</li>
+          </ul>
+        </div>
+      </header>
       <div class="row-fluid">
-        <div id="leftColumn" class="span2">
-          <div class="well sidebar-nav">
-    <ul class="nav nav-list">
-      <li class="nav-header">Project Documentation</li>
+        <header id="leftColumn" class="span2">
+          <nav class="well sidebar-nav">
+  <ul class="nav nav-list">
+   <li class="nav-header">Project Documentation</li>
     <li><a href="project-info.html" title="Project Information"><span class="icon-chevron-down"></span>Project Information</a>
-    <ul class="nav nav-list">
-    <li><a href="dependency-info.html" title="Dependency Information"><span class="none"></span>Dependency Information</a></li>
-    <li><a href="dependency-management.html" title="Dependency Management"><span class="none"></span>Dependency Management</a></li>
-    <li class="active"><a href="#"><span class="none"></span>About</a></li>
-    <li><a href="issue-management.html" title="Issue Management"><span class="none"></span>Issue Management</a></li>
-    <li><a href="licenses.html" title="Licenses"><span class="none"></span>Licenses</a></li>
-    <li><a href="mailing-lists.html" title="Mailing Lists"><span class="none"></span>Mailing Lists</a></li>
-    <li><a href="scm.html" title="Source Code Management"><span class="none"></span>Source Code Management</a></li>
-    </ul>
-</li>
+     <ul class="nav nav-list">
+      <li><a href="dependency-info.html" title="Dependency Information"><span class="none"></span>Dependency Information</a></li>
+      <li><a href="dependency-management.html" title="Dependency Management"><span class="none"></span>Dependency Management</a></li>
+      <li class="active"><a href="#"><span class="none"></span>About</a></li>
+      <li><a href="issue-management.html" title="Issue Management"><span class="none"></span>Issue Management</a></li>
+      <li><a href="licenses.html" title="Licenses"><span class="none"></span>Licenses</a></li>
+      <li><a href="mailing-lists.html" title="Mailing Lists"><span class="none"></span>Mailing Lists</a></li>
+      <li><a href="scm.html" title="Source Code Management"><span class="none"></span>Source Code Management</a></li>
+     </ul></li>
     <li><a href="project-reports.html" title="Project Reports"><span class="icon-chevron-right"></span>Project Reports</a></li>
-</ul>
-          <hr />
-          <div id="poweredBy">
-            <div class="clear"></div>
-            <div class="clear"></div>
-            <div class="clear"></div>
-            <div class="clear"></div>
-<a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
+  </ul>
+          </nav>
+          <div class="well sidebar-nav">
+            <hr />
+            <div id="poweredBy">
+              <div class="clear"></div>
+              <div class="clear"></div>
+              <div class="clear"></div>
+<a href="http://maven.apache.org/" title="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" class="poweredBy"><img class="builtBy" alt="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" src="./images/logos/maven-feather.png" /></a>
             </div>
           </div>
-        </div>
-        <div id="bodyColumn"  class="span10" >
-<div class="section">
-<h2><a name="About_ZXing"></a>About ZXing</h2><a name="About_ZXing"></a>
-<p>Parent Maven project for ZXing modules</p>
-<div class="section">
-<h3><a name="Project_Modules"></a>Project Modules</h3><a name="Project_Modules"></a>
+        </header>
+        <main id="bodyColumn"  class="span10" >
+<section>
+<h1><a name="About_ZXing"></a>About ZXing</h1><a name="About_ZXing"></a>
+<p>Parent Maven project for ZXing modules</p><section>
+<h2><a name="Project_Modules"></a>Project Modules</h2><a name="Project_Modules"></a>
 <p>This project has declared the following modules:</p>
 <table border="0" class="table table-striped">
 <tr class="a">
 <th>Name</th>
 <th>Description</th></tr>
 <tr class="b">
-<td><a href="./core/index.html">ZXing Core</a></td>
+<td align="left"><a href="./core/index.html">ZXing Core</a></td>
 <td>Core barcode encoding/decoding library</td></tr>
 <tr class="a">
-<td><a href="./javase/index.html">ZXing Java SE extensions</a></td>
+<td align="left"><a href="./javase/index.html">ZXing Java SE extensions</a></td>
 <td>Java SE-specific extensions to core ZXing library</td></tr>
 <tr class="b">
-<td><a href="./zxingorg/index.html">ZXing zxing.org web app</a></td>
+<td align="left"><a href="./zxingorg/index.html">ZXing zxing.org web app</a></td>
 <td>The web application behind zxing.org</td></tr>
 <tr class="a">
-<td><a href="./zxing.appspot.com/index.html">ZXing Appspot-based encoder</a></td>
-<td>GWT-based encoder app hosted at zxing.appspot.com</td></tr></table></div></div>
-        </div>
+<td align="left"><a href="./zxing.appspot.com/index.html">ZXing Appspot-based encoder</a></td>
+<td>GWT-based encoder app hosted at zxing.appspot.com</td></tr></table></section></section>
+        </main>
       </div>
     </div>
     <hr/>
     <footer>
       <div class="container-fluid">
         <div class="row-fluid">
-            <p>Copyright &copy;2007&#x2013;2019.
-All rights reserved.</p>
+            <p>Copyright &#169;      2007&#x2013;${currentYear}..</p>
         </div>
       </div>
     </footer>
diff --git a/docs/issue-management.html b/docs/issue-management.html
index 480c81f..b792431 100644
--- a/docs/issue-management.html
+++ b/docs/issue-management.html
@@ -1,82 +1,80 @@
 <!DOCTYPE html>
 <!--
- | Generated by Apache Maven Doxia Site Renderer 1.8.1 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.0.0:issue-management at 2019-05-17
- | Rendered using Apache Maven Fluido Skin 1.7
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0-M3 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.4.1:issue-management at $dateFormat.format( $currentDate )
+ | Rendered using Apache Maven Fluido Skin 1.8
 -->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
   <head>
     <meta charset="UTF-8" />
-    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20190517" />
-    <meta http-equiv="Content-Language" content="en" />
+    <meta name="viewport" content="width=device-width, initial-scale=1" />
+    <meta name="generator" content="Apache Maven Doxia Site Renderer 2.0.0-M3" />
     <title>ZXing &#x2013; Issue Management</title>
-    <link rel="stylesheet" href="./css/apache-maven-fluido-1.7.min.css" />
+    <link rel="stylesheet" href="./css/apache-maven-fluido-1.8.min.css" />
     <link rel="stylesheet" href="./css/site.css" />
     <link rel="stylesheet" href="./css/print.css" media="print" />
-    <script type="text/javascript" src="./js/apache-maven-fluido-1.7.min.js"></script>
+    <script src="./js/apache-maven-fluido-1.8.min.js"></script>
   </head>
   <body class="topBarDisabled">
     <div class="container-fluid">
-      <div id="banner">
-        <div class="pull-left"><div id="bannerLeft"><h2>ZXing</h2>
-</div>
-</div>
-        <div class="pull-right"></div>
-        <div class="clear"><hr/></div>
-      </div>
+      <header>
+        <div id="banner">
+          <div class="pull-left">            <h1>ZXing
+</h1></div>
+          <div class="pull-right"></div>
+          <div class="clear"><hr/></div>
+        </div>
 
-      <div id="breadcrumbs">
-        <ul class="breadcrumb">
-        <li id="publishDate">Last Published: 2019-05-17<span class="divider">|</span>
+        <div id="breadcrumbs">
+          <ul class="breadcrumb">
+        <li id="publishDate">$i18n.getString( "site-renderer", $locale, "template.lastpublished" ): $dateValue<span class="divider">|</span>
 </li>
-          <li id="projectVersion">Version: 3.4.0</li>
-        </ul>
-      </div>
+          <li id="projectVersion">$i18n.getString( "site-renderer", $locale, "template.version" ): 3.5.1</li>
+          </ul>
+        </div>
+      </header>
       <div class="row-fluid">
-        <div id="leftColumn" class="span2">
-          <div class="well sidebar-nav">
-    <ul class="nav nav-list">
-      <li class="nav-header">Project Documentation</li>
+        <header id="leftColumn" class="span2">
+          <nav class="well sidebar-nav">
+  <ul class="nav nav-list">
+   <li class="nav-header">Project Documentation</li>
     <li><a href="project-info.html" title="Project Information"><span class="icon-chevron-down"></span>Project Information</a>
-    <ul class="nav nav-list">
-    <li><a href="dependency-info.html" title="Dependency Information"><span class="none"></span>Dependency Information</a></li>
-    <li><a href="dependency-management.html" title="Dependency Management"><span class="none"></span>Dependency Management</a></li>
-    <li><a href="index.html" title="About"><span class="none"></span>About</a></li>
-    <li class="active"><a href="#"><span class="none"></span>Issue Management</a></li>
-    <li><a href="licenses.html" title="Licenses"><span class="none"></span>Licenses</a></li>
-    <li><a href="mailing-lists.html" title="Mailing Lists"><span class="none"></span>Mailing Lists</a></li>
-    <li><a href="scm.html" title="Source Code Management"><span class="none"></span>Source Code Management</a></li>
-    </ul>
-</li>
+     <ul class="nav nav-list">
+      <li><a href="dependency-info.html" title="Dependency Information"><span class="none"></span>Dependency Information</a></li>
+      <li><a href="dependency-management.html" title="Dependency Management"><span class="none"></span>Dependency Management</a></li>
+      <li><a href="index.html" title="About"><span class="none"></span>About</a></li>
+      <li class="active"><a href="#"><span class="none"></span>Issue Management</a></li>
+      <li><a href="licenses.html" title="Licenses"><span class="none"></span>Licenses</a></li>
+      <li><a href="mailing-lists.html" title="Mailing Lists"><span class="none"></span>Mailing Lists</a></li>
+      <li><a href="scm.html" title="Source Code Management"><span class="none"></span>Source Code Management</a></li>
+     </ul></li>
     <li><a href="project-reports.html" title="Project Reports"><span class="icon-chevron-right"></span>Project Reports</a></li>
-</ul>
-          <hr />
-          <div id="poweredBy">
-            <div class="clear"></div>
-            <div class="clear"></div>
-            <div class="clear"></div>
-            <div class="clear"></div>
-<a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
+  </ul>
+          </nav>
+          <div class="well sidebar-nav">
+            <hr />
+            <div id="poweredBy">
+              <div class="clear"></div>
+              <div class="clear"></div>
+              <div class="clear"></div>
+<a href="http://maven.apache.org/" title="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" class="poweredBy"><img class="builtBy" alt="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" src="./images/logos/maven-feather.png" /></a>
             </div>
           </div>
-        </div>
-        <div id="bodyColumn"  class="span10" >
-<div class="section">
-<h2><a name="Overview"></a>Overview</h2><a name="Overview"></a>
-<p>This project uses Github to manage its issues.</p></div>
-<div class="section">
-<h2><a name="Issue_Management"></a>Issue Management</h2><a name="Issue_Management"></a>
+        </header>
+        <main id="bodyColumn"  class="span10" >
+<section>
+<h1><a name="Overview"></a>Overview</h1><a name="Overview"></a>
+<p>This project uses Github to manage its issues.</p></section><section>
+<h1><a name="Issue_Management"></a>Issue Management</h1><a name="Issue_Management"></a>
 <p>Issues, bugs, and feature requests should be submitted to the following issue management system for this project.</p>
-<div class="source"><pre class="prettyprint"><a class="externalLink" href="https://github.com/zxing/zxing/issues">https://github.com/zxing/zxing/issues</a></pre></div></div>
-        </div>
+<div class="source"><pre class="prettyprint"><a class="externalLink" href="https://github.com/zxing/zxing/issues">https://github.com/zxing/zxing/issues</a></pre></div></section>
+        </main>
       </div>
     </div>
     <hr/>
     <footer>
       <div class="container-fluid">
         <div class="row-fluid">
-            <p>Copyright &copy;2007&#x2013;2019.
-All rights reserved.</p>
+            <p>Copyright &#169;      2007&#x2013;${currentYear}..</p>
         </div>
       </div>
     </footer>
diff --git a/docs/licenses.html b/docs/licenses.html
index 63eae6d..44268f8 100644
--- a/docs/licenses.html
+++ b/docs/licenses.html
@@ -1,73 +1,71 @@
 <!DOCTYPE html>
 <!--
- | Generated by Apache Maven Doxia Site Renderer 1.8.1 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.0.0:licenses at 2019-05-17
- | Rendered using Apache Maven Fluido Skin 1.7
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0-M3 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.4.1:licenses at $dateFormat.format( $currentDate )
+ | Rendered using Apache Maven Fluido Skin 1.8
 -->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
   <head>
     <meta charset="UTF-8" />
-    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20190517" />
-    <meta http-equiv="Content-Language" content="en" />
+    <meta name="viewport" content="width=device-width, initial-scale=1" />
+    <meta name="generator" content="Apache Maven Doxia Site Renderer 2.0.0-M3" />
     <title>ZXing &#x2013; Project Licenses</title>
-    <link rel="stylesheet" href="./css/apache-maven-fluido-1.7.min.css" />
+    <link rel="stylesheet" href="./css/apache-maven-fluido-1.8.min.css" />
     <link rel="stylesheet" href="./css/site.css" />
     <link rel="stylesheet" href="./css/print.css" media="print" />
-    <script type="text/javascript" src="./js/apache-maven-fluido-1.7.min.js"></script>
+    <script src="./js/apache-maven-fluido-1.8.min.js"></script>
   </head>
   <body class="topBarDisabled">
     <div class="container-fluid">
-      <div id="banner">
-        <div class="pull-left"><div id="bannerLeft"><h2>ZXing</h2>
-</div>
-</div>
-        <div class="pull-right"></div>
-        <div class="clear"><hr/></div>
-      </div>
+      <header>
+        <div id="banner">
+          <div class="pull-left">            <h1>ZXing
+</h1></div>
+          <div class="pull-right"></div>
+          <div class="clear"><hr/></div>
+        </div>
 
-      <div id="breadcrumbs">
-        <ul class="breadcrumb">
-        <li id="publishDate">Last Published: 2019-05-17<span class="divider">|</span>
+        <div id="breadcrumbs">
+          <ul class="breadcrumb">
+        <li id="publishDate">$i18n.getString( "site-renderer", $locale, "template.lastpublished" ): $dateValue<span class="divider">|</span>
 </li>
-          <li id="projectVersion">Version: 3.4.0</li>
-        </ul>
-      </div>
+          <li id="projectVersion">$i18n.getString( "site-renderer", $locale, "template.version" ): 3.5.1</li>
+          </ul>
+        </div>
+      </header>
       <div class="row-fluid">
-        <div id="leftColumn" class="span2">
-          <div class="well sidebar-nav">
-    <ul class="nav nav-list">
-      <li class="nav-header">Project Documentation</li>
+        <header id="leftColumn" class="span2">
+          <nav class="well sidebar-nav">
+  <ul class="nav nav-list">
+   <li class="nav-header">Project Documentation</li>
     <li><a href="project-info.html" title="Project Information"><span class="icon-chevron-down"></span>Project Information</a>
-    <ul class="nav nav-list">
-    <li><a href="dependency-info.html" title="Dependency Information"><span class="none"></span>Dependency Information</a></li>
-    <li><a href="dependency-management.html" title="Dependency Management"><span class="none"></span>Dependency Management</a></li>
-    <li><a href="index.html" title="About"><span class="none"></span>About</a></li>
-    <li><a href="issue-management.html" title="Issue Management"><span class="none"></span>Issue Management</a></li>
-    <li class="active"><a href="#"><span class="none"></span>Licenses</a></li>
-    <li><a href="mailing-lists.html" title="Mailing Lists"><span class="none"></span>Mailing Lists</a></li>
-    <li><a href="scm.html" title="Source Code Management"><span class="none"></span>Source Code Management</a></li>
-    </ul>
-</li>
+     <ul class="nav nav-list">
+      <li><a href="dependency-info.html" title="Dependency Information"><span class="none"></span>Dependency Information</a></li>
+      <li><a href="dependency-management.html" title="Dependency Management"><span class="none"></span>Dependency Management</a></li>
+      <li><a href="index.html" title="About"><span class="none"></span>About</a></li>
+      <li><a href="issue-management.html" title="Issue Management"><span class="none"></span>Issue Management</a></li>
+      <li class="active"><a href="#"><span class="none"></span>Licenses</a></li>
+      <li><a href="mailing-lists.html" title="Mailing Lists"><span class="none"></span>Mailing Lists</a></li>
+      <li><a href="scm.html" title="Source Code Management"><span class="none"></span>Source Code Management</a></li>
+     </ul></li>
     <li><a href="project-reports.html" title="Project Reports"><span class="icon-chevron-right"></span>Project Reports</a></li>
-</ul>
-          <hr />
-          <div id="poweredBy">
-            <div class="clear"></div>
-            <div class="clear"></div>
-            <div class="clear"></div>
-            <div class="clear"></div>
-<a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
+  </ul>
+          </nav>
+          <div class="well sidebar-nav">
+            <hr />
+            <div id="poweredBy">
+              <div class="clear"></div>
+              <div class="clear"></div>
+              <div class="clear"></div>
+<a href="http://maven.apache.org/" title="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" class="poweredBy"><img class="builtBy" alt="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" src="./images/logos/maven-feather.png" /></a>
             </div>
           </div>
-        </div>
-        <div id="bodyColumn"  class="span10" >
-<div class="section">
-<h2><a name="Overview"></a>Overview</h2><a name="Overview"></a>
-<p>Typically the licenses listed for the project are that of the project itself, and not of dependencies.</p></div>
-<div class="section">
-<h2><a name="Project_Licenses"></a>Project Licenses</h2><a name="Project_Licenses"></a>
-<div class="section">
-<h3><a name="The_Apache_Software_License.2C_Version_2.0"></a>The Apache Software License, Version 2.0</h3><a name="The_Apache_Software_License.2C_Version_2.0"></a>
+        </header>
+        <main id="bodyColumn"  class="span10" >
+<section>
+<h1><a name="Overview"></a>Overview</h1><a name="Overview"></a>
+<p>Typically the licenses listed for the project are that of the project itself, and not of dependencies.</p></section><section>
+<h1><a name="Project_Licenses"></a>Project Licenses</h1><a name="Project_Licenses"></a><section>
+<h2><a name="The_Apache_Software_License.2C_Version_2.0"></a>The Apache Software License, Version 2.0</h2><a name="The_Apache_Software_License.2C_Version_2.0"></a>
 <div class="source"><pre class="prettyprint">
                                  Apache License
                            Version 2.0, January 2004
@@ -270,16 +268,15 @@
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
-</pre></div></div></div>
-        </div>
+</pre></div></section></section>
+        </main>
       </div>
     </div>
     <hr/>
     <footer>
       <div class="container-fluid">
         <div class="row-fluid">
-            <p>Copyright &copy;2007&#x2013;2019.
-All rights reserved.</p>
+            <p>Copyright &#169;      2007&#x2013;${currentYear}..</p>
         </div>
       </div>
     </footer>
diff --git a/docs/mailing-lists.html b/docs/mailing-lists.html
index 244327b..af7c3cf 100644
--- a/docs/mailing-lists.html
+++ b/docs/mailing-lists.html
@@ -1,68 +1,68 @@
 <!DOCTYPE html>
 <!--
- | Generated by Apache Maven Doxia Site Renderer 1.8.1 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.0.0:mailing-lists at 2019-05-17
- | Rendered using Apache Maven Fluido Skin 1.7
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0-M3 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.4.1:mailing-lists at $dateFormat.format( $currentDate )
+ | Rendered using Apache Maven Fluido Skin 1.8
 -->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
   <head>
     <meta charset="UTF-8" />
-    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20190517" />
-    <meta http-equiv="Content-Language" content="en" />
+    <meta name="viewport" content="width=device-width, initial-scale=1" />
+    <meta name="generator" content="Apache Maven Doxia Site Renderer 2.0.0-M3" />
     <title>ZXing &#x2013; Project Mailing Lists</title>
-    <link rel="stylesheet" href="./css/apache-maven-fluido-1.7.min.css" />
+    <link rel="stylesheet" href="./css/apache-maven-fluido-1.8.min.css" />
     <link rel="stylesheet" href="./css/site.css" />
     <link rel="stylesheet" href="./css/print.css" media="print" />
-    <script type="text/javascript" src="./js/apache-maven-fluido-1.7.min.js"></script>
+    <script src="./js/apache-maven-fluido-1.8.min.js"></script>
   </head>
   <body class="topBarDisabled">
     <div class="container-fluid">
-      <div id="banner">
-        <div class="pull-left"><div id="bannerLeft"><h2>ZXing</h2>
-</div>
-</div>
-        <div class="pull-right"></div>
-        <div class="clear"><hr/></div>
-      </div>
+      <header>
+        <div id="banner">
+          <div class="pull-left">            <h1>ZXing
+</h1></div>
+          <div class="pull-right"></div>
+          <div class="clear"><hr/></div>
+        </div>
 
-      <div id="breadcrumbs">
-        <ul class="breadcrumb">
-        <li id="publishDate">Last Published: 2019-05-17<span class="divider">|</span>
+        <div id="breadcrumbs">
+          <ul class="breadcrumb">
+        <li id="publishDate">$i18n.getString( "site-renderer", $locale, "template.lastpublished" ): $dateValue<span class="divider">|</span>
 </li>
-          <li id="projectVersion">Version: 3.4.0</li>
-        </ul>
-      </div>
+          <li id="projectVersion">$i18n.getString( "site-renderer", $locale, "template.version" ): 3.5.1</li>
+          </ul>
+        </div>
+      </header>
       <div class="row-fluid">
-        <div id="leftColumn" class="span2">
-          <div class="well sidebar-nav">
-    <ul class="nav nav-list">
-      <li class="nav-header">Project Documentation</li>
+        <header id="leftColumn" class="span2">
+          <nav class="well sidebar-nav">
+  <ul class="nav nav-list">
+   <li class="nav-header">Project Documentation</li>
     <li><a href="project-info.html" title="Project Information"><span class="icon-chevron-down"></span>Project Information</a>
-    <ul class="nav nav-list">
-    <li><a href="dependency-info.html" title="Dependency Information"><span class="none"></span>Dependency Information</a></li>
-    <li><a href="dependency-management.html" title="Dependency Management"><span class="none"></span>Dependency Management</a></li>
-    <li><a href="index.html" title="About"><span class="none"></span>About</a></li>
-    <li><a href="issue-management.html" title="Issue Management"><span class="none"></span>Issue Management</a></li>
-    <li><a href="licenses.html" title="Licenses"><span class="none"></span>Licenses</a></li>
-    <li class="active"><a href="#"><span class="none"></span>Mailing Lists</a></li>
-    <li><a href="scm.html" title="Source Code Management"><span class="none"></span>Source Code Management</a></li>
-    </ul>
-</li>
+     <ul class="nav nav-list">
+      <li><a href="dependency-info.html" title="Dependency Information"><span class="none"></span>Dependency Information</a></li>
+      <li><a href="dependency-management.html" title="Dependency Management"><span class="none"></span>Dependency Management</a></li>
+      <li><a href="index.html" title="About"><span class="none"></span>About</a></li>
+      <li><a href="issue-management.html" title="Issue Management"><span class="none"></span>Issue Management</a></li>
+      <li><a href="licenses.html" title="Licenses"><span class="none"></span>Licenses</a></li>
+      <li class="active"><a href="#"><span class="none"></span>Mailing Lists</a></li>
+      <li><a href="scm.html" title="Source Code Management"><span class="none"></span>Source Code Management</a></li>
+     </ul></li>
     <li><a href="project-reports.html" title="Project Reports"><span class="icon-chevron-right"></span>Project Reports</a></li>
-</ul>
-          <hr />
-          <div id="poweredBy">
-            <div class="clear"></div>
-            <div class="clear"></div>
-            <div class="clear"></div>
-            <div class="clear"></div>
-<a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
+  </ul>
+          </nav>
+          <div class="well sidebar-nav">
+            <hr />
+            <div id="poweredBy">
+              <div class="clear"></div>
+              <div class="clear"></div>
+              <div class="clear"></div>
+<a href="http://maven.apache.org/" title="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" class="poweredBy"><img class="builtBy" alt="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" src="./images/logos/maven-feather.png" /></a>
             </div>
           </div>
-        </div>
-        <div id="bodyColumn"  class="span10" >
-<div class="section">
-<h2><a name="Project_Mailing_Lists"></a>Project Mailing Lists</h2><a name="Project_Mailing_Lists"></a>
+        </header>
+        <main id="bodyColumn"  class="span10" >
+<section>
+<h1><a name="Project_Mailing_Lists"></a>Project Mailing Lists</h1><a name="Project_Mailing_Lists"></a>
 <p>These are the mailing lists that have been established for this project. For each list, there is a subscribe, unsubscribe, and an archive link.</p>
 <table border="0" class="table table-striped">
 <tr class="a">
@@ -72,26 +72,25 @@
 <th>Post</th>
 <th>Archive</th></tr>
 <tr class="b">
-<td>zxing Google Group</td>
-<td>Subscribe</td>
-<td>Unsubscribe</td>
+<td align="left">zxing Google Group</td>
+<td>-</td>
+<td>-</td>
 <td>-</td>
 <td><a class="externalLink" href="https://groups.google.com/forum/?fromgroups#!forum/zxing">groups.google.com</a></td></tr>
 <tr class="a">
-<td>StackOverflow tag</td>
-<td>Subscribe</td>
-<td>Unsubscribe</td>
+<td align="left">StackOverflow tag</td>
 <td>-</td>
-<td><a class="externalLink" href="https://stackoverflow.com/questions/tagged/zxing">stackoverflow.com</a></td></tr></table></div>
-        </div>
+<td>-</td>
+<td>-</td>
+<td><a class="externalLink" href="https://stackoverflow.com/questions/tagged/zxing">stackoverflow.com</a></td></tr></table></section>
+        </main>
       </div>
     </div>
     <hr/>
     <footer>
       <div class="container-fluid">
         <div class="row-fluid">
-            <p>Copyright &copy;2007&#x2013;2019.
-All rights reserved.</p>
+            <p>Copyright &#169;      2007&#x2013;${currentYear}..</p>
         </div>
       </div>
     </footer>
diff --git a/docs/project-info.html b/docs/project-info.html
index ce6f9c8..807889e 100644
--- a/docs/project-info.html
+++ b/docs/project-info.html
@@ -1,105 +1,103 @@
 <!DOCTYPE html>
 <!--
- | Generated by Apache Maven Doxia Site Renderer 1.8.1 from org.apache.maven.plugins:maven-site-plugin:3.7.1:CategorySummaryDocumentRenderer at 2019-05-17
- | Rendered using Apache Maven Fluido Skin 1.7
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0-M3 from org.apache.maven.plugins:maven-site-plugin:4.0.0-M3:CategorySummaryDocumentRenderer at $dateFormat.format( $currentDate )
+ | Rendered using Apache Maven Fluido Skin 1.8
 -->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
   <head>
     <meta charset="UTF-8" />
-    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20190517" />
-    <meta http-equiv="Content-Language" content="en" />
+    <meta name="viewport" content="width=device-width, initial-scale=1" />
+    <meta name="generator" content="Apache Maven Doxia Site Renderer 2.0.0-M3" />
     <title>ZXing &#x2013; Project Information</title>
-    <link rel="stylesheet" href="./css/apache-maven-fluido-1.7.min.css" />
+    <link rel="stylesheet" href="./css/apache-maven-fluido-1.8.min.css" />
     <link rel="stylesheet" href="./css/site.css" />
     <link rel="stylesheet" href="./css/print.css" media="print" />
-    <script type="text/javascript" src="./js/apache-maven-fluido-1.7.min.js"></script>
+    <script src="./js/apache-maven-fluido-1.8.min.js"></script>
   </head>
   <body class="topBarDisabled">
     <div class="container-fluid">
-      <div id="banner">
-        <div class="pull-left"><div id="bannerLeft"><h2>ZXing</h2>
-</div>
-</div>
-        <div class="pull-right"></div>
-        <div class="clear"><hr/></div>
-      </div>
+      <header>
+        <div id="banner">
+          <div class="pull-left">            <h1>ZXing
+</h1></div>
+          <div class="pull-right"></div>
+          <div class="clear"><hr/></div>
+        </div>
 
-      <div id="breadcrumbs">
-        <ul class="breadcrumb">
-        <li id="publishDate">Last Published: 2019-05-17<span class="divider">|</span>
+        <div id="breadcrumbs">
+          <ul class="breadcrumb">
+        <li id="publishDate">$i18n.getString( "site-renderer", $locale, "template.lastpublished" ): $dateValue<span class="divider">|</span>
 </li>
-          <li id="projectVersion">Version: 3.4.0</li>
-        </ul>
-      </div>
+          <li id="projectVersion">$i18n.getString( "site-renderer", $locale, "template.version" ): 3.5.1</li>
+          </ul>
+        </div>
+      </header>
       <div class="row-fluid">
-        <div id="leftColumn" class="span2">
-          <div class="well sidebar-nav">
-    <ul class="nav nav-list">
-      <li class="nav-header">Project Documentation</li>
+        <header id="leftColumn" class="span2">
+          <nav class="well sidebar-nav">
+  <ul class="nav nav-list">
+   <li class="nav-header">Project Documentation</li>
     <li class="active"><a href="#"><span class="icon-chevron-down"></span>Project Information</a>
-    <ul class="nav nav-list">
-    <li><a href="dependency-info.html" title="Dependency Information"><span class="none"></span>Dependency Information</a></li>
-    <li><a href="dependency-management.html" title="Dependency Management"><span class="none"></span>Dependency Management</a></li>
-    <li><a href="index.html" title="About"><span class="none"></span>About</a></li>
-    <li><a href="issue-management.html" title="Issue Management"><span class="none"></span>Issue Management</a></li>
-    <li><a href="licenses.html" title="Licenses"><span class="none"></span>Licenses</a></li>
-    <li><a href="mailing-lists.html" title="Mailing Lists"><span class="none"></span>Mailing Lists</a></li>
-    <li><a href="scm.html" title="Source Code Management"><span class="none"></span>Source Code Management</a></li>
-    </ul>
-</li>
+     <ul class="nav nav-list">
+      <li><a href="dependency-info.html" title="Dependency Information"><span class="none"></span>Dependency Information</a></li>
+      <li><a href="dependency-management.html" title="Dependency Management"><span class="none"></span>Dependency Management</a></li>
+      <li><a href="index.html" title="About"><span class="none"></span>About</a></li>
+      <li><a href="issue-management.html" title="Issue Management"><span class="none"></span>Issue Management</a></li>
+      <li><a href="licenses.html" title="Licenses"><span class="none"></span>Licenses</a></li>
+      <li><a href="mailing-lists.html" title="Mailing Lists"><span class="none"></span>Mailing Lists</a></li>
+      <li><a href="scm.html" title="Source Code Management"><span class="none"></span>Source Code Management</a></li>
+     </ul></li>
     <li><a href="project-reports.html" title="Project Reports"><span class="icon-chevron-right"></span>Project Reports</a></li>
-</ul>
-          <hr />
-          <div id="poweredBy">
-            <div class="clear"></div>
-            <div class="clear"></div>
-            <div class="clear"></div>
-            <div class="clear"></div>
-<a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
+  </ul>
+          </nav>
+          <div class="well sidebar-nav">
+            <hr />
+            <div id="poweredBy">
+              <div class="clear"></div>
+              <div class="clear"></div>
+              <div class="clear"></div>
+<a href="http://maven.apache.org/" title="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" class="poweredBy"><img class="builtBy" alt="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" src="./images/logos/maven-feather.png" /></a>
             </div>
           </div>
-        </div>
-        <div id="bodyColumn"  class="span10" >
-<div class="section">
-<h2><a name="Project_Information"></a>Project Information</h2>
-<p>This document provides an overview of the various documents and links that are part of this project's general information. All of this content is automatically generated by <a class="externalLink" href="http://maven.apache.org">Maven</a> on behalf of the project.</p>
-<div class="section">
-<h3><a name="Overview"></a>Overview</h3>
+        </header>
+        <main id="bodyColumn"  class="span10" >
+<section>
+<h1><a name="Project_Information"></a>Project Information</h1>
+<p>This document provides an overview of the various documents and links that are part of this project's general information. All of this content is automatically generated by <a class="externalLink" href="http://maven.apache.org">Maven</a> on behalf of the project.</p><section>
+<h2><a name="Overview"></a>Overview</h2>
 <table border="0" class="table table-striped">
 <tr class="a">
 <th>Document</th>
 <th>Description</th></tr>
 <tr class="b">
-<td><a href="dependency-info.html">Dependency Information</a></td>
-<td>This document describes how to to include this project as a dependency using various dependency management tools.</td></tr>
+<td align="left"><a href="dependency-info.html">Dependency Information</a></td>
+<td align="left">This document describes how to include this project as a dependency using various dependency management tools.</td></tr>
 <tr class="a">
-<td><a href="dependency-management.html">Dependency Management</a></td>
-<td>This document lists the dependencies that are defined through dependencyManagement.</td></tr>
+<td align="left"><a href="dependency-management.html">Dependency Management</a></td>
+<td align="left">This document lists the dependencies that are defined through dependencyManagement.</td></tr>
 <tr class="b">
-<td><a href="index.html">About</a></td>
-<td>Parent Maven project for ZXing modules</td></tr>
+<td align="left"><a href="index.html">About</a></td>
+<td align="left">Parent Maven project for ZXing modules</td></tr>
 <tr class="a">
-<td><a href="issue-management.html">Issue Management</a></td>
-<td>This document provides information on the issue management system used in this project.</td></tr>
+<td align="left"><a href="issue-management.html">Issue Management</a></td>
+<td align="left">This document provides information on the issue management system used in this project.</td></tr>
 <tr class="b">
-<td><a href="licenses.html">Licenses</a></td>
-<td>This document lists the project license(s).</td></tr>
+<td align="left"><a href="licenses.html">Licenses</a></td>
+<td align="left">This document lists the project license(s).</td></tr>
 <tr class="a">
-<td><a href="mailing-lists.html">Mailing Lists</a></td>
-<td>This document provides subscription and archive information for this project's mailing lists.</td></tr>
+<td align="left"><a href="mailing-lists.html">Mailing Lists</a></td>
+<td align="left">This document provides subscription and archive information for this project's mailing lists.</td></tr>
 <tr class="b">
-<td><a href="scm.html">Source Code Management</a></td>
-<td>This document lists ways to access the online source repository.</td></tr></table></div></div>
-        </div>
+<td align="left"><a href="scm.html">Source Code Management</a></td>
+<td align="left">This document lists ways to access the online source repository.</td></tr></table></section></section>
+        </main>
       </div>
     </div>
     <hr/>
     <footer>
       <div class="container-fluid">
         <div class="row-fluid">
-            <p>Copyright &copy;2007&#x2013;2019.
-All rights reserved.</p>
+            <p>Copyright &#169;      2007&#x2013;${currentYear}..</p>
         </div>
       </div>
     </footer>
diff --git a/docs/project-reports.html b/docs/project-reports.html
index 78f75ac..b812d9e 100644
--- a/docs/project-reports.html
+++ b/docs/project-reports.html
@@ -1,81 +1,79 @@
 <!DOCTYPE html>
 <!--
- | Generated by Apache Maven Doxia Site Renderer 1.8.1 from org.apache.maven.plugins:maven-site-plugin:3.7.1:CategorySummaryDocumentRenderer at 2019-05-17
- | Rendered using Apache Maven Fluido Skin 1.7
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0-M3 from org.apache.maven.plugins:maven-site-plugin:4.0.0-M3:CategorySummaryDocumentRenderer at $dateFormat.format( $currentDate )
+ | Rendered using Apache Maven Fluido Skin 1.8
 -->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
   <head>
     <meta charset="UTF-8" />
-    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20190517" />
-    <meta http-equiv="Content-Language" content="en" />
+    <meta name="viewport" content="width=device-width, initial-scale=1" />
+    <meta name="generator" content="Apache Maven Doxia Site Renderer 2.0.0-M3" />
     <title>ZXing &#x2013; Generated Reports</title>
-    <link rel="stylesheet" href="./css/apache-maven-fluido-1.7.min.css" />
+    <link rel="stylesheet" href="./css/apache-maven-fluido-1.8.min.css" />
     <link rel="stylesheet" href="./css/site.css" />
     <link rel="stylesheet" href="./css/print.css" media="print" />
-    <script type="text/javascript" src="./js/apache-maven-fluido-1.7.min.js"></script>
+    <script src="./js/apache-maven-fluido-1.8.min.js"></script>
   </head>
   <body class="topBarDisabled">
     <div class="container-fluid">
-      <div id="banner">
-        <div class="pull-left"><div id="bannerLeft"><h2>ZXing</h2>
-</div>
-</div>
-        <div class="pull-right"></div>
-        <div class="clear"><hr/></div>
-      </div>
+      <header>
+        <div id="banner">
+          <div class="pull-left">            <h1>ZXing
+</h1></div>
+          <div class="pull-right"></div>
+          <div class="clear"><hr/></div>
+        </div>
 
-      <div id="breadcrumbs">
-        <ul class="breadcrumb">
-        <li id="publishDate">Last Published: 2019-05-17<span class="divider">|</span>
+        <div id="breadcrumbs">
+          <ul class="breadcrumb">
+        <li id="publishDate">$i18n.getString( "site-renderer", $locale, "template.lastpublished" ): $dateValue<span class="divider">|</span>
 </li>
-          <li id="projectVersion">Version: 3.4.0</li>
-        </ul>
-      </div>
+          <li id="projectVersion">$i18n.getString( "site-renderer", $locale, "template.version" ): 3.5.1</li>
+          </ul>
+        </div>
+      </header>
       <div class="row-fluid">
-        <div id="leftColumn" class="span2">
-          <div class="well sidebar-nav">
-    <ul class="nav nav-list">
-      <li class="nav-header">Project Documentation</li>
+        <header id="leftColumn" class="span2">
+          <nav class="well sidebar-nav">
+  <ul class="nav nav-list">
+   <li class="nav-header">Project Documentation</li>
     <li><a href="project-info.html" title="Project Information"><span class="icon-chevron-right"></span>Project Information</a></li>
     <li class="active"><a href="#"><span class="icon-chevron-down"></span>Project Reports</a>
-    <ul class="nav nav-list">
-    <li><a href="apidocs/index.html" title="Javadoc"><span class="none"></span>Javadoc</a></li>
-    </ul>
-</li>
-</ul>
-          <hr />
-          <div id="poweredBy">
-            <div class="clear"></div>
-            <div class="clear"></div>
-            <div class="clear"></div>
-            <div class="clear"></div>
-<a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
+     <ul class="nav nav-list">
+      <li><a href="apidocs/index.html" title="Javadoc"><span class="none"></span>Javadoc</a></li>
+     </ul></li>
+  </ul>
+          </nav>
+          <div class="well sidebar-nav">
+            <hr />
+            <div id="poweredBy">
+              <div class="clear"></div>
+              <div class="clear"></div>
+              <div class="clear"></div>
+<a href="http://maven.apache.org/" title="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" class="poweredBy"><img class="builtBy" alt="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" src="./images/logos/maven-feather.png" /></a>
             </div>
           </div>
-        </div>
-        <div id="bodyColumn"  class="span10" >
-<div class="section">
-<h2><a name="Generated_Reports"></a>Generated Reports</h2>
-<p>This document provides an overview of the various reports that are automatically generated by <a class="externalLink" href="http://maven.apache.org">Maven</a> . Each report is briefly described below.</p>
-<div class="section">
-<h3><a name="Overview"></a>Overview</h3>
+        </header>
+        <main id="bodyColumn"  class="span10" >
+<section>
+<h1><a name="Generated_Reports"></a>Generated Reports</h1>
+<p>This document provides an overview of the various reports that are automatically generated by <a class="externalLink" href="http://maven.apache.org">Maven</a> . Each report is briefly described below.</p><section>
+<h2><a name="Overview"></a>Overview</h2>
 <table border="0" class="table table-striped">
 <tr class="a">
 <th>Document</th>
 <th>Description</th></tr>
 <tr class="b">
-<td><a href="apidocs/index.html">Javadoc</a></td>
-<td>Javadoc API documentation.</td></tr></table></div></div>
-        </div>
+<td align="left"><a href="apidocs/index.html">Javadoc</a></td>
+<td align="left">Javadoc API documentation.</td></tr></table></section></section>
+        </main>
       </div>
     </div>
     <hr/>
     <footer>
       <div class="container-fluid">
         <div class="row-fluid">
-            <p>Copyright &copy;2007&#x2013;2019.
-All rights reserved.</p>
+            <p>Copyright &#169;      2007&#x2013;${currentYear}..</p>
         </div>
       </div>
     </footer>
diff --git a/docs/scm.html b/docs/scm.html
index a20ba88..27b47ee 100644
--- a/docs/scm.html
+++ b/docs/scm.html
@@ -1,93 +1,88 @@
 <!DOCTYPE html>
 <!--
- | Generated by Apache Maven Doxia Site Renderer 1.8.1 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.0.0:scm at 2019-05-17
- | Rendered using Apache Maven Fluido Skin 1.7
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0-M3 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.4.1:scm at $dateFormat.format( $currentDate )
+ | Rendered using Apache Maven Fluido Skin 1.8
 -->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
   <head>
     <meta charset="UTF-8" />
-    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20190517" />
-    <meta http-equiv="Content-Language" content="en" />
+    <meta name="viewport" content="width=device-width, initial-scale=1" />
+    <meta name="generator" content="Apache Maven Doxia Site Renderer 2.0.0-M3" />
     <title>ZXing &#x2013; Source Code Management</title>
-    <link rel="stylesheet" href="./css/apache-maven-fluido-1.7.min.css" />
+    <link rel="stylesheet" href="./css/apache-maven-fluido-1.8.min.css" />
     <link rel="stylesheet" href="./css/site.css" />
     <link rel="stylesheet" href="./css/print.css" media="print" />
-    <script type="text/javascript" src="./js/apache-maven-fluido-1.7.min.js"></script>
+    <script src="./js/apache-maven-fluido-1.8.min.js"></script>
   </head>
   <body class="topBarDisabled">
     <div class="container-fluid">
-      <div id="banner">
-        <div class="pull-left"><div id="bannerLeft"><h2>ZXing</h2>
-</div>
-</div>
-        <div class="pull-right"></div>
-        <div class="clear"><hr/></div>
-      </div>
+      <header>
+        <div id="banner">
+          <div class="pull-left">            <h1>ZXing
+</h1></div>
+          <div class="pull-right"></div>
+          <div class="clear"><hr/></div>
+        </div>
 
-      <div id="breadcrumbs">
-        <ul class="breadcrumb">
-        <li id="publishDate">Last Published: 2019-05-17<span class="divider">|</span>
+        <div id="breadcrumbs">
+          <ul class="breadcrumb">
+        <li id="publishDate">$i18n.getString( "site-renderer", $locale, "template.lastpublished" ): $dateValue<span class="divider">|</span>
 </li>
-          <li id="projectVersion">Version: 3.4.0</li>
-        </ul>
-      </div>
+          <li id="projectVersion">$i18n.getString( "site-renderer", $locale, "template.version" ): 3.5.1</li>
+          </ul>
+        </div>
+      </header>
       <div class="row-fluid">
-        <div id="leftColumn" class="span2">
-          <div class="well sidebar-nav">
-    <ul class="nav nav-list">
-      <li class="nav-header">Project Documentation</li>
+        <header id="leftColumn" class="span2">
+          <nav class="well sidebar-nav">
+  <ul class="nav nav-list">
+   <li class="nav-header">Project Documentation</li>
     <li><a href="project-info.html" title="Project Information"><span class="icon-chevron-down"></span>Project Information</a>
-    <ul class="nav nav-list">
-    <li><a href="dependency-info.html" title="Dependency Information"><span class="none"></span>Dependency Information</a></li>
-    <li><a href="dependency-management.html" title="Dependency Management"><span class="none"></span>Dependency Management</a></li>
-    <li><a href="index.html" title="About"><span class="none"></span>About</a></li>
-    <li><a href="issue-management.html" title="Issue Management"><span class="none"></span>Issue Management</a></li>
-    <li><a href="licenses.html" title="Licenses"><span class="none"></span>Licenses</a></li>
-    <li><a href="mailing-lists.html" title="Mailing Lists"><span class="none"></span>Mailing Lists</a></li>
-    <li class="active"><a href="#"><span class="none"></span>Source Code Management</a></li>
-    </ul>
-</li>
+     <ul class="nav nav-list">
+      <li><a href="dependency-info.html" title="Dependency Information"><span class="none"></span>Dependency Information</a></li>
+      <li><a href="dependency-management.html" title="Dependency Management"><span class="none"></span>Dependency Management</a></li>
+      <li><a href="index.html" title="About"><span class="none"></span>About</a></li>
+      <li><a href="issue-management.html" title="Issue Management"><span class="none"></span>Issue Management</a></li>
+      <li><a href="licenses.html" title="Licenses"><span class="none"></span>Licenses</a></li>
+      <li><a href="mailing-lists.html" title="Mailing Lists"><span class="none"></span>Mailing Lists</a></li>
+      <li class="active"><a href="#"><span class="none"></span>Source Code Management</a></li>
+     </ul></li>
     <li><a href="project-reports.html" title="Project Reports"><span class="icon-chevron-right"></span>Project Reports</a></li>
-</ul>
-          <hr />
-          <div id="poweredBy">
-            <div class="clear"></div>
-            <div class="clear"></div>
-            <div class="clear"></div>
-            <div class="clear"></div>
-<a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
+  </ul>
+          </nav>
+          <div class="well sidebar-nav">
+            <hr />
+            <div id="poweredBy">
+              <div class="clear"></div>
+              <div class="clear"></div>
+              <div class="clear"></div>
+<a href="http://maven.apache.org/" title="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" class="poweredBy"><img class="builtBy" alt="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" src="./images/logos/maven-feather.png" /></a>
             </div>
           </div>
-        </div>
-        <div id="bodyColumn"  class="span10" >
-<div class="section">
-<h2><a name="Overview"></a>Overview</h2><a name="Overview"></a>
-<p>This project uses <a class="externalLink" href="https://git-scm.com/">Git</a> to manage its source code. Instructions on Git use can be found at <a class="externalLink" href="https://git-scm.com/documentation">https://git-scm.com/documentation</a>.</p></div>
-<div class="section">
-<h2><a name="Web_Browser_Access"></a>Web Browser Access</h2><a name="Web_Browser_Access"></a>
+        </header>
+        <main id="bodyColumn"  class="span10" >
+<section>
+<h1><a name="Overview"></a>Overview</h1><a name="Overview"></a>
+<p>This project uses <a class="externalLink" href="https://git-scm.com/">Git</a> to manage its source code. Instructions on Git use can be found at <a class="externalLink" href="https://git-scm.com/documentation">https://git-scm.com/documentation</a>.</p></section><section>
+<h1><a name="Web_Browser_Access"></a>Web Browser Access</h1><a name="Web_Browser_Access"></a>
 <p>The following is a link to a browsable version of the source repository:</p>
-<div class="source"><pre class="prettyprint"><a class="externalLink" href="https://github.com/zxing/zxing">https://github.com/zxing/zxing</a></pre></div></div>
-<div class="section">
-<h2><a name="Anonymous_Access"></a>Anonymous Access</h2><a name="Anonymous_Access"></a>
+<div class="source"><pre class="prettyprint"><a class="externalLink" href="https://github.com/zxing/zxing">https://github.com/zxing/zxing</a></pre></div></section><section>
+<h1><a name="Anonymous_Access"></a>Anonymous Access</h1><a name="Anonymous_Access"></a>
 <p>The source can be checked out anonymously from Git with this command (See <a class="externalLink" href="https://git-scm.com/docs/git-clone">https://git-scm.com/docs/git-clone</a>):</p>
-<div class="source"><pre class="prettyprint">$ git clone --branch zxing-3.4.0 https://github.com/zxing/zxing.git</pre></div></div>
-<div class="section">
-<h2><a name="Developer_Access"></a>Developer Access</h2><a name="Developer_Access"></a>
+<div class="source"><pre class="prettyprint">$ git clone --branch zxing-3.5.1 https://github.com/zxing/zxing.git</pre></div></section><section>
+<h1><a name="Developer_Access"></a>Developer Access</h1><a name="Developer_Access"></a>
 <p>Only project developers can access the Git tree via this method (See <a class="externalLink" href="https://git-scm.com/docs/git-clone">https://git-scm.com/docs/git-clone</a>).</p>
-<div class="source"><pre class="prettyprint">$ git clone --branch zxing-3.4.0 https://github.com/zxing/zxing.git</pre></div></div>
-<div class="section">
-<h2><a name="Access_from_Behind_a_Firewall"></a>Access from Behind a Firewall</h2><a name="Access_from_Behind_a_Firewall"></a>
-<p>Refer to the documentation of the SCM used for more information about access behind a firewall.</p></div>
-        </div>
+<div class="source"><pre class="prettyprint">$ git clone --branch zxing-3.5.1 https://github.com/zxing/zxing.git</pre></div></section><section>
+<h1><a name="Access_from_Behind_a_Firewall"></a>Access from Behind a Firewall</h1><a name="Access_from_Behind_a_Firewall"></a>
+<p>Refer to the documentation of the SCM used for more information about access behind a firewall.</p></section>
+        </main>
       </div>
     </div>
     <hr/>
     <footer>
       <div class="container-fluid">
         <div class="row-fluid">
-            <p>Copyright &copy;2007&#x2013;2019.
-All rights reserved.</p>
+            <p>Copyright &#169;      2007&#x2013;${currentYear}..</p>
         </div>
       </div>
     </footer>
diff --git a/javase/pom.xml b/javase/pom.xml
index 683bf7b..c815083 100644
--- a/javase/pom.xml
+++ b/javase/pom.xml
@@ -18,7 +18,7 @@
   <modelVersion>4.0.0</modelVersion>
 
   <artifactId>javase</artifactId>
-  <version>3.4.1</version>
+  <version>3.5.2-SNAPSHOT</version>
   <packaging>jar</packaging>
 
   <dependencies>
@@ -29,7 +29,7 @@
     <dependency>
       <groupId>com.beust</groupId>
       <artifactId>jcommander</artifactId>
-      <version>1.78</version>
+      <version>1.82</version>
     </dependency>
     <dependency>
       <groupId>com.github.jai-imageio</groupId>
@@ -47,7 +47,7 @@
   <parent>
     <groupId>com.google.zxing</groupId>
     <artifactId>zxing-parent</artifactId>
-    <version>3.4.1</version>
+    <version>3.5.2-SNAPSHOT</version>
   </parent>
 
   <build>
diff --git a/javase/src/main/java/com/google/zxing/client/j2se/DecodeWorker.java b/javase/src/main/java/com/google/zxing/client/j2se/DecodeWorker.java
index 04d1924..77a0401 100644
--- a/javase/src/main/java/com/google/zxing/client/j2se/DecodeWorker.java
+++ b/javase/src/main/java/com/google/zxing/client/j2se/DecodeWorker.java
@@ -165,6 +165,19 @@ final class DecodeWorker implements Callable<Integer> {
             result.getText() + "\n" +
             "Parsed result:\n" +
             parsedResult.getDisplayResult() + "\n");
+
+        if (config.outputRaw) {
+          StringBuilder rawData = new StringBuilder();
+
+          for (byte b : result.getRawBytes()) {
+            rawData.append(String.format("%02X", b & 0xff));
+            rawData.append(" ");
+          }
+          rawData.setLength(rawData.length() - 1);  // chop off final space
+
+          output.write("Raw bits:\n" + rawData + "\n");
+        }
+
         ResultPoint[] resultPoints = result.getResultPoints();
         int numResultPoints = resultPoints.length;
         output.write("Found " + numResultPoints + " result points.\n");
diff --git a/javase/src/main/java/com/google/zxing/client/j2se/DecoderConfig.java b/javase/src/main/java/com/google/zxing/client/j2se/DecoderConfig.java
index 93caf81..48d5d62 100644
--- a/javase/src/main/java/com/google/zxing/client/j2se/DecoderConfig.java
+++ b/javase/src/main/java/com/google/zxing/client/j2se/DecoderConfig.java
@@ -58,6 +58,10 @@ final class DecoderConfig {
       description = "Only output one line per file, omitting the contents")
   boolean brief;
 
+  @Parameter(names = "--raw",
+      description = "Output raw bitstream, before decoding symbols")
+  boolean outputRaw;
+
   @Parameter(names = "--recursive",
       description = "Descend into subdirectories")
   boolean recursive;
diff --git a/javase/src/main/java/com/google/zxing/client/j2se/GUIRunner.java b/javase/src/main/java/com/google/zxing/client/j2se/GUIRunner.java
index d6c1e57..9a738d9 100644
--- a/javase/src/main/java/com/google/zxing/client/j2se/GUIRunner.java
+++ b/javase/src/main/java/com/google/zxing/client/j2se/GUIRunner.java
@@ -38,6 +38,7 @@ import javax.swing.JFrame;
 import javax.swing.JLabel;
 import javax.swing.JPanel;
 import javax.swing.JTextArea;
+import javax.swing.SwingUtilities;
 import javax.swing.WindowConstants;
 import javax.swing.text.JTextComponent;
 
@@ -69,16 +70,26 @@ public final class GUIRunner extends JFrame {
   }
 
   public static void main(String[] args) throws MalformedURLException {
-    GUIRunner runner = new GUIRunner();
-    runner.setVisible(true);
-    runner.chooseImage();
+    SwingUtilities.invokeLater(new Runnable() {
+      public void run() {
+        GUIRunner runner = new GUIRunner();
+        runner.setVisible(true);
+        runner.chooseImage();
+      }
+    });
+
   }
 
-  private void chooseImage() throws MalformedURLException {
+  private void chooseImage() {
     JFileChooser fileChooser = new JFileChooser();
     fileChooser.showOpenDialog(this);
     Path file = fileChooser.getSelectedFile().toPath();
-    Icon imageIcon = new ImageIcon(file.toUri().toURL());
+    Icon imageIcon;
+    try {
+      imageIcon = new ImageIcon(file.toUri().toURL());
+    } catch (MalformedURLException muee) {
+      throw new IllegalArgumentException(muee);
+    }
     setSize(imageIcon.getIconWidth(), imageIcon.getIconHeight() + 100);
     imageLabel.setIcon(imageIcon);
     String decodeText = getDecodeText(file);
diff --git a/javase/src/main/java/com/google/zxing/client/j2se/HtmlAssetTranslator.java b/javase/src/main/java/com/google/zxing/client/j2se/HtmlAssetTranslator.java
index 7d401c1..661f157 100644
--- a/javase/src/main/java/com/google/zxing/client/j2se/HtmlAssetTranslator.java
+++ b/javase/src/main/java/com/google/zxing/client/j2se/HtmlAssetTranslator.java
@@ -26,6 +26,7 @@ import org.w3c.dom.ls.DOMImplementationLS;
 import org.w3c.dom.ls.LSSerializer;
 import org.xml.sax.SAXException;
 
+import javax.xml.XMLConstants;
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.ParserConfigurationException;
@@ -52,16 +53,18 @@ import java.util.regex.Pattern;
  * as a comma-separated list. Specify "all" for language to try to translate for all existing translations.
  * Each argument after this is the name of a file to translate; if the first one is "all", all files will
  * be translated.</p>
- * 
+ *
  * <p>Usage: {@code HtmlAssetTranslator android/assets/ (all|lang1[,lang2 ...]) (all|file1.html[ file2.html ...])}</p>
  *
- * <p>{@code android/assets/ es all} will translate .html files in subdirectory html-en to 
- * directory html-es, for example. Note that only text nodes in the HTML document are translated. 
- * Any text that is a child of a node with {@code class="notranslate"} will not be translated. It will 
+ * <p>{@code android/assets/ es all} will translate .html files in subdirectory html-en to
+ * directory html-es, for example. Note that only text nodes in the HTML document are translated.
+ * Any text that is a child of a node with {@code class="notranslate"} will not be translated. It will
  * also add a note at the end of the translated page that indicates it was automatically translated.</p>
  *
  * @author Sean Owen
+ * @deprecated without replacement since 3.4.2
  */
+@Deprecated
 public final class HtmlAssetTranslator {
 
   private static final Pattern COMMA = Pattern.compile(",");
@@ -147,9 +150,10 @@ public final class HtmlAssetTranslator {
 
     Path destFile = targetHtmlDir.resolve(sourceFile.getFileName());
 
-    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
     Document document;
     try {
+      DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+      factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
       DocumentBuilder builder = factory.newDocumentBuilder();
       document = builder.parse(sourceFile.toFile());
     } catch (ParserConfigurationException pce) {
diff --git a/javase/src/main/java/com/google/zxing/client/j2se/StringsResourceTranslator.java b/javase/src/main/java/com/google/zxing/client/j2se/StringsResourceTranslator.java
index 95f81a2..84fd6ab 100644
--- a/javase/src/main/java/com/google/zxing/client/j2se/StringsResourceTranslator.java
+++ b/javase/src/main/java/com/google/zxing/client/j2se/StringsResourceTranslator.java
@@ -49,7 +49,9 @@ import java.util.regex.Pattern;
  * <p>You must set your Google Translate API key into the environment with -DtranslateAPI.key=...</p>
  *
  * @author Sean Owen
+ * @deprecated without replacement since 3.4.2
  */
+@Deprecated
 public final class StringsResourceTranslator {
 
   private static final String API_KEY = System.getProperty("translateAPI.key");
@@ -58,7 +60,7 @@ public final class StringsResourceTranslator {
       throw new IllegalArgumentException("translateAPI.key is not specified");
     }
   }
-  
+
   private static final Pattern ENTRY_PATTERN = Pattern.compile("<string name=\"([^\"]+)\".*>([^<]+)</string>");
   private static final Pattern STRINGS_FILE_NAME_PATTERN = Pattern.compile("values-(.+)");
   private static final Pattern TRANSLATE_RESPONSE_PATTERN = Pattern.compile("translatedText\":\\s*\"([^\"]+)\"");
@@ -96,7 +98,7 @@ public final class StringsResourceTranslator {
     Collection<String> forceRetranslation = Arrays.asList(args).subList(1, args.length);
 
     DirectoryStream.Filter<Path> filter = entry ->
-      Files.isDirectory(entry) && !Files.isSymbolicLink(entry) &&
+        Files.isDirectory(entry) && !Files.isSymbolicLink(entry) &&
         VALUES_DIR_PATTERN.matcher(entry.getFileName().toString()).matches();
     try (DirectoryStream<Path> dirs = Files.newDirectoryStream(resDir, filter)) {
       for (Path dir : dirs) {
@@ -204,7 +206,8 @@ public final class StringsResourceTranslator {
     URLConnection connection = translateURI.toURL().openConnection();
     connection.connect();
     StringBuilder translateResult = new StringBuilder(200);
-    try (BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8))) {
+    try (BufferedReader in =
+           new BufferedReader(new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8))) {
       char[] buffer = new char[8192];
       int charsRead;
       while ((charsRead = in.read(buffer)) > 0) {
diff --git a/javase/src/test/java/com/google/zxing/client/j2se/CommandLineRunnerTestCase.java b/javase/src/test/java/com/google/zxing/client/j2se/CommandLineRunnerTestCase.java
index 648acde..1fee0da 100644
--- a/javase/src/test/java/com/google/zxing/client/j2se/CommandLineRunnerTestCase.java
+++ b/javase/src/test/java/com/google/zxing/client/j2se/CommandLineRunnerTestCase.java
@@ -26,7 +26,8 @@ public final class CommandLineRunnerTestCase extends Assert {
 
   @Test
   public void testCommandLineRunner() throws Exception {
-    String[] args = { "--pure_barcode", DecodeWorkerTestCase.IMAGE_DATA_URI };
+    String[] args = { "--pure_barcode", "--try_harder",
+      DecodeWorkerTestCase.IMAGE_DATA_URI, DecodeWorkerTestCase.IMAGE_NOBARCODE_DATA_URI };
     // Not a lot to do here but make sure it runs
     CommandLineRunner.main(args);
   }
diff --git a/javase/src/test/java/com/google/zxing/client/j2se/DecodeWorkerTestCase.java b/javase/src/test/java/com/google/zxing/client/j2se/DecodeWorkerTestCase.java
index 66ecd00..d05d647 100644
--- a/javase/src/test/java/com/google/zxing/client/j2se/DecodeWorkerTestCase.java
+++ b/javase/src/test/java/com/google/zxing/client/j2se/DecodeWorkerTestCase.java
@@ -36,6 +36,25 @@ public final class DecodeWorkerTestCase extends Assert {
       "988HQPUfPVaqA0XKz%2BgD9bIk1AP1fgwvB7KlS9VBdqXbA82PT9AH2fiaH2SXGdDM71fDgeIfhIvKsbkTTAIAKYVr0N" +
       "z5IloAAAAASUVORK5CYII=";
 
+  static final String IMAGE_NOBARCODE_DATA_URI =
+      "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAACE1BMVEUAAAAYsPIXsPL//+" +
+      "2J6/CI6vB74/Alt/IXr/LL/++M7PD//+UZsPIXr/ISrfIRrPIXsPIYsPIYsPIKqfIQrPITrvIZsfImt/IouPImt/IZsf" +
+      "IXr/IXsPIbsfIWr/IcsvInuPImuPIvvPJt3PB54vBt3PAasfIXsPIXr/IUrvIYsPIwvfJx3vB54vCE6PCS7/B64/Bt3P" +
+      "AktvIXr/IYsPIYsPIasfIlt/IwvPKJ6/CM7PCW8fCQ7vCB5vAmt/IXr/IYsPIYsPIXsPKI6vCI6vCI6vAYsfMYsPIYsP" +
+      "KI6vCI6vCI6vAYrO0YsPGI6vCI6vCI6vCJ6/CH6vBw3vB64/CE6PAwvPJr2/FLy/ESrfIYsPIjtvIasfIYsPIYsPIYsP" +
+      "IYsPIYsPIYsPIYsPIYsPIYre4vvPIktvJ64/Bx3vCI6vAitfJj1/F74/CH6vAbsfI7wvF/5fCJ6vAXsPJw3fAWmNEYre" +
+      "0mt/J85PCJ6/Bw3vAXqukYr/EYsPIZsPIwvPJ95PAjtvIVksgWmtQYre4VlMsXpuUVkccWl9AXquouu/Jy3/AWl88Wm9" +
+      "QXpuQYrO0ZsfIVkcgVlMwWmNAXqekVisIVkMcVkscWm9UTXaQVgr0VisMVlcwTT5oTVZ4TXKMVhL4TTpoTTZoTW6MVg7" +
+      "4Vj8YVicIVkMYVi8MUfbkTVZ8UfLkUY6gTVJ4Vg70TT5sTVp/hyCW0AAAAZnRSTlMAAAAAAAAAAAAAAAACGx8fHxsCAh" +
+      "k2yeTi4uLJMgEZNsnm++fi5s80GTbJ5v3NNhzJ4uCvFwHJ5v3mNgIbHx8cBDHN/ckZOcz+5jYC5f3k4Bzk/f3NMv7NNh" +
+      "0f/eTg4jYd/eQZ5v3GzkXBAAAByUlEQVQ4y73TvW4TQRSG4e/dtbHx2hv/FBEIEBWIEgmLhoaGittJRYeEfAUUFBS+Ai" +
+      "qIoIBQgGQRFKWwoAxgKYog3vXf2uvx7lAkBDvyio7TnkffnDOaQf8o/h/4C+06gOQB1oHgnEASosZZ9VYFQvLqp837vO" +
+      "NnsAqQdwXg3oeTI+DzOXDn8DLcZo8OdwF4vwqaZW4BXdiRrAPxuRkewE3gC7wxa+/hITfGlXkXdrQebJHkoLvICBBbJO" +
+      "PG+BsvlQEeAbAfZydccCI//jrMnOExxMDrWtYWT4iI/LiTtQYtGIsybwd7GLMOKB84UqUDrxbzNe+hJeNNY+F2AbYJlp" +
+      "r2BKQX6UvR1U/AbpP5aXebQLKipRIQxlJUknr8GYPdZu5FINGSpNSPRsVZcVhYyu+5H5vMxVMIJZHW+5VJ2UxiqTArep" +
+      "NZcXaUGIlnYAaS0sR1lG5O+X4tjiuWUT2yhXBW5DlwWA3PktPNo8RN8sZN3MT1RwFtrMO0FNaCoXzVDyTper8WVF17IO" +
+      "OWaUsLTDWsTfIyc+eXr6EuWS+oM/shX9CWhKmGeVPRtHxcMtqIbIqpOmNKAxnaS1/E+migDR3nJGnR0GDR+A23fMFDA8" +
+      "6WRQAAAABJRU5ErkJggg==";
 
   @Test
   public void testWorker() throws Exception {
@@ -46,5 +65,5 @@ public final class DecodeWorkerTestCase extends Assert {
     DecodeWorker worker = new DecodeWorker(config, inputs);
     assertEquals(1, worker.call().intValue());
   }
-  
+
 }
diff --git a/pom.xml b/pom.xml
index 9685d9f..8b52400 100644
--- a/pom.xml
+++ b/pom.xml
@@ -19,7 +19,7 @@
 
   <groupId>com.google.zxing</groupId>
   <artifactId>zxing-parent</artifactId>
-  <version>3.4.1</version>
+  <version>3.5.2-SNAPSHOT</version>
   <packaging>pom</packaging>
 
   <dependencyManagement>
@@ -47,7 +47,7 @@
       <dependency>
         <groupId>junit</groupId>
         <artifactId>junit</artifactId>
-        <version>4.13</version>
+        <version>4.13.2</version>
         <scope>test</scope>
       </dependency>
     </dependencies>
@@ -66,10 +66,9 @@
     <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
     <java.version>1.8</java.version>
     <android.home>${env.ANDROID_HOME}</android.home>
-    <proguard.version>7.0.0</proguard.version>
-    <proguard.plugin.version>2.3.1</proguard.plugin.version>
+    <proguard.plugin.version>2.6.0</proguard.plugin.version>
     <!-- This can't reference project.version as some subprojects version differently -->
-    <zxing.version>3.4.1</zxing.version>
+    <zxing.version>3.5.2-SNAPSHOT</zxing.version>
     <android.platform>22</android.platform>
   </properties>
 
@@ -114,7 +113,7 @@
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-enforcer-plugin</artifactId>
-          <version>3.0.0-M3</version>
+          <version>3.1.0</version>
           <executions>
             <execution>
               <id>enforce</id>
@@ -140,7 +139,7 @@
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-compiler-plugin</artifactId>
-          <version>3.8.1</version>
+          <version>3.10.1</version>
           <configuration>
             <source>${java.version}</source>
             <target>${java.version}</target>
@@ -166,9 +165,8 @@
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-javadoc-plugin</artifactId>
-          <version>3.2.0</version>
+          <version>3.4.1</version>
           <configuration>
-            <javadocVersion>${java.version}</javadocVersion>
             <source>${java.version}</source>
             <quiet>true</quiet>
             <notimestamp>true</notimestamp>
@@ -188,7 +186,7 @@
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-clean-plugin</artifactId>
-          <version>3.1.0</version>
+          <version>3.2.0</version>
           <configuration>
             <filesets>
               <fileset>
@@ -206,22 +204,22 @@
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-install-plugin</artifactId>
-          <version>3.0.0-M1</version>
+          <version>3.0.1</version>
         </plugin>
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-resources-plugin</artifactId>
-          <version>3.2.0</version>
+          <version>3.3.0</version>
         </plugin>
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-jar-plugin</artifactId>
-          <version>3.2.0</version>
+          <version>3.3.0</version>
         </plugin>
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-assembly-plugin</artifactId>
-          <version>3.3.0</version>
+          <version>3.4.2</version>
         </plugin>
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
@@ -253,7 +251,7 @@
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-release-plugin</artifactId>
-          <version>3.0.0-M1</version>
+          <version>3.0.0-M6</version>
           <configuration>
             <mavenExecutorId>forked-path</mavenExecutorId>
             <tagNameFormat>zxing-@{project.version}</tagNameFormat>
@@ -264,27 +262,27 @@
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-scm-plugin</artifactId>
-          <version>1.11.2</version>
+          <version>2.0.0-M2</version>
         </plugin>
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-deploy-plugin</artifactId>
-          <version>3.0.0-M1</version>
+          <version>3.0.0</version>
         </plugin>
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-dependency-plugin</artifactId>
-          <version>3.1.2</version>
+          <version>3.3.0</version>
         </plugin>
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-project-info-reports-plugin</artifactId>
-          <version>3.1.1</version>
+          <version>3.4.1</version>
         </plugin>
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-gpg-plugin</artifactId>
-          <version>1.6</version>
+          <version>3.0.1</version>
           <executions>
             <execution>
               <id>sign-artifacts</id>
@@ -301,7 +299,7 @@
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-surefire-plugin</artifactId>
-          <version>3.0.0-M5</version>
+          <version>3.0.0-M7</version>
           <configuration>
             <forkCount>0.5C</forkCount>
             <systemPropertyVariables>
@@ -312,7 +310,7 @@
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-war-plugin</artifactId>
-          <version>3.3.1</version>
+          <version>3.3.2</version>
         </plugin>
         <plugin>
           <groupId>com.simpligility.maven.plugins</groupId>
@@ -356,18 +354,6 @@
             <nativeLibrariesDirectory>libs</nativeLibrariesDirectory>
             <disableConflictingDependenciesWarning>true</disableConflictingDependenciesWarning>
           </configuration>
-          <dependencies>
-            <dependency>
-              <groupId>com.guardsquare</groupId>
-              <artifactId>proguard-base</artifactId>
-              <version>${proguard.version}</version>
-            </dependency>
-            <dependency>
-              <groupId>com.guardsquare</groupId>
-              <artifactId>proguard-core</artifactId>
-              <version>${proguard.version}</version>
-            </dependency>
-          </dependencies>
         </plugin>
         <plugin>
           <groupId>com.github.wvengen</groupId>
@@ -382,7 +368,6 @@
             </execution>
           </executions>
           <configuration>
-            <proguardVersion>${proguard.version}</proguardVersion>
             <addMavenDescriptor>true</addMavenDescriptor>
             <obfuscate>false</obfuscate>
             <options>
@@ -396,40 +381,24 @@
               <lib>${java.home}/lib/rt.jar</lib>
             </libs>
           </configuration>
-          <dependencies>
-            <dependency>
-              <groupId>com.guardsquare</groupId>
-              <artifactId>proguard-base</artifactId>
-              <version>${proguard.version}</version>
-              <scope>runtime</scope>
-            </dependency>
-            <dependency>
-              <groupId>com.guardsquare</groupId>
-              <artifactId>proguard-core</artifactId>
-              <version>${proguard.version}</version>
-              <scope>runtime</scope>
-            </dependency>
-          </dependencies>
         </plugin>
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-site-plugin</artifactId>
-          <version>3.9.1</version>
+          <version>4.0.0-M3</version>
           <inherited>false</inherited>
         </plugin>
         <plugin>
           <groupId>org.codehaus.mojo</groupId>
           <artifactId>build-helper-maven-plugin</artifactId>
-          <version>3.2.0</version>
+          <version>3.3.0</version>
         </plugin>
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-checkstyle-plugin</artifactId>
-          <version>3.1.1</version>
+          <version>3.2.0</version>
           <configuration>
             <configLocation>src/checkstyle/checkstyle.xml</configLocation>
-            <!-- Android generated files -->
-            <excludes>**/R.java,**/BuildConfig.java,**/Manifest.java</excludes>
             <includeTestSourceDirectory>true</includeTestSourceDirectory>
           </configuration>
           <executions>
@@ -445,14 +414,14 @@
             <dependency>
               <groupId>com.puppycrawl.tools</groupId>
               <artifactId>checkstyle</artifactId>
-              <version>8.36.2</version>
+              <version>9.3</version>
             </dependency>
           </dependencies>
         </plugin>
         <plugin>
           <groupId>org.apache.rat</groupId>
           <artifactId>apache-rat-plugin</artifactId>
-          <version>0.13</version>
+          <version>0.15</version>
           <configuration>
             <consoleOutput>true</consoleOutput>
             <ignoreErrors>true</ignoreErrors>
@@ -470,6 +439,7 @@
               <exclude>**/*.properties</exclude>
               <exclude>**/*.cfg</exclude>
               <exclude>**/*.config</exclude>
+              <exclude>**/*.yml</exclude>
               <exclude>**/*.yaml</exclude>
               <exclude>**/gen/**</exclude>
               <exclude>**/resources/**</exclude>
@@ -511,7 +481,7 @@
         <plugin>
           <groupId>org.jacoco</groupId>
           <artifactId>jacoco-maven-plugin</artifactId>
-          <version>0.8.6</version>
+          <version>0.8.8</version>
           <executions>
             <execution>
               <goals>
@@ -671,20 +641,9 @@
     <connection>scm:git:https://github.com/zxing/zxing.git</connection>
     <developerConnection>scm:git:https://github.com/zxing/zxing.git</developerConnection>
     <url>https://github.com/zxing/zxing</url>
-    <tag>zxing-3.4.1</tag>
+    <tag>HEAD</tag>
   </scm>
 
-  <pluginRepositories>
-    <pluginRepository>
-      <snapshots>
-        <enabled>false</enabled>
-      </snapshots>
-      <id>bintray-guardsquare-proguard</id>
-      <name>bintray</name>
-      <url>https://dl.bintray.com/guardsquare/proguard</url>
-    </pluginRepository>
-  </pluginRepositories>
-
   <distributionManagement>
     <repository>
       <id>sonatype-nexus-staging</id>
@@ -703,6 +662,21 @@
     </site>
   </distributionManagement>
 
+  <repositories>
+    <repository>
+      <id>google-maven-central</id>
+      <name>GCS Maven Central mirror</name>
+      <url>https://maven-central.storage-download.googleapis.com/maven2/</url>
+    </repository>
+  </repositories>
+  <pluginRepositories>
+    <pluginRepository>
+      <id>google-maven-central</id>
+      <name>GCS Maven Central mirror</name>
+      <url>https://maven-central.storage-download.googleapis.com/maven2/</url>
+    </pluginRepository>
+  </pluginRepositories>
+
   <profiles>
     <profile>
       <id>build-android</id>
@@ -783,33 +757,6 @@
         </plugins>
       </build>
     </profile>
-    <profile>
-      <id>travis</id>
-      <properties>
-        <!-- dummy to make @{argLine} evaluate when not set by jacoco -->
-        <argLine />
-      </properties>
-      <build>
-        <plugins>
-          <plugin>
-            <groupId>org.apache.maven.plugins</groupId>
-            <artifactId>maven-surefire-plugin</artifactId>
-            <configuration>
-              <!-- Limit memory for unit tests in Travis -->
-              <argLine>@{argLine} -Xmx512m</argLine>
-              <forkCount>1</forkCount>
-            </configuration>
-          </plugin>
-          <plugin>
-            <groupId>org.apache.maven.plugins</groupId>
-            <artifactId>maven-source-plugin</artifactId>
-            <configuration>
-              <skipSource>true</skipSource>
-            </configuration>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
     <profile>
       <id>appspot</id>
       <activation>
diff --git a/src/checkstyle/checkstyle.xml b/src/checkstyle/checkstyle.xml
index 28be2e7..3658299 100644
--- a/src/checkstyle/checkstyle.xml
+++ b/src/checkstyle/checkstyle.xml
@@ -104,11 +104,6 @@
 
     <!-- Checks for Size Violations.                    -->
     <!-- See http://checkstyle.sf.net/config_sizes.html -->
-    <!--
-    <module name="LineLength">
-      <property name="max" value="120"/>
-    </module>
-     -->
     <!-- <module name="MethodLength"/> -->
     <!-- <module name="ParameterNumber"/> -->
 
@@ -126,7 +121,7 @@
     <module name="WhitespaceAround">
       <property name="allowEmptyConstructors" value="true"/>
     </module>
-    <module name="UnnecessaryParentheses"/>
+    <!-- <module name="UnnecessaryParentheses"/> -->
 
 
     <!-- Modifier Checks                                    -->
@@ -185,6 +180,13 @@
     <!-- <module name="TodoComment"/> -->
     <module name="UpperEll"/>
 
+    <module name="Indentation">
+      <property name="basicOffset" value="2" />
+      <property name="braceAdjustment" value="0" />
+      <property name="caseIndent" value="2" />
+      <property name="arrayInitIndent" value="2"/>
+    </module>
+
   </module>
 
   <!-- Support @SuppressWarnings (added in Checkstyle 5.7) -->
@@ -195,4 +197,8 @@
   <!-- See http://checkstyle.sourceforge.net/config_misc.html#UniqueProperties -->
   <module name="UniqueProperties"/>
 
+  <module name="LineLength">
+    <property name="max" value="120"/>
+  </module>
+
 </module>
diff --git a/src/clirr/ignored-differences.xml b/src/clirr/ignored-differences.xml
index 373d5ab..8ebaa98 100644
--- a/src/clirr/ignored-differences.xml
+++ b/src/clirr/ignored-differences.xml
@@ -19,4 +19,9 @@
     <className>com/google/zxing/*Translator</className>
     <differenceType>8001</differenceType>
   </difference>
+  <difference>
+    <className>com/google/zxing/common/CharacterSetECI</className>
+    <differenceType>6001</differenceType>
+    <field>ISO8859*</field>
+  </difference>
 </differences>
diff --git a/zxing.appspot.com/pom.xml b/zxing.appspot.com/pom.xml
index 9621f42..bb69200 100644
--- a/zxing.appspot.com/pom.xml
+++ b/zxing.appspot.com/pom.xml
@@ -18,12 +18,12 @@
   <modelVersion>4.0.0</modelVersion>
 
   <artifactId>zxing.appspot.com</artifactId>
-  <version>3.4.1</version>
+  <version>3.5.2-SNAPSHOT</version>
   <packaging>war</packaging>
 
   <dependencies>
     <dependency>
-      <groupId>com.google.gwt</groupId>
+      <groupId>org.gwtproject</groupId>
       <artifactId>gwt-user</artifactId>
       <version>${gwt.version}</version>
       <scope>provided</scope>
@@ -33,11 +33,11 @@
   <parent>
     <groupId>com.google.zxing</groupId>
     <artifactId>zxing-parent</artifactId>
-    <version>3.4.1</version>
+    <version>3.5.2-SNAPSHOT</version>
   </parent>
 
   <properties>
-    <gwt.version>2.9.0</gwt.version>
+    <gwt.version>2.10.0</gwt.version>
   </properties>
 
   <build>
@@ -64,23 +64,4 @@
   <name>ZXing Appspot-based encoder</name>
   <description>GWT-based encoder app hosted at zxing.appspot.com</description>
 
-  <profiles>
-    <profile>
-      <id>travis</id>
-      <build>
-        <plugins>
-          <plugin>
-            <groupId>org.codehaus.mojo</groupId>
-            <artifactId>gwt-maven-plugin</artifactId>
-            <version>${gwt.version}</version>
-            <configuration>
-              <!-- don't build in parallel on Travis -->
-              <localWorkers>1</localWorkers>
-            </configuration>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
-  </profiles>
-
 </project>
diff --git a/zxing.appspot.com/src/main/java/com/google/zxing/web/generator/client/WifiGenerator.java b/zxing.appspot.com/src/main/java/com/google/zxing/web/generator/client/WifiGenerator.java
index f116ab8..cd35c38 100644
--- a/zxing.appspot.com/src/main/java/com/google/zxing/web/generator/client/WifiGenerator.java
+++ b/zxing.appspot.com/src/main/java/com/google/zxing/web/generator/client/WifiGenerator.java
@@ -27,7 +27,7 @@ import com.google.gwt.user.client.ui.Widget;
 
 /**
  * A Generator for Wifi networks.
- * 
+ *
  * @author Vikram Aggarwal
  * @author Sean Owen
  */
@@ -49,7 +49,7 @@ public final class WifiGenerator implements GeneratorSource {
       w.addKeyPressHandler(keyListener);
     }
   }
-  
+
   @Override
   public String getName() {
     return "Wifi network";
@@ -96,7 +96,7 @@ public final class WifiGenerator implements GeneratorSource {
     }
     return input.replaceAll("([\\\\:;])", "\\\\$1");
   }
-  
+
   private String getSsidField() throws GeneratorException {
     String input = ssid.getText();
     if (input.isEmpty()) {
@@ -105,11 +105,11 @@ public final class WifiGenerator implements GeneratorSource {
     String parsed = parseTextField("SSID", ssid);
     return quoteHex(parsed); // Android needs hex-like SSIDs quoted or will be read as hex
   }
-  
+
   private String getPasswordField() throws GeneratorException {
-  return parseTextField("Password", password);
+    return parseTextField("Password", password);
   }
-  
+
   private String getNetworkTypeField() {
     return networkType.getValue(networkType.getSelectedIndex());
   }
@@ -118,7 +118,7 @@ public final class WifiGenerator implements GeneratorSource {
     Boolean value = hidden.getValue();
     return value != null && value;
   }
-  
+
   @Override
   public Grid getWidget() {
     if (table != null) {
@@ -126,7 +126,7 @@ public final class WifiGenerator implements GeneratorSource {
       return table;
     }
     table = new Grid(4, 2);
-    
+
     table.setText(0, 0, "SSID");
     table.setWidget(0, 1, ssid);
     table.setText(1, 0, "Password");
diff --git a/zxing.appspot.com/src/main/webapp/scan.html b/zxing.appspot.com/src/main/webapp/scan.html
index 48381c6..7759521 100644
--- a/zxing.appspot.com/src/main/webapp/scan.html
+++ b/zxing.appspot.com/src/main/webapp/scan.html
@@ -20,8 +20,10 @@
 		
 		<meta charset="UTF-8" />
 		<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1" />
-		
-		<script src="http://code.jquery.com/jquery-latest.js"></script>
+
+		<script src="https://code.jquery.com/jquery-1.12.4.min.js"
+				integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ="
+				crossorigin="anonymous"></script>
 		
 		<link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Droid+Sans" />
 		<link rel="stylesheet" href="scan.css" />
diff --git a/zxingorg/pom.xml b/zxingorg/pom.xml
index 030e8a3..b7890ca 100644
--- a/zxingorg/pom.xml
+++ b/zxingorg/pom.xml
@@ -18,7 +18,7 @@
   <modelVersion>4.0.0</modelVersion>
 
   <artifactId>zxingorg</artifactId>
-  <version>3.4.1</version>
+  <version>3.5.2-SNAPSHOT</version>
   <packaging>war</packaging>
 
   <dependencies>
@@ -39,7 +39,7 @@
     <dependency>
       <groupId>com.google.guava</groupId>
       <artifactId>guava</artifactId>
-      <version>29.0-android</version>
+      <version>31.1-android</version>
     </dependency>
     <dependency>
       <groupId>junit</groupId>
@@ -49,7 +49,13 @@
     <dependency>
       <groupId>org.springframework</groupId>
       <artifactId>spring-test</artifactId>
-      <version>5.2.9.RELEASE</version>
+      <version>${spring.version}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework</groupId>
+      <artifactId>spring-web</artifactId>
+      <version>${spring.version}</version>
       <scope>test</scope>
     </dependency>
     <dependency>
@@ -63,9 +69,13 @@
   <parent>
     <groupId>com.google.zxing</groupId>
     <artifactId>zxing-parent</artifactId>
-    <version>3.4.1</version>
+    <version>3.5.2-SNAPSHOT</version>
   </parent>
 
+  <properties>
+    <spring.version>5.3.23</spring.version>
+  </properties>
+
   <build>
     <plugins>
       <plugin>
diff --git a/zxingorg/src/main/java/com/google/zxing/web/ChartDoSFilter.java b/zxingorg/src/main/java/com/google/zxing/web/ChartDoSFilter.java
index 39fb683..d314d34 100644
--- a/zxingorg/src/main/java/com/google/zxing/web/ChartDoSFilter.java
+++ b/zxingorg/src/main/java/com/google/zxing/web/ChartDoSFilter.java
@@ -25,7 +25,7 @@ import javax.servlet.annotation.WebInitParam;
 @WebFilter(urlPatterns = {"/w/chart"}, initParams = {
   @WebInitParam(name = "maxAccessPerTime", value = "120"),
   @WebInitParam(name = "accessTimeSec", value = "60"),
-  @WebInitParam(name = "maxEntries", value = "10000"),
+  @WebInitParam(name = "maxEntries", value = "100000"),
   @WebInitParam(name = "maxLoad", value = "0.9")
 })
 public final class ChartDoSFilter extends DoSFilter {
diff --git a/zxingorg/src/main/java/com/google/zxing/web/ChartServlet.java b/zxingorg/src/main/java/com/google/zxing/web/ChartServlet.java
index bdee822..60cbcf5 100644
--- a/zxingorg/src/main/java/com/google/zxing/web/ChartServlet.java
+++ b/zxingorg/src/main/java/com/google/zxing/web/ChartServlet.java
@@ -114,7 +114,7 @@ public final class ChartServlet extends HttpServlet {
     } else {
       imageFormat = "PNG";
     }
-    
+
     String contentType;
     switch (imageFormat) {
       case "PNG":
@@ -129,7 +129,7 @@ public final class ChartServlet extends HttpServlet {
       default:
         throw new IllegalArgumentException("Unknown format " + imageFormat);
     }
-    
+
     ByteArrayOutputStream imageOut = new ByteArrayOutputStream(1024);
     MatrixToImageWriter.writeToStream(matrix, imageFormat, imageOut);
     byte[] imageData = imageOut.toByteArray();
@@ -143,7 +143,8 @@ public final class ChartServlet extends HttpServlet {
   private static ChartServletRequestParameters doParseParameters(ServletRequest request, boolean readBody)
       throws IOException {
 
-    Preconditions.checkArgument("qr".equals(request.getParameter("cht")), "Bad type");
+    String chartType = request.getParameter("cht");
+    Preconditions.checkArgument(chartType == null || "qr".equals(chartType), "Bad type");
 
     String widthXHeight = request.getParameter("chs");
     Preconditions.checkNotNull(widthXHeight, "No size");
@@ -156,8 +157,10 @@ public final class ChartServlet extends HttpServlet {
     Preconditions.checkArgument(width <= MAX_DIMENSION && height <= MAX_DIMENSION, "Bad size");
 
     String outputEncodingName = request.getParameter("choe");
-    Charset outputEncoding = StandardCharsets.UTF_8;
-    if (outputEncodingName != null) {
+    Charset outputEncoding;
+    if (outputEncodingName == null) {
+      outputEncoding = StandardCharsets.UTF_8;
+    } else {
       outputEncoding = Charset.forName(outputEncodingName);
       Preconditions.checkArgument(SUPPORTED_OUTPUT_ENCODINGS.contains(outputEncoding), "Bad output encoding");
     }
diff --git a/zxingorg/src/main/java/com/google/zxing/web/DecodeDoSFilter.java b/zxingorg/src/main/java/com/google/zxing/web/DecodeDoSFilter.java
index 4b52abd..ac85c47 100644
--- a/zxingorg/src/main/java/com/google/zxing/web/DecodeDoSFilter.java
+++ b/zxingorg/src/main/java/com/google/zxing/web/DecodeDoSFilter.java
@@ -25,7 +25,7 @@ import javax.servlet.annotation.WebInitParam;
 @WebFilter(urlPatterns = {"/w/decode"}, initParams = {
   @WebInitParam(name = "maxAccessPerTime", value = "60"),
   @WebInitParam(name = "accessTimeSec", value = "60"),
-  @WebInitParam(name = "maxEntries", value = "10000"),
+  @WebInitParam(name = "maxEntries", value = "100000"),
   @WebInitParam(name = "maxLoad", value = "0.9")
 })
 public final class DecodeDoSFilter extends DoSFilter {
diff --git a/zxingorg/src/main/java/com/google/zxing/web/DecodeServlet.java b/zxingorg/src/main/java/com/google/zxing/web/DecodeServlet.java
index 4ad2b89..f0a948b 100644
--- a/zxingorg/src/main/java/com/google/zxing/web/DecodeServlet.java
+++ b/zxingorg/src/main/java/com/google/zxing/web/DecodeServlet.java
@@ -91,7 +91,7 @@ import javax.servlet.http.Part;
 @WebServlet(value = "/w/decode", loadOnStartup = 1, initParams = {
   @WebInitParam(name = "maxAccessPerTime", value = "120"),
   @WebInitParam(name = "accessTimeSec", value = "120"),
-  @WebInitParam(name = "maxEntries", value = "10000")
+  @WebInitParam(name = "maxEntries", value = "100000")
 })
 public final class DecodeServlet extends HttpServlet {
 
@@ -170,7 +170,7 @@ public final class DecodeServlet extends HttpServlet {
       for (CharSequence substring : blockedURLSubstrings) {
         if (imageURIString.contains(substring)) {
           log.info("Disallowed URI " + imageURIString);
-          errorResponse(request, response, "badurl");
+          errorResponse(request, response, HttpServletResponse.SC_FORBIDDEN, "badurl");
           return;
         }
       }
@@ -212,8 +212,12 @@ public final class DecodeServlet extends HttpServlet {
       return;
     }
 
-    if (destHostTracker.isBanned(imageURI.getHost())) {
-      errorResponse(request, response, "badurl");
+    String host = imageURI.getHost();
+    // Also should parse for 172.x subnets
+    if (host == null || host.startsWith("10.") || host.startsWith("192.168.") ||
+        "127.0.0.1".equals(host) || "localhost".equals(host) ||
+        destHostTracker.isBanned(host)) {
+      errorResponse(request, response, HttpServletResponse.SC_FORBIDDEN, "badurl");
       return;
     }
 
@@ -268,16 +272,22 @@ public final class DecodeServlet extends HttpServlet {
         errorResponse(request, response, "badurl");
         return;
       }
-      if (connection.getHeaderFieldInt(HttpHeaders.CONTENT_LENGTH, 0) > MAX_IMAGE_SIZE) {
+      int contentLength = connection.getHeaderFieldInt(HttpHeaders.CONTENT_LENGTH, -1);
+      if (contentLength <= 0) {
+        log.info("Bad content length: " + imageURIString);
+        errorResponse(request, response, HttpServletResponse.SC_LENGTH_REQUIRED, "badimage");
+        return;
+      }
+      if (contentLength > MAX_IMAGE_SIZE) {
         log.info("Too large: " + imageURIString);
-        errorResponse(request, response, "badimage");
+        errorResponse(request, response, HttpServletResponse.SC_REQUEST_ENTITY_TOO_LARGE, "badimage");
         return;
       }
       // Assume we'll only handle image/* content types
       String contentType = connection.getContentType();
       if (contentType != null && !contentType.startsWith("image/")) {
         log.info("Wrong content type " + contentType + ": " + imageURIString);
-        errorResponse(request, response, "badimage");
+        errorResponse(request, response, HttpServletResponse.SC_UNSUPPORTED_MEDIA_TYPE, "badimage");
         return;
       }
 
@@ -342,10 +352,14 @@ public final class DecodeServlet extends HttpServlet {
     try {
       int height = image.getHeight();
       int width = image.getWidth();
-      if (height <= 1 || width <= 1 || height * width > MAX_PIXELS) {
-        log.info("Dimensions out of bounds: " + width + 'x' + height);
+      if (height <= 1 || width <= 1) {
+        log.info("Dimensions too small: " + width + 'x' + height);
         errorResponse(request, response, "badimage");
         return;
+      } else if (height * width > MAX_PIXELS) {
+        log.info("Dimensions too large: " + width + 'x' + height);
+        errorResponse(request, response, HttpServletResponse.SC_REQUEST_ENTITY_TOO_LARGE, "badimage");
+        return;
       }
 
       processImage(image, request, response);
@@ -377,7 +391,7 @@ public final class DecodeServlet extends HttpServlet {
         savedException = re;
       }
 
-      if (results.isEmpty()) {
+      if (results.isEmpty() && !Thread.currentThread().isInterrupted()) {
         try {
           // Look for pure barcode
           Result theResult = reader.decode(bitmap, HINTS_PURE);
@@ -389,7 +403,7 @@ public final class DecodeServlet extends HttpServlet {
         }
       }
 
-      if (results.isEmpty()) {
+      if (results.isEmpty() && !Thread.currentThread().isInterrupted()) {
         try {
           // Look for normal barcode in photo
           Result theResult = reader.decode(bitmap, HINTS);
@@ -401,7 +415,7 @@ public final class DecodeServlet extends HttpServlet {
         }
       }
 
-      if (results.isEmpty()) {
+      if (results.isEmpty() && !Thread.currentThread().isInterrupted()) {
         try {
           // Try again with other binarizer
           BinaryBitmap hybridBitmap = new BinaryBitmap(new HybridBinarizer(source));
@@ -447,9 +461,15 @@ public final class DecodeServlet extends HttpServlet {
       request.getRequestDispatcher("decoderesult.jspx").forward(request, response);
     }
   }
+  private static void errorResponse(HttpServletRequest request,
+                                    HttpServletResponse response,
+                                    String key) throws ServletException, IOException {
+    errorResponse(request, response, HttpServletResponse.SC_BAD_REQUEST, key);
+  }
 
   private static void errorResponse(HttpServletRequest request,
                                     HttpServletResponse response,
+                                    int httpStatus,
                                     String key) throws ServletException, IOException {
     Locale locale = request.getLocale();
     if (locale == null) {
@@ -464,7 +484,7 @@ public final class DecodeServlet extends HttpServlet {
     if (dispatcher == null) {
       log.warning("Can't obtain RequestDispatcher");
     } else {
-      response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
+      response.setStatus(httpStatus);
       dispatcher.forward(request, response);
     }
   }
diff --git a/zxingorg/src/main/java/com/google/zxing/web/DoSTracker.java b/zxingorg/src/main/java/com/google/zxing/web/DoSTracker.java
index c840520..89032cd 100644
--- a/zxingorg/src/main/java/com/google/zxing/web/DoSTracker.java
+++ b/zxingorg/src/main/java/com/google/zxing/web/DoSTracker.java
@@ -47,8 +47,8 @@ final class DoSTracker {
    *                exceeds this value, and upwards when below this value
    */
   DoSTracker(Timer timer,
-             final String name,
-             final int maxAccessesPerTime,
+             String name,
+             int maxAccessesPerTime,
              long accessTimeMS,
              int maxEntries,
              Double maxLoad) {
@@ -89,7 +89,10 @@ final class DoSTracker {
       // smallest count > maxAccessesPerTime
       int minDisallowedCount = Integer.MAX_VALUE;
       int localMAPT = maxAccessesPerTime;
+      int totalEntries;
+      int clearedEntries = 0;
       synchronized (numRecentAccesses) {
+        totalEntries = numRecentAccesses.size();
         Iterator<Map.Entry<String,AtomicInteger>> accessIt = numRecentAccesses.entrySet().iterator();
         while (accessIt.hasNext()) {
           Map.Entry<String,AtomicInteger> entry = accessIt.next();
@@ -99,15 +102,16 @@ final class DoSTracker {
           if (count <= localMAPT) {
             accessIt.remove();
             maxAllowedCount = Math.max(maxAllowedCount, count);
+            clearedEntries++;
           } else {
-            // Else it exceeded the max, so log it (again)
-            log.warning(name + ": Blocking " + entry.getKey() + " (" + count + " outstanding)");
             // Reduce count of accesses held against the host
             atomicCount.getAndAdd(-localMAPT);
             minDisallowedCount = Math.min(minDisallowedCount, count);
           }
         }
       }
+      log.info(name + ": " + clearedEntries + " of " + totalEntries + " cleared");
+
       if (maxLoad != null) {
         OperatingSystemMXBean mxBean = ManagementFactory.getOperatingSystemMXBean();
         if (mxBean == null) {
@@ -117,11 +121,13 @@ final class DoSTracker {
           if (loadAvg >= 0.0) {
             int cores = mxBean.getAvailableProcessors();
             double loadRatio = loadAvg / cores;
-            log.info(name + ": Load ratio: " + loadRatio + " (" + loadAvg + '/' + cores + ") vs " + maxLoad);
-            maxAccessesPerTime = loadRatio > maxLoad ?
-              Math.min(maxAllowedCount, maxAccessesPerTime) :
-              Math.max(minDisallowedCount, maxAccessesPerTime);
-            log.info(name + ": New maxAccessesPerTime: " + maxAccessesPerTime);
+            int newMaxAccessesPerTime = loadRatio > maxLoad ?
+                Math.min(maxAllowedCount, Math.max(1, maxAccessesPerTime - 1)) :
+                Math.max(minDisallowedCount, maxAccessesPerTime);
+            log.info(name + ": Load ratio: " + loadRatio +
+                " (" + loadAvg + '/' + cores + ") vs " + maxLoad +
+                " ; new maxAccessesPerTime: " + newMaxAccessesPerTime);
+            maxAccessesPerTime = newMaxAccessesPerTime;
           }
         }
       }
diff --git a/zxingorg/src/main/java/com/google/zxing/web/OutputUtils.java b/zxingorg/src/main/java/com/google/zxing/web/OutputUtils.java
index 7d31fc8..191acf1 100644
--- a/zxingorg/src/main/java/com/google/zxing/web/OutputUtils.java
+++ b/zxingorg/src/main/java/com/google/zxing/web/OutputUtils.java
@@ -18,7 +18,7 @@ package com.google.zxing.web;
 
 /**
  * Utility functions for {@code decoderesult.jspx}.
- * 
+ *
  * @author Sean Owen
  */
 public final class OutputUtils {
@@ -42,17 +42,14 @@ public final class OutputUtils {
       } else if (i % HALF_BYTES_PER_LINE == 0) {
         result.append("   ");
       } else {
-        result.append(' ');        
+        result.append(' ');
       }
     }
     return result.toString();
   }
-  
+
   private static char hexChar(int value) {
-    if (value < 0 || value > 15) {
-      throw new IllegalArgumentException("Bad hex digit value " + value);
-    }
     return (char) (value < 10 ? ('0' + value) : ('a' + (value - 10)));
   }
-  
+
 }
diff --git a/zxingorg/src/main/java/com/google/zxing/web/TimeoutFilter.java b/zxingorg/src/main/java/com/google/zxing/web/TimeoutFilter.java
new file mode 100644
index 0000000..ed11b56
--- /dev/null
+++ b/zxingorg/src/main/java/com/google/zxing/web/TimeoutFilter.java
@@ -0,0 +1,92 @@
+/*
+ * Copyright 2022 ZXing authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.zxing.web;
+
+import com.google.common.util.concurrent.SimpleTimeLimiter;
+import com.google.common.util.concurrent.TimeLimiter;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.annotation.WebFilter;
+import javax.servlet.annotation.WebInitParam;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.TimeoutException;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Protect the decode endpoint from long-running requests.
+ */
+@WebFilter(urlPatterns = {"/w/decode"}, initParams = {
+  @WebInitParam(name = "timeoutSec", value = "10"),
+})
+public final class TimeoutFilter implements Filter {
+
+  private ExecutorService executorService;
+  private TimeLimiter timeLimiter;
+  private int timeoutSec;
+
+  @Override
+  public void init(FilterConfig filterConfig) {
+    executorService = Executors.newCachedThreadPool();
+    timeLimiter = SimpleTimeLimiter.create(executorService);
+    timeoutSec = Integer.parseInt(filterConfig.getInitParameter("timeoutSec"));
+  }
+
+  @Override
+  public void doFilter(ServletRequest request,
+                       ServletResponse response,
+                       FilterChain chain) throws IOException, ServletException {
+    try {
+      timeLimiter.callWithTimeout(new Callable<Void>() {
+        @Override
+        public Void call() throws Exception {
+          chain.doFilter(request, response);
+          return null;
+        }
+      }, timeoutSec, TimeUnit.SECONDS);
+    } catch (TimeoutException | InterruptedException e) {
+      HttpServletResponse servletResponse = (HttpServletResponse) response;
+      servletResponse.setStatus(HttpServletResponse.SC_REQUEST_TIMEOUT);
+      servletResponse.getWriter().write("Request took too long");
+    } catch (ExecutionException e) {
+      if (e.getCause() instanceof ServletException) {
+        throw (ServletException) e.getCause();
+      }
+      if (e.getCause() instanceof IOException) {
+        throw (IOException) e.getCause();
+      }
+      throw new ServletException(e.getCause());
+    }
+  }
+
+  @Override
+  public void destroy() {
+    if (executorService != null) {
+      executorService.shutdownNow();
+    }
+  }
+
+}
diff --git a/zxingorg/src/test/java/com/google/zxing/web/ChartServletTestCase.java b/zxingorg/src/test/java/com/google/zxing/web/ChartServletTestCase.java
new file mode 100644
index 0000000..1fe34f0
--- /dev/null
+++ b/zxingorg/src/test/java/com/google/zxing/web/ChartServletTestCase.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2020 ZXing authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.zxing.web;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.springframework.mock.web.MockHttpServletRequest;
+import org.springframework.mock.web.MockHttpServletResponse;
+
+import java.util.HashMap;
+import java.util.Map;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * Tests {@link ChartServlet}.
+ */
+public final class ChartServletTestCase extends Assert {
+
+  @Test
+  public void testChart() throws Exception {
+    ChartServlet servlet = new ChartServlet();
+
+    for (String contentType : new String[] { "png", "jpeg", "gif"}) {
+      MockHttpServletRequest request = new MockHttpServletRequest();
+      request.setRequestURI("image." + contentType);
+      Map<String, String> params = new HashMap<>();
+      params.put("chl", "foo");
+      params.put("chs", "100x100");
+      params.put("chld", "M");
+      request.setParameters(params);
+
+      MockHttpServletResponse response = new MockHttpServletResponse();
+
+      servlet.doGet(request, response);
+
+      assertEquals(HttpServletResponse.SC_OK, response.getStatus());
+      assertEquals("image/" + contentType, response.getContentType());
+      assertTrue(response.getContentAsByteArray().length > 0);
+    }
+
+    servlet.destroy();
+  }
+
+}
diff --git a/zxingorg/src/test/java/com/google/zxing/web/DecodeServletTestCase.java b/zxingorg/src/test/java/com/google/zxing/web/DecodeServletTestCase.java
new file mode 100644
index 0000000..361221b
--- /dev/null
+++ b/zxingorg/src/test/java/com/google/zxing/web/DecodeServletTestCase.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright 2020 ZXing authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.zxing.web;
+
+import com.google.common.net.MediaType;
+import org.junit.Assert;
+import org.junit.Test;
+import org.springframework.mock.web.MockHttpServletRequest;
+import org.springframework.mock.web.MockHttpServletResponse;
+import org.springframework.mock.web.MockServletConfig;
+
+import java.util.HashMap;
+import java.util.Map;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * Tests {@link DecodeServlet}.
+ */
+public final class DecodeServletTestCase extends Assert {
+
+  private static final String IMAGE_DATA_URI =
+      "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACEAAAAhAQAAAAB/n//CAAAAkklEQVR42mP4DwQNDJjkB4" +
+      "E77A0M369N/d7A8CV6rjiQjPMFkWG1QPL7RVGg%2BAfREKCa/5/vA9V/nFSQ3sDwb7/KdiDJqX4dSH4pXN/A8DfyDVD2" +
+      "988HQPUfPVaqA0XKz%2BgD9bIk1AP1fgwvB7KlS9VBdqXbA82PT9AH2fiaH2SXGdDM71fDgeIfhIvKsbkTTAIAKYVr0N" +
+      "z5IloAAAAASUVORK5CYII=";
+
+  @Test
+  public void testDataURI() throws Exception {
+    MockServletConfig config = new MockServletConfig();
+    config.addInitParameter("maxAccessPerTime", "100");
+    config.addInitParameter("accessTimeSec", "100");
+    config.addInitParameter("maxEntries", "100");
+
+    DecodeServlet servlet = new DecodeServlet();
+    servlet.init(config);
+
+    MockHttpServletRequest request = new MockHttpServletRequest();
+    Map<String, String> params = new HashMap<>();
+    params.put("u", IMAGE_DATA_URI);
+    params.put("full", "false");
+    request.setParameters(params);
+
+    MockHttpServletResponse response = new MockHttpServletResponse();
+
+    servlet.doGet(request, response);
+
+    assertEquals(HttpServletResponse.SC_OK, response.getStatus());
+    assertEquals(MediaType.PLAIN_TEXT_UTF_8.toString(), response.getContentType());
+    assertEquals("--error-correction_level\n", response.getContentAsString());
+
+    servlet.destroy();
+  }
+
+}
diff --git a/zxingorg/src/test/java/com/google/zxing/web/ServletContextLogHandlerTestCase.java b/zxingorg/src/test/java/com/google/zxing/web/ServletContextLogHandlerTestCase.java
new file mode 100644
index 0000000..f613134
--- /dev/null
+++ b/zxingorg/src/test/java/com/google/zxing/web/ServletContextLogHandlerTestCase.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2020 ZXing authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.zxing.web;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.springframework.mock.web.MockServletContext;
+
+import java.util.logging.Level;
+import java.util.logging.LogRecord;
+
+/**
+ * Tests {@link ServletContextLogHandler}.
+ */
+public final class ServletContextLogHandlerTestCase extends Assert {
+
+  @Test
+  public void testLogHandler() {
+    // Can't test much here
+    MockServletContext context = new MockServletContext();
+    ServletContextLogHandler handler = new ServletContextLogHandler(context);
+    handler.publish(new LogRecord(Level.INFO, "test log message"));
+    handler.flush();
+    handler.close();
+  }
+
+}
diff --git a/zxingorg/src/test/java/com/google/zxing/web/TimeoutFilterTestCase.java b/zxingorg/src/test/java/com/google/zxing/web/TimeoutFilterTestCase.java
new file mode 100644
index 0000000..3087b34
--- /dev/null
+++ b/zxingorg/src/test/java/com/google/zxing/web/TimeoutFilterTestCase.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2022 ZXing authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.zxing.web;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.springframework.mock.web.MockFilterChain;
+import org.springframework.mock.web.MockFilterConfig;
+import org.springframework.mock.web.MockHttpServletRequest;
+import org.springframework.mock.web.MockHttpServletResponse;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.GenericServlet;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * Tests {@link TimeoutFilter}.
+ */
+public final class TimeoutFilterTestCase extends Assert {
+
+  @Test
+  public void testTimeout() throws Exception {
+    MockFilterConfig config = new MockFilterConfig();
+    config.addInitParameter("timeoutSec", "1");
+    Filter filter = new TimeoutFilter();
+    filter.init(config);
+
+    FilterChain chain = new MockFilterChain(new GenericServlet() {
+      @Override
+      public void service(ServletRequest req, ServletResponse res) {
+        try {
+          Thread.sleep(2000);
+        } catch (InterruptedException e) {
+          // continue
+        }
+      }
+    });
+    HttpServletResponse response = new MockHttpServletResponse();
+    filter.doFilter(new MockHttpServletRequest(), response, chain);
+    filter.destroy();
+    assertEquals(HttpServletResponse.SC_REQUEST_TIMEOUT, response.getStatus());
+  }
+
+}

Debdiff

[The following lists of changes regard files as different if they have different names, permissions or owners.]

Files in second set of .debs but not in first

-rw-r--r--  root/root   /usr/share/maven-repo/com/google/zxing/core/3.5.2-SNAPSHOT/core-3.5.2-SNAPSHOT.pom
-rw-r--r--  root/root   /usr/share/maven-repo/com/google/zxing/javase/3.5.2-SNAPSHOT/javase-3.5.2-SNAPSHOT.pom
-rw-r--r--  root/root   /usr/share/maven-repo/com/google/zxing/zxing-parent/3.5.2-SNAPSHOT/zxing-parent-3.5.2-SNAPSHOT.pom
lrwxrwxrwx  root/root   /usr/share/java/core-3.5.2-SNAPSHOT.jar -> core.jar
lrwxrwxrwx  root/root   /usr/share/java/javase-3.5.2-SNAPSHOT.jar -> javase.jar
lrwxrwxrwx  root/root   /usr/share/maven-repo/com/google/zxing/core/3.5.2-SNAPSHOT/core-3.5.2-SNAPSHOT.jar -> ../../../../../../java/core.jar
lrwxrwxrwx  root/root   /usr/share/maven-repo/com/google/zxing/javase/3.5.2-SNAPSHOT/javase-3.5.2-SNAPSHOT.jar -> ../../../../../../java/javase.jar

Files in first set of .debs but not in second

-rw-r--r--  root/root   /usr/share/maven-repo/com/google/zxing/core/3.4.1/core-3.4.1.pom
-rw-r--r--  root/root   /usr/share/maven-repo/com/google/zxing/javase/3.4.1/javase-3.4.1.pom
-rw-r--r--  root/root   /usr/share/maven-repo/com/google/zxing/zxing-parent/3.4.1/zxing-parent-3.4.1.pom
lrwxrwxrwx  root/root   /usr/share/java/core-3.4.1.jar -> core.jar
lrwxrwxrwx  root/root   /usr/share/java/javase-3.4.1.jar -> javase.jar
lrwxrwxrwx  root/root   /usr/share/maven-repo/com/google/zxing/core/3.4.1/core-3.4.1.jar -> ../../../../../../java/core.jar
lrwxrwxrwx  root/root   /usr/share/maven-repo/com/google/zxing/javase/3.4.1/javase-3.4.1.jar -> ../../../../../../java/javase.jar

No differences were encountered between the control files of package libzxing-core-java

No differences were encountered between the control files of package libzxing-java

No differences were encountered between the control files of package libzxing-javase-java

More details

Full run details