code: public void solveVandermondeSystem(int[] x, byte[][] y, 
                                       int len, int dataStart, int dataLen) {
      assert(x.length <= len && y.length <= len);
      int dataEnd = dataStart + dataLen;
      for (int i = 0; i < len - 1; i++) {
        for (int j = len - 1; j > i; j--) {
          for (int k = dataStart; k < dataEnd; k++) {
            y[j][k] = (byte)(y[j][k] ^ mulTable[x[i]][y[j - 1][k] & 0x000000FF]);
          }
        }
      }
      for (int i = len - 1; i >= 0; i--) {
        for (int j = i + 1; j < len; j++) {
          for (int k = dataStart; k < dataEnd; k++) {
            y[j][k] = (byte)(divTable[y[j][k] & 0x000000FF][x[j] ^ x[j - i - 1]]);
          }
        }
        for (int j = i; j < len - 1; j++) {
          for (int k = dataStart; k < dataEnd; k++) {
            y[j][k] = (byte)(y[j][k] ^ y[j + 1][k]);
          }
        }
      }
    }
docs: A "bulk" version of the solveVandermondeSystem