add "is_cd" flag to CUESHEET everywhere
diff --git a/src/libFLAC/format.c b/src/libFLAC/format.c
index 60cf4cf..87c2d77 100644
--- a/src/libFLAC/format.c
+++ b/src/libFLAC/format.c
@@ -81,7 +81,8 @@
 
 FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_MEDIA_CATALOG_NUMBER_LEN = 128*8; /* bits */
 FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_LEAD_IN_LEN = 64; /* bits */
-FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_RESERVED_LEN = 259*8; /* bits @@@@259 */
+FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_IS_CD_LEN = 1; /* bit */
+FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_RESERVED_LEN = 7+258*8; /* bits @@@@258 */
 FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_NUM_TRACKS_LEN = 8; /* bits */
 
 FLAC_API const unsigned FLAC__STREAM_METADATA_IS_LAST_LEN = 1; /* bits */
diff --git a/src/libFLAC/metadata_iterators.c b/src/libFLAC/metadata_iterators.c
index 8d0a326..6c96652 100644
--- a/src/libFLAC/metadata_iterators.c
+++ b/src/libFLAC/metadata_iterators.c
@@ -1610,7 +1610,7 @@
 	FLAC__byte buffer[1024]; /* MSVC needs a constant expression so we put a magic number and assert */
 
 	FLAC__ASSERT(0 != file);
-	FLAC__ASSERT(FLAC__STREAM_METADATA_CUESHEET_RESERVED_LEN/8 <= sizeof(buffer));
+	FLAC__ASSERT((FLAC__STREAM_METADATA_CUESHEET_IS_CD_LEN + FLAC__STREAM_METADATA_CUESHEET_RESERVED_LEN)/8 <= sizeof(buffer));
 	FLAC__ASSERT(sizeof(FLAC__uint64) <= sizeof(buffer));
 
 	FLAC__ASSERT(FLAC__STREAM_METADATA_CUESHEET_MEDIA_CATALOG_NUMBER_LEN % 8 == 0);
@@ -1624,10 +1624,11 @@
 		return FLAC__METADATA_SIMPLE_ITERATOR_STATUS_READ_ERROR;
 	block->lead_in = unpack_uint64_(buffer, len);
 
-	FLAC__ASSERT(FLAC__STREAM_METADATA_CUESHEET_RESERVED_LEN % 8 == 0);
-	len = FLAC__STREAM_METADATA_CUESHEET_RESERVED_LEN / 8;
+	FLAC__ASSERT((FLAC__STREAM_METADATA_CUESHEET_IS_CD_LEN + FLAC__STREAM_METADATA_CUESHEET_RESERVED_LEN) % 8 == 0);
+	len = (FLAC__STREAM_METADATA_CUESHEET_IS_CD_LEN + FLAC__STREAM_METADATA_CUESHEET_RESERVED_LEN) / 8;
 	if(fread(buffer, 1, len, file) != len)
 		return FLAC__METADATA_SIMPLE_ITERATOR_STATUS_READ_ERROR;
+	block->is_cd = buffer[0]&0x80? true : false;
 
 	FLAC__ASSERT(FLAC__STREAM_METADATA_CUESHEET_NUM_TRACKS_LEN % 8 == 0);
 	len = FLAC__STREAM_METADATA_CUESHEET_NUM_TRACKS_LEN / 8;
@@ -1825,7 +1826,7 @@
 
 	FLAC__ASSERT(sizeof(buffer) >= sizeof(FLAC__uint64));
 	FLAC__ASSERT(sizeof(buffer) >= FLAC__STREAM_METADATA_CUESHEET_RESERVED_LEN/8);
-	FLAC__ASSERT(sizeof(buffer) >= (FLAC__STREAM_METADATA_CUESHEET_TRACK_TYPE_LEN + FLAC__STREAM_METADATA_CUESHEET_TRACK_PRE_EMPHASIS_LEN + FLAC__STREAM_METADATA_CUESHEET_TRACK_RESERVED_LEN)/8);
+	FLAC__ASSERT(sizeof(buffer) >= (FLAC__STREAM_METADATA_CUESHEET_TRACK_TYPE_LEN + FLAC__STREAM_METADATA_CUESHEET_TRACK_PRE_EMPHASIS_LEN + FLAC__STREAM_METADATA_CUESHEET_IS_CD_LEN + FLAC__STREAM_METADATA_CUESHEET_TRACK_RESERVED_LEN)/8);
 	FLAC__ASSERT(sizeof(buffer) >= FLAC__STREAM_METADATA_CUESHEET_INDEX_RESERVED_LEN/8);
 
 	FLAC__ASSERT(0 != file);
@@ -1841,9 +1842,11 @@
 	if(fwrite(buffer, 1, len, file) != len)
 		return FLAC__METADATA_SIMPLE_ITERATOR_STATUS_WRITE_ERROR;
 
