function crc32(bytes, length = bytes.length, index = 0, crc = 0) {
  const end = index + length;

  crc ^= -1;

  for (let i = index; i < end; i += 1) {
    crc = (crc >>> 8) ^ table[(crc ^ bytes[i]) & 0xff];
  }

  return (crc ^ -1) >>> 0;
}
@param {Uint8Array} bytes
@param {number} length
@param {number} index
@param {number} crc