<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.43 (Ruby 4.0.2) -->
<?rfc compact="yes"?>
<?rfc comments="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-cbor-edn-literals-28" category="std" consensus="true" submissionType="IETF" updates="8610, 8949" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.33.0 -->
  <front>
    <title>Concise Diagnostic Notation (CDN)</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-edn-literals-28"/>
    <author initials="C." surname="Bormann" fullname="Carsten Bormann">
      <organization>Universität Bremen TZI</organization>
      <address>
        <postal>
          <street>Postfach 330440</street>
          <city>Bremen</city>
          <code>D-28359</code>
          <country>Germany</country>
        </postal>
        <phone>+49-421-218-63921</phone>
        <email>cabo@tzi.org</email>
      </address>
    </author>
    <date year="2026" month="September" day="29"/>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 119?>

<t>This document formalizes and consolidates the definition of the Concise
Diagnostic Notation (CDN) of the Concise Binary Object Representation
(CBOR), addressing implementer experience.</t>
      <t>Replacing CDN's previous informal descriptions, it updates
RFC 8949, obsoleting its Section 8, and RFC 8610, obsoleting its
Appendix G.</t>
      <t>It also specifies registry-based extension points and uses them
to support text representations such as of epoch-based dates/times and of IP
addresses and prefixes.</t>
      <t><cref anchor="status">(This cref will be removed by the RFC editor:)<br/>
This revision -28 attempts to reflect various feature removals
that have been discussed on the mailing list, as a delta to -27.
Note that, with the focus on the delta, this text is necessary somewhat inconsistent.
The chairs decided not to include further editorial improvements
that could achieve a greater degree of consistency.
The text may be misleading as some of the explanatory sections no
longer fully reflect the technical content.
The text also does not have WG input yet on any renaming decisions (CDN name, b1/t1 name).</cref></t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://cbor-wg.github.io/edn-literal/"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-cbor-edn-literals/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        cbor Working Group mailing list (<eref target="mailto:cbor@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/cbor/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/cbor/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/cbor-wg/edn-literal"/>.</t>
    </note>
  </front>
  <middle>
    <?line 146?>

<section anchor="intro">
      <name>Introduction</name>
      <t>The Concise Binary Object Representation (CBOR) (RFC8949) <xref target="STD94"/>
    is a data format whose design goals include the possibility of
    extremely small code size, fairly small message size, and
    extensibility without the need for version negotiation.
In addition to the binary interchange format, the original CBOR specification
    described a text-based "diagnostic notation" (<xref section="6" sectionFormat="of" target="RFC7049"/>, now Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>), in
    order to facilitate conversation about CBOR data items without having
    to resort to binary data.
<xref section="G" sectionFormat="of" target="RFC8610"/> extended this into what also became known as
Extended Diagnostic Notation (EDN), often including <xref section="4.2" sectionFormat="of" target="RFC8742"/> and draft revisions of the present document.
Diagnostic notation is now specified by this document, obsoleting all these
previous descriptions, and is known as Concise Diagnostic Notation (CDN).</t>
      <t>Diagnostic notation syntax is based on JSON, with extensions
for representing CBOR constructs such as binary data and tags.</t>
      <t>The interchange format created by standardizing CDN is not intended to
compete with the actual binary interchange format CBOR, but enables
the use of a shared diagnostic notation in tools for and in documents
about CBOR.
However, between tools for CBOR development and diagnosis, document
generation systems, continuous integration (CI)
environments, configuration files, and user interfaces for viewing and
editing for all these, CDN is often "interchanged".
Therefore, CDN deserves a specification that facilitates
interoperability within this domain and reliable translation to and
from CBOR.
CDN is not designed or intended for general-purpose use in protocol
elements exchanged between systems engaged in processes outside those
listed here.</t>
      <t>​This document consolidates and formalizes the definition of CDN,
providing a formal grammar (see <xref target="grammar"/> and <xref target="app-grammars"/>), and
incorporating small changes based on implementation experience.
It updates <xref target="RFC8949"/> by obsoleting Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>, and
<xref target="RFC8610"/> by obsoleting <xref section="G" sectionFormat="of" target="RFC8610"/>.
It is intended to serve as the single reference target that can be used
in specifications that use CDN.</t>
      <t>It also specifies a registry-based extension point for the
diagnostic notation, for adding application-oriented "prefixed" literal forms.
It uses this registry to add prefixed literal forms that enhance CDN with text
representations of various kinds of data items.
Among others, these include epoch-based date/times, IP addresses
and prefixes <xref target="RFC9164"/>, as well cryptographic hash values computed from byte strings.</t>
      <t>In addition, this document registers a media type identifier
and a content-format for CDN.  This does not
elevate its status as an interchange format, but recognizes that
interaction between tools is often smoother if media types can be used.</t>
      <aside>
        <t>Examples in RFCs often do not use media type identifiers, but
special sourcecode type names that are allocated
in <eref target="https://www.rfc-editor.org/materials/sourcecode-types.txt">https://www.rfc-editor.org/materials/sourcecode-types.txt</eref>.
At the time of writing, this resource lists four sourcecode type
names that can be used in RFCs for including CBOR data items and
CBOR-related languages:</t>
        <ul spacing="normal">
          <li>
            <t><tt>cbor</tt> (which is actually not useful, as CBOR is a binary format
and cannot be used in textual examples in an RFC),</t>
          </li>
          <li>
            <t><tt>cbor-diag</tt> (which is another name for CDN, as is now defined in the
present document),</t>
          </li>
          <li>
            <t><tt>cbor-pretty</tt> (which is a possibly annotated and pretty-printed
hexdump of an encoded CBOR data item, along the lines of the
grammar of <xref target="h-grammar"/>, as used for instance for some of the examples
in <xref section="A.3" sectionFormat="of" target="RFC9290"/>), and</t>
          </li>
          <li>
            <t><tt>cddl</tt> (which is used for the Concise Data Definition Language,
CDDL, see <xref target="terminology"/> below).</t>
          </li>
        </ul>
      </aside>
      <t>Note that CDN is not meant to be the only text-based representation of
CBOR data items.
For instance, <xref target="YAML"/> <xref target="RFC9512"/> is able to represent most CBOR
data items, possibly requiring use of YAML's extension points.
YAML does not provide certain features that can be useful with tools
and documents needing text-based representations of CBOR data items
(such as embedded CBOR or encoding indicators),
but it does provide a host of other features that CDN does not provide
such as anchor/alias data sharing, at a cost of higher implementation
and learning complexity.</t>
      <section anchor="structure-of-this-document">
        <name>Structure of This Document</name>
        <t><xref target="diagnostic-notation"/> of this document
defines CDN.
After introductory material, <xref target="app-lit"/> further
illustrates the concept of prefixed literals by
defining a number of them in app-extensions.
<xref target="encoding-indicators"/> describes syntax that can be interpreted by a
diagnostic implementation to take note/take control of which of
possibly several encoding variants is in use for a data item; this
syntax always includes an underscore ("<tt>_</tt>") and therefore is visually
easy to ignore.
<xref target="grammars"/> gives the formal syntax of CDN in ABNF.
This is followed by the conventional sections for
<xref format="title" target="sec-iana"/> (<xref format="counter" target="sec-iana"/>),
<xref format="title" target="seccons"/> (<xref format="counter" target="seccons"/>),
and <xref format="title" target="sec-combined-references"/> (<xref format="counter" target="sec-combined-references"/>).
An informational comparison of CDN with CDDL follows in
<xref target="cdn-and-cddl"/>.</t>
      </section>
      <section anchor="terminology">
        <name>Terminology and Conventions</name>
        <t>The term "ABNF" in this document refers to the
language defined in <xref target="STD68"/> as extended in <xref target="RFC7405"/>, where the
"characters" of Section <xref target="RFC5234" section="2.3" sectionFormat="bare"/> of RFC 5234 <xref target="STD68"/> are Unicode scalar
values.
Where names for ABNF rules are used in the text, they are shown in
<tt>typewriter</tt> font (not distinguishable in the plaintext rendition of
this document).
Brief snippets of grammar may also be given in the text as I-Regexp regular
expressions <xref target="RFC9485"/>.</t>
        <t>The term "CDDL" (Concise Data Definition Language) refers to the data
definition language defined in
<xref target="RFC8610"/> and its registered extensions (such as those documented in
<xref target="RFC9165"/>, <xref target="RFC9741"/>, and <xref target="RFC9682"/>).
Additional information about the relationship between the two
languages CDN and CDDL is captured in <xref target="cdn-and-cddl"/>.</t>
        <t>Examples sometimes need to be quoted in the text, in particular in
cases where the typewriter font used for example text cannot be
distinguished in the plaintext rendition of this document.
ASCII quotes, however, are already taken: <tt>true</tt>, <tt>"true"</tt>, <tt>'true'</tt>,
and <tt>`true`</tt> are all different literals in CDN and should not be
confused.
Therefore, a different quoting convention as in »<tt>true</tt>« or »<tt>"true"</tt>«
is used for examples in the text where this is needed to remain
unambiguous.</t>
        <!-- text adapted from RFC 9581 -->
<t>Superscript notation denotes exponentiation.
For example, 2 to the power of 64+1 is notated: 2<sup>64+1</sup>.
In the plain-text rendition of this specification, superscript
notation is not available and exponentiation is therefore rendered by
the surrogate notation seen here in the plain-text rendition.</t>
        <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in <xref target="BCP14"/> (<xref target="RFC2119"/>) (<xref target="RFC8174"/>) when, and only when, they
appear in all capitals, as shown here.</t>
        <?line -18?>

</section>
      <section anchor="non-objectives-of-this-document">
        <name>(Non-)Objectives of this Document</name>
        <t>Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> states the objective of defining a
common human-readable diagnostic notation with CBOR.
In particular, it states:</t>
        <blockquote>
          <t>All actual interchange always happens in the binary format.</t>
        </blockquote>
        <section anchor="for-humans">
          <name>For Humans</name>
          <t>One important application of CDN is the notation of CBOR data for
humans: in specifications, on whiteboards, and for entering test data.
A number of features, such as comments inside prefixed string literals, are mainly
useful for people-to-people communication via CDN.
Programs also often output CDN for diagnostic purposes, such as in
error messages or to enable comparison (including generation of diffs
via tools) with test data.</t>
        </section>
        <section anchor="determinism">
          <name>Determinism?</name>
          <t>For comparison with test data, it is often useful if different
implementations generate the same (or similar) output for the same
CBOR data items.
This is comparable to the objectives of deterministic serialization
for CBOR data items themselves (Section <xref target="RFC8949" section="4.2" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>).
However, there are even more representation variants in CDN than in
binary CBOR, and there is little point in specifically endorsing a
single variant as "deterministic" when other variants may be more
useful for human understanding, e.g., the <tt>&lt;&lt; &gt;&gt;</tt> notation as
opposed to, say, hexadecimal <tt>h''</tt> notation;
a CDN generator may have quite a few options
that control what presentation variant is most desirable for the
application that it is being used for.</t>
          <t>Because of this, a deterministic representation is not defined for
CDN.
More generally speaking, there is no expectation for "roundtripping":
Converting CDN to binary CBOR and back to CDN will generally not achieve exactly
the same result as the original input CDN.
This possibly
was created by humans or by a different CDN generator and may contain
presentation information that is not represented in the binary CBOR.</t>
        </section>
        <section anchor="basic">
          <name>Basic Output Format</name>
          <t>However, there is a certain expectation that CDN generators can be
configured to some basic output format, which:</t>
          <ul spacing="normal">
            <li>
              <t>looks like JSON where that is possible;</t>
            </li>
            <li>
              <t>inserts encoding indicators, if any, only where the binary form differs from