-	FLAC__ASSERT(FLAC__STREAM_METADATA_CUESHEET_RESERVED_LEN % 8 == 0);
-	len = FLAC__STREAM_METADATA_CUESHEET_RESERVED_LEN / 8;
+	FLAC__ASSERT((FLAC__STREAM_METADATA_CUESHEET_IS_CD_LEN + FLAC__STREAM_METADATA_CUESHEET_RESERVED_LEN) % 8 == 0);
+	len = (FLAC__STREAM_METADATA_CUESHEET_IS_CD_LEN + FLAC__STREAM_METADATA_CUESHEET_RESERVED_LEN) / 8;
 	memset(buffer, 0, len);
+	if(block->is_cd)
+		buffer[0] |= 0x80;
 	if(fwrite(buffer, 1, len, file) != len)
 		return FLAC__METADATA_SIMPLE_ITERATOR_STATUS_WRITE_ERROR;
 
diff --git a/src/libFLAC/metadata_object.c b/src/libFLAC/metadata_object.c
index 439902c..49d37f5 100644
--- a/src/libFLAC/metadata_object.c
+++ b/src/libFLAC/metadata_object.c
@@ -207,6 +207,7 @@
 	object->length = (
 		FLAC__STREAM_METADATA_CUESHEET_MEDIA_CATALOG_NUMBER_LEN +
 		FLAC__STREAM_METADATA_CUESHEET_LEAD_IN_LEN +
+		FLAC__STREAM_METADATA_CUESHEET_IS_CD_LEN +
 		FLAC__STREAM_METADATA_CUESHEET_RESERVED_LEN +
 		FLAC__STREAM_METADATA_CUESHEET_NUM_TRACKS_LEN
 	) / 8;
@@ -586,6 +587,9 @@
 	if(block1->lead_in != block2->lead_in)
 		return false;
 
+	if(block1->is_cd != block2->is_cd)
+		return false;
+
 	if(block1->num_tracks != block2->num_tracks)
 		return false;
 
diff --git a/src/libFLAC/stream_decoder.c b/src/libFLAC/stream_decoder.c
index c8c2b48..605762a 100644
--- a/src/libFLAC/stream_decoder.c
+++ b/src/libFLAC/stream_decoder.c
@@ -1132,6 +1132,10 @@
 	if(!FLAC__bitbuffer_read_raw_uint64(decoder->private_->input, &obj->lead_in, FLAC__STREAM_METADATA_CUESHEET_LEAD_IN_LEN, read_callback_, decoder))
 		return false; /* the read_callback_ sets the state for us */
 
+	if(!FLAC__bitbuffer_read_raw_uint32(decoder->private_->input, &x, FLAC__STREAM_METADATA_CUESHEET_IS_CD_LEN, read_callback_, decoder))
+		return false; /* the read_callback_ sets the state for us */
+	obj->is_cd = x? true : false;
+
 	if(!FLAC__bitbuffer_skip_bits_no_crc(decoder->private_->input, FLAC__STREAM_METADATA_CUESHEET_RESERVED_LEN, read_callback_, decoder))
 		return false; /* the read_callback_ sets the state for us */
 
diff --git a/src/libFLAC/stream_encoder.c b/src/libFLAC/stream_encoder.c
index 97e4791..f4f910b 100644
--- a/src/libFLAC/stream_encoder.c
+++ b/src/libFLAC/stream_encoder.c
@@ -680,7 +680,7 @@
 			metadata_has_vorbis_comment = true;
 		}
 		else if(encoder->protected_->metadata[i]->type == FLAC__METADATA_TYPE_CUESHEET) {
-			if(!FLAC__format_cuesheet_is_legal(&encoder->protected_->metadata[i]->data.cue_sheet, /*check_cd_da_subset=*/false, /*violation=*/0))
+			if(!FLAC__format_cuesheet_is_legal(&encoder->protected_->metadata[i]->data.cue_sheet, encoder->protected_->metadata[i]->data.cue_sheet.is_cd, /*violation=*/0))
 				return encoder->protected_->state = FLAC__STREAM_ENCODER_INVALID_METADATA;
 		}
 	}
diff --git a/src/libFLAC/stream_encoder_framing.c b/src/libFLAC/stream_encoder_framing.c
index e0afb6a..14b721c 100644
--- a/src/libFLAC/stream_encoder_framing.c
+++ b/src/libFLAC/stream_encoder_framing.c
@@ -125,6 +125,8 @@
 				return false;
 			if(!FLAC__bitbuffer_write_raw_uint64(bb, metadata->data.cue_sheet.lead_in, FLAC__STREAM_METADATA_CUESHEET_LEAD_IN_LEN))
 				return false;
+			if(!FLAC__bitbuffer_write_raw_uint32(bb, metadata->data.cue_sheet.is_cd? 1 : 0, FLAC__STREAM_METADATA_CUESHEET_IS_CD_LEN))
+				return false;
 			if(!FLAC__bitbuffer_write_zeroes(bb, FLAC__STREAM_METADATA_CUESHEET_RESERVED_LEN))
 				return false;
 			if(!FLAC__bitbuffer_write_raw_uint32(bb, metadata->data.cue_sheet.num_tracks, FLAC__STREAM_METADATA_CUESHEET_NUM_TRACKS_LEN))
@@ -163,6 +165,7 @@
 			FLAC__ASSERT(0);
 	}
 
+	FLAC__ASSERT(FLAC__bitbuffer_is_byte_aligned(bb));
 	return true;
 }