// Path: src/main/java/uk/org/okapibarcode/backend/DataBarLimited.java
// static int[] getWidths(int val, int n, int elements, int maxWidth, int noNarrow) {
// 
//     int bar;
//     int elmWidth;
//     int mxwElement;
//     int subVal, lessVal;
//     int narrowMask = 0;
//     int[] widths = new int[elements];
// 
//     for (bar = 0; bar < elements - 1; bar++) {
//         for (elmWidth = 1, narrowMask |= (1 << bar); ;
//                 elmWidth++, narrowMask &= ~ (1 << bar)) {
//             /* get all combinations */
//             subVal = getCombinations(n - elmWidth - 1, elements - bar - 2);
//             /* less combinations with no single-module element */
//             if ((noNarrow == 0) && (narrowMask == 0)
//                     && (n - elmWidth - (elements - bar - 1) >= elements - bar - 1)) {
//                 subVal -= getCombinations(n - elmWidth - (elements - bar), elements - bar - 2);
//             }
//             /* less combinations with elements > maxVal */
//             if (elements - bar - 1 > 1) {
//                 lessVal = 0;
//                 for (mxwElement = n - elmWidth - (elements - bar - 2);
//                 mxwElement > maxWidth;
//                 mxwElement--) {
//                     lessVal += getCombinations(n - elmWidth - mxwElement - 1, elements - bar - 3);
//                 }
//                 subVal -= lessVal * (elements - 1 - bar);
//             } else if (n - elmWidth > maxWidth) {
//                 subVal--;
//             }
//             val -= subVal;
//             if (val < 0) break;
//         }
//         val += subVal;
//         n -= elmWidth;
//         widths[bar] = elmWidth;
//     }
// 
//     widths[bar] = n;
// 
//     return widths;
// }


import static uk.org.okapibarcode.backend.DataBarLimited.getWidths;
import java.math.BigInteger;
     *
     * @return the separator height for {@link Mode#STACKED} and {@link Mode#OMNI} symbols
     */
    public int getSeparatorHeight() {
        return separatorHeight;
    }

    @Override
    protected void encode() {

        boolean[][] grid = new boolean[5][100];
        BigInteger accum;
        BigInteger left_reg;
        BigInteger right_reg;
        int[] data_character = new int[4];
        int[] data_group = new int[4];
        int[] v_odd = new int[4];
        int[] v_even = new int[4];
        int i;
        int[][] data_widths = new int[8][4];
        int checksum;
        int c_left;
        int c_right;
        int[] total_widths = new int[46];
        int writer;
        char latch;
        int j;
        int count;
        int check_digit;
        StringBuilder bin = new StringBuilder();
// Path: src/main/java/uk/org/okapibarcode/backend/DataBarLimited.java
// static int[] getWidths(int val, int n, int elements, int maxWidth, int noNarrow) {
// 
//     int bar;
//     int elmWidth;
//     int mxwElement;
//     int subVal, lessVal;
//     int narrowMask = 0;
//     int[] widths = new int[elements];
// 
//     for (bar = 0; bar < elements - 1; bar++) {
//         for (elmWidth = 1, narrowMask |= (1 << bar); ;
//                 elmWidth++, narrowMask &= ~ (1 << bar)) {
//             /* get all combinations */
//             subVal = getCombinations(n - elmWidth - 1, elements - bar - 2);
//             /* less combinations with no single-module element */
//             if ((noNarrow == 0) && (narrowMask == 0)
//                     && (n - elmWidth - (elements - bar - 1) >= elements - bar - 1)) {
//                 subVal -= getCombinations(n - elmWidth - (elements - bar), elements - bar - 2);
//             }
//             /* less combinations with elements > maxVal */
//             if (elements - bar - 1 > 1) {
//                 lessVal = 0;
//                 for (mxwElement = n - elmWidth - (elements - bar - 2);
//                 mxwElement > maxWidth;
//                 mxwElement--) {
//                     lessVal += getCombinations(n - elmWidth - mxwElement - 1, elements - bar - 3);
//                 }
//                 subVal -= lessVal * (elements - 1 - bar);
//             } else if (n - elmWidth > maxWidth) {
//                 subVal--;
//             }
//             val -= subVal;
//             if (val < 0) break;
//         }
//         val += subVal;
//         n -= elmWidth;
//         widths[bar] = elmWidth;
//     }
// 
//     widths[bar] = n;
// 
//     return widths;
// }


// Path: src/main/java/uk/org/okapibarcode/backend/DataBar14.java
import static uk.org.okapibarcode.backend.DataBarLimited.getWidths;
import java.math.BigInteger;

     *
     * @return the separator height for {@link Mode#STACKED} and {@link Mode#OMNI} symbols
     */
    public int getSeparatorHeight() {
        return separatorHeight;
    }

    @Override
    protected void encode() {

        boolean[][] grid = new boolean[5][100];
        BigInteger accum;
        BigInteger left_reg;
        BigInteger right_reg;
        int[] data_character = new int[4];
        int[] data_group = new int[4];
        int[] v_odd = new int[4];
        int[] v_even = new int[4];
        int i;
        int[][] data_widths = new int[8][4];
        int checksum;
        int c_left;
        int c_right;
        int[] total_widths = new int[46];
        int writer;
        char latch;
        int j;
        int count;
        int check_digit;
        StringBuilder bin = new StringBuilder();
        int compositeOffset = 0;