Preferred Serialization (Section <xref target="RFC8949" section="4.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>);</t>
            </li>
            <li>
              <t>uses hexadecimal representation (<tt>h''</tt>) for byte strings, not
<tt>b64''</tt> or embedded CBOR (<tt>&lt;&lt;&gt;&gt;</tt>);</t>
            </li>
            <li>
              <t>does not generate elaborate blank space (newlines, indentation) for
pretty-printing, but does use common blank spaces such as after <tt>,</tt>
and <tt>:</tt>.</t>
            </li>
          </ul>
          <t>See <xref target="repertoire"/> for more considerations about the character
repertoire used for CDN source text.</t>
          <t>Additional features such as ensuring
deterministic map ordering (Section <xref target="RFC8949" section="4.2" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>) on output,
or even deviating from the basic
configuration in some systematic way, can further assist in comparing
test data.
Information obtained from a CDDL model can help in choosing
prefixed literals or specific string representations such
as embedded CBOR or <tt>b64''</tt> in the appropriate places.</t>
        </section>
        <section anchor="evolution">
          <name>Evolution</name>
          <t>Diagnostic notation was initially designed for interchange situations where backward compatibility was considered less critical than in binary CBOR interchanges. This allowed for quite freely making extensions in <xref section="G" sectionFormat="of" target="RFC8610"/> and <xref section="4.2" sectionFormat="of" target="RFC8742"/>. However, with increased interchange between CBOR-related tools, this unrestricted evolution is less desirable.</t>
          <t>The present specification supports a more controlled path of evolving CDN through two well-defined extension points: one general (<xref target="app-lit"/>) and one specific to diagnostic processing of encoding variants (<xref target="encoding-indicators"/>).</t>
          <t>The present specification makes two changes to the <xref target="RFC8610"/> extensions that are not entirely backward compatible. These changes are detailed in <xref target="comment-discussion"/> and in <!--concat-removed--> the aside at the end of <xref target="strings"/>. Some syntax from the original diagnostic notation is being deprecated (<xref target="ei-string"/>) and replaced (<xref target="ilxs"/>). These changes are deemed acceptable now because the updated features were originally introduced under more permissive conditions. With CDN now more rigidly defined and focusing evolution on the new extension points, such changes are no longer foreseen.</t>
        </section>
        <section anchor="repertoire">
          <name>Character Repertoire of Source</name>
          <t>Similar to JSON, CDN is designed to enable representing all CBOR data
items using a source character repertoire just containing printable
ASCII characters (<tt>%x20-7e</tt> in ABNF) and newlines.
However, if appropriate, CDN can also make full use of larger Unicode
repertoires.</t>
          <t>CDN generators may provide configuration to consistently select either
the unescaped (directly readable) or an escaped (ASCII equivalent) form of
characters in string literals; the latter allows CDN to be used when the
diagnostic value of fully escaped characters may be desired or in
environments where non-ASCII characters may not enjoy full data
transparency.
Similar to JSON, CDN is designed to allow a simple tool to convert any
CDN
into a fully escaped (printable ASCII and newlines only) form, as well
as to inversely recover unescaped characters for all escapes where
this is possible or for certain subsets of the characters (such as
Unicode categories L, M, N, P, S, plus Zs or just ASCII space).</t>
          <t>Special considerations apply to newlines in the source.
On some platforms, a CARRIAGE RETURN character (U+000D or CR, often seen
escaped as "\r" in many programming languages) is always
added in front of a LINE FEED (U+000A or LF) to represent a newline
(which are then referred to as CRLF).
On other platforms, carriage returns are not used at line breaks at
all, so a newline is just an LF.
(Platforms that use just a CARRIAGE RETURN by itself to signify an end
of line are no longer relevant and the files they produce are out of
scope for this document.)</t>
          <t>Files are often freely converted between these two newline
representations, including by source code revision control systems.
To ensure that platforms will generate the same bytes in the CBOR data
items created from input in either conversion state, CDN <bcp14>MUST</bcp14> create
the same processing result independent of which newline representation
is used by its input.</t>
          <t>To deal with this variability in platform presentation of newlines,
Unicode CARRIAGE RETURN characters that exist in the input unescaped are
ignored as if they were not in the input wherever they appear.
Specifically, any carriage return characters that may be present in a
CDN (text or byte) string literal are not copied into the resulting string.
If a carriage return is needed in a CBOR string data item, it can be
added explicitly, for instance by using the escaped form <tt>\r</tt> in
single-quoted or double-quoted strings.</t>
        </section>
      </section>
    </section>
    <section anchor="diagnostic-notation">
      <name>Concise Diagnostic Notation (CDN)</name>
      <t>CBOR is a binary interchange format.  To facilitate documentation and
debugging, and in particular to facilitate communication between
entities cooperating in debugging, this document defines a simple
human-readable diagnostic notation.  All actual interchange always
happens in the binary format.</t>
      <t>Note that diagnostic notation truly was designed as a diagnostic
format; it originally was not meant to be parsed.
Therefore, no formal definition (as in ABNF) was given in the original
documents.
Recognizing that formal grammars can aid interoperation of tools and
usability of documents that employ CDN, <xref target="grammars"/> now provides ABNF
definitions.</t>
      <t>CDN is a true superset of JSON as it is defined in <xref target="STD90"/> in
conjunction with <xref target="RFC7493"/> (that is, any interoperable <xref target="RFC7493"/> JSON
text also is a CDN text), extending it both to cover the greater
expressiveness of CBOR and to increase its usability.</t>
      <t>CDN borrows the JSON syntax for numbers (integer and
floating-point, <xref target="numbers"/>), certain simple values (<xref target="simple-values"/>),
UTF-8 <xref target="STD63"/> text
strings, arrays, and maps (maps are called objects in JSON; the
diagnostic notation extends JSON here by allowing any data item in the
map key position).</t>
      <!-- ## Prefixed Literals {#app-lit} -->

<t>CDN provides <em>literals</em> that represent CBOR data items textually.
Many of the forms of literals provided are predefined by this
document, but it also defines an extension point that enables defining
additional <em>application-oriented extension literals</em>.
These are also known as <em>prefixed literals</em>, as they start
with a <em>prefix</em> that identifies the application-oriented extension and
possibly a specific variant of that.
<xref target="app-lit"/> discusses these in more details and defines a number of
app-extensions that are included with this specification.</t>
      <t>As CDN is used for truly diagnostic purposes, its implementations <bcp14>MAY</bcp14>
support generation and possibly ingestion of CDN for CBOR data items
that are well-formed but not valid.
It is <bcp14>RECOMMENDED</bcp14> that an implementation enables such usage only
explicitly by configuration (such as an API or CLI flag).
Validity of CBOR data items is discussed in Section <xref target="RFC8949" section="5.3" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>,
with basic validity discussed in Section <xref target="RFC8949" section="5.3.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>, and
tag validity discussed in Section <xref target="RFC8949" section="5.3.2" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>.
Tag validity is more likely a subject for individual
app-extensions, while the two cases of basic validity
(for text strings and for maps) are addressed in Sections
<xref format="counter" target="text-validity"/> and <xref format="counter" target="map-validity"/> under the heading
of <em>validity</em>.</t>
      <t>The rest of this section provides an overview over specific features
of CDN, starting with certain common syntactical features and then
going through kinds of CBOR data items roughly in the order of CBOR major
types.
Any additional detailed syntax discussion needed has been deferred to
<xref target="grammar"/>.</t>
      <t>Additional information about implementation and use of CDN is
continuously being collected by the community in <xref target="CDN-WIKI"/>.</t>
      <section anchor="comments">
        <name>Comments</name>
        <t>For presentation to humans, CDN text may benefit from comments.
JSON famously does not provide for comments, and the original
diagnostic notation in <xref section="6" sectionFormat="of" target="RFC7049"/> inherited this property.</t>
        <t>CDN provides two comment syntaxes, which can be used where the
syntax allows blank space (outside of constructs such as numbers,
string literals, etc.):</t>
        <ul spacing="normal">
          <li>
            <t>inline comments, delimited by slashes ("<tt>/</tt>") or by C-style "<tt>/*</tt>"
and "<tt>*/</tt>":  </t>
            <t>
In a position that allows blank space, each of the following is
considered blank space (and thus effectively a comment):  </t>
            <ul spacing="normal">
              <li>
                <t>any text that starts with a slash followed by a character that is not a
star or a slash, up to another slash, or</t>
              </li>
              <li>
                <t>any text that starts with "<tt>/*</tt>" up to and including the next following "<tt>*/</tt>"</t>
              </li>
            </ul>
          </li>
          <li>
            <t>end-of-line comments, delimited by "<tt>#</tt>" or "<tt>//</tt>" and an end of line (LINE
FEED, U+000A):  </t>
            <t>
In a position that allows blank space, any text starting with "<tt>#</tt>"
or "<tt>//</tt>" and ending with and including the end of the line is
considered blank space (and thus effectively a comment).</t>
          </li>
        </ul>
        <t>Comments can be used to annotate a CBOR structure as in:</t>
        <sourcecode type="cbor-diag"><![CDATA[
/grasp-message/ [/M_DISCOVERY/ 1, /session-id/ 10584416,
                 /objective/ [/objective-name/ "opsonize",
                              /D, N, S/ 7, /loop-count/ 105]]
]]></sourcecode>
        <t>This reduces to <tt>[1, 10584416, ["opsonize", 7, 105]]</tt>.</t>
        <t>Another example, combining
the use of inline and end-of-line comments:</t>
        <sourcecode type="cbor-diag"><![CDATA[
{
 /kty/ 1 : 4, # Symmetric
 /alg/ 3 : 5, # HMAC 256-256
  /k/ -1 : h'6684523ab17337f173500e5728c628547cb37df
             e68449c65f885d1b73b49eae1'
}
]]></sourcecode>
        <t>This reduces to <tt>{1: 4, 3: 5, -1:
h'6684523AB17337F173500E5728C628547CB37DFE68449C65F885D1B73B49EAE1'}</tt>.</t>
        <t>A CDN file used for configuration might look like this (employing
'//' end of line comments throughout and an ornamental C-Style comment at the start):</t>
        <sourcecode type="cbor-diag"><![CDATA[
/* ### MyApp Configuration
 * John Example, 2026-06-09
 */
{
  // Top-level config for the app
  "appName": "MyApp", // short name shown in UI
  "version": "1.2.0",
}
]]></sourcecode>
        <aside>
          <t>Note that app-extensions can define their own
internal comment syntaxes for text inside strings, which may or may
not mimic the overall comment syntax of CDN.
The h'' syntax (<xref target="h-grammar"/>), which the framework for app-extensions
was designed to include as an instance, provides an
equivalent to the overall comment syntax inside its text strings.
Similarly, b64'' (<xref target="b64-grammar"/>) provides a subset of that limited to
"<tt>#</tt>" end-of-line comments (the slash character "<tt>/</tt>" is used in the
alphabet in classic base64 encoding).
None of the other app-extensions supplied in this
specification provides for such a kind of internal comment syntax.</t>
        </aside>
        <section anchor="comment-discussion">
          <name>Discussion</name>
          <t><xref section="G.6" sectionFormat="of" target="RFC8610"/> introduced comments into the diagnostic
notation syntax, limited to inline comments using a bare "<tt>/</tt>" as the
comment delimiter.
It however also hinted at the potential desire to add
end-of-line comments, mentioning both "<tt>//</tt>" and "<tt>#</tt>" as start delimiters.</t>
          <t>The present specification adds both, as well as C-style inline
comments ("<tt>/*</tt>" and "<tt>*/</tt>" delimiters).</t>
          <t>This introduces a backwards-incompatible change, restricting
slash-delimited comments that were allowed by <xref section="G.6" sectionFormat="of" target="RFC8610"/>
in two ways:</t>
          <ul spacing="normal">
            <li>
              <t>Inline comments no longer can be empty: The construct "<tt>//</tt>" that was
an empty comment in <xref section="G.6" sectionFormat="of" target="RFC8610"/> is now used instead to introduce an
end-of-line comment.
(Note that "<tt>//</tt>" still can be used in what is visually "within" a
slash-delimited comment like in the second example below; its first
slash actually ends the current comment and the second slash starts
a new one.)</t>
            </li>
            <li>
              <t>Enabling the use of C-style inline comments can extend the scope of
what previously were parsed as slash-delimited comments: for instance, "<tt>/*foo/</tt>"
was a complete comment in <xref section="G.6" sectionFormat="of" target="RFC8610"/> and now is the beginning of a
C-style comment that goes on up to a "<tt>*/</tt>".</t>
            </li>
          </ul>
          <t>As an example for what is enabled by this change, the introduction of C-style inline comments enables a
comment explaining a COSE algorithm identifier, as in</t>
          <sourcecode type="cbor-diag"><![CDATA[
4 /* HMAC 256/64 */
]]></sourcecode>
          <t>instead of the previously conventional, but often less familiar</t>
          <sourcecode type="cbor-diag"><![CDATA[
4 / HMAC 256//64 /
]]></sourcecode>
        </section>
      </section>
      <section anchor="numbers">
        <name>Numbers</name>
        <!--
## Hexadecimal, Octal, and Binary Numbers {#hexadecimal-octal-and-binary-numbers}
 -->

<t>In addition to JSON's decimal number literals, CDN provides hexadecimal, octal,
and binary number literals in the usual C-language notation (<tt>0x</tt>, <tt>0o</tt> prefix only, and <tt>0b</tt>,
respectively).</t>
        <t>CBOR distinguishes two basic kinds of numbers: integers and floating
point values.
Numbers composed only of digits (of the respective base) are
interpreted as CBOR integers (major type 0/1, or where the number
cannot be represented in this way, major type 6 with tag 2/3).
A leading "<tt>+</tt>" sign is a no-op, and a leading "<tt>-</tt>" sign inverts the
sign of the number.
So <tt>0</tt> and <tt>+0</tt> represent the same integer zero, as does <tt>-0</tt>.
Similarly,
<tt>1</tt> and <tt>+1</tt> stand for the same positive integer one, and
<tt>-1</tt> designates the negative integer minus one.</t>
        <aside>
          <!-- `(\+|-)?([0-9]+(\.[0-9]*)?|\.[0-9]+)([Ee](\+|-)?[0-9]+)?` -->

  <t>In addition to being a superset of JSON decimal numbers, the grammar
for decimal (base-10) numbers is inspired by similar grammars, such as
those for <tt>decimal</tt> and <tt>double</tt> in Sections <xref target="XSD2" section="3.3.3" relative="#decimal" sectionFormat="bare"/> and <xref target="XSD2" section="3.3.5" relative="#double" sectionFormat="bare"/> of <xref target="XSD2"/>.
Such grammars typically allow removing as well as adding insignificant zero
digits from/to a number representation that would be well-formed in
JSON.
However, there is one pitfall: the original C language convention for
indicating octal numbers simply precedes the octal number with a leading
zero digit.
When copying data from and to data sources that use this convention,
there would be ambiguity (e.g., in C, <tt>030</tt> is the number 24 decimal,
but in other languages the number 30 decimal); in effect, the semantics of numbers
with leading zeros often silently differ.
Therefore, the CDN grammar restricts the grammar to not allow any
leading zeros in the integer part, except for a single digit zero.</t>
        </aside>
        <t>Using a decimal point (<tt>.</tt>) and/or an exponent (<tt>e</tt> for decimal, <tt>p</tt>
for hexadecimal) turns the number into a floating point number (part
of major type 7) instead, irrespective of whether it is an integral
number mathematically.
Note that, in floating point numbers, <tt>0.0</tt> is not the same number as
<tt>-0.0</tt>, even if they are mathematically equal.</t>
        <t>In <xref target="tab-numbers"/>, all the items on a row are the same number (also
shown in CBOR, hexadecimally), but they are distinct from items in a
different row.</t>
        <table anchor="tab-numbers">
          <name>Example Sets of Equivalent Notations for Some Numbers</name>
          <thead>
            <tr>
              <th align="left">CDN</th>
              <th align="left">CBOR hex</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>4711</tt>, <tt>0x1267</tt>, <tt>0o11147</tt>, <tt>0b1001001100111</tt></td>
              <td align="left">
                <tt>19 1267</tt> # uint</td>
            </tr>
            <tr>
              <td align="left">
                <tt>1.5</tt>, <tt>0.15e1</tt>, <tt>15e-1</tt>, <tt>0x1.8p0</tt>, <tt>0x18p-4</tt></td>
              <td align="left">
                <tt>F9 3E00</tt> # float16</td>
            </tr>
            <tr>
              <td align="left">
                <tt>0</tt>, <tt>+0</tt>, <tt>-0</tt></td>
              <td align="left">
                <tt>00     </tt> # uint</td>
            </tr>
            <tr>
              <td align="left">
                <tt>0.0</tt>, <tt>+0.0</tt></td>
              <td align="left">
                <tt>F9 0000</tt> # float16</td>
            </tr>
            <tr>
              <td align="left">
                <tt>-0.0</tt></td>
              <td align="left">
                <tt>F9 8000</tt> # float16</td>
            </tr>
            <tr>
              <td align="left">
                <tt>Infinity</tt></td>
              <td align="left">
                <tt>F9 7C00</tt> # float16</td>
            </tr>
            <tr>
              <td align="left">
                <tt>-Infinity</tt></td>
              <td align="left">
                <tt>F9 FC00</tt> # float16</td>
            </tr>
            <tr>
              <td align="left">
                <tt>NaN</tt></td>
              <td align="left">
                <tt>F9 7E00</tt> # float16</td>
            </tr>
          </tbody>
        </table>
        <t>The non-finite floating-point values <tt>Infinity</tt>, <tt>-Infinity</tt>, and <tt>NaN</tt> are
written exactly as in this sentence (this is also a way they can be
written in JavaScript, although JSON does not allow them).
<tt>NaN</tt> in CDN stands for the NaN value with a zero sign bit and an all-zero
significand except for a set quiet bit; this is represented as
<tt>F9 7E 00</tt> in CBOR Preferred Serialization.</t>
        <aside>
          <t><xref target="tab-float-encoding"/> shows how the floating point numbers 1.1 and 1.5
as well as these three non-finite values are encoded, both in preferred serialization (Section <xref target="RFC8949" section="4.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>) and when
encoding indicators (please see <xref target="encoding-indicators"/>) are given.</t>
          <!-- $ edn-abnf -e '1.5, 1.5_1, 1.5_2, 1.5_3' -tcbor | cborseq2pretty.rb
 -->

  <table anchor="tab-float-encoding">
            <name>Encoding indicators on floating point values</name>
            <thead>
              <tr>
                <th align="left">CDN</th>
                <th align="left">CBOR hex</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">
                  <tt>1.1</tt></td>
                <td align="left">
                  <tt>fb 3ff199999999999a</tt></td>
              </tr>
              <tr>
                <td align="left">
                  <tt>1.1_1</tt>, <tt>1.1_2</tt></td>
                <td align="left">(error)</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>1.1_3</tt></td>
                <td align="left">
                  <tt>fb 3ff199999999999a</tt></td>
              </tr>
              <tr>
                <td align="left">
                  <tt>1.5</tt>, <tt>1.5_1</tt></td>
                <td align="left">
                  <tt>f9 3e00</tt></td>
              </tr>
              <tr>
                <td align="left">
                  <tt>1.5_2</tt></td>
                <td align="left">
                  <tt>fa 3fc00000</tt></td>
              </tr>
              <tr>
                <td align="left">
                  <tt>1.5_3</tt></td>
                <td align="left">
                  <tt>fb 3ff8000000000000</tt></td>
              </tr>
              <tr>
                <td align="left">
                  <tt>Infinity</tt>, <tt>Infinity_1</tt></td>
                <td align="left">
                  <tt>f9 7c00</tt></td>
              </tr>
              <tr>
                <td align="left">
                  <tt>Infinity_2</tt></td>
                <td align="left">
                  <tt>fa 7f800000</tt></td>
              </tr>
              <tr>
                <td align="left">
                  <tt>Infinity_3</tt></td>
                <td align="left">
                  <tt>fb 7ff0000000000000</tt></td>
              </tr>
              <tr>
                <td align="left">
                  <tt>-Infinity</tt>, <tt>-Infinity_1</tt></td>
                <td align="left">
                  <tt>f9 fc00</tt></td>
              </tr>
              <tr>
                <td align="left">
                  <tt>-Infinity_2</tt></td>
                <td align="left">
                  <tt>fa ff800000</tt></td>
              </tr>
              <tr>
                <td align="left">
                  <tt>-Infinity_3</tt></td>
                <td align="left">
                  <tt>fb fff0000000000000</tt></td>
              </tr>
              <tr>
                <td align="left">
                  <tt>NaN</tt>, <tt>NaN_1</tt></td>
                <td align="left">
                  <tt>f9 7e00</tt></td>
              </tr>
              <tr>
                <td align="left">
                  <tt>NaN_2</tt></td>
                <td align="left">
                  <tt>fa 7fc00000</tt></td>
              </tr>
              <tr>
                <td align="left">
                  <tt>NaN_3</tt></td>
                <td align="left">
                  <tt>fb 7ff8000000000000</tt></td>
              </tr>
            </tbody>
          </table>
        </aside>
        <!--decnumber-->
<t>See items <xref format="counter" target="decnumber"/> to <xref format="counter" target="intnumber"/> in the bullet list at the end of <xref target="grammar"/> for additional details of the CDN number syntax.</t>
        <t>(Note that literals for further number formats, e.g., for representing
rational numbers as fractions, or for other NaN values than the one called <tt>NaN</tt>, can
be added as app-extensions.
Background information beyond that in <xref target="STD94"/> about the representation
of numbers in CBOR can be found in the informational document
<xref target="I-D.bormann-cbor-numbers"/>.)</t>
      </section>
      <section anchor="strings">
        <name>Strings</name>
        <t>CBOR distinguishes two kinds of strings: text strings (the bytes in
the string constitute UTF-8 <xref target="STD63"/> text, major type 3), and byte strings
(CBOR does not further characterize the bytes that constitute the
string, major type 2).</t>
        <t>(UTF-8) text strings can be directly represented (unprefixed) in CDN either as double-quoted (<xref target="dq-lit"/>)
or as raw strings (<xref target="raw-lit"/>), while byte strings can be represented as
single-quoted strings (<xref target="sq-lit"/>).
The latter is useful for byte strings carrying
bytes that can be meaningfully notated as UTF-8 text.</t>
        <t>Many strings are best notated as prefixed literals, which may
provide detailed access to the bits within those bytes (see
<xref target="encoded-byte-strings"/>).
Using an app-extension
prefix, prefixed literals can be constructed out of single-quoted strings and
raw strings, as well as sequence literals (cf. <xref target="app-lit"/>).</t>
        <aside>
          <t anchor="concat-removed">Before prefixed literals were turned into a general extension point for diagnostic notation, <xref section="G.4" sectionFormat="of" target="RFC8610"/> added a syntax for concatenating strings by just
juxtaposing them.
This syntax was not widely implemented and is problematic in the
presence of optional commas; it is now entirely removed from CDN and replaced by app-extensions such as <xref target="t1b1"/>.</t>
        </aside>
        <section anchor="dq-lit">
          <name>Double-Quoted String Literals</name>
          <t>CDN enables notating text strings in a form compatible to that of notating text
strings in JSON (i.e., as a double-quoted string literal), with a
number of usability enhancements.
JSON allows no control characters in text-string literals;
if needed, they can be specified using escapes such as <tt>\t</tt> or <tt>\r</tt>.
This also applies to CDN, and all escaping rules apply as in JSON,
with a single exception:
In CDN, string literals additionally can contain newlines (LINEFEED
U+000A), which are copied into the resulting string like other
characters in the string literal.
To deal with variability in platform presentation of newlines, any
carriage return characters (U+000D) that may be present in the CDN
string literal are not copied into the resulting string (see <xref target="repertoire"/>).</t>
          <t>JSON's escape scheme for characters that are not on Unicode's basic
multilingual plane (BMP) is cumbersome (see Section <xref target="RFC8259" section="7" sectionFormat="bare"/> of RFC 8259 <xref target="STD90"/>).
CDN keeps it, but also adds the syntax <tt>\u{NNN}</tt> where NNN is the
Unicode scalar value as a hexadecimal number.
This means the following are equivalent (the first <tt>o</tt> is escaped as
<tt>\u{6f}</tt> for no particular reason):</t>
          <sourcecode type="cbor-diag"><![CDATA[
"D\u{6f}mino's \u{1F073} + \u{2318}"   # \u{}-escape 3 chars
"D\u006Fmino's \uD83C\uDC73 + \u2318"  # escape JSON-like
"Domino's 🁳 + ⌘"                       # unescaped
]]></sourcecode>
        </section>
        <section anchor="sq-lit">
          <name>Single-Quoted String Literals</name>
          <t>Analogously to text-string literals delimited by double quotes, CDN
allows the use of single quotes (without a prefix) to express
byte-string literals with UTF-8 text; for instance, the following are
equivalent:</t>
          <sourcecode type="cbor-diag"><![CDATA[
'hello world'
h'68656c6c6f20776f726c64'
]]></sourcecode>
          <t>The escaping rules of JSON strings are applied equivalently for
text-based byte-string literals, e.g., <tt>\\</tt> stands for a single
backslash and <tt>\'</tt> stands for a single quote.
However, to facilitate parsing, in single-quoted strings CDN excludes
certain escaping mechanisms available for double-quoted strings:</t>
          <ul spacing="normal">
            <li>
              <t><tt>\/</tt> is an escape in JSON that is available for double-quoted CDN
text strings as
well to ensure all JSON texts are CDN literals.
Since CDN's single-quoted strings do not occur in JSON, this legacy
compatibility feature is not available for them.</t>
            </li>
            <li>
              <t><tt>\u</tt>-based escapes are not available for characters in the range
from U+0020 through U+007E (essentially, printable ASCII).</t>
            </li>
          </ul>
          <t>All other escaping mechanisms that are available in double-quoted
string literals are available in single-quoted string literals.</t>
          <t>Single-quoted string literals can occur unprefixed and stand for the
byte string that encodes its text string value (the "content"), or be
prefixed by what looks like an app-extension prefix (see
<xref target="app-lit"/>).</t>
          <t>In a prefixed string literal, the text content of the single-quoted
string literal is not used directly as a byte string, but is further
processed in a way that is defined by the meaning given to the prefix.
Depending on the prefix, the result of that processing can, but often
is not, a byte string value.</t>
          <t>Prefixed string literals (whether single-quoted after the
prefix or a raw string (<xref target="raw-lit"/>)) are used for
prefixed literals (see <xref target="app-lit"/>, such as base-encoded byte string literals (see <xref target="encoded-byte-strings"/>).
<!-- XXX -->
(Additional kinds of base-encoded string literals can be defined as
prefixed literals by registering their prefixes;
there is no fundamental difference between the original two predefined
base-encoded string literal prefixes (<xref target="encoded-byte-strings"/>: <tt>h</tt>, <tt>b64</tt>) and any such potential
future extension literal prefixes; for simplicity of expression, both
cases are referred to as "prefixed literals".)</t>
        </section>
        <section anchor="raw-lit">
          <name>Raw String Literals</name>
          <t>Both double-quoted and single-quoted string literals handle
backslashes in a special way.
For string data items that employ backslashes themselves, possibly with additional layers
of processing giving this "escaping" mechanism specific application semantics, this can
lead to an exponential duplication of backslashes that has informally
been described as "quoting hell".</t>
          <t>CDN therefore also allows text strings to be notated as raw string
literals, which do not perform any special processing on backslashes,
i.e., treat
them as raw string content like any other characters.
Instead, data transparency is provided by enclosing the entire string content in starting
and ending delimiters built as a sequence of one or more backquote
(»<tt>`</tt>«, U+0060 GRAVE ACCENT) characters.</t>
          <t>For example, the string content »<tt>[^ \t\n\r"'`]</tt>«, an I-Regexp character class
that excludes blank space and quoting characters, can be notated as:</t>
          <artwork><![CDATA[
 ``[^ \t\n\r"'`]``
]]></artwork>
          <t>instead of</t>
          <artwork><![CDATA[
 "[^ \\t\\n\\r\"'`]"
]]></artwork>
          <t>By using more backquotes for each of the outer delimiters than the longest
sequence of backquotes that can be found in the string, internal
backquotes do not prematurely end the string literal.
An example for a raw string that contains a double backquote and
therefore is notated starting and ending with a triple backquote:</t>
          <sourcecode type="cbor-diag"><![CDATA[
```To emulate typographic quotes, sometimes double backward and
forward single quotes are used, as in ``text.''
```
]]></sourcecode>
          <t>This mechanism is easy to use for the large majority of cases.
However, without additional rules:</t>
          <ul spacing="normal">
            <li>
              <t>raw strings could not be used for empty string data items, which
therefore need to be notated using double- or single-quoted strings.
(Obviously, there is no need to escape the content of empty strings,
so this should not be a problem.)</t>
            </li>
            <li>
              <t>raw strings could not be used for string
data items that start or end with backquotes, as these would
amalgamate with the start and end delimiters.</t>
            </li>
          </ul>
          <t>To address these cases (predominantly the latter), two additional
rules are added to perform after processing the backquotes used as
delimiters:</t>
          <ul spacing="normal">
            <li>
              <t>any single newline (LF or CRLF, see <xref target="repertoire"/>) at the start of
the inner string is removed to
yield the string content.
As a result:  </t>
              <artwork><![CDATA[
 ```a```
]]></artwork>
              <t>
can also be expressed as  </t>
              <artwork><![CDATA[
 ```
 a```
]]></artwork>
              <t>
In addition to enabling leading backquotes in raw strings, this can
 be very useful for documentation strings etc.  </t>
              <t>
This rule also allows notating »<tt>``text''</tt>« as:  </t>
              <artwork><![CDATA[
```
``text''```
]]></artwork>
            </li>
            <li>
              <t>if the first rule does not apply, but the inner string starts
with a space character as well as ends with one, exactly one single space
character starting the inner string together with exactly one single space
character ending the inner string are removed to yield the string
content.  </t>
              <t>
This allows notating »<tt>a = ``foo``</tt>« as:  </t>
              <artwork><![CDATA[
``` a = ``foo`` ```
]]></artwork>
            </li>
          </ul>
          <t>If neither of these rules apply, the inner string between the raw
delimiters is used as the raw string unchanged.</t>
          <t>(The examples given here are minimal in that they show how the
additional rules work; more complex examples would be necessary to
provide additional motivation why this is a good way to handle the
various cases.)</t>
        </section>
        <section anchor="embedded">
          <name>CBOR Sequence Literals</name>
          <t>In diagnostic notation, a sequence of zero or more CBOR data item literals can
be enclosed in <tt>&lt;&lt;</tt> and <tt>&gt;&gt;</tt> and separated by comma or blank space, optionally prefixed by an
app-extension prefix; this specification speaks of <em>sequence literals</em>.
CDN mainly deals with individual data items, not with CBOR sequences
<xref target="RFC8742"/>, so the CBOR sequence represented by the sequence literal needs
to be further processed to obtain the value of the literal.</t>
          <t>Prefixed sequence literals refer to the app-extension (see
<xref target="app-lit"/>) identified by the prefix and apply the extension to its
sequence content, resulting in a single data item.
This data item may be a string or not (always), depending on
the definition of the app-extension.</t>
          <t>An unprefixed sequence literal applies CBOR encoding to the
data items in its content, taken as a CBOR sequence.
The value of the
literal thus is a byte string with the encoded content; this is
commonly referred to as
<em>embedded CBOR</em>.
For instance, each pair of columns in the following are equivalent:</t>
          <sourcecode type="cbor-diag"><![CDATA[
   <<1>>              h'01'
   <<1, 2>>           h'0102'
   <<"hello", null>>  h'65 68656c6c6f f6'
   <<>>               h''
]]></sourcecode>
          <t>A diagnostic implementation is expected to honor encoding indicators
(please see <xref target="encoding-indicators"/>)
on the individual items in the supplied sequence before assembling
them into an encoded CBOR sequence.
For instance, each pair of columns in the following are equivalent:</t>
          <sourcecode type="cbor-diag"><![CDATA[
   <<1_1>>              h'190001'
   <<1_0, 2_2>>         h'1801 1a00000002'
   <<"hello"_0, null>>  h'7805 68656c6c6f f6'
]]></sourcecode>
          <t>For prefixed sequence literals, the processing of arguments that use
specific encoding variants can be defined by the app-extension being
used.
See <xref target="ilxs"/> for an example of where this is done.
Encoding indicators on the arguments are ignored if the app-extension
does not define special handling of encoding variants.</t>
        </section>
        <section anchor="text-validity">
          <name>Validity of Text Strings</name>
          <t>To be valid CBOR, Section <xref target="RFC8949" section="5.3.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> requires that text
strings are byte sequences in UTF-8 <xref target="STD63"/> form.
CDN provides several ways to construct such byte strings (in
particular, see also <xref target="t1b1"/>).
These mechanisms might operate on subsequences that do not themselves
constitute UTF-8, e.g., by building larger sequences out of
concatenating the subsequences; for validity of a text string
resulting from these mechanisms it is only of importance that the
result is UTF-8.
Double-quoted, single-quoted, and raw string literals have been defined
such that they lead to byte sequences that are UTF-8: the source
language of CDN is UTF-8, and all escaping mechanisms lead only to
adding further UTF-8 characters.
Only app-extensions (invoked in prefixed literals) can
generate non-UTF-8 byte sequences.</t>
          <t>As discussed at the start of <xref target="diagnostic-notation"/>, CDN
implementations <bcp14>MAY</bcp14> support generation and possibly ingestion of CDN
for CBOR data items that are well-formed but not valid; when this is
enabled, such implementations <bcp14>MAY</bcp14> relax the requirement on text
strings to be valid UTF-8.</t>
          <t>CBOR has no requirements for its text strings except for conformance to
<xref target="STD63"/>.
The same applies to CDN and its source language.
No additional Unicode processing or validation such as normalization
or checking whether a scalar value is actually assigned is foreseen by
CDN, particularly not any processing that is dependent on a specific
Unicode version.
Such processing, if offered, <bcp14>MUST NOT</bcp14> get in the way of processing the
data item represented in CDN (i.e., it may be appropriate to issue
warnings but not to error out or to generate output that does not match
the input at the UTF-8 level).</t>
        </section>
      </section>
      <section anchor="arrays-and-maps">
        <name>Arrays and Maps</name>
        <t>CDN borrows the JSON syntax for arrays and maps.
(Maps are called objects in JSON.)</t>
        <t>For maps, CDN extends the JSON syntax by allowing any data item in the
map key position (before the colon).</t>
        <section anchor="mandatory-separators-optional-terminators">
          <name>Mandatory Separators, Optional Terminators</name>
          <t>JSON requires the use of a comma as a separator character between
the elements of an array as well as between the members (key/value
pairs) of a map.
(These commas also were required in the original diagnostic
notation defined in <xref target="STD94"/> and <xref target="RFC8610"/>.)
The separator commas are now optional in the places where CDN syntax
allows commas; however, where no comma is used in a separator
position, there must be blank space (composed of at least one space, newline, and/or
comment) instead.
(Stylistically, leaving out the commas is more idiomatic when they
occur at line breaks, which provide the blank space.)</t>
          <t>In addition, CDN also allows, but does not require, a trailing comma before the closing bracket/brace,
enabling an easier to maintain "terminator" style of their use.</t>
          <t>In summary, the following eight examples are all equivalent:</t>
          <sourcecode type="cbor-diag"><![CDATA[
[1, 2, 3]
[1, 2, 3,]
[1  2  3]
[1  2  3,]
[1  2, 3]
[1  2, 3,]
[1, 2  3]
[1, 2  3,]
]]></sourcecode>
          <t>as are</t>
          <sourcecode type="cbor-diag"><![CDATA[
{1: "n", "x": "a"}
{1: "n", "x": "a",}
{1: "n"  "x": "a"}
# etc.
]]></sourcecode>
          <t>As a comma and/or blank/comment is mandatory in a separator position,
»<tt>[11]</tt>« is unambiguously an array with a single element (the
integer 11), different from »<tt>[1 1]</tt>« or »<tt>[1,1]</tt>«.
As this is a general rule, »<tt>[[] []]</tt>« or »<tt>[[],[]]</tt>« are well-formed
CDN, while »<tt>[[][]]</tt>« is not.</t>
          <aside>
            <t>CDDL's comma separators in the equivalent contexts (CDDL groups) are
  entirely optional
  (and actually are terminators, which together with their optionality
  allows them to be used like separators as well, or even not at all).
  In summary, comma use is now aligned between CDN and CDDL, in a
  fully backward compatible way.
  (CDDL does allow the stylistically questionable »<tt>a = [[][]]</tt>«, though.)</t>
          </aside>
        </section>
        <section anchor="map-validity">
          <name>Validity of Maps</name>
          <t>As discussed at the start of <xref target="diagnostic-notation"/>, CDN implementations <bcp14>MAY</bcp14> support
generation and possibly ingestion of CDN for CBOR data items that are
well-formed but not valid (Section <xref target="RFC8949" section="5.3" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>).</t>
          <t>For maps, this is relevant for map keys that occur more than once, as
in this CDN that is not representing a valid CBOR data item:</t>
          <sourcecode type="cbor-diag"><![CDATA[
{1: "to", 1: "from"}
]]></sourcecode>
        </section>
      </section>
      <section anchor="tags">
        <name>Tags</name>
        <t>A tag is
written as a decimal unsigned integer (no leading zeros except for the
actual tag number zero, i.e., <tt>0|[1-9][0-9]*</tt>) for the tag number, followed by the tag content
in parentheses; for instance, a date in the format specified by RFC 3339
(ISO 8601) could be
notated as:</t>
        <t indent="5">0("2013-03-21T20:04:00Z")</t>
        <t>or the equivalent epoch-based time:</t>
        <t indent="5">1(1363896240)</t>
        <t>The tag number can be followed by an encoding indicator giving the
encoding of the tag head.  For example, a diagnostic implementation encodes:</t>
        <t indent="5">1_1(1363896240)</t>
        <t>...(assuming Preferred Serialization for the tag content) as:</t>
        <sourcecode type="cbor-pretty"><![CDATA[
d9 0001        # tag(1)
   1a 514b67b0 # unsigned(1363896240)
]]></sourcecode>
      </section>
      <section anchor="simple-values">
        <name>Simple values</name>
        <t>CDN uses JSON syntax for the simple values True (»<tt>true</tt>«), False
(»<tt>false</tt>«), and Null (»<tt>null</tt>«).
Undefined is written »<tt>undefined</tt>« as in JavaScript.</t>
        <t>These and all other simple values can be given as "simple()" with the
appropriate decimal unsigned integer (<tt>0|[1-9][0-9]*</tt>) in the parentheses.
For example, »<tt>simple(42)</tt>«
indicates major type 7, value 42, and »<tt>simple(20)</tt>« indicates
»<tt>false</tt>«.</t>
      </section>
    </section>
    <section anchor="app-lit">
      <name>Prefixed Literals</name>
      <t>After a short overview of prefixed literals in general, this
section defines a number of app-extensions included with this
specification.</t>
      <t>Prefixed literals start with a <em>prefix</em> that identifies the
app-extension and possibly a specific variant of
that, immediately followed by a sequence literal (<xref target="embedded"/>) or a
single-quoted or raw string literal (<xref target="strings"/>).</t>
      <t>The string-based forms use their string literal as a shorthand form
for a sequence literal representing a sequence with exactly that one
text string data item, e.g., <tt>b64`Zm9v`</tt> is a shorthand for
<tt>b64&lt;&lt;"Zm9v"&gt;&gt;</tt> or <tt>b64&lt;&lt;`Zm9v`&gt;&gt;</tt> (this specific example obviously
depends on <tt>Zm9v</tt> being allowed and meaning the same within the
different forms of string literals used in the example).</t>
      <aside>
        <t>This notation is generalized from
Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>, which provides for notating byte
strings in a number of <xref target="RFC4648"/> base encodings, where the encoded text
is enclosed in single quotes, prefixed by a prefix (»h« for
base16, »b32« for base32, »h32« for base32hex, »b64« for base64 or
base64url).</t>
        <t>This syntax can be thought to establish a name space, with the names
"h", "b32", "h32", and "b64" taken, but other names being unallocated.
The present specification allows registering additional names for this namespace,
which it calls <em>app-extension identifiers</em>.</t>
      </aside>
      <t>More precisely, an <em>app-extension identifier</em> is a registered name consisting of a
lowercase ASCII letter (<tt>[a-z]</tt>) and zero or more additional ASCII
characters that are either lowercase letters, digits, or hyphens (<tt>[a-z0-9-]</tt>).
»false«, »true«, »null«, and »undefined« cannot be used as such
identifiers and are reserved.</t>
      <t>app-extension identifiers are registered in the "App-Extension Identifiers" registry
(<xref target="appext-iana"/>).</t>
      <t>An app-extension (such as <tt>dt</tt>) <bcp14>MAY</bcp14> also define the meaning of
one additional prefix derived from its app-extension identifier by
replacing each lowercase character by its uppercase counterpart (such
as <tt>DT</tt>).
As a convention, using the all-uppercase variant implies making use of
a CBOR tag appropriate for this app-extension (such
as tag number 1 for <tt>DT</tt>, where in contrast the prefix <tt>dt</tt> stands for
the unwrapped tag content).</t>
      <t>In summary, an app-extension identifier gives rise to one or two
prefixes, one that is lexically identical to the
identifier (i.e., all lowercase), and potentially another one that is an
all-uppercase variation of it.
In addition to specifying which of these two variations exhibits which
specific semantics, the app-extension specifies what input the
extension takes.</t>
      <t>When the prefix is used immediately in front of a single-quoted or a raw
string, the input takes the form of a single text string CBOR data
item (this is useful only if the app-extension is designed to
receive a text string as input).
When used immediately in front of a sequence literal, the input is a
CBOR sequence of elements of the sequence literal as input.
(For a single parameter, this is equivalent to receiving a single CBOR
data item as the argument.)
The app-extension can provide behavior that depends on the
number of items supplied as input to it and their data types; it
cannot distinguish between its prefix being used with a single-quoted
string, a raw string, or a CBOR sequence composed of a single text
string data item (as illustrated for instance in Tables <xref format="counter" target="tab-equiv-dt"/>,
<xref format="counter" target="tab-equiv-ip"/>, and <xref format="counter" target="tab-equiv-hash"/>).</t>
      <t>This specification defines a number of generally applicable
app-extensions (<xref target="app-lit"/>), both to motivate
making these extensions generally available, and to illustrate the
concept.</t>
      <t>Of these, the app-extensions <tt>h</tt>, <tt>b64</tt>, <tt>t1</tt>, <tt>b1</tt>, <tt>dt</tt> and <tt>ip</tt> are
mandatory to implement.
(As mentioned, for simplicity we use the term "app-extensions" for the
mechanism discussed in this section even if it is
used to describe a part of base CDN.)</t>
      <section anchor="encoded-byte-strings">
        <name>Base-Encoded Byte String Literals: h and b64</name>
        <t>Besides the unprefixed byte string literals that are analogous to JSON text
string literals, CDN provides prefixed literals that can represent
byte strings by base-encoding them, typically notated as prefixed
string literals.
The app-extension identifier selects one of the base encodings
<xref target="RFC4648"/>, without padding.
Most often, the base encoding is
enclosed in a single-quoted or raw string literal, prefixed by »h« for base16 or
»b64« for base64 or base64url (the actual encodings of the latter two
have the same meaning where they overlap, so the string remains unambiguous).
For example, the byte string consisting of the four bytes <tt>12 34 56 78</tt>
(given in hexadecimal here) could be written <tt>h'12345678'</tt> or
<tt>b64'EjRWeA'</tt> when using single-quoted string literals, or
<tt>h`12345678`</tt> or <tt>b64`EjRWeA`</tt> when using raw string literals.</t>
        <aside>
          <t>(Note that Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> also mentions »b32« for
base32 and »h32« for base32hex.
This has not been implemented widely
and therefore is not directly included in this specification.
These and further byte string formats now can easily be added back as
prefixed literals.)</t>
        </aside>
        <t>Examples often benefit from some blank space (spaces, line breaks) in
byte string literals.
In the base-encoded byte string literals, blank space is ignored in
the input; for instance, the following are equivalent:</t>
        <sourcecode type="cbor-diag"><![CDATA[
   h'48656c6c6f20776f726c64'
   h'48 65 6c 6c 6f 20 77 6f 72 6c 64'
   h'4 86 56c 6c6f
     20776 f726c64'
]]></sourcecode>
        <t>The internal syntax of prefixed single-quote literals such
as <tt>h''</tt> and <tt>b64''</tt> also allow comments as blank space (see <xref target="comments"/>).</t>
        <sourcecode type="cbor-diag"><![CDATA[
   h'68656c6c6f20776f726c64'
   h'68 65 6c /doubled l!/ 6c 6f # hello
     20 /space/
     77 6f 72 6c 64' /world/
]]></sourcecode>
        <t>Slash characters are part of the base64 classic alphabet (see
Table 1 in <xref section="4" sectionFormat="of" target="RFC4648"/>), and they therefore need to be in the
<tt>b64''</tt> set of characters that contribute to the byte string.
Therefore, only end-of-line comments starting with <tt>#</tt> are available inside
b64 byte string literals.</t>
        <sourcecode type="cbor-diag"><![CDATA[
   b64'/base64 not a comment/ but one follows # comment'
   h'FDB6AC 7BAE27A2D69CA2699E9EDFDBBADA2779FA25 968C2C'
]]></sourcecode>
        <t>These two byte string literals stand for the same byte string; the
deliberately confusing base64 content starts with
<tt>b64'/bas'</tt> which is the same as h'FDB6AC' and ends with b64'lows'
which is the same as <tt>h'968C2C'</tt>.</t>
      </section>
      <section anchor="dt">
        <name>Date and Time: dt</name>
        <t>The app-extension identifier "dt" is used to notate a
date/time literal that can be used as an Epoch-Based Date/Time as per
Section <xref target="RFC8949" section="3.4.2" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>.</t>
        <t>The content of the literal is a single Standard Date/Time String as per
Section <xref target="RFC8949" section="3.4.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>, as a text or byte string.</t>
        <t>The value of the literal is a number representing the result of a
conversion of the given Standard Date/Time String to an Epoch-Based
Date/Time.
If fractional seconds are given in the text (production
<tt>time-secfrac</tt> in <xref target="abnf-grammar-dt"/>), the value is a
floating-point number; the value is an integer number otherwise.
In the all-uppercase variant of the app-prefix, the value is enclosed
in a tag number 1.</t>
        <t>Each row of <xref target="tab-equiv-dt"/> shows an example of "dt" notation and
equivalent notation not using a prefixed literal.</t>
        <table anchor="tab-equiv-dt">
          <name>dt and DT literals vs. plain CDN</name>
          <thead>
            <tr>
              <th align="left">dt literal</th>
              <th align="left">plain CDN</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>dt'1969-07-21T02:56:16Z'</tt></td>
              <td align="left">
                <tt>-14159024</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>dt'1969-07-21T02:56:16.0Z'</tt></td>
              <td align="left">
                <tt>-14159024.0</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>dt'1969-07-21T02:56:16.5Z'</tt></td>
              <td align="left">
                <tt>-14159023.5</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>dt`1969-07-21T02:56:16.5Z`</tt></td>
              <td align="left">
                <tt>-14159023.5</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>dt&lt;&lt;'1969-07-21T02:56:16.5Z'&gt;&gt;</tt></td>
              <td align="left">
                <tt>-14159023.5</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>dt&lt;&lt;"1969-07-21T02:56:16.5Z"&gt;&gt;</tt></td>
              <td align="left">
                <tt>-14159023.5</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>dt&lt;&lt;`1969-07-21T02:56:16.5Z`&gt;&gt;</tt></td>
              <td align="left">
                <tt>-14159023.5</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>DT'1969-07-21T02:56:16Z'</tt></td>
              <td align="left">
                <tt>1(-14159024)</tt></td>
            </tr>
          </tbody>
        </table>
        <t>See <xref target="dt-grammar"/> for an ABNF definition for the text string input of <tt>dt</tt> literals.</t>
      </section>
      <section anchor="ip">
        <name>IP Addresses and Related Structures: ip</name>
        <t>The app-extension identifier "ip" is used to notate an IP
address literal that can be used as an IP address as per <xref section="3" sectionFormat="of" target="RFC9164"/>.</t>
        <t>The input of the literal is a single text string representing an IPv4address or IPv6address as per
<xref section="3.2.2" sectionFormat="of" target="RFC3986"/>.</t>
        <t>With the lowercase app-string prefix <tt>ip</tt>, the value of the literal is a
byte string representing the binary IP address.
With the uppercase app-string prefix <tt>IP</tt>, the literal is such a byte string
tagged with tag number 54, if an IPv6address is used, or tag number
52, if an IPv4address is used.</t>
        <t>As an additional case, the uppercase app-string prefix <tt>IP</tt> can be used
with an IP address prefix such as <tt>2001:db8::/56</tt> or <tt>192.0.2.0/24</tt>, with the equivalent tag as its value.
(Note that <xref target="RFC9164"/> representations of address prefixes need to
implement the truncation of the address byte string as described in
<xref section="4.2" sectionFormat="of" target="RFC9164"/>; see example below.)
For completeness, the lowercase variant <tt>ip'2001:db8::/56'</tt> or  <tt>ip'192.0.2.0/24'</tt> stands for
an unwrapped <tt>[56,h'20010db8']</tt> or <tt>[24,h'c00002']</tt>; however, in this case the information
on whether an address is IPv4 or IPv6 often needs to come from the context.</t>
        <t>Note that this app-extension provides no direct representation
of the "Interface format"
defined in <xref section="3.1.3" sectionFormat="of" target="RFC9164"/>, an address combined with an
optional prefix length and an optional zone identifier, and therefore
no way to reference a zone identifier at all.
(If needed, this format can be put together by building their
structures explicitly, e.g., an interface format without a zone
identifier can be represented as in <tt>52([ip'192.0.2.42',24])</tt>, or an
interface format with zone identifier 42 as in
<tt>54([ip'fe80::0202:02ff:ffff:fe03:0303',64,42])</tt>.)</t>
        <t>Each row of <xref target="tab-equiv-ip"/> shows an example of "ip" notation and
equivalent notation not using a prefixed literal.</t>
        <table anchor="tab-equiv-ip">
          <name>ip and IP literals vs. plain CDN</name>
          <thead>
            <tr>
              <th align="left">ip literal</th>
              <th align="left">plain CDN</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>ip'192.0.2.42'</tt></td>
              <td align="left">
                <tt>h'c000022a'</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>ip&lt;&lt;'192.0.2.42'&gt;&gt;</tt></td>
              <td align="left">
                <tt>h'c000022a'</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>IP'192.0.2.42'</tt></td>
              <td align="left">
                <tt>52(h'c000022a')</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>IP'192.0.2.0/24'</tt></td>
              <td align="left">
                <tt>52([24,h'c00002'])</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>ip'2001:db8::42'</tt></td>
              <td align="left">
                <tt>h'20010db8000000000000000000000042'</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>IP'2001:db8::42'</tt></td>
              <td align="left">
                <tt>54(h'20010db8000000000000000000000042')</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>IP'2001:db8::/64'</tt></td>
              <td align="left">
                <tt>54([64,h'20010db8'])</tt></td>
            </tr>
          </tbody>
        </table>
        <t>See <xref target="ip-grammar"/> for an ABNF definition for the content of <tt>ip</tt> literals.</t>
      </section>
      <section anchor="hash">
        <name>Cryptographic Hash Values: hash</name>
        <t>The app-extension identifier "hash" is used to notate the
input to a cryptographic hash function as well as to identify such a hash
function.
Its value is a byte string that represents the output of that
hash function.</t>
        <t>The input of the literal is a (text or byte) string, optionally followed by either
an integer or a text string that identifies the hash function in the
COSE Algorithms registry of the CBOR Object Signing and Encryption
(COSE) registry group <xref target="IANA.cose"/>, either by the identifier (value:
integer or string), or, if no algorithm is registered with this value,
by its name used in the registry.
If the second item is not given, the default algorithm used is -16
("SHA-256").</t>
        <t>No uppercase variant prefix is defined for the app-extension
identifier "hash".</t>
        <table anchor="tab-equiv-hash">
          <name>hash literals vs. plain CDN</name>
          <thead>
            <tr>
              <th align="left">hash literal</th>
              <th align="left">plain CDN</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>hash&lt;&lt;'foo'&gt;&gt;</tt></td>
              <td align="left">h'2C26B46B68FFC68FF99B453C1D304134<br/>13422D706483BFA0F98A5E886266E7AE'</td>
            </tr>
            <tr>
              <td align="left">
                <tt>hash'foo'</tt></td>
              <td align="left">h'2C26B46B68FFC68FF99B453C1D304134<br/>13422D706483BFA0F98A5E886266E7AE'</td>
            </tr>
            <tr>
              <td align="left">
                <tt>hash&lt;&lt;'foo', -16&gt;&gt;</tt></td>
              <td align="left">h'2C26B46B68FFC68FF99B453C1D304134<br/>13422D706483BFA0F98A5E886266E7AE'</td>
            </tr>
            <tr>
              <td align="left">
                <tt>hash&lt;&lt;'foo', "SHA-256"&gt;&gt;</tt></td>
              <td align="left">h'2C26B46B68FFC68FF99B453C1D304134<br/>13422D706483BFA0F98A5E886266E7AE'</td>
            </tr>
            <tr>
              <td align="left">
                <tt>hash&lt;&lt;'foo', -44&gt;&gt;</tt></td>
              <td align="left">h'F7FBBA6E0636F890E56FBBF3283E524C<br/>6FA3204AE298382D624741D0DC663832<br/>6E282C41BE5E4254D8820772C5518A2C<br/>5A8C0C7F7EDA19594A7EB539453E1ED7'</td>
            </tr>
            <tr>
              <td align="left">
                <tt>hash&lt;&lt;'foo', "SHA-512"&gt;&gt;</tt></td>
              <td align="left">h'F7FBBA6E0636F890E56FBBF3283E524C<br/>6FA3204AE298382D624741D0DC663832<br/>6E282C41BE5E4254D8820772C5518A2C<br/>5A8C0C7F7EDA19594A7EB539453E1ED7'</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="t1b1">
        <name>String Concatenation: b1 and t1</name>
        <t><cref anchor="t1b1name">This section uses the placeholders t1 and b1 as provisional
app-extension identifiers, allowing the text to stabilize while
the actual names are still being decided by the WG.</cref></t>
        <t>The "b1" and "t1" app-extensions allow a (byte or text) string to be built
up from multiple (byte or text) string literals; these are then
concatenated into a single string.</t>
        <t>The following four text string values (adapted from <xref section="G.4" sectionFormat="of" target="RFC8610"/>) are equivalent:</t>
        <artwork><![CDATA[
"Hello world"
t1<<"Hello ", "world">>
t1<<"Hello", h'20', "world">>
t1<<h'48656c6c6f20776f726c64'>>
]]></artwork>
        <t>Similarly, the following byte string values are equivalent:</t>
        <artwork><![CDATA[
'Hello world'
b1<"Hello world">
b1<<'Hello ', 'world'>>
b1<<'Hello ', h'776f726c64'>>
b1<<'Hello', h'20', 'world'>>
b1<<h'48656c6c6f20776f726c64', '', b64''>>
b1<<h'4 86 56c 6c6f', h' 20776 f726c64'>>
]]></artwork>
        <t>As the examples show, text strings and byte strings can mix within such a
concatenation, so that, for instance, byte string literal notation can be used
inside a sequence of concatenated text string notation literals, to
encode characters that may be better represented in an encoded way.</t>
        <t>This is realized by simply joining together the bytes in the
sequence of string arguments to the b1/t1 app-extension,
proceeding from left to right.</t>
        <t>For "b1", the joining operation results in a byte string.
For "t1", the joining operation results in a text string, and the
result therefore needs to be valid UTF-8 except for "diagnostic"
implementations that support and are enabled for generation/ingestion
of CDN for CBOR data items that are well-formed but not valid; see
also <xref target="text-validity"/>.</t>
      </section>
      <section anchor="ilxs">
        <name>Creating Indefinite-length Encoded Strings: ilbs and ilts</name>
        <t>The <tt>ilbs</tt> and <tt>ilts</tt> app-extensions are semantically
identical to <tt>t1</tt> and <tt>b1</tt> at the data model level, but instead of
concatenating the arguments to a single (byte/text) string data item,
they build an indefinite length string out of the arguments, with one
chunk of the correct major type (byte string/text string for
<tt>ilbs</tt>/<tt>ilts</tt>, respectively) created per argument.</t>
        <t>A diagnostic implementation would honor encoding indicators on each of
the arguments, creating a chunk with the same encoding.
As the app-extension is already implying indefinite length encoding,
there is no point in applying an encoding indicator to the entire
prefixed literal.</t>
        <artwork><![CDATA[
'Hello world'                4b 48656c6c6f20776f726c64
ilbs<<>>                     5f ff
ilbs<<"Hello world">>        5f 4b 48656c6c6f20776f726c64 ff
ilbs<<'Hello ', "world">>    5f 46 48656c6c6f20 45 776f726c64 ff
ilbs<<'Hello '_0, 'world'>>  5f 5806 48656c6c6f20 45 776f726c64 ff
]]></artwork>
        <t>There is no way to include ellipses in an indefinite length string.</t>
      </section>
      <section anchor="floating-point-values-float">
        <name>Floating-Point Values: float</name>
        <!-- IEEE754-oriented literals for more floating point values -->

<t>The "<tt>float</tt>" app-extension enables the notation of 2-byte,
4-byte, and 8-byte byte strings to express floating point values
(mt=7, ai=25/26/27 respectively) by giving their IEEE 754
representation.
A text string used as an argument is interpreted exactly as a hex
literal (like the <tt>h</tt> prefix); the result is used as the
byte string.</t>
        <t>The prefixed literal is interpreted as an encoded data
item would be that prefixes the byte string by a single byte 0xF9
(2 bytes, i.e., binary16), 0xFA (4 bytes, i.e., binary32), and 0xFB (8
bytes, i.e., binary64), respectively.
Byte strings of a different length than 2, 4, or 8 raise an error.
Note that the interpretation as an encoded data item does not create
or imply an encoding indicator; that can be added separately.</t>
        <t>Example (tool used: <tt>edn-abnf -afloat -e</tt>):</t>
        <artwork><![CDATA[🔧 "[float'fe00', float'fe00'_2, float'47110815']" -tpretty ➔
83             # array(3)
   F9 FE00     # primitive(65024)
   FA FFC00000 # primitive(4290772992)
   FA 47110815 # primitive(1192298517)

🔧 "[float'fe00', float'fe00'_2, float'47110815', 0x1.22102ap+15]" ➔
[float'fe00', float'fe00'_2, 37128.08203125, 37128.08203125]
]]></artwork>
        <t>The purpose of this app-extension is to close a gap in CDN's
<xref target="IEEE754"/> binary64 support:
Without this (or a similar) extension there is no way to represent NaN
values different from the one called out at the end of Section <xref target="RFC8949" section="4.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>: "(for many applications, the single NaN encoding
0xf97e00 will suffice)".
For finite floating point numbers, the decimal or hex floating point
representations are preferred.</t>
      </section>
    </section>
    <section anchor="encoding-indicators">
      <name>Encoding Indicators</name>
      <t>Sometimes it is useful to indicate in the diagnostic notation which of
several alternative CBOR representations are actually used; for example, a
data item written »1.5« by a diagnostic decoder might have been
encoded in CBOR as a half-, single-, or double-precision float.</t>
      <t>Encoding indicators are always optional:
CDN is usually used to describe CBOR data items at the data model
level.
For some diagnostic purposes, it is useful to represent the choice of
a serialization variation by including encoding indicators.
Implementations of CDN generally do not need to provide this
functionality in full; if they do, they can be called "diagnostic
implementations".
To be able to process CDN that contains encoding indicators,
a CDN-consuming implementation <bcp14>MUST</bcp14> accept them (i.e., process or
ignore the presence or absence of each encoding indicator).
It is <bcp14>RECOMMENDED</bcp14> to provide a warning for each encoding
indicator value that is encountered but not further processed.</t>
      <t>When creating CDN as input for a diagnostic CBOR encoder in order to
obtain specific encoding choices, encoding indicators may be placed
manually or by the software generating the CDN.
Where no encoding indicator is placed, a diagnostic CBOR encoder is expected to
generate Preferred Serialization (Section <xref target="RFC8949" section="4.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>) with
definite-length encoding only.
Similarly, when using CDN as output for a diagnostic CBOR decoder, a
basic diagnostic configuration of the tool is expected to provide
encoding indicators only in places where the CBOR input did not use
Preferred Serialization with definite-length encoding (see also
<xref target="basic"/>).
Diagnostic implementations of CDN that process encoding indicators as
discussed here are expected to document their diagnostic behavior and
the processing options that can be selected.</t>
      <section anchor="syntax-semantics-examples">
        <name>Syntax, Semantics, Examples</name>
        <t>Encoding indicators (<xref target="tab-ei-defined"/>) start with an underscore, often
followed by alphanumeric characters.
For example, <tt>_</tt> or <tt>_3</tt>.</t>
        <t>Encoding indicators indicate the specific CBOR encoding that was used,
or is to be used, to represent a specific CBOR data item.</t>
        <t>This specification defines six encoding indicators.
Additional encoding indicators could be defined in future standards
track updates to this specification.</t>
        <table anchor="tab-ei-defined">
          <name>Encoding Indicators Defined by This Specification</name>
          <thead>
            <tr>
              <th align="left">Encoding Indicator</th>
              <th align="left">Description</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">_</td>
              <td align="left">Indefinite-Length Encoding (ai=31)</td>
              <td align="left">RFC8949, RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_i</td>
              <td align="left">ai=0 to ai=23</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_0</td>
              <td align="left">ai=24</td>
              <td align="left">RFC8949, RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_1</td>
              <td align="left">ai=25</td>
              <td align="left">RFC8949, RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_2</td>
              <td align="left">ai=26</td>
              <td align="left">RFC8949, RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_3</td>
              <td align="left">ai=27</td>
              <td align="left">RFC8949, RFC-XXXX</td>
            </tr>
          </tbody>
        </table>
        <t>Encoding indicators can be ignored by anyone not
interested in this information.</t>
        <t>Encoding indicators are placed immediately to the right of the data
item or of a syntactic feature that can stand for the data item the
encoding of which the encoding indicator is controlling.
<xref target="tab-ei"/> provides examples for data items with definite length
encoding indicators used with various kinds of data items ("mt" = major
type, "ignoring e.i." = example encoding when ignoring the encoding indicators).
Examples for encoding indicators controlling indefinite length
encoding can be found in the context of explanations in
<xref target="ei-container"/> and <xref target="ei-string"/>.</t>
        <table anchor="tab-ei">
          <name>Examples of Definite Length Encoding Indicators for Different Data Items</name>
          <thead>
            <tr>
              <th align="left">mt</th>
              <th align="left">examples</th>
              <th align="left">encoding (in hex)</th>
              <th align="left">ignoring e.i.</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0</td>
              <td align="left">
                <tt>1_1</tt><br/><tt>0x4711_3</tt></td>
              <td align="left">190001<br/>1b0000000000004711</td>
              <td align="left">01<br/>194711</td>
            </tr>
            <tr>
              <td align="left">1</td>
              <td align="left">
                <tt>-1_1</tt></td>
              <td align="left">390000</td>
              <td align="left">20</td>
            </tr>
            <tr>
              <td align="left">2</td>
              <td align="left">
                <tt>'A'_1</tt></td>
              <td align="left">59000141</td>
              <td align="left">4141</td>
            </tr>
            <tr>
              <td align="left">3</td>
              <td align="left">
                <tt>"A"_1</tt></td>
              <td align="left">79000161</td>
              <td align="left">6161</td>
            </tr>
            <tr>
              <td align="left">4</td>
              <td align="left">
                <tt>[_1 "bar"]</tt></td>
              <td align="left">99000163626172</td>
              <td align="left">8163626172</td>
            </tr>
            <tr>
              <td align="left">5</td>
              <td align="left">
                <tt>{_1 "bar": 1}</tt></td>
              <td align="left">b900016362617201</td>
              <td align="left">a16362617201</td>
            </tr>
            <tr>
              <td align="left">6</td>
              <td align="left">
                <tt>1_1(4711)</tt></td>
              <td align="left">d90001191267</td>
              <td align="left">c1191267</td>
            </tr>
            <tr>
              <td align="left">7</td>
              <td align="left">
                <tt>1.5_2</tt><br/><tt>0x4711p+03_3</tt></td>
              <td align="left">fa3fc00000<br/>fb4101c44000000000</td>
              <td align="left">f93e00<br/>fa480e2200</td>
            </tr>
          </tbody>
        </table>
        <t>(In the following, an abbreviation of the form <tt>ai=</tt>nn gives nn as
the numeric value of the field <em>additional information</em>, the low-order 5
bits of the initial byte: see Section <xref target="RFC8949" section="3" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>.
This field is used in encoding the "argument", i.e., the value, tag, or
length; <tt>ai=0</tt> to <tt>ai=23</tt> mean that the value of the <tt>ai</tt> field
immediately <em>is</em> the argument, <tt>ai=24</tt> to <tt>ai=27</tt> mean that the
argument is carried in 2<sup>ai-24</sup> (1, 2, 4, or 8)
additional bytes, and <tt>ai=31</tt> means that indefinite-length
encoding is used.)</t>
        <t>An underscore followed by a decimal digit <tt>n</tt> indicates that the
item was or is to be encoded with an additional information
value of <tt>ai=</tt>24+<tt>n</tt>.
(The item associated to the encoding indicator may be the preceding
item, or, for arrays and maps, the item starting with the
preceding bracket or brace.)
For an example involving floating point values (Section <xref target="RFC8949" section="3.3" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>),
<tt>1.5_1</tt> is a half-precision floating-point
number (2<sup>1</sup> = 2 additional bytes or 16 bits), while <tt>1.5_3</tt> is encoded as
double precision (2<sup>3</sup> = 8 additional bytes or 64 bits).
For a tool consuming CDN in a diagnostic mode, encountering an
encoding indicator that does not provide enough space to correctly
encode the unchanged data item given is an error; there is no
truncation or rounding that would change the data item encoded.</t>
        <aside>
          <t>Truncation or rounding semantics imply performing changes at the data
model level, which is outside the scope of encoding indicators.
Such operations can be provided by app-extensions.</t>
        </aside>
        <t>The encoding indicator <tt>_</tt> (an underscore on its own) is used to
indicate indefinite-length encoding.
Indefinite-length encoding uses <tt>ai=31</tt>, which could have been
indicated by <tt>_7</tt>, which is therefore not used and marked as reserved
(as are <tt>_4</tt>, <tt>_5</tt>, and <tt>_6</tt>, which would stand for <tt>ai=28</tt> to
<tt>ai=30</tt>, values currently not in use in CBOR; these encoding
indicators will be available if and when CBOR is extended to make use
of them).</t>
        <t>Note that the encoding indicator <tt>_</tt> is only available behind the opening
brace/bracket for <tt>map</tt> and <tt>array</tt> (<xref target="ei-container"/>): strings
originally had a now deprecated special syntax
<tt>streamstring</tt> for indefinite-length encoding except for the special
cases <tt>''_</tt> and <tt>""_</tt> (<xref target="ei-string"/>).</t>
        <t>The encoding indicators <tt>_0</tt> to <tt>_3</tt> indicate <tt>ai=24</tt>
to <tt>ai=27</tt>, respectively; they therefore stand for 1, 2, 4, and 8
bytes of additional information (ai) following the initial byte in the
head of the data item.</t>
        <t>Section <xref target="RFC8949" section="8.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> does not address <tt>ai=0</tt> to
<tt>ai=23</tt> — the assumption seems to have been that Preferred Serialization
(Section <xref target="RFC8949" section="4.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>) will be used when converting CBOR
diagnostic notation to an encoded CBOR data item, so leaving out the
encoding indicator for a data item with a Preferred Serialization
will implicitly use <tt>ai=0</tt> to <tt>ai=23</tt> if that is possible.
The present specification allows making this explicit:</t>
        <t><tt>_i</tt> ("immediate") stands for encoding with <tt>ai=0</tt> to <tt>ai=23</tt>, i.e.,
it indicates that the argument is encoded directly in the initial byte
of the CBOR item.</t>
        <t>Specific forms of encoding indicators are discussed in further detail
in <xref target="ei-container"/> for arrays and maps and in <xref target="ei-string"/> for the
deprecated syntax for indefinite-length strings.</t>
      </section>
      <section anchor="ei-container">
        <name>Encoding Indicators of Arrays and Maps</name>
        <t>A single underscore can be written after the opening brace of a map or
the opening bracket of an array to indicate that the data item was
represented in indefinite-length format.  For example, <tt>[_ 1, 2]</tt>
contains an indicator that an indefinite-length representation was
used to represent the data item <tt>[1, 2]</tt>.</t>
        <t>At the same position, encoding indicators for specifying the size of
the array or map head for definite-length format can be used instead,
specifically <tt>_i</tt> or <tt>_0</tt> to <tt>_3</tt>.  For example, <tt>[_0 false, true]</tt> can be
used to specify the encoding of the array <tt>[false, true]</tt> as <tt>98 02 f4 f5</tt>.</t>
      </section>
      <section anchor="ei-string">
        <name>Deprecated: Indefinite-length Encoding Indicators for Strings</name>
        <t>In CBOR, indefinite-length encoded (byte or text) strings are composed of
"chunks" (Section <xref target="RFC8949" section="3.2.3" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>).</t>
        <t>The original diagnostic notation (<xref section="6.1" sectionFormat="of" target="RFC7049"/>) provided
a special syntax <tt>streamstring</tt> for them, which was retained and
further clarified in Section <xref target="RFC8949" section="8.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>.
This syntax represents the individual chunks in
sequence within parentheses, each optionally followed by a comma, with
an encoding indicator <tt>_</tt> immediately after the opening parenthesis:
e.g., <tt>(_ h'0123', h'4567')</tt> or <tt>(_ "foo", "bar")</tt>.
The overall type (byte string or text string) of the string is
provided by the types of the individual chunks, which all need to be
of the same type (Section <xref target="RFC8949" section="3.2.3" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>).</t>
        <t>In this syntax, an indefinite-length string with no chunks inside, <tt>(_ )</tt>
would be ambiguous as to whether a byte string (encoded <tt>5f ff</tt>) or a text string
(encoded <tt>7f ff</tt>) is meant and is therefore not used.
The basic forms <tt>''_</tt> and <tt>""_</tt> can be used instead and are reserved for
the case of no chunks only — not as short forms for the (permitted,
but not really useful) encodings with only empty chunks, which
need to be notated as <tt>(_ '')</tt>, <tt>(_ "")</tt>, etc.,
when it is desired to preserve the chunk structure.</t>
        <t>With this document, the <tt>streamstring</tt> syntax is now deprecated; new
CDN documents should instead use the <tt>ilbs</tt>/<tt>ilts</tt> app-extensions
(<xref target="ilxs"/>) to build indefinite-length encoded strings.</t>
      </section>
    </section>
    <section anchor="grammars">
      <name>ABNF Definitions</name>
      <t>This section collects grammars in ABNF form (<xref target="STD68"/> as extended in
<xref target="RFC7405"/>) that serve to define the syntax of CDN and some
prefixed literals.</t>
      <aside>
        <t>Implementation note: The ABNF definitions in this section are
intended to be useful in a Parsing Expression Grammar (PEG) parser
interpretation (see <xref section="A" sectionFormat="of" target="RFC8610"/> for an introduction into PEG).</t>
      </aside>
      <section anchor="grammar">
        <name>Overall ABNF Definition for Concise Diagnostic Notation</name>
        <t>This subsection provides an overall ABNF definition for the syntax of
concise diagnostic notation.</t>
        <aside>
          <t>This ABNF definition treats all single-quoted string literals the same,
whether they are unprefixed and constitute byte string literals, or
prefixed and their content subject to further processing.
The text string value of the single-quoted strings that goes into that
further processing is described using separate ABNF definitions in
<xref target="app-grammars"/>; as a convention, the grammar for the content of an
app-string with prefix, say, <tt>p</tt>, is described by an ABNF definition
with the rule name <tt>app-string-p</tt>.</t>
          <t>As an implementation note, some implementations may want to integrate
the parsing and processing of app-string content for certain
app-extensions with the overall grammar.
Example grammars for such integrated parsers are provided with this
specification in <xref target="integrated-grammars"/>.</t>
        </aside>
        <t>For simplicity, the internal parsing for the built-in CDN prefixes is
specified in the same way.
ABNF definitions for <tt>h''</tt>/<tt>h``</tt> and <tt>b64''</tt>/<tt>b64``</tt> are
provided in <xref target="h-grammar"/> and <xref target="b64-grammar"/>.</t>
        <figure anchor="abnf-grammar">
          <name>Overall ABNF Definition of CDN</name>
          <sourcecode type="abnf" name="cdn.abnf"><![CDATA[
seq             = S [item *(MSC item) SOC]
one-item        = S item S
item            = map / array / tagged ; spec inside
                / (number / string / prefixed) spec
                / simple ; no spec
                / streamstring ; deprecated (spec inside)

number          = hexfloat / hexint / octint / binint
                / decnumber / nonfin
sign            = "+" / "-"
decnumber       = [sign] (("0" / DIGIT1 *DIGIT) ["." *DIGIT] / "." 1*DIGIT)
                         ["e" [sign] 1*DIGIT]
hexfloat        = [sign] "0x" (1*HEXDIG ["." *HEXDIG] / "." 1*HEXDIG)
                         "p" [sign] 1*DIGIT
hexint          = [sign] "0x" 1*HEXDIG
octint          = [sign] "0o" 1*ODIGIT
binint          = [sign] "0b" 1*BDIGIT
nonfin          = %s"Infinity"
                / %s"-Infinity"
                / %s"NaN"

string          = dqstr / rawstring / sqstr / embedded

simple          = %s"false"
                / %s"true"
                / %s"null"
                / %s"undefined"
                / %s"simple(" S simple-number S ")"
simple-number   = "25" %x30-35         ; 250-255
                / "2" %x30-34 DIGIT    ; 200-249
                / "1" 2DIGIT           ; 100-199
                / %x34-39 DIGIT        ; 40-99
                / "3" %x32-39          ; 32-39
                ;; there are no simple values between 24-31
                / "2" %x30-33          ; 20-23
                / "1" DIGIT            ; 10-19
                / DIGIT                ; 0-9
uint            = "0" / DIGIT1 *DIGIT
tagged          = uint spec "(" S item S ")"

prefix          = lcalpha *lcldh
                / ucalpha *ucldh

prefixed        = prefix (sqstr / rawstring / embedded)

rawstring       = startrawdelim
                  raw-inner
                  alikerawdelim
rawdelim        = 1*"`"
startrawdelim   = rawdelim
                  ; width (number of backquotes) distinguishes
                  ; between following alikerawdelim and shortrawdelim
alikerawdelim   = rawdelim ; width == previous startrawdelim
shortrawdelim   = rawdelim ; width < previous startrawdelim
rawchars        = 1*(%x0a / %x0d / %x20-5f / %x61-7e / NONASCII)
raw-inner       = 1*(rawchars / shortrawdelim)

dqstr           = DQUOTE *double-quoted DQUOTE
sqstr           = SQUOTE *single-quoted SQUOTE
embedded        = "<<" seq ">>"

array           = "[" (specms S item *(MSC item) SOC / spec S) "]"
map             = "{" (specms S keyp *(MSC keyp) SOC / spec S) "}"
keyp            = item S ":" S item

; We allow %x09 HT in prose, but not in string literals
blank           = %x09 / %x0A / %x0D / %x20
lblank          = %x0A / %x20  ; Not HT or CR (gone)
non-slash       = blank / %x21-2e / %x30-7F / NONASCII
non-slash-star  = blank / %x21-29 / %x2b-2e / %x30-7F / NONASCII
non-star        = blank / %x21-29 / %x2b-7F / NONASCII
ends-in-star    = *non-star 1*"*"
non-lf          = %x09 / %x0D / %x20-7F / NONASCII
eol-comment     = "#" / "//"
comment         = "/" non-slash-star *non-slash "/"
                / "/*" ends-in-star
                       *(non-slash-star ends-in-star) "/"
                / eol-comment *non-lf %x0A
; optional space
S               = *blank *(comment *blank)
; mandatory space
MS              = (blank/comment) S
; mandatory comma and/or space
MSC             = ("," S) / (MS ["," S])
; optional comma and/or space
SOC             = S ["," S]

streamstring    = "(_" MS string *(MSC string) SOC ")"
spec            = ["_" [specchar]]
specms          = ["_" [specchar] MS]
specchar        = %s"i" / %x30-33 / reserved-ei
reserved-ei     = 1*wordchar ; reserved for standards track use

double-quoted   = unescaped
                / SQUOTE
                / "\" escapable-d

single-quoted   = unescaped
                / DQUOTE
                / "\" escapable-s

escapable1      = %s"b" ; BS backspace U+0008
                / %s"f" ; FF form feed U+000C
                / %s"n" ; LF line feed U+000A
                / %s"r" ; CR carriage return U+000D
                / %s"t" ; HT horizontal tab U+0009
                / "\"   ; \ backslash (reverse solidus) U+005C

escapable-d     = escapable1
                / DQUOTE
                / "/"   ; / slash (solidus) U+002F (JSON!)
                / (%s"u" hexchar) ;  uXXXX      U+XXXX

escapable-s     = escapable1
                / SQUOTE
                / (%s"u" hexchar-s) ;  uXXXX      U+XXXX

hexchar         = "{" (1*"0" [ hexscalar ] / hexscalar) "}"
                / non-surrogate
                / two-surrogate
non-surrogate   = ((DIGIT / "A"/"B"/"C" / "E"/"F") 3HEXDIG)
                / ("D" ODIGIT 2HEXDIG )
two-surrogate   = high-surrogate "\" %s"u" low-surrogate
high-surrogate  = "D" ("8"/"9"/"A"/"B") 2HEXDIG
low-surrogate   = "D" ("C"/"D"/"E"/"F") 2HEXDIG
hexscalar       = "10" 4HEXDIG / HEXDIG1 4HEXDIG
                / non-surrogate / 1*3HEXDIG

; single-quote hexchar-s: don't allow 0020..007e
hexchar-s       = "{" (1*"0" [ hexscalar-s ] / hexscalar-s) "}"
                / non-surrogate-s
                / two-surrogate
non-surrogate-s = "007F"                 ; rubout
                / "00" ("0"/"1"/"8"/"9"/HEXDIGA) HEXDIG
                / "0" HEXDIG1 2HEXDIG
                / non-surrogate-1
non-surrogate-1 = ((DIGIT1 / "A"/"B"/"C" / "E"/"F") 3HEXDIG)
                / ("D" ODIGIT 2HEXDIG )
hexscalar-s     = "10" 4HEXDIG / HEXDIG1 4HEXDIG
                / non-surrogate-1 / HEXDIG1 2HEXDIG
                / ("1"/"8"/"9"/HEXDIGA) HEXDIG
                / "7F"
                / HEXDIG1

; Note that no other C0 characters are allowed, including %x09 HT
unescaped       = %x0A ; new line
                / %x0D ; carriage return -- ignored on input
                / %x20-21
                     ; omit 0x22 "
                / %x23-26
                     ; omit 0x27 '
                / %x28-5B
                     ; omit 0x5C \
                / %x5D-7F
                / NONASCII

newline         = [%x0D] %x0A
DQUOTE          = %x22    ; " double quote
SQUOTE          = "'"     ; ' single quote
DIGIT           = %x30-39 ; 0-9
DIGIT1          = %x31-39 ; 1-9
ODIGIT          = %x30-37 ; 0-7
BDIGIT          = %x30-31 ; 0-1
HEXDIGA         = "A" / "B" / "C" / "D" / "E" / "F"
; Note: double-quoted strings as in "A" are case-insensitive in ABNF
HEXDIG          = DIGIT / HEXDIGA
HEXDIG1         = DIGIT1 / HEXDIGA
lcalpha         = %x61-7A ; a-z
lcldh           = lcalpha / DIGIT / "-"
ucalpha         = %x41-5A ; A-Z
ucldh           = ucalpha / DIGIT / "-"
ALPHA           = lcalpha / ucalpha
wordchar        = "_" / ALPHA / DIGIT ; [_a-z0-9A-Z]
NONASCII        = %x80-D7FF / %xE000-10FFFF
]]></sourcecode>
        </figure>
        <t>While an ABNF grammar defines the set of character strings that are
considered to be valid CDN by this ABNF, the mapping of these
character strings into the generic data model of CBOR is not always
obvious.</t>
        <t><cref anchor="move3">Further information can be moved up to Section 2 by
splitting it up into information specific to the ABNF grammar and
general information.</cref></t>
        <t>The following additional items should help in the interpretation:</t>
        <ol spacing="normal" type="1" start="1"><li>
            <t>As mentioned in the terminology (<xref target="terminology"/>), the ABNF terminal
  values in this document define Unicode scalar values (characters)
  rather than their UTF-8 encoding.  For example, the Unicode PLACE OF
  INTEREST SIGN (U+2318) would be defined in ABNF as %x2318.</t>
          </li>
          <li anchor="cr">
            <t>See <xref target="repertoire"/> for more considerations about the
  character repertoire used for CDN source text and, in particular,
  the special handling of newline characters in the source.</t>
          </li>
          <li anchor="decnumber">
            <t><tt>decnumber</tt> stands for an integer in the usual decimal notation, unless at
  least one of the optional parts starting with "." and "e" are
  present, in which case it stands for a floating point value in the
  usual decimal notation.  Note that the grammar allows <tt>3.</tt> for
  <tt>3.0</tt> and <tt>.3</tt> for <tt>0.3</tt> (also for hexadecimal floating point
  below); implementers are advised that some platform numeric parsers
  accept only a subset of the floating point syntax in this document
  and may require some preprocessing to use here.</t>
          </li>
          <li>
            <t><tt>hexint</tt>, <tt>octint</tt>, and <tt>binint</tt> stand for an integer in the usual base 16/hexadecimal
  ("0x"), base 8/octal ("0o"), or base 2/binary ("0b") notation.
  <tt>hexfloat</tt> stands
  for a floating point number in the usual hexadecimal notation (which
  uses a mantissa in hexadecimal and an exponent in decimal notation,
  see Section 5.12.3 of <xref target="IEEE754"/>, Section 6.4.4.3 of <xref target="C"/>, or Section
  5.13.4 of <xref target="Cplusplus"/>; floating-suffix/floating-point-suffix from
  the latter two is not used here).</t>
          </li>
          <li anchor="intnumber">
            <t>For <tt>hexint</tt>, <tt>octint</tt>, <tt>binint</tt>, and when <tt>decnumber</tt> stands for an integer, the
   corresponding CBOR data item is represented using major type 0 or 1
   if possible, or using tag 2 or 3 if not.
   In the latter case, this specification does not define any encoding
   indicators that apply.
   If fine control over encoding is desired, this can be expressed by
   being explicit about the representation as a tag:
   E.g., <tt>987654321098765432310</tt>, which is equivalent to <tt>2(h'35 8a 75
   04 38 f3 80 f5 f6')</tt> in its Preferred Serialization, might be
   written as <tt>2_3(h'00 00 00 35 8a 75 04 38 f3 80 f5 f6'_1)</tt> if
   leading zeros need to be added during serialization to obtain
   specific sizes for tag head, byte string head, and the overall byte
   string.  </t>
            <t>
When <tt>decnumber</tt> stands for a floating point value, and for
<tt>hexfloat</tt> and <tt>nonfin</tt>, a floating point data item with major
type 7 is used; diagnostic implementations employ Preferred
Serialization unless the item was modified by an
encoding indicator, which then needs to be <tt>_1</tt>, <tt>_2</tt>, or <tt>_3</tt>.
For this, the number range needs to fit into an <xref target="IEEE754"/> binary64 (or the size
corresponding to the encoding indicator), and the precision will be
adjusted to binary64 before further applying Preferred Serialization
(or to the size corresponding to the encoding indicator).
Tag 4/5 representations are not generated in these cases.
Future app-prefixes could be defined to allow more control for
obtaining a tag 4/5 representation directly from a hex or decimal
floating point literal.</t>
          </li>
          <li anchor="spec">
            <t><tt>spec</tt> stands for an encoding indicator.
  See <xref target="encoding-indicators"/> for details.</t>
          </li>
          <li anchor="rawstring-grammar">
            <t>The ABNF grammar for raw strings is lenient; a parser needs to
  implement the ABNF comments on <tt>alikerawdelim</tt> and <tt>shortrawdelim</tt> as
  well.
  <tt>shortrawdelim</tt> only matches sequences of backquotes that are
  shorter than <tt>startrawdelim</tt>.
  <tt>alikerawdelim</tt> only matches sequences of backquotes that are
  exactly as long as <tt>startrawdelim</tt>.</t>
          </li>
        </ol>
        <aside>
          <t>In a PEG parser that implements predicates, these matching rules
can for instance be implemented as follows:</t>
          <artwork><![CDATA[
 startrawdelim = rawdelim&{|(rd)|@rdlen = rd.text_value.length}
 shortrawdelim = rawdelim&{|(rd)|rd.text_value.length < @rdlen}
 alikerawdelim = rawdelim&{|(rd)|rd.text_value.length == @rdlen}
]]></artwork>
        </aside>
      </section>
      <section anchor="app-grammars">
        <name>ABNF Definitions for App-Extension Content</name>
        <t>This subsection provides ABNF definitions for the content of
prefixed literals defined in <xref target="STD94"/> and in this
specification, where applicable.
These grammars describe the <em>decoded</em> content of the single-quoted or
raw string components that
combine with prefixes to form
prefixed literals.
Each of these may integrate ABNF rules defined in <xref target="abnf-grammar"/>,
which are not always repeated here.</t>
        <t><xref target="tab-prefixes"/> summarizes the app-prefix values defined in this document.</t>
        <table anchor="tab-prefixes">
          <name>App-prefix Values Defined in this Document</name>
          <thead>
            <tr>
              <th align="left">app-prefix</th>
              <th align="left">content of single-quoted or raw string</th>
              <th align="left">result type</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">h</td>
              <td align="left">hexadecimal form of binary data</td>
              <td align="left">byte string</td>
            </tr>
            <tr>
              <td align="left">H</td>
              <td align="left">(not used)</td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">b64</td>
              <td align="left">base64 forms (classic or base64url) of binary data</td>
              <td align="left">byte string</td>
            </tr>
            <tr>
              <td align="left">B64</td>
              <td align="left">(not used)</td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">dt</td>
              <td align="left">RFC 3339 date/time</td>
              <td align="left">number (int or float)</td>
            </tr>
            <tr>
              <td align="left">DT</td>
              <td align="left">"</td>
              <td align="left">Tag 1 on the above</td>
            </tr>
            <tr>
              <td align="left">ip</td>
              <td align="left">IP address or prefix</td>
              <td align="left">byte string, <br/>array of length and byte string</td>
            </tr>
            <tr>
              <td align="left">IP</td>
              <td align="left">"</td>
              <td align="left">Tag 54 (IPv6) or 52 (IPv4) on the above</td>
            </tr>
            <tr>
              <td align="left">hash</td>
              <td align="left">string (usually used with sequences)</td>
              <td align="left">byte string</td>
            </tr>
            <tr>
              <td align="left">HASH</td>
              <td align="left">(not used)</td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">t1</td>
              <td align="left">strings (usually used with sequences)</td>
              <td align="left">text string</td>
            </tr>
            <tr>
              <td align="left">T1</td>
              <td align="left">(not used)</td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">b1</td>
              <td align="left">strings (usually used with sequences)</td>
              <td align="left">byte string</td>
            </tr>
            <tr>
              <td align="left">B1</td>
              <td align="left">(not used)</td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">float</td>
              <td align="left">floating point value from input bytes</td>
              <td align="left">floating point value (mt=7)</td>
            </tr>
            <tr>
              <td align="left">FLOAT</td>
              <td align="left">(not used)</td>
              <td align="left"> </td>
            </tr>
          </tbody>
        </table>
        <t>Note that implementation platforms may already provide implementations
of grammars used in app-extensions, such as of RFC 3339 for
<tt>dt''</tt> and of IP address syntax for <tt>ip''</tt>.
CDN-based tools may want to use these implementation libraries instead
of using the grammars that are provided here as a reference.</t>
        <t>For convenience, the common definitions in <xref target="abnf-grammar-ext-common"/>
are not repeated in the below ABNF grammars.</t>
        <figure anchor="abnf-grammar-ext-common">
          <name>Common Rules Used in app-extension ABNF grammars</name>
          <sourcecode type="abnf" name="cdn-extcommon.abnf"><![CDATA[
ALPHA           = %x41-5a / %x61-7a
DIGIT           = %x30-39 ; 0-9
HEXDIG          = DIGIT / HEXDIGA
HEXDIGA         = "A" / "B" / "C" / "D" / "E" / "F"
; Note: double-quoted strings as in "A" are case-insensitive in ABNF
lblank          = %x0A / %x20  ; Not HT or CR (gone)
non-lf          = %x20-7f / NONASCII
NONASCII        = %x80-D7FF / %xE000-10FFFF
]]></sourcecode>
        </figure>
        <section anchor="h-grammar">
          <name>h: ABNF Definition of Hexadecimal representation of a byte string</name>
          <t>The syntax of the content of byte strings represented in hex,
such as <tt>h''</tt>, <tt>h'0815'</tt>, or <tt>h'/head/ 63 /contents/ 66 6f 6f'</tt>
(another representation of <tt>&lt;&lt; "foo" &gt;&gt;</tt>), is described by the ABNF in <xref target="abnf-grammar-h"/>.
This syntax accommodates both lowercase and uppercase hex digits, as
well as blank space (including comments) around each hex digit.</t>
          <figure anchor="abnf-grammar-h">
            <name>ABNF Definition of Hexadecimal Representation of a Byte String</name>
            <sourcecode type="abnf" name="cdn-ext-h.abnf"><![CDATA[
app-string-h    = S *(HEXDIG S HEXDIG S / ellipsis S)
                  [eol-comment *non-lf]
ellipsis        = 3*"."
non-slash       = lblank / %x21-2e / %x30-7f / NONASCII
non-slash-star  = lblank / %x21-29 / %x2b-2e / %x30-7f / NONASCII
non-star        = lblank / %x21-29 / %x2b-7f / NONASCII
ends-in-star    = *non-star 1*"*"
non-lf          = %x20-7f / NONASCII
eol-comment     = "#" / "//"
S               = *lblank *(comment *lblank)
comment         = "/" non-slash-star *non-slash "/"
                / "/*" ends-in-star
                       *(non-slash-star ends-in-star) "/"
                / eol-comment *non-lf %x0A
]]></sourcecode>
          </figure>
          <aside>
            <t>The comment syntax provided inside the hex string is intended to
mimic the overall syntax for comments in CDN (<xref target="comments"/>).<br/>
Implementation note: Comments and blank space are also described by
the following search regexp, which can be used to remove them.
For display, the regexp is split along the outer
alternative into four lines, which need to be combined before use;
<tt>\z</tt> stands for the end of the string and is notated <tt>$</tt> in some
regexp dialects.</t>
            <artwork><![CDATA[
  \s|
  /\*(?:[^*]*\*+)(?:[^/*][^*]*\*+)*/|
  /[^/*][^/]*/|
  (?:#|//)[^\n]*(?:\n|\z)
]]></artwork>
          </aside>
        </section>
        <section anchor="b64-grammar">
          <name>b64: ABNF Definition of Base64 representation of a byte string</name>
          <t>The syntax of the content of byte strings represented in base64 is
described by the ABNF in <xref target="abnf-grammar-b64"/>.</t>
          <t>This syntax allows both the classic (<xref section="4" sectionFormat="of" target="RFC4648"/>) and the
URL-safe (<xref section="5" sectionFormat="of" target="RFC4648"/>) alphabet to be used.
It accommodates, but does not require base64 padding.
Note that inclusion of classic base64 makes it impossible to have
comments based on slash characters in b64, as "<tt>/</tt>" is valid base64-classic.</t>
          <figure anchor="abnf-grammar-b64">
            <name>ABNF definition of Base64 Representation of a Byte String</name>
            <sourcecode type="abnf" name="cdn-ext-b64.abnf"><![CDATA[
app-string-b64  = B *(4(b64dig B))
                  [b64dig B b64dig B ["=" B "=" / b64dig B ["="]] B]
                  ["#" *non-lf]
b64dig          = ALPHA / DIGIT / "-" / "_" / "+" / "/"
B               = *lblank *(comment *lblank)
comment         = "#" *non-lf %x0A
]]></sourcecode>
          </figure>
        </section>
        <section anchor="dt-grammar">
          <name>dt: ABNF Definition of RFC 3339 Representation of a Date/Time</name>
          <t>The syntax of the content of <tt>dt</tt> literals can be described by the
ABNF for <tt>date-time</tt> in <xref target="abnf-grammar-dt"/>.
This is derived from <xref target="RFC3339"/> as summarized in <xref section="3" sectionFormat="of" target="RFC9165"/>.</t>
          <figure anchor="abnf-grammar-dt">
            <name>ABNF Definition of RFC3339 Representation of a Date/Time</name>
            <sourcecode type="abnf" name="cdn-ext-dt.abnf"><![CDATA[
app-string-dt   = date-time

date-fullyear   = 4DIGIT
date-month      = 2DIGIT  ; 01-12
date-mday       = 2DIGIT  ; 01-28, 01-29, 01-30, 01-31 based on
                          ; month/year
time-hour       = 2DIGIT  ; 00-23
time-minute     = 2DIGIT  ; 00-59
time-second     = 2DIGIT  ; 00-58, 00-59, 00-60 based on leap sec
                          ; rules
time-secfrac    = "." 1*DIGIT
time-numoffset  = ("+" / "-") time-hour ":" time-minute
time-offset     = "Z" / time-numoffset

partial-time    = time-hour ":" time-minute ":" time-second
                  [time-secfrac]
full-date       = date-fullyear "-" date-month "-" date-mday
full-time       = partial-time time-offset

date-time       = full-date "T" full-time
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ip-grammar">
          <name>ip: ABNF Definition of Textual Representation of an IP Address</name>
          <t>The syntax of the content of <tt>ip</tt> literals can be described by the
ABNF for <tt>IPv4address</tt> and <tt>IPv6address</tt> in <xref section="3.2.2" sectionFormat="of" target="RFC3986"/>,
as included in slightly updated form in <xref target="abnf-grammar-ip"/>.</t>
          <figure anchor="abnf-grammar-ip">
            <name>ABNF Definition of Textual Representation of an IP Address</name>
            <sourcecode type="abnf" name="cdn-ext-ip.abnf"><![CDATA[
app-string-ip = IPaddress ["/" uint]

IPaddress     = IPv4address
              / IPv6address

; ABNF from RFC 3986, re-arranged for PEG compatibility:

IPv6address   =                            6( h16 ":" ) ls32
              /                       "::" 5( h16 ":" ) ls32
              / [ h16               ] "::" 4( h16 ":" ) ls32
              / [ h16 *1( ":" h16 ) ] "::" 3( h16 ":" ) ls32
              / [ h16 *2( ":" h16 ) ] "::" 2( h16 ":" ) ls32
              / [ h16 *3( ":" h16 ) ] "::"    h16 ":"   ls32
              / [ h16 *4( ":" h16 ) ] "::"              ls32
              / [ h16 *5( ":" h16 ) ] "::"              h16
              / [ h16 *6( ":" h16 ) ] "::"

h16           = 1*4HEXDIG
ls32          = ( h16 ":" h16 ) / IPv4address
IPv4address   = dec-octet "." dec-octet "." dec-octet "." dec-octet
dec-octet     = "25" %x30-35         ; 250-255
              / "2" %x30-34 DIGIT    ; 200-249
              / "1" 2DIGIT           ; 100-199
              / %x31-39 DIGIT        ; 10-99
              / DIGIT                ; 0-9

DIGIT1        = %x31-39 ; 1-9
uint          = "0" / DIGIT1 *DIGIT
]]></sourcecode>
          </figure>
        </section>
      </section>
      <section anchor="integrated-grammars">
        <name>ABNF Definitions for Integrated Extension Parsers</name>
        <t>For some applications of CDN, it is an optimization to integrate
parsers for the content of some prefixed string literals into
the main parser, handling both the string literal syntax (e.g., escapes such
as <tt>\'</tt> and <tt>\\</tt>) and the syntax of the extension content in one go.</t>
        <t>For app-extensions that only use printable ASCII characters
(from U+0020 to U+007E) minus single-quote <tt>'</tt> and backslash <tt>\</tt>, the ABNF
such as that given in <xref target="app-grammars"/> can be directly used as an
integrated parser, after adding some glue ABNF.
For instance, for app-string-dt, add an alternative to <tt>prefixed</tt> that
points to a rule for prefixed single-quoted string literals (<xref target="abnf-grammar-sq-glue"/>).</t>
        <figure anchor="abnf-grammar-sq-glue">
          <name>Glue ABNF for Integrated DT Parser</name>
          <sourcecode type="abnf" name="cdn-glue.abnf"><![CDATA[
prefixed        = sq-app-string-dt /
                  prefix (sqstr / rawstring / embedded)
sq-app-string-dt = (%s"dt'"/%s"DT'") app-string-dt "'"
]]></sourcecode>
        </figure>
        <t>To facilitate writing integrated ABNF for more complex prefixed
string literals, the ABNF definitions in <xref target="abnf-grammar-sq"/> may
be useful and are used in the rest of this section.</t>
        <figure anchor="abnf-grammar-sq">
          <name>ABNF Definitions Useful for Integrated Extension Parsers</name>
          <sourcecode type="abnf" name="cdn-intcommon.abnf"><![CDATA[
i-HT =        %s"\t" / %s"\u" ("0009" / "{" *("0") "9}")
i-LF = %x0a / %s"\n" / %s"\u" ("000A" / "{" *("0") "A}")
i-CR = %x0d / %s"\r" / %s"\u" ("000D" / "{" *("0") "D}")

i-blank = i-LF / i-CR / " "
i-non-lf = i-HT / i-CR / %x20-26 / "\'" / %x28-5b
         / "\\" / %x5d-7f / i-NONASCII

i-NONASCII = NONASCII / %s"\u" ESCGE7F

; hex escaping for U+007F or greater
ESCGE7F = "D" ("8"/"9"/"A"/"B") 2HEXDIG
          %s"\u" "D" ("C"/"D"/"E"/"F") 2HEXDIG
        / FOURHEX1 / "0" HEXDIG1 2HEXDIG / "00" TWOHEX1
        / "{" *("0")
          ("10" 4HEXDIG / HEXDIG1 4HEXDIG
           / FOURHEX1 / HEXDIG1 2HEXDIG / TWOHEX1)
          "}"

; xxxx - 0xxx - Dhigh\uDloow
FOURHEX1 = (DIGIT1 / "A"/"B"/"C" / "E"/"F") 3HEXDIG
         / "D" ODIGIT 2HEXDIG
; 00xx - ASCII + 007F
TWOHEX1  = ("8"/"9" / HEXDIGA) HEXDIG / "7F"
]]></sourcecode>
        </figure>
        <t>Similarly, for integrated parsers for prefixed literals built from raw strings, the ABNF
definitions in <xref target="abnf-grammar-rs"/> can be useful.
<tt>alikerawdelim</tt> only matches sequences of backquotes that are exactly as
long as a previous <tt>startrawdelim</tt>.</t>
        <figure anchor="abnf-grammar-rs">
          <name>ABNF Definitions Useful for Raw String Integrated Extension Parsers</name>
          <sourcecode type="abnf" name="cdn-raw-intcommon.abnf"><![CDATA[
r-non-lf = %x0D / %x20-5f / %x61-7f / NONASCII / shortrawdelim
]]></sourcecode>
        </figure>
        <t>Four subsections with ABNF for integrated parsers follow, a pair for
<tt>h''</tt> and <tt>b64''</tt>, and a pair for <tt>h``</tt> and <tt>b64``</tt>.
There is no expectation for a new app-extension to supply ABNF
for an integrated parser (or any ABNF at all!), in particular if the
parsing function is likely to be fulfilled by a platform library.
If ABNF for the content of a single-quoted string is available in an
app-extension specification, ABNF for an integrated parser can
be written as a separate activity or also automatically derived (see
also <xref target="CDN-WIKI"/>, where more information about implementing integrated
parsers is being collected).</t>
        <section anchor="sq-h-grammar">
          <name>h'': ABNF Definition of Integrated Parser</name>
          <t>With glue ABNF similar to that in <xref target="abnf-grammar-sq-glue"/> and common
definitions in Figures <xref format="counter" target="abnf-grammar-ext-common"/> and <xref format="counter" target="abnf-grammar-sq"/>, ABNF such as
that shown in <xref target="abnf-grammar-sq-h"/> can be used as an integrated parser
for <tt>h</tt> prefixed single-quote strings.</t>
          <figure anchor="abnf-grammar-sq-h">
            <name>ABNF Definition for Integrated Hex Parser</name>
            <sourcecode type="abnf" name="cdn-int-hsq.abnf"><![CDATA[
sq-app-string-h = %s"h'" s-app-string-h "'"
s-app-string-h = h-S *(HEXDIG h-S HEXDIG h-S / ellipsis h-S)
    [eol-comment *i-non-lf]

h-S = *(i-blank) *(h-comment *(i-blank))
h-non-slash = i-blank / %x21-26 / "\'" / %x28-2e
            / %x30-5b / "\\" / %x5d-7f / i-NONASCII
h-non-slash-star = i-blank / %x21-26 / "\'" / %x28-29 / %x2b-2e
                 / %x30-5b / "\\" / %x5d-7f / i-NONASCII
h-non-star = i-blank / %x21-26 / "\'" / %x28-29 / %x2b-5b
           / "\\" / %x5d-7f / i-NONASCII
h-ends-in-star = *h-non-star 1*"*"
h-comment = "/" h-non-slash-star *h-non-slash "/"
          / "/*" h-ends-in-star
                 *(h-non-slash-star h-ends-in-star) "/"
          / eol-comment *i-non-lf i-LF
]]></sourcecode>
          </figure>
        </section>
        <section anchor="sq-b64-grammar">
          <name>b64'': ABNF Definition of Integrated Parser</name>
          <t>With glue ABNF similar to that in <xref target="abnf-grammar-sq-glue"/> and common
definitions in Figures <xref format="counter" target="abnf-grammar-ext-common"/> and <xref format="counter" target="abnf-grammar-sq"/>, ABNF such as
that shown in <xref target="abnf-grammar-sq-b64"/> can be used as an integrated parser
for <tt>b64</tt> prefixed single-quote strings.</t>
          <figure anchor="abnf-grammar-sq-b64">
            <name>ABNF Definition for Integrated Base64 Parser</name>
            <sourcecode type="abnf" name="cdn-int-b64sq.abnf"><![CDATA[
sq-app-string-b64 = %s"b64'" s-app-string-b64 "'"
s-app-string-b64  = b64-S *(4(b64dig b64-S))
                  [b64dig b64-S b64dig b64-S
                   ["=" b64-S "=" / b64dig b64-S ["="]] b64-S]
                  ["#" *i-non-lf]
b64dig          = ALPHA / DIGIT / "-" / "_" / "+" / "/"
b64-S           = *i-blank *(b64-comment *i-blank)
b64-comment     = "#" *i-non-lf %x0A
]]></sourcecode>
          </figure>
        </section>
        <section anchor="sq-h-raw-grammar">
          <name>h``: ABNF Definition of Integrated Parser</name>
          <t>With glue ABNF similar to that in <xref target="abnf-grammar-sq-glue"/> and common
definitions in Figures <xref format="counter" target="abnf-grammar-ext-common"/>, <xref format="counter" target="abnf-grammar-sq"/>
and
<xref format="counter" target="abnf-grammar-rs"/>, ABNF such as that shown in <xref target="abnf-grammar-rs-h"/> can
be used as an integrated parser for <tt>h</tt> prefixed raw strings.</t>
          <figure anchor="abnf-grammar-rs-h">
            <name>ABNF Definition for Integrated Raw String Hex Parser</name>
            <sourcecode type="abnf" name="cdn-int-hraw.abnf"><![CDATA[
raw-app-string-h = %s"h" startrawdelim r-app-string-h
r-app-string-h = rh-S *(HEXDIG rh-S HEXDIG rh-S / ellipsis rh-S)
    (eol-comment *r-non-lf alikerawdelim / alikerawdelim)
rh-S = *(lblank) *(rh-comment *(lblank))
rh-2 = %x61-7f / NONASCII / shortrawdelim
rh-non-slash = lblank / %x21-2e / %x30-5f / rh-2
rh-non-slash-star = lblank / %x21-29 / %x2b-2e / %x30-5f / rh-2
rh-non-star = lblank / %x21-29 / %x2b-5f / rh-2
rh-ends-in-star = *rh-non-star 1*"*"
rh-comment = "/" rh-non-slash-star *rh-non-slash "/"
           / "/*" rh-ends-in-star
                  *(rh-non-slash-star rh-ends-in-star) "/"
           / eol-comment *r-non-lf %x0A
]]></sourcecode>
          </figure>
        </section>
        <section anchor="sq-b64-raw-grammar">
          <name>b64``: ABNF Definition of Integrated Parser</name>
          <t>With glue ABNF similar to that in <xref target="abnf-grammar-sq-glue"/>, common
definitions in Figures <xref format="counter" target="abnf-grammar-ext-common"/>, <xref format="counter" target="abnf-grammar-sq"/>
and <xref format="counter" target="abnf-grammar-rs"/> as well as the rule
<tt>b64dig</tt> from <xref target="abnf-grammar-sq-b64"/>, ABNF such as
that shown in <xref target="abnf-grammar-rs-b64"/> can be used as an integrated parser
for <tt>b64</tt> prefixed raw strings.</t>
          <figure anchor="abnf-grammar-rs-b64">
            <name>ABNF Definition for Integrated Raw String Base64 Parser</name>
            <sourcecode type="abnf" name="cdn-int-b64raw.abnf"><![CDATA[
raw-app-string-b64 = %s"b64" startrawdelim r-app-string-b64
r-app-string-b64  = rb64-S *(4(b64dig rb64-S))
                  [b64dig rb64-S b64dig rb64-S
                   ["=" rb64-S "=" / b64dig rb64-S ["="]] rb64-S]
                  ("#" *r-non-lf alikerawdelim / alikerawdelim)
rb64-S           = *lblank *(rb64-comment *lblank)
rb64-comment     = "#" *r-non-lf %x0A
]]></sourcecode>
          </figure>
        </section>
      </section>
    </section>
    <section anchor="sec-iana">
      <name>IANA Considerations</name>
      <t><cref anchor="to-be-removed">RFC Editor: please replace RFC-XXXX with the RFC
number of this RFC, [IANA.concise-diagnostic-notation] with a
reference to the new registry group, and remove this note.</cref></t>
      <section anchor="appext-iana">
        <name>Concise Diagnostic Notation App-extension Identifiers Registry</name>
        <t>IANA is requested to create an "App-Extension Identifiers"
registry in a new "Concise Diagnostic Notation" registry group
[IANA.concise-diagnostic-notation], with the policy "expert review"
(Section <xref target="RFC8126" section="4.5" sectionFormat="bare"/> of RFC 8126 <xref target="BCP26"/>).</t>
        <t anchor="de-instructions">The experts are instructed to be frugal in the allocation of
app-extension identifiers that are suggestive of generally applicable semantics,
keeping them in reserve for app-extensions that are likely to enjoy wide
use and can make good use of their conciseness.
The experts are also instructed to direct the registrant to provide a
specification (Section <xref target="RFC8126" section="4.6" sectionFormat="bare"/> of RFC 8126 <xref target="BCP26"/>), but can make exceptions,
for instance when a specification is not available at the time of
registration but is likely forthcoming.
If the experts become aware of app-extension identifiers that are deployed and
in use, they may also initiate a registration on their own if
they deem such a registration can avert potential future collisions.</t>
        <t>Each entry in the registry must include:</t>
        <dl newline="true">
          <dt>App-Extension Identifier:</dt>
          <dd>
            <t>a lowercase ASCII <xref target="STD80"/> string that starts with a letter and can
contain letters, digits, and hyphens after that (<tt>[a-z][a-z0-9-]*</tt>).
No other entry in the registry can have the same
app-extension identifier.</t>
          </dd>
          <dt>Description:</dt>
          <dd>
            <t>a brief description</t>
          </dd>
          <dt>Change Controller:</dt>
          <dd>
            <t>(see Section <xref target="RFC8126" section="2.3" sectionFormat="bare"/> of RFC 8126 <xref target="BCP26"/>)</t>
          </dd>
          <dt>Reference:</dt>
          <dd>
            <t>a reference document that provides a description of the
app-extension identifier</t>
          </dd>
        </dl>
        <t>The initial content of the registry is shown in <xref target="tab-iana"/>; all
initial entries have the Change Controller "IETF".</t>
        <table anchor="tab-iana">
          <name>Initial Content of app-extension Identifier Registry</name>
          <thead>
            <tr>
              <th align="left">app-extension identifier</th>
              <th align="left">Description</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">h</td>
              <td align="left">Reserved</td>
              <td align="left">RFC8949</td>
            </tr>
            <tr>
              <td align="left">b32</td>
              <td align="left">Reserved</td>
              <td align="left">RFC8949</td>
            </tr>
            <tr>
              <td align="left">h32</td>
              <td align="left">Reserved</td>
              <td align="left">RFC8949</td>
            </tr>
            <tr>
              <td align="left">b64</td>
              <td align="left">Reserved</td>
              <td align="left">RFC8949</td>
            </tr>
            <tr>
              <td align="left">false</td>
              <td align="left">Reserved</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">true</td>
              <td align="left">Reserved</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">null</td>
              <td align="left">Reserved</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">undefined</td>
              <td align="left">Reserved</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">pragma</td>
              <td align="left">Reserved for future use</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">dt</td>
              <td align="left">Date/Time</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">ip</td>
              <td align="left">IP Address/Prefix</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">hash</td>
              <td align="left">Cryptographic Hash</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">b1</td>
              <td align="left">Byte String Concatenation</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">t1</td>
              <td align="left">Text String Concatenation</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">float</td>
              <td align="left">Floating-Point Value</td>
              <td align="left">RFC-XXXX</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="media-type">
        <name>Media Type</name>
        <t>IANA is requested to add the following Media-Type to the "Media Types"
registry <xref target="IANA.media-types"/>.</t>
        <table anchor="new-media-type">
          <name>New Media Type application/cdn</name>
          <thead>
            <tr>
              <th align="left">Name</th>
              <th align="left">Template</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">cdn</td>
              <td align="left">application/cdn</td>
              <td align="left">RFC-XXXX, <xref target="media-type"/></td>
            </tr>
          </tbody>
        </table>
        <dl spacing="compact">
          <dt>Type name:</dt>
          <dd>
            <t>application</t>
          </dd>
          <dt>Subtype name:</dt>
          <dd>
            <t>cdn</t>
          </dd>
          <dt>Required parameters:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Optional parameters:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Encoding considerations:</dt>
          <dd>
            <t>binary (UTF-8)</t>
          </dd>
          <dt>Security considerations:</dt>
          <dd>
            <t><xref target="seccons"/> of RFC XXXX</t>
          </dd>
          <dt>Interoperability considerations:</dt>
          <dd>
            <t>none</t>
          </dd>
          <dt>Published specification:</dt>
          <dd>
            <t><xref target="media-type"/> of RFC XXXX</t>
          </dd>
          <dt>Applications that use this media type:</dt>
          <dd>
            <t>Tools interchanging a human-readable form of CBOR</t>
          </dd>
          <dt>Fragment identifier considerations:</dt>
          <dd>
            <t>The syntax and semantics of fragment identifiers is as specified for
"application/cbor".  (At publication of RFC XXXX, there is no
fragment identification syntax defined for "application/cbor".)</t>
          </dd>
          <dt>Additional information:</dt>
          <dd>
            <t><br/>
            </t>
            <dl>
              <dt>Deprecated alias names for this type:</dt>
              <dd>
                <t>N/A</t>
              </dd>
              <dt>Magic number(s):</dt>
              <dd>
                <t>N/A</t>
              </dd>
              <dt>File extension(s):</dt>
              <dd>
                <t>.cdn</t>
              </dd>
              <dt>Macintosh file type code(s):</dt>
              <dd>
                <t>N/A</t>
              </dd>
            </dl>
          </dd>
          <dt>Person &amp; email address to contact for further information:</dt>
          <dd>
            <t>CBOR WG mailing list (cbor@ietf.org),
or IETF Applications and Real-Time Area (art@ietf.org)</t>
          </dd>
          <dt>Intended usage:</dt>
          <dd>
            <t>LIMITED USE</t>
          </dd>
          <dt>Restrictions on usage:</dt>
          <dd>
            <t>Concise diagnostic notation represents CBOR data items, which are the
format intended for actual interchange.
The media type application/cdn is intended to be used
within documents about CBOR data items, in diagnostics for human
consumption, and in other representations of CBOR data items that
are necessarily text-based such as in configuration files or other
data edited by humans, often under source-code control.</t>
          </dd>
          <dt>Author/Change controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
          <dt>Provisional registration:</dt>
          <dd>
            <t>no</t>
          </dd>
        </dl>
      </section>
      <section anchor="content-format">
        <name>Content-Format</name>
        <t>IANA is requested to register a Content-Format number in the
<xref section="&quot;CoAP Content-Formats&quot;" relative="#content-formats" sectionFormat="bare" target="IANA.core-parameters"/>
sub-registry, within the "Constrained RESTful Environments (CoRE)
Parameters" Registry <xref target="IANA.core-parameters"/>, as follows:</t>
        <table anchor="tab-content-format">
          <name>New Content-Format for application/cdn</name>
          <thead>
            <tr>
              <th align="left">Content-Type</th>
              <th align="left">Content Coding</th>
              <th align="left">ID</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">application/cdn</td>
              <td align="left">-</td>
              <td align="left">TBD1</td>
              <td align="left">RFC-XXXX</td>
            </tr>
          </tbody>
        </table>
        <t>TBD1 is to be assigned from the space 256..9999, according to the
procedure "IETF Review or IESG Approval", preferably a number less
than 1000.</t>
      </section>
    </section>
    <section anchor="seccons">
      <name>Security considerations</name>
      <t>The security considerations of <xref target="STD94"/> apply, including by applying
the considerations about the CBOR format to the CDN format in an
analogous sense.
Security considerations documented in <xref target="RFC8610"/> for the CDDL language
often are also applicable to the CDN language in an analogous sense.</t>
      <t>The CDN specification defines an explicit extension point:
app-extension identifiers (<xref target="appext-iana"/>).
Extensions introduced through these can have their own security
considerations, which need to be considered in the specification for
the extension (see, e.g., <xref section="5" sectionFormat="of" target="I-D.ietf-cbor-edn-e-ref"/>).</t>
      <t>Implementers of tools that support the use of CDN extensions need to
avoid inadvertently introducing a vector that allows attackers to
invoke extensions not planned for by the tool operator, who might not
have considered security considerations of specific extensions such as
those posed by their use of dereferenceable identifiers (<xref section="6" sectionFormat="of" target="I-D.bormann-t2trg-deref-id"/>).</t>
      <t>Tools might require explicitly enabling the use of each extension that
is not on an allowlist.
(This task can possibly be made less onerous by combining it with a
mechanism for supplying any parameters that control such an extension.)</t>
      <t>Tools that process app-extensions need to be configured out of
band to enable processing each specific app-extension only if
that is desired.
An allowlist built out of the mandatory-to-implement application
extensions may be an exception.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <referencegroup anchor="STD94" target="https://www.rfc-editor.org/info/std94">
          <reference anchor="RFC8949" target="https://www.rfc-editor.org/info/rfc8949">
            <front>
              <title>Concise Binary Object Representation (CBOR)</title>
              <author fullname="C. Bormann" initials="C." surname="Bormann"/>
              <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
              <date month="December" year="2020"/>
              <abstract>
                <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
                <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049. It does not create a new version of the format.</t>
              </abstract>
            </front>
            <seriesInfo name="STD" value="94"/>
            <seriesInfo name="RFC" value="8949"/>
            <seriesInfo name="DOI" value="10.17487/RFC8949"/>
          </reference>
        </referencegroup>
        <reference anchor="RFC8742">
          <front>
            <title>Concise Binary Object Representation (CBOR) Sequences</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="February" year="2020"/>
            <abstract>
              <t>This document describes the Concise Binary Object Representation (CBOR) Sequence format and associated media type "application/cbor-seq". A CBOR Sequence consists of any number of encoded CBOR data items, simply concatenated in sequence.</t>
              <t>Structured syntax suffixes for media types allow other media types to build on them and make it explicit that they are built on an existing media type as their foundation. This specification defines and registers "+cbor-seq" as a structured syntax suffix for CBOR Sequences.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8742"/>
          <seriesInfo name="DOI" value="10.17487/RFC8742"/>
        </reference>
        <referencegroup anchor="STD68" target="https://www.rfc-editor.org/info/std68">
          <reference anchor="RFC5234" target="https://www.rfc-editor.org/info/rfc5234">
            <front>
              <title>Augmented BNF for Syntax Specifications: ABNF</title>
              <author fullname="D. Crocker" initials="D." role="editor" surname="Crocker"/>
              <author fullname="P. Overell" initials="P." surname="Overell"/>
              <date month="January" year="2008"/>
              <abstract>
                <t>Internet technical specifications often need to define a formal syntax. Over the years, a modified version of Backus-Naur Form (BNF), called Augmented BNF (ABNF), has been popular among many Internet specifications. The current specification documents ABNF. It balances compactness and simplicity with reasonable representational power. The differences between standard BNF and ABNF involve naming rules, repetition, alternatives, order-independence, and value ranges. This specification also supplies additional rule definitions and encoding for a core lexical analyzer of the type common to several Internet specifications. [STANDARDS-TRACK]</t>
              </abstract>
            </front>
            <seriesInfo name="STD" value="68"/>
            <seriesInfo name="RFC" value="5234"/>
            <seriesInfo name="DOI" value="10.17487/RFC5234"/>
          </reference>
        </referencegroup>
        <referencegroup anchor="STD63" target="https://www.rfc-editor.org/info/std63">
          <reference anchor="RFC3629" target="https://www.rfc-editor.org/info/rfc3629">
            <front>
              <title>UTF-8, a transformation format of ISO 10646</title>
              <author fullname="F. Yergeau" initials="F." surname="Yergeau"/>
              <date month="November" year="2003"/>
              <abstract>
                <t>ISO/IEC 10646-1 defines a large character set called the Universal Character Set (UCS) which encompasses most of the world's writing systems. The originally proposed encodings of the UCS, however, were not compatible with many current applications and protocols, and this has led to the development of UTF-8, the object of this memo. UTF-8 has the characteristic of preserving the full US-ASCII range, providing compatibility with file systems, parsers and other software that rely on US-ASCII values but are transparent to other values. This memo obsoletes and replaces RFC 2279.</t>
              </abstract>
            </front>
            <seriesInfo name="STD" value="63"/>
            <seriesInfo name="RFC" value="3629"/>
            <seriesInfo name="DOI" value="10.17487/RFC3629"/>
          </reference>
        </referencegroup>
        <reference anchor="RFC7405">
          <front>
            <title>Case-Sensitive String Support in ABNF</title>
            <author fullname="P. Kyzivat" initials="P." surname="Kyzivat"/>
            <date month="December" year="2014"/>
            <abstract>
              <t>This document extends the base definition of ABNF (Augmented Backus-Naur Form) to include a way to specify US-ASCII string literals that are matched in a case-sensitive manner.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7405"/>
          <seriesInfo name="DOI" value="10.17487/RFC7405"/>
        </reference>
        <reference anchor="RFC3339">
          <front>
            <title>Date and Time on the Internet: Timestamps</title>
            <author fullname="G. Klyne" initials="G." surname="Klyne"/>
            <author fullname="C. Newman" initials="C." surname="Newman"/>
            <date month="July" year="2002"/>
            <abstract>
              <t>This document defines a date and time format for use in Internet protocols that is a profile of the ISO 8601 standard for representation of dates and times using the Gregorian calendar.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3339"/>
          <seriesInfo name="DOI" value="10.17487/RFC3339"/>
        </reference>
        <reference anchor="RFC3986">
          <front>
            <title>Uniform Resource Identifier (URI): Generic Syntax</title>
            <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee"/>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <author fullname="L. Masinter" initials="L." surname="Masinter"/>
            <date month="January" year="2005"/>
            <abstract>
              <t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource. This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet. The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier. This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="66"/>
          <seriesInfo name="RFC" value="3986"/>
          <seriesInfo name="DOI" value="10.17487/RFC3986"/>
        </reference>
        <reference anchor="RFC9164">
          <front>
            <title>Concise Binary Object Representation (CBOR) Tags for IPv4 and IPv6 Addresses and Prefixes</title>
            <author fullname="M. Richardson" initials="M." surname="Richardson"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="December" year="2021"/>
            <abstract>
              <t>This specification defines two Concise Binary Object Representation (CBOR) tags for use with IPv6 and IPv4 addresses and prefixes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9164"/>
          <seriesInfo name="DOI" value="10.17487/RFC9164"/>
        </reference>
        <reference anchor="RFC9485">
          <front>
            <title>I-Regexp: An Interoperable Regular Expression Format</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="T. Bray" initials="T." surname="Bray"/>
            <date month="October" year="2023"/>
            <abstract>
              <t>This document specifies I-Regexp, a flavor of regular expression that is limited in scope with the goal of interoperation across many different regular expression libraries.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9485"/>
          <seriesInfo name="DOI" value="10.17487/RFC9485"/>
        </reference>
        <reference anchor="IANA.cose" target="https://www.iana.org/assignments/cose">
          <front>
            <title>CBOR Object Signing and Encryption (COSE)</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="IANA.media-types" target="https://www.iana.org/assignments/media-types">
          <front>
            <title>Media Types</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="IANA.core-parameters" target="https://www.iana.org/assignments/core-parameters">
          <front>
            <title>Constrained RESTful Environments (CoRE) Parameters</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <referencegroup anchor="BCP26" target="https://www.rfc-editor.org/info/bcp26">
          <reference anchor="RFC8126" target="https://www.rfc-editor.org/info/rfc8126">
            <front>
              <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
              <author fullname="M. Cotton" initials="M." surname="Cotton"/>
              <author fullname="B. Leiba" initials="B." surname="Leiba"/>
              <author fullname="T. Narten" initials="T." surname="Narten"/>
              <date month="June" year="2017"/>
              <abstract>
                <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
                <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
                <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
              </abstract>
            </front>
            <seriesInfo name="BCP" value="26"/>
            <seriesInfo name="RFC" value="8126"/>
            <seriesInfo name="DOI" value="10.17487/RFC8126"/>
          </reference>
        </referencegroup>
        <referencegroup anchor="STD80" target="https://www.rfc-editor.org/info/std80">
          <reference anchor="RFC0020" target="https://www.rfc-editor.org/info/rfc20">
            <front>
              <title>ASCII format for network interchange</title>
              <author fullname="V.G. Cerf" initials="V.G." surname="Cerf"/>
              <date month="October" year="1969"/>
            </front>
            <seriesInfo name="STD" value="80"/>
            <seriesInfo name="RFC" value="20"/>
            <seriesInfo name="DOI" value="10.17487/RFC20"/>
          </reference>
        </referencegroup>
        <reference anchor="IEEE754" target="https://ieeexplore.ieee.org/document/8766229">
          <front>
            <title>IEEE Standard for Floating-Point Arithmetic</title>
            <author>
              <organization>IEEE</organization>
            </author>
            <date/>
          </front>
          <seriesInfo name="IEEE Std" value="754-2019"/>
          <seriesInfo name="DOI" value="10.1109/IEEESTD.2019.8766229"/>
        </reference>
        <reference anchor="C" target="https://www.iso.org/standard/82075.html">
          <front>
            <title>Information technology — Programming languages — C</title>
            <author>
              <organization>International Organization for Standardization</organization>
            </author>
            <date year="2024" month="October"/>
          </front>
          <seriesInfo name="ISO/IEC" value="9899:2024"/>
          <annotation> 
The standard is widely known as C23. Its technical content is also available via <eref target="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3220.pdf">https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3220.pdf</eref>.</annotation>
          <refcontent>Edition 5</refcontent>
        </reference>
        <reference anchor="Cplusplus" target="https://www.iso.org/standard/83626.html">
          <front>
            <title>Programming languages — C++</title>
            <author>
              <organization>International Organization for Standardization</organization>
            </author>
            <date year="2024" month="October"/>
          </front>
          <seriesInfo name="ISO/IEC" value="14882:2024"/>
          <annotation> 
The standard is widely known as C++23. Its technical content is also available via <eref target="https://open-std.org/jtc1/sc22/wg21/docs/papers/2023/n4950.pdf">https://open-std.org/jtc1/sc22/wg21/docs/papers/2023/n4950.pdf</eref>.</annotation>
          <refcontent>Edition 7</refcontent>
        </reference>
        <referencegroup anchor="BCP14" target="https://www.rfc-editor.org/info/bcp14">
          <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119">
            <front>
              <title>Key words for use in RFCs to Indicate Requirement Levels</title>
              <author fullname="S. Bradner" initials="S." surname="Bradner"/>
              <date month="March" year="1997"/>
              <abstract>
                <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
              </abstract>
            </front>
            <seriesInfo name="BCP" value="14"/>
            <seriesInfo name="RFC" value="2119"/>
            <seriesInfo name="DOI" value="10.17487/RFC2119"/>
          </reference>
          <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174">
            <front>
              <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
              <author fullname="B. Leiba" initials="B." surname="Leiba"/>
              <date month="May" year="2017"/>
              <abstract>
                <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
              </abstract>
            </front>
            <seriesInfo name="BCP" value="14"/>
            <seriesInfo name="RFC" value="8174"/>
            <seriesInfo name="DOI" value="10.17487/RFC8174"/>
          </reference>
        </referencegroup>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC8610">
          <front>
            <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="C. Vigano" initials="C." surname="Vigano"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2019"/>
            <abstract>
              <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049). Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8610"/>
          <seriesInfo name="DOI" value="10.17487/RFC8610"/>
        </reference>
        <reference anchor="RFC7049">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <date month="October" year="2013"/>
            <abstract>
              <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7049"/>
          <seriesInfo name="DOI" value="10.17487/RFC7049"/>
        </reference>
        <reference anchor="RFC4648">
          <front>
            <title>The Base16, Base32, and Base64 Data Encodings</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <date month="October" year="2006"/>
            <abstract>
              <t>This document describes the commonly used base 64, base 32, and base 16 encoding schemes. It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4648"/>
          <seriesInfo name="DOI" value="10.17487/RFC4648"/>
        </reference>
        <reference anchor="RFC9290">
          <front>
            <title>Concise Problem Details for Constrained Application Protocol (CoAP) APIs</title>
            <author fullname="T. Fossati" initials="T." surname="Fossati"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="October" year="2022"/>
            <abstract>
              <t>This document defines a concise "problem detail" as a way to carry machine-readable details of errors in a Representational State Transfer (REST) response to avoid the need to define new error response formats for REST APIs for constrained environments. The format is inspired by, but intended to be more concise than, the problem details for HTTP APIs defined in RFC 7807.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9290"/>
          <seriesInfo name="DOI" value="10.17487/RFC9290"/>
        </reference>
        <referencegroup anchor="STD90" target="https://www.rfc-editor.org/info/std90">
          <reference anchor="RFC8259" target="https://www.rfc-editor.org/info/rfc8259">
            <front>
              <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
              <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
              <date month="December" year="2017"/>
              <abstract>
                <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format. It was derived from the ECMAScript Programming Language Standard. JSON defines a small set of formatting rules for the portable representation of structured data.</t>
                <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
              </abstract>
            </front>
            <seriesInfo name="STD" value="90"/>
            <seriesInfo name="RFC" value="8259"/>
            <seriesInfo name="DOI" value="10.17487/RFC8259"/>
          </reference>
        </referencegroup>
        <reference anchor="RFC7493">
          <front>
            <title>The I-JSON Message Format</title>
            <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
            <date month="March" year="2015"/>
            <abstract>
              <t>I-JSON (short for "Internet JSON") is a restricted profile of JSON designed to maximize interoperability and increase confidence that software can process it successfully with predictable results.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7493"/>
          <seriesInfo name="DOI" value="10.17487/RFC7493"/>
        </reference>
        <reference anchor="I-D.bormann-cbor-numbers">
          <front>
            <title>On Numbers in CBOR</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <date day="1" month="March" year="2026"/>
            <abstract>
              <t>   The Concise Binary Object Representation (CBOR), as defined in STD 94
   (RFC 8949), is a data representation format whose design goals
   include the possibility of extremely small code size, fairly small
   message size, and extensibility without the need for version
   negotiation.

   Among the kinds of data that a data representation format needs to be
   able to carry, numbers have a prominent role, but also have inherent
   complexity that needs attention from protocol designers, from
   implementers of CBOR libraries, and from implementers of the
   applications that use them.

   This document gives an overview over number formats available in CBOR
   and some notable CBOR tags registered, and it attempts to provide
   information about opportunities and potential pitfalls of these
   number formats.


   // This is still rather drafty, pieced together from various
   // components, so it has a higher level of redundancy than ultimately
   // desired.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-bormann-cbor-numbers-03"/>
        </reference>
        <reference anchor="RFC9165">
          <front>
            <title>Additional Control Operators for the Concise Data Definition Language (CDDL)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="December" year="2021"/>
            <abstract>
              <t>The Concise Data Definition Language (CDDL), standardized in RFC 8610, provides "control operators" as its main language extension point.</t>
              <t>The present document defines a number of control operators that were not yet ready at the time RFC 8610 was completed:.plus,.cat, and.det for the construction of constants;.abnf/.abnfb for including ABNF (RFC 5234 and RFC 7405) in CDDL specifications; and.feature for indicating the use of a non-basic feature in an instance.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9165"/>
          <seriesInfo name="DOI" value="10.17487/RFC9165"/>
        </reference>
        <reference anchor="RFC9741">
          <front>
            <title>Concise Data Definition Language (CDDL): Additional Control Operators for the Conversion and Processing of Text</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="March" year="2025"/>
            <abstract>
              <t>The Concise Data Definition Language (CDDL), standardized in RFC 8610, provides "control operators" as its main language extension point. RFCs have added to this extension point in both an application-specific and a more general way.</t>
              <t>The present document defines a number of additional generally applicable control operators for text conversion (bytes, integers, printf-style formatting, and JSON) and for an operation on text.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9741"/>
          <seriesInfo name="DOI" value="10.17487/RFC9741"/>
        </reference>
        <reference anchor="RFC9682">
          <front>
            <title>Updates to the Concise Data Definition Language (CDDL) Grammar</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="November" year="2024"/>
            <abstract>
              <t>The Concise Data Definition Language (CDDL), as defined in RFCs 8610 and 9165, provides an easy and unambiguous way to express structures for protocol messages and data formats that are represented in Concise Binary Object Representation (CBOR) or JSON.</t>
              <t>This document updates RFC 8610 by addressing related errata reports and making other small fixes for the ABNF grammar defined for CDDL.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9682"/>
          <seriesInfo name="DOI" value="10.17487/RFC9682"/>
        </reference>
        <reference anchor="I-D.ietf-cbor-edn-e-ref">
          <front>
            <title>External References to Values in CBOR Diagnostic Notation (EDN)</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <date day="1" month="March" year="2026"/>
            <abstract>
              <t>   The Concise Binary Object Representation (CBOR, RFC 8949) is a data
   format whose design goals include the possibility of extremely small
   code size, fairly small message size, and extensibility without the
   need for version negotiation.

   CBOR diagnostic notation (EDN) is widely used to represent CBOR data
   items in a way that is accessible to humans, for instance for
   examples in a specification.  At the time of writing, EDN did not
   provide mechanisms for composition of such examples from multiple
   components or sources.  This document uses EDN application extensions
   to provide two such mechanisms, both of which insert an imported data
   item into the data item being described in EDN:

   The e'' application extension provides a way to import data items,
   particularly constant values, from a CDDL model (which itself has
   ways to provide composition).

   The ref'' application extension provides a way to import data items
   that are described in EDN.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-edn-e-ref-03"/>
        </reference>
        <reference anchor="I-D.bormann-t2trg-deref-id">
          <front>
            <title>The "dereferenceable identifier" pattern</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
         </author>
            <date day="24" month="February" year="2026"/>
            <abstract>
              <t>   In a protocol or an application environment, it is often important to
   be able to create unambiguous identifiers for some meaning (concept
   or some entity).

   Due to the simplicity of creating URIs, these have become popular for
   this purpose.  Beyond the purpose of identifiers to be uniquely
   associated with a meaning, some of these URIs are in principle
   _dereferenceable_, so something can be placed that can be retrieved
   when encountering such a URI.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-bormann-t2trg-deref-id-07"/>
        </reference>
        <reference anchor="RFC9512">
          <front>
            <title>YAML Media Type</title>
            <author fullname="R. Polli" initials="R." surname="Polli"/>
            <author fullname="E. Wilde" initials="E." surname="Wilde"/>
            <author fullname="E. Aro" initials="E." surname="Aro"/>
            <date month="February" year="2024"/>
            <abstract>
              <t>This document registers the application/yaml media type and the +yaml structured syntax suffix with IANA. Both identify document components that are serialized according to the YAML specification.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9512"/>
          <seriesInfo name="DOI" value="10.17487/RFC9512"/>
        </reference>
        <reference anchor="YAML" target="https://yaml.org/spec/1.2.2/">
          <front>
            <title>YAML Ain't Markup Language (YAML™) Version 1.2</title>
            <author initials="O." surname="Ben-Kiki" fullname="Oren Ben-Kiki">
              <organization/>
            </author>
            <author initials="C." surname="Evans" fullname="Clark Evans">
              <organization/>
            </author>
            <author initials="I." surname="döt Net" fullname="Ingy döt Net">
              <organization/>
            </author>
            <date year="2021" month="October" day="01"/>
          </front>
          <refcontent>Revision 1.2.2</refcontent>
        </reference>
        <reference anchor="CDN-WIKI" target="https://github.com/cbor-wg/edn/wiki">
          <front>
            <title>CDN Wiki</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="XSD2" target="https://www.w3.org/TR/2012/REC-xmlschema11-2-20120405/">
          <front>
            <title>W3C XML Schema Definition Language (XSD) 1.1 Part 2: Datatypes</title>
            <author fullname="Ashok Malhotra" role="editor"/>
            <author fullname="David Peterson" role="editor"/>
            <author fullname="Henry Thompson" role="editor"/>
            <author fullname="Michael Sperberg-McQueen" role="editor"/>
            <author fullname="Paul V. Biron" role="editor"/>
            <author fullname="Sandy Gao" role="editor"/>
            <date day="5" month="April" year="2012"/>
          </front>
          <seriesInfo name="W3C REC" value="REC-xmlschema11-2-20120405"/>
          <seriesInfo name="W3C" value="REC-xmlschema11-2-20120405"/>
        </reference>
      </references>
    </references>
    <?line 2630?>

<section anchor="cdn-and-cddl">
      <name>CDN and CDDL</name>
      <t>This appendix is for information.</t>
      <t>CDN was designed as a language to provide a human-readable
representation of an instance, i.e., a single CBOR data item or CBOR
sequence.
CDDL was designed as a language to describe an (often large) set of
such instances (which itself constitutes a language), in the form of a
<em>data definition</em> or <em>grammar</em> (or sometimes called <em>schema</em>).</t>
      <t>The two languages share some similarities, not the least because they
have mutually inspired each other.
But they have very different roots:</t>
      <ul spacing="normal">
        <li>
          <t>CDN syntax is an extension to JSON syntax <xref target="STD90"/>.<br/>
(Any (interoperable) JSON text is also valid CDN.)</t>
        </li>
        <li>
          <t>CDDL syntax is inspired by ABNF's syntax <xref target="STD68"/>.</t>
        </li>
      </ul>
      <t>For engineers that are using both CDN and CDDL, it is easy to write
"CDDLisms" or "CDNisms" into their drafts that are meant to be in the
other language.
(This is one more of the many motivations to always validate formal
language instances with tools.)</t>
      <t>Important differences include:</t>
      <ul spacing="normal">
        <li>
          <t>Comment syntax.  CDDL inherits ABNF's semicolon-delimited end of
line characters, while CDN finds nothing in JSON that could be inherited here.
Inspired by JavaScript, CDN simplifies JavaScript's copy of the
original C comment syntax to be delimited by single slashes (where
line breaks are not of interest); it also adds traditional C-style
inline comments (<tt>/*</tt> ... <tt>*/</tt>) and end-of-line comments
that start with <tt>#</tt> or <tt>//</tt>.  </t>
          <dl spacing="compact">
            <dt>CDN:</dt>
            <dd>
              <sourcecode type="cbor-diag"><![CDATA[
{ / alg / 1: -7 / ECDSA 256 / }
{ 1:   # alg
    -7 # ECDSA 256
}
]]></sourcecode>
            </dd>
            <dt>CDDL:</dt>
            <dd>
              <t><tt>? 1 =&gt; int / tstr,  ; algorithm identifier</tt></t>
            </dd>
          </dl>
        </li>
        <li>
          <t>Syntax for tags.  CDDL's tag syntax is part of the system for
referring to CBOR's fundamentals (the major type 6, in this case)
and (with <xref target="RFC9682"/>) allows specifying the actual tag number
separately, while CDN's tag syntax is a simple decimal number and a
pair of parentheses.  </t>
          <dl>
            <dt>CDN:</dt>
            <dd>
              <sourcecode type="cbor-diag"><![CDATA[
98([h'', # empty encoded protected header
    {},  # empty unprotected header
   ])
]]></sourcecode>
            </dd>
            <dt>CDDL:</dt>
            <dd>
              <t><tt>COSE_Sign_Tagged = #6.98(COSE_Sign)</tt></t>
            </dd>
          </dl>
        </li>
        <li>
          <t>Embedded CBOR.  CDN has a special syntax to describe the content of
byte strings that are encoded CBOR data items.  CDDL can specify
these with a control operator, which looks very different.  </t>
          <dl>
            <dt>CDN:</dt>
            <dd>
              <sourcecode type="cbor-diag"><![CDATA[
98([<< {/alg/ 1: -7 /ECDSA 256/} >>, # == h'a10126'
   ])
]]></sourcecode>
            </dd>
            <dt>CDDL:</dt>
            <dd>
              <t><tt>serialized_map = bytes .cbor header_map</tt></t>
            </dd>
          </dl>
        </li>
      </ul>
    </section>
    <section numbered="false" anchor="list-of-figures">
      <name>List of Figures</name>
      <dl spacing="compact" indent="11">
        <dt><xref target="abnf-grammar"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar"/></t>
        </dd>
        <dt><xref target="abnf-grammar-ext-common"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar-ext-common"/></t>
        </dd>
        <dt><xref target="abnf-grammar-h"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar-h"/></t>
        </dd>
        <dt><xref target="abnf-grammar-b64"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar-b64"/></t>
        </dd>
        <dt><xref target="abnf-grammar-dt"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar-dt"/></t>
        </dd>
        <dt><xref target="abnf-grammar-ip"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar-ip"/></t>
        </dd>
        <dt><xref target="abnf-grammar-sq-glue"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar-sq-glue"/></t>
        </dd>
        <dt><xref target="abnf-grammar-sq"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar-sq"/></t>
        </dd>
        <dt><xref target="abnf-grammar-rs"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar-rs"/></t>
        </dd>
        <dt><xref target="abnf-grammar-sq-h"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar-sq-h"/></t>
        </dd>
        <dt><xref target="abnf-grammar-sq-b64"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar-sq-b64"/></t>
        </dd>
        <dt><xref target="abnf-grammar-rs-h"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar-rs-h"/></t>
        </dd>
        <dt><xref target="abnf-grammar-rs-b64"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar-rs-b64"/></t>
        </dd>
      </dl>
    </section>
    <section numbered="false" anchor="list-of-tables">
      <name>List of Tables</name>
      <dl spacing="compact" indent="11">
        <dt><xref target="tab-numbers"/>:</dt>
        <dd>
          <t><xref format="title" target="tab-numbers"/></t>
        </dd>
        <dt><xref target="tab-float-encoding"/>:</dt>
        <dd>
          <t><xref format="title" target="tab-float-encoding"/></t>
        </dd>
        <dt><xref target="tab-equiv-dt"/>:</dt>
        <dd>
          <t><xref format="title" target="tab-equiv-dt"/></t>
        </dd>
        <dt><xref target="tab-equiv-ip"/>:</dt>
        <dd>
          <t><xref format="title" target="tab-equiv-ip"/></t>
        </dd>
        <dt><xref target="tab-equiv-hash"/>:</dt>
        <dd>
          <t><xref format="title" target="tab-equiv-hash"/></t>
        </dd>
        <dt><xref target="tab-ei-defined"/>:</dt>
        <dd>
          <t><xref format="title" target="tab-ei-defined"/></t>
        </dd>
        <dt><xref target="tab-ei"/>:</dt>
        <dd>
          <t><xref format="title" target="tab-ei"/></t>
        </dd>
        <dt><xref target="tab-prefixes"/>:</dt>
        <dd>
          <t><xref format="title" target="tab-prefixes"/></t>
        </dd>
        <dt><xref target="tab-iana"/>:</dt>
        <dd>
          <t><xref format="title" target="tab-iana"/></t>
        </dd>
        <dt><xref target="new-media-type"/>:</dt>
        <dd>
          <t><xref format="title" target="new-media-type"/></t>
        </dd>
        <dt><xref target="tab-content-format"/>:</dt>
        <dd>
          <t><xref format="title" target="tab-content-format"/></t>
        </dd>
      </dl>
    </section>
    <section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>The concept of application-oriented extensions to diagnostic notation,
as well as the definition for the "dt" extension, were inspired by the
CoRAL work by Klaus Hartke.</t>
      <t>(TBD)</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
g6hw2TYpYLJmN2IO6gr8QcjNDd2SJcOKYcUL/96RX2dWGofZ9E6Fw1iPLkYo
6LSDTg6U6YkzHknYKJ0DfYS4pkfIBnDDDyJJmavNBKY57U7JK7sn7sySgQFe
xFPtoQLY7c2UcINHYVua3Sy9HTWOvELHZBh52cRZozHKoxZHLcOyw7HmHgEj
F72Yzo69SSSL4zWWbZIO4dquON6Jjf9eFnr0Qa2bRIFw02W4oTzyBsNLl4C6
gDhAgzZHYBnXOg4V94dDZ+9ozektP3woo5nlY9DQyal4xSqG8p/O8VzzeGfE
JgqryuqNOHLY22XgKph3s/Ng5mIudiIx6KaUZ8sEcMJgMLOfCe5+xT8/M3sA
owdP1c+dX/lP/QfQkZ6OjwYDYqneD4aTI2auBoPBmH/OBv0+/j/9DygrfDA4
0dRS39NbPEieETzvHtIn3cFhTD3Cfzum6+7xpi8/jzedMXV0daJHl/0+dkSw
MZhwR9TwK/o38AWf36Npv69/+Wf+v51ZMexAd93Pd6VlVv1+zaw6X9ZD0NFx
XUdPUnLeuvuyzrijo/O6Gf2qnrijq7qOnkZPv3xlZkY7JwdE/p537bgSy9cN
0fACd8Fu+pdOh2j8M1k1RqFNwlo3JNUYhkPQGmMdumsZhyy3m21/Q0QgoIUh
0435lJAuSMS2ZA4SAz6mskVrkIk14FpIyEjzHRdXVtMHumlF76IXlEIHUQsm
4r9eCS9nrMFMOBBBAcvNE5HUBMTOFpafhVcSPyJknMg3sdezxOrgobsOcS2O
jVlU6E2MOZIS+Dd8xln2NNkjnIiAyJSOTuPZCXLbF+i8lzVm5ErH0TFqUkys
skKz3ooXvQfZ60F3QCsCXKE8Jk0c4VdY98M7cjljSvzAuVLbrP6j1OFm1sWv
DM+mCWAUj6qJFAeiuCYXQ85VWh9xSDMih1HjTfc/aKwDhfnndCfWB7C8Nq7x
zYD/M+T/jA50p8RZwB3C/xTxH4ccfd3NZyJtf5JG1NODz1KEfS8FbQ/2XH54
uZzp0XI5OHH/RFOD7QdvGMvDj+E0+KxJeVRa1e7MZ6Pa8T4z2iGPBVs63fkM
6EjcryBn81k4t+CzCEab9xnZ73z2mUke971/phXE3na/ebo8yaN57SRt052Z
8iSPZLDpns92ZsqTPFou+zWT7NQizDdM2mGSy/pJdvbOkie5rJ9kZ+8seZLL
+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
49GQ2lwOj4fn48Hjy8PL8fBwfHF8jIaz4fnh4eD4bEj9HJ4dn/fPj66OLi/O
BieHJ+Ozo8vHh6MT2JrLweXF0cG+vT0cDO3e/nubcMgtEaYVfsnHunWskjjp
udwvWXqqZ1yAthxgBh7MULOHuXn1n/At0qXXwR+n4lsu8iaFJJUmvH2VrRdk
xeNBcCxJ+lyYsFS9l2Uq2i6JgVUiosNlSXWKfoo5qJb68Jw72E08ouTRCTBL
7KWGLhMLF3b3u98KT9OYDRrsxV7ij9BfSord6yYxT0j/4GXL8ihkwaSE0woY
BhL1qXIQCmD1n9gKVuLtJfXWUy8hT2yLqZl0lr4hxxnXyVVkp8ZDoZvRItqU
xqnZKQK4vJqSZAWtXeM8bmPjG1f+pcEbO3j4UJ6i1z+/efSo8g5eIaN/UNdi
r4kf2qgXyU1CeUeqvgM7xRKK+hkffOMXrMEns8HDYBmPzNOH0hZmecDtH9W9
Wx2EcwxbHNiV7vaxd6XQGP5HNu6wue+3QD1X/BZwi84KPzKGUhTftivlXyrV
KkmTcQPsmwTisIDgZ31Cf/OCi7+1Kz4cNVZlpy7w1Z1sMa/kzwwA2QdP24WX
MC3jwM54x+AvKV1mHEdRyf7ipZ2jSG929iG+WkKCZnfslXin/5AlHJpkFEjG
ecCE1AcZy21aWJu2TbwNBj3EYD5yaHOVkZhTPeFVW8dL9vXF9A4SMY3YhSHb
TISTfOE+sIVVIo4Cky19WX7hl94eWzWcya8VulzUZETyA5wbLnS2sZMNipNY
SzooEwciiZroaxek3rNx6eoL4tI/lRUKnUxM7rQgNxyaN86xKAHuy5NUhPy4
I9pK4/wpqeVOdbKe8SVJcNs+3KOcebV07i/9h7HzFAcynrQw1HSHoCBVEnd/
KgYRBDGgS674F+EP1szTnt3AetacbUiq3bjE/ru53AL4tXSEKFIvIEcuqlCR
iw6pVllpavbUaIBNwlKnALCjtG1uZzVfbdO3psE8y0mB7YXTNj047/nYgQIW
afd6vHOUWxXTXoJMu75r6TkeN5wpmtysk/ynM2dyDuK9CTPRWV6KG6jKeuYG
tiLNK3JJ2FEuN511DW7eCWaI1tDDgsuM3smwlQ01nbSDMjXso5CknIZW7IA1
sfGCmDjPx44TYbeGNlZZ9fFM11Mr+hSPoiZlKf9zuNTLpdcsJLePvGZ7Bwk7
cMS34XeCHUyCDvT4UH+uE0znaWkzdXJ43P9cN+xDJocgtgtxANXQbbIppIbN
/rvBWcCujLfJczpJoz0kJxQuZq6fXF5eHh2OO1meME0LiodTeKDxWdF+YXQq
pMRM65QaTCsMq60Ai6Bh6S3cxiF5t7fVmP9LOOaYfodsgys1WD8D1bwpvz6C
75Ovh4e94aQ3PKpcU6C8Lm1DktNaNSxWhVasLqbm8K6/Z2E315BcTil4Lo9x
k0x4tKl7abMONyn1DC55upqaqokPfCemMD262nWPqt6f6tg8M8N0uAAnm+Vc
aoCJibXq583x6oyF6Xn//dWJag6ZETHpQ9iSPpi02vj+TDfHde9HQ/GphDaP
dfNY1bSZjFsh+uyqx/4xU5SNC8wWKKZMLcO2HpNR61jnUUL+zZwvrxvYLWO3
PZHRTFd2iDWTNhcX429MJ8KMWS1aexC4XbCjtEmijqswjtG6WWbZmg71VE/j
RdpBPzDdiQhqdSeeSnlS9V//8z/9X7rxip4fLOM+Mu7eH2+G5s/x0WDQPx4c
Hrxu6E7JmTv0n//3f1LHowD33eOUU80R5e+4OtFXl/2+vNnkmJAfdrw5OUQ/
G2pxpq+uzslkErQYD09Q+D85GZpmZgZBs8HgZDg8OT4cHLXUX7AYBKVBdzgc
9IfR5qvBISwO1/TJLkZHg+Fxt3887I8Gw8Pq35w47MMppm8ov26AwLZA3QLd
om2OUVxM/ncs2wkbxdEZDhNqRRtJ5HiAoSSCEjHMXiDYMJun5E7CaeWgi6aE
3ZHU2PJTtO/ib4ty9NPoqRIcWkkBRpaP1CVcdAkescgKmVqdiwO6XqqK6+Wp
bjQ5AVJqY8CIZZYCUXzrYQIW3FX//fLkCHYbuIr1Gta5XCbzuNVgvl8oSwX9
siNLYXT7HP2Bwd/x+0pTVfUBiaR2O+WwQRvXPW2zQD9xzJAEQiVhxnAQ0G2V
osQgUgzlJPLIiU+MhaKmuIINiFUmhXK0Ju97hG0WCeqma5OU4QXnEAOX4ceL
mXS5aAbdw1/+hfGsNw3YKEBHuaRXtsmClUFTCIA4ByYp0XrZsZmHCQdK/SHO
FUAmRNxqREM13CSn8aMU0cbsdaokg/C2cOsJgtiqUtEOz6+I55dieehQ4i1P
7lvR3jkaB/nEh6+yZC6x4kWQw8iFNs9MvAuuqoZZ7qonFYlQZDsXpCgZqo1z
v0vhmBTWKhmZ8uKYvO2BxALjp2Edd7mNnkRaFUgbXUkPHkkZe0kd6zKL2Ypf
NatpY9T8xdMOBmBxlqeK6EA5aqM5ycYlZrqTgHIzCkgrHA7Dqk7a7Dmp+6JZ
YcOJUbjYHb2Fplk8r+8vz599993l04vLC3/DsGApJa115dcs6nACAFt2TdA6
NqBMA54QvVNkw4SIW+mG0uqZiGBOWeOBlysYEVPp3yxfUBJMJYU6djPZM6Bh
2eaa+2EKwKNaeIHxpXwlMmtTLbJleUte4KJKEGkWIztx4pz8tEYWwjqC1Gv7
UwsIyii4XNr70ns1q4h/JykeB0ZUdQ8uU1mKHIun3/SC5GTjxeRev/OCvBDj
UVF6vwGGbCTX2zxw2COWqFItQmBK1Yu/HDIf5KG1JnMGikWyMAV41b6dItl4
7zY0TQJ8oPK0DoqAutgntFu84lfVrYUnrDhmY4dtGSN/8aaclogi3v7Z4Hkp
/Rck3954Gi/BRxwNSzcIE7FR4FgbtsHmbTABe/WkoSn+WklHbOkIPX7qLPRc
RDvJnGOYqG5wkO0K466AB4B9nweZ5IPw0ukbdnJ8M5ruoVGWZNN9M/e3UhkG
130biSet4vvlEn22Q/oSVbrxSt98KoS+SN7XUxmvTHDdodtQV8/XUWrnFhKM
UqgSM/nq7WZBydxKU9mvkszs5xo2SP+sL4g0EwzsNXLq761Xo31W70zwRU4E
dY3QLvmmbmhP2/mtp+2kqwZi+WjQwvkxqmrjj87vsQYz9ZfU9Aff9ElNCCL9
aHdAWa/pxl+vftOv72843rdzXn918xvUNCVVw1/Y33BPf5O/sL/d/eH+jv6S
/qwZ12IFY8atY88vXFEYulYvfGhGAazuugv2MoG7lGjzDqUdQOnsshoXpRfg
7Lk8f4LJZVobJF4RbWTOZUyWlodlLUmWS14PxJtzxL/LmAq6OhwbBi06Dr+s
5P6UJMWreA8fQIGigDhJtWOwLkiV1q3aWtGo3qJjvAMiJhqRWqrpsp2YSnS2
nLnXXbNxUzb016z6Vqj6busGnQPx192ki2+Ns64dh1gE26x+mZhV4NJfRT2e
tPuwq69066qryCuO6lJgfB2lQpfJ3R+AVfjq2OW/h4esWSK7zM/6pgSQtxtd
vQuOM+BkBq3K+2CX+Bn0qfsUxPRmMEU3iWn/Pao4gNDZz7gGFPm5zAI/VWgn
TeT1iX1kOx9wTBX0XnN5RyekvNl7uYc776jPIfZ5cHZQ0+nP+pBmO95FePJ+
vPOO+hxhn42zRm2fR9TnZG+fk5131OcY+3wFuLcxi/LG62nwzQn3OZoMJ4Oj
HXT6sz7eeUd9HmKfH0yfp3rwceq+mQV99qtz0tHOO+pzIgDQxOMLPYl/1gvq
c3AyGE5qkPHPer7zjvo8oj67h2+GPlhtvuqPELR+1stotCRX7D6+Xs7Gg/5g
Ph5b4MImJ6NYXkfj4348HOJjD7tbrO5yOjA2xwtZJeEexkeL2IVVVl0gbnmC
uAWRffNJpXgaB3XMZnn8LgmEAkrXNQUiNU1TSbWWoraWuF7DUQahX0sqgvrG
i4byyMIbG7LTYXHwUFFGM/mWXK3hC9RJn0ohOj86bjdImogZD+kVtPAT2+iG
sQg0jJbbhqthlULKKKUYsz2gpfanZEwljmZKGVyc2jpYKjSZ8uDKp2b3k+J+
YOFsc2dj1+9RpV/lWy3mUZ4nvJDhw2K7eRQlneH4YQ9/6iYXcBAle8uvqiqa
fDIAEyvHg4goklTN3B55kki2lhSDNKJEJWOu0RtS8kg9Tacud7FbCCvWIgo4
tIy/dbcQaaUeOJTdXAK44fgrGIPLr5gcZ0U2TyIRz/ZQcdETiF5lHrPegzLf
Znm7rnCOJHbDEcIkD7ge24cp8EEah5yLiVyFRfOwBNeajFf19remH1ZVmyi/
rQidDCQhL+kUK+rDxESimyxtTQaSgQDI10A5qkCBcx5MNF61liklQQONpkb7
s4i5CDeXkndjSu8j2/txbe+Y9QJ7Z5EyYmWCU4+RHjMNtRSon2w7zRPbqmt4
Jh3WUzJqrjjF9LOSJYXC5XJOvGN8gij80pQv9nhCSRJQWNPUA1/5r/xIxlzn
yNo4sZbER+6ywmnKHoa5il7W92UTNootSyqlswoM+w4UuSpw3rBZMLJtWZgS
N3BbN3FQNdGXiamalvX+sWy9bCRf7sDNRKyaNUeBKoJmoG5ALwjC4LdpywtO
sdnQd/GO5/6w63pjxyQ/UEFjZtUsvTs9vBmDljB9czRtB7lFjOsS658k1XSU
v2WDrElCq5pSY2n6htLavTmcCg59M7Ed8sE7KYOQ+DHic0Vz7E/bNif9NkeK
K5XQkpTrkrClwLht7upjCzbmzIKMMkuaBzH1rFMrpGAXI8Cb6C3pVCSk86ZV
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
R5jqmiev9lej/wMe44UK88ABAA==

-->

</rfc>
