+ if (contains_duplicates(d->inputs)) {
+ fail_txt = "duplicate input IDs";
+ goto err_out;
+ }
+
+ if (contains_duplicates(d->outputs)) {
+ fail_txt = "duplicate output IDs";
+ goto err_out;
+ }
+
+ if (contains_duplicates(d->tags)) {
+ fail_txt = "duplicate tags";
+ goto err_out;
+ }
+
+ if (contains_duplicate_ids(d->channels, d->channels)) {
+ fail_txt = "duplicate channel IDs";
+ goto err_out;
+ }
+
+ if (contains_duplicate_ids(d->opt_channels, d->opt_channels)) {
+ fail_txt = "duplicate optional channel IDs";
+ goto err_out;
+ }
+
+ if (contains_duplicate_ids(d->channels, d->opt_channels)) {
+ fail_txt = "channel and optional channel IDs contain duplicates";
+ goto err_out;
+ }
+
+ if (contains_duplicate_ids(d->options, d->options)) {
+ fail_txt = "duplicate option IDs";
+ goto err_out;
+ }
+
+ if (contains_duplicate_ids(d->annotations, d->annotations)) {
+ fail_txt = "duplicate annotation class IDs";
+ goto err_out;
+ }
+
+ if (contains_duplicate_row_ids(d->annotation_rows, d->annotation_rows)) {
+ fail_txt = "duplicate annotation row IDs";
+ goto err_out;
+ }
+
+ if (contains_duplicate_ids(d->annotations, d->annotation_rows)) {
+ fail_txt = "annotation class/row IDs contain duplicates";
+ goto err_out;
+ }
+
+ if (contains_duplicate_ids(d->binary, d->binary)) {
+ fail_txt = "duplicate binary class IDs";
+ goto err_out;
+ }
+