<?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.6.38 (Ruby 3.2.1) -->
<?rfc compact="yes"?>
<?rfc comments="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-cbor-edn-literals-01" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.17.4 -->
  <front>
    <title abbrev="CBOR EDN Literals">Application-Oriented Literals in CBOR Extended Diagnostic Notation</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-edn-literals-01"/>
    <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="2023" month="July" day="10"/>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 46?>

<t>The Concise Binary Object Representation, CBOR (RFC 8949), defines a "diagnostic notation" in order to
be able to converse about CBOR data items without having to resort to
binary data.</t>
      <t>​This document specifies how to add application-oriented extensions to
the diagnostic notation.  It then defines two such extensions for
text representations of epoch-based date/times and of Constrained Resource Identifiers (draft-ietf-core-href).</t>
      <t>To facilitate tool interoperation, this document also
 specifies a formal ABNF definition for extended diagnostic notation (EDN)
 that accommodates application-oriented literals.</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 67?>

<section anchor="intro">
      <name>Introduction</name>
      <t>For the Concise Binary Object Representation, CBOR,
<xref section="8" sectionFormat="of" target="RFC8949"/> in conjunction with <xref section="G" sectionFormat="of" target="RFC8610"/>
defines a "diagnostic notation" in order to
be able to converse about CBOR data items without having to resort to
binary data.
Diagnostic notation is based on JSON, with extensions
for representing CBOR constructs such as binary data and tags.
(Standardizing this together with the actual interchange format does
not serve to create another interchange format, but enables the use of
a shared diagnostic notation in tools for and documents about CBOR.)</t>
      <t>This document specifies how to add application-oriented extensions to
the diagnostic notation.  It then defines two such extensions for
text representations of epoch-based date/times and of Constrained Resource Identifiers <xref target="I-D.ietf-core-href"/>.</t>
      <t>To facilitate tool interoperation, this document also
 specifies a formal ABNF definition for extended diagnostic notation (EDN)
 that accommodates application-oriented literals. (See <xref target="grammar"/> for an overall ABNF grammar as well as the
ABNF definitions in <xref target="app-grammars"/> for grammars for both the
byte string presentations predefined in <xref target="RFC8949"/> and the application-extensions).</t>
      <t><cref anchor="cri-later">Note that <xref target="cri"/> and <xref target="cri-grammar"/> about CRIs may move to the <xref target="I-D.ietf-core-href"/>
specification, depending on the relative speed of approval; the
later document gets the section.</cref></t>
    </section>
    <section anchor="application-oriented-extension-literals">
      <name>Application-Oriented Extension Literals</name>
      <t>This document extends the syntax used in diagnostic notation for byte
string literals to also be available for application-oriented extensions.</t>
      <t>As per <xref section="8" sectionFormat="of" target="RFC8949"/>, the diagnostic notation can notate byte
strings in a number of <xref target="RFC4648"/> base encodings, where the encoded text
is enclosed in single quotes, prefixed by an identifier (&gt;h&lt; for
base16, &gt;b32&lt; for base32, &gt;h32&lt; for base32hex, &gt;b64&lt; 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 defines additional names for this namespace,
which we call <em>application-extension identifiers</em>.
For the quoted string, the same rules apply as for byte strings.
In particular, the escaping rules of JSON strings are applied
equivalently for application-oriented extensions, e.g., <tt>\\</tt> stands
for a single backslash and <tt>\'</tt> stands for a single quote.</t>
      <t>An application-extension identifier is a name consisting of a
lower-case ASCII letter (a-z) and zero or more additional ASCII
characters that are either lower-case letters or digits (a-z0-9).</t>
      <t>Application-extension identifiers are registered in a registry
(<xref target="appext-iana"/>).
Prefixing a single-quoted string, an application-extension identifier
is used to build an application-oriented extension literal, which
stands for a CBOR data item the value of which is derived from the
text given in the single-quoted string using a procedure defined in
the specification for an application-extension identifier.</t>
      <t>Examples for application-oriented extensions to CBOR diagnostic
notation can be found in the following sections.</t>
      <t>In addition, this document finally registers a media type identifier
and a content-format for CBOR diagnostic notation.  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>
    </section>
    <section anchor="cri">
      <name>The "cri" Extension</name>
      <t>The application-extension identifier "cri" is used to notate a
Constrained Resource Identifier literal as per <xref target="I-D.ietf-core-href"/>.</t>
      <t>The text of the literal is a URI Reference as per <xref target="RFC3986"/> or an IRI
Reference as per <xref target="RFC3987"/>.</t>
      <t>The value of the literal is a CRI that can be converted to the text of
the literal using the procedure of <xref section="6.1" sectionFormat="of" target="I-D.ietf-core-href"/>.
Note that there may be more than one CRI that can be converted to the
URI/IRI given; implementations are expected to favor the simplest
variant available and make non-surprising choices otherwise.</t>
      <t>As an example, the CBOR diagnostic notation</t>
      <sourcecode type="cbor-diag"><![CDATA[
cri'https://example.com/bottarga/shaved'
]]></sourcecode>
      <t>is equivalent to</t>
      <sourcecode type="cbor-diag"><![CDATA[
[-4, ["example", "com"], ["bottarga", "shaved"]]
]]></sourcecode>
      <t>See <xref target="cri-grammar"/> for an ABNF definition for the content of CRI literals.</t>
    </section>
    <section anchor="dt">
      <name>The "dt" Extension</name>
      <t>The application-extension identifier "dt" is used to notate a
date/time literal that can be used as an Epoch-Based Date/Time as per
<xref section="3.4.2" sectionFormat="of" target="RFC8949"/>.</t>
      <t>The text of the literal is a Standard Date/Time String as per
<xref section="3.4.1" sectionFormat="of" target="RFC8949"/>.</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.</t>
      <t>As an example, the CBOR diagnostic notation</t>
      <sourcecode type="cbor-diag"><![CDATA[
dt'1969-07-21T02:56:16Z'
]]></sourcecode>
      <t>is equivalent to</t>
      <sourcecode type="cbor-diag"><![CDATA[
-14159024
]]></sourcecode>
      <t>See <xref target="dt-grammar"/> for an ABNF definition for the content of DT literals.</t>
    </section>
    <section anchor="sec-iana">
      <name>IANA Considerations</name>
      <section anchor="appext-iana">
        <name>CBOR Diagnostic Notation application extension identifiers registry</name>
        <t>IANA is requested to create a registry [[where?]] for
application-extension identifiers, with the initial content shown in
<xref target="tab-iana"/>.</t>
        <table anchor="tab-iana">
          <name>Initial Content of application extension identifier registry</name>
          <thead>
            <tr>
              <th align="left">application-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">cri</td>
              <td align="left">Constrained Resource Identifier</td>
              <td align="left">RFCthis</td>
            </tr>
            <tr>
              <td align="left">dt</td>
              <td align="left">Date/Time</td>
              <td align="left">RFCthis</td>
            </tr>
          </tbody>
        </table>
        <t><cref anchor="todo1">(Define policy: probably specification required?; detailed template)</cref></t>
      </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 align="left" anchor="new-media-type">
          <name>New Media Type application/cbor-diagnostic</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">cbor-diagnostic</td>
              <td align="left">application/cbor-diagnostic</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>cbor-diagnostic</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>.diag</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>COMMON</t>
          </dd>
          <dt>Restrictions on usage:</dt>
          <dd>
            <t>none</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 align="left">
          <name>New Content-Format</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/cbor-diagnostic</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..999.</t>
      </section>
    </section>
    <section anchor="seccons">
      <name>Security considerations</name>
      <t>The security considerations of <xref target="RFC8949"/> and <xref target="RFC8610"/> apply.</t>
      <t><cref anchor="todo2">Anything else meaningful to say here?</cref></t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative 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="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>
        <reference anchor="I-D.ietf-core-href">
          <front>
            <title>Constrained Resource Identifiers</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <date day="6" month="March" year="2023"/>
            <abstract>
              <t>   The Constrained Resource Identifier (CRI) is a complement to the
   Uniform Resource Identifier (URI) that serializes the URI components
   in Concise Binary Object Representation (CBOR) instead of a sequence
   of characters.  This simplifies parsing, comparison and reference
   resolution in environments with severe limitations on processing
   power, code size, and memory size.


   // The present revision -12 of this draft adds a registry that is
   // intended to provide full coverage for representing a URI scheme
   // (and certain text strings used in their place) as negative
   // integers.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-href-12"/>
        </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="RFC3987">
          <front>
            <title>Internationalized Resource Identifiers (IRIs)</title>
            <author fullname="M. Duerst" initials="M." surname="Duerst"/>
            <author fullname="M. Suignard" initials="M." surname="Suignard"/>
            <date month="January" year="2005"/>
            <abstract>
              <t>This document defines a new protocol element, the Internationalized Resource Identifier (IRI), as a complement of the Uniform Resource Identifier (URI). An IRI is a sequence of characters from the Universal Character Set (Unicode/ISO 10646). A mapping from IRIs to URIs is defined, which means that IRIs can be used instead of URIs, where appropriate, to identify resources.</t>
              <t>The approach of defining a new protocol element was chosen instead of extending or changing the definition of URIs. This was done in order to allow a clear distinction and to avoid incompatibilities with existing software. Guidelines are provided for the use and deployment of IRIs in various protocols, formats, and software components that currently deal with URIs.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3987"/>
          <seriesInfo name="DOI" value="10.17487/RFC3987"/>
        </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:,, and for the construction of constants; / for including ABNF (RFC 5234 and RFC 7405) in CDDL specifications; and 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="IANA.media-types" target="https://www.iana.org/assignments/media-types">
          <front>
            <title>Media Types</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <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="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>
      </references>
    </references>
    <?line 321?>

<section anchor="grammars">
      <name>ABNF Definitions</name>
      <section anchor="grammar">
        <name>Overall ABNF Definition for Extended Diagnostic Notation</name>
        <t>This appendix provides an overall ABNF definition for the syntax of
CBOR extended diagnostic notation.</t>
        <t>To complete the parsing of an <tt>app-string</tt> with prefix, say, <tt>p</tt>, the
processed <tt>sqstr</tt> inside it is further parsed using the ABNF definition specified
for the production <tt>app-string-p</tt> in <xref target="app-grammars"/>.</t>
        <t>For simplicity, the internal parsing for the built-in EDN prefixes is
specified in the same way.
ABNF definitions for <tt>h''</tt> and <tt>b64''</tt> are provided in <xref target="h-grammar"/> and
<xref target="b64-grammar"/>.
However, the prefixes <tt>b32''</tt> and <tt>h32''</tt> are not in wide use and an
ABNF definition in this document could therefore not be based on
implementation experience.</t>
        <figure anchor="abnf-grammar">
          <sourcecode type="abnf" name="cbor-edn.abnf"><![CDATA[
seq             = S [item S *("," S item S)] S
item            = map / array / tagged
                / basenumber / decnumber / infin / simple
                / tstr / bstr / embedded / streamstring

sign            = "+" / "-"
decnumber       = [sign] 1*DIGIT ["." 1*DIGIT] ["e" [sign] 1*DIGIT]
basenumber      = [sign] "0" ("x" 1*HEXDIG
                            / "o" 1*ODIGIT
                            / "b" 1*BDIGIT)
infin           = %s"Infinity"
                / %s"-Infinity"
                / %s"NaN"
simple          = %s"false"
                / %s"true"
                / %s"null"
                / %s"undefined"
                / %s"simple(" S item S ")"
uint            = "0" / DIGIT1 *DIGIT
tagged          = uint "(" S item S ")"

app-prefix      = lcalpha *lcalnum ; including h and b64
app-string      = app-prefix sqstr
sqstr           = "'" *single-quoted "'"
bstr            = app-string / sqstr ; app could be any type
tstr            = DQUOTE *double-quoted DQUOTE
embedded        = "<<" seq ">>"

array           = "[" spec [item S *("," S item S)] "]"
map             = "{" spec [kp S *("," S kp S)] "}"
kp              = item S ":" S item

; We allow %x09 HT in prose, but not in strings
blank           = %x09 / %x0A / %x0D / %x20
non-slash       = blank / %x21-2e / %x2f-10FFFF
S               = *blank *("/" *non-slash "/" *blank )

; note that there must be at least one string to distinguish
streamstring    = "(" spec1 tstr S *("," S tstr S) ")"
                / "(" spec1 sqstr S *("," S sqstr S) ")"
spec            = S ["_" S]
spec1           = S "_" S

double-quoted   = unescaped
                / "'"
                / "\" DQUOTE
                / "\" escapable

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

escapable       = %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
                / "/"   ; / slash (solidus) U+002F (JSON!)
                / "\"   ; \ backslash (reverse solidus) U+005C
                / (%s"u" hexchar) ;  uXXXX      U+XXXX

hexchar         = non-surrogate
                / (high-surrogate "\" %s"u" low-surrogate)
non-surrogate   = ((DIGIT / "A"/"B"/"C" / "E"/"F") 3HEXDIG)
                / ("D" ODIGIT 2HEXDIG )
high-surrogate  = "D" ("8"/"9"/"A"/"B") 2HEXDIG
low-surrogate   = "D" ("C"/"D"/"E"/"F") 2HEXDIG

; 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-10FFFF

DQUOTE          = %x22    ; " double quote
DIGIT           = %x30-39 ; 0-9
DIGIT1          = %x31-39 ; 1-9
ODIGIT          = %x30-37 ; 0-7
BDIGIT          = %x30-31 ; 0-1
HEXDIG          = DIGIT / "A" / "B" / "C" / "D" / "E" / "F"
; Note: double-quoted strings as in "A" are case-insensitive in ABNF
lcalpha         = %x61-7A ; a-z
lcalnum         = lcalpha / DIGIT
ALPHA           = %x41-5A / lcalpha   ; A-Z / a-z
]]></sourcecode>
        </figure>
      </section>
      <section anchor="app-grammars">
        <name>ABNF Definitions for app-string Content</name>
        <t>This appendix provides ABNF definitions for application-oriented extension
literals defined in <xref target="RFC8949"/> and in this specification.
These grammars describe the decoded content of the <tt>sqstr</tt> components that
combine with the application-extension identifiers to form
application-oriented extension literals.
Each of these may make use of rules defined in <xref target="abnf-grammar"/>.</t>
        <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 `&lt;&lt; "foo" &gt;&gt;), is described by the ABNF in <xref target="abnf-grammar-h"/>.
This syntax accommodates both lower case and upper case 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="cbor-edn-h.abnf"><![CDATA[
app-string-h    = S *(HEXDIG S HEXDIG S)
]]></sourcecode>
          </figure>
        </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-h"/>.</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 in b64, as "/" 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="cbor-edn-b64.abnf"><![CDATA[
app-string-b64  = B *(4(b64dig B))
                  [b64dig B b64dig B ["==" / b64dig B ["="]] B]
b64dig          = ALPHA / DIGIT / "-" / "_" / "+" / "/"
B               = *iblank
iblank          = %x0A / %x20  ; Not HT or CR (gone)
]]></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> 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="cbor-edn-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
DIGIT           =  %x30-39 ; 0-9
]]></sourcecode>
          </figure>
        </section>
        <section anchor="cri-grammar">
          <name>cri: ABNF Definition of URI Representation of a CRI</name>
          <t>The syntax of the content of <tt>cri</tt> literals can be described by the
ABNF for <tt>URI-reference</tt> in <xref section="4.1" sectionFormat="of" target="RFC3986"/>:</t>
          <figure anchor="abnf-grammar-cri">
            <name>ABNF Definition of URI Representation of a CRI</name>
            <sourcecode type="abnf" name="cbor-edn-cri.abnf"><![CDATA[
app-string-cri = URI-reference
; ABNF from RFC 3986:

URI           = scheme ":" hier-part [ "?" query ] [ "#" fragment ]

hier-part     = "//" authority path-abempty
                 / path-absolute
                 / path-rootless
                 / path-empty

URI-reference = URI / relative-ref

absolute-URI  = scheme ":" hier-part [ "?" query ]

relative-ref  = relative-part [ "?" query ] [ "#" fragment ]

relative-part = "//" authority path-abempty
                 / path-absolute
                 / path-noscheme
                 / path-empty

scheme        = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )

authority     = [ userinfo "@" ] host [ ":" port ]
userinfo      = *( unreserved / pct-encoded / sub-delims / ":" )
host          = IP-literal / IPv4address / reg-name
port          = *DIGIT

IP-literal    = "[" ( IPv6address / IPvFuture  ) "]"

IPvFuture     = "v" 1*HEXDIG "." 1*( unreserved / sub-delims / ":" )

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

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

reg-name      = *( unreserved / pct-encoded / sub-delims )

path          = path-abempty    ; begins with "/" or is empty
                 / path-absolute   ; begins with "/" but not "//"
                 / path-noscheme   ; begins with a non-colon segment
                 / path-rootless   ; begins with a segment
                 / path-empty      ; zero characters

path-abempty  = *( "/" segment )
path-absolute = "/" [ segment-nz *( "/" segment ) ]
path-noscheme = segment-nz-nc *( "/" segment )
path-rootless = segment-nz *( "/" segment )
path-empty    = 0<pchar>

segment       = *pchar
segment-nz    = 1*pchar
segment-nz-nc = 1*( unreserved / pct-encoded / sub-delims / "@" )
                 ; non-zero-length segment without any colon ":"

pchar         = unreserved / pct-encoded / sub-delims / ":" / "@"

query         = *( pchar / "/" / "?" )

fragment      = *( pchar / "/" / "?" )

pct-encoded   = "%" HEXDIG HEXDIG

unreserved    = ALPHA / DIGIT / "-" / "." / "_" / "~"
reserved      = gen-delims / sub-delims
gen-delims    = ":" / "/" / "?" / "#" / "[" / "]" / "@"
sub-delims    = "!" / "$" / "&" / "'" / "(" / ")"
                 / "*" / "+" / "," / ";" / "="
]]></sourcecode>
          </figure>
        </section>
      </section>
    </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>
      <!--  LocalWords:  dedenting dedented
 -->

</section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA7U86XrbRpL/+yk68M6YdAheOiJRlic6E80mtleWv5kvsnYE
Ek0SYxBgcOiwrHz7f19j32TfZJ9k6+gGGiQoKjuz/BKRALqqu6rr7oJd1xU3
A7khRBZkoRrIN0LKg/k8DEZeFsSR+y4JVJQpX/4UZCrxwlQGkTw6fHcuT+4y
Ffnw5DjwJlGcZsFIvo0zAhPecJgoQMwjj98W4MKPR5E3g5n8xBtnbqCysTsa
xomr/MgN9Sg39DKVZsKHr4Hsd/sbbvc7t9cV4rO6v40TfyDPYFVJpDL3GPEI
WO4AljaORZolypvBgJOLU/FCjuIoVVGapwOZJbkSYh4M5GUWj1oyjRMYO07h
1/2Mf4zi2dwbZfRjBoSnV0J4eTaNkwEwxoX/JcwCuI7a8jBOZl4U0T0m6chL
UmBK5UmcTAbyYxTcqCQNsv/+r0weJgpQy4tfzmgArlfB4t8DC8feaCo3Nrqb
m116Ngqy+4EG4BuxD/Mcu/2dja1dfSePsgRG/aBw0nu6OZ/GEYz7dnPX3ez3
3H5vx93e2O336KGaeUE4kCNvGH+ffQnasEIhblSUK6RRP4Qd+R73hp5KOQmy
aT7k++7tpGNtFjzl3RpIZ5pl83TQ6ehhbQZrB7EN0HGEiJBDGTAFpzw/PdrZ
7nUBu++H+np3c5dng+sz97jNchInyp3CTsGjJOCRGxsbMBIFJQtmSt/b3dke
yLwYsrvzHQiHudztbW8NUC6yJAaBRKGpLmZze3NnIIdeiujODt4etGniuZfA
LgMJ6UAI13WlN4S9A2kR4mKq5FEcjYJUycMg8pJ7+W74dzXK5LmaJwoEkPWi
xQrRgEkkkthsyct/BzQ9F+TM/AJq1DiIVCo96filckVauRxUQdABlcgsph0d
KlhLqOASyUJJwxtxnvF0wBxPAu9nqbyFDcH7U+8miCYIAKsDNSgw8eIRoq1X
tIErupgGqQTVzVEpZDpXo2AcwAqn8S0i8XxfepbViI3VUGgkUriVmhkyYFUN
UW3gdIYPo4L67DaWaQ4KYSEZk0AAFrgHS7d5m8p4LNU8Hk1d3DqfZKKDQgGM
jHx8CluEOwbYfdiYNM6TkZJnPmBAapJUiP/5j/80RMuGbaGM5DUNWzaJLbEE
lQ1AsGEuoDAOYW9AQuI5CDpveFbhHNg2ZoPFQ0+SAIby4PDtKVMfICzeZtrR
ytbwTDbAsjYZXTb1APsIzVaMhKf1+2EMrEWFYGGeBaB8YB7PUC38fEQT6M/D
iwDvPop96yPEKawv+12S3xIPDx8U497BHSHT//iIEg2S+/c84mcopvLhARwR
EB/cyR94LKzw8bHQE3FcwxJgNu8+/P7zh3dvW4yrFCGBXC0kB5WAdGREogFk
pyxzXmrrAglQ5k2AbzR7v9DXPopB40MGA7zED76QVuGWZ/FEAXMSnh/ZBJYi
97SAjKZeNFG88RmIh0rZjcSgXCq5YVUGPwZS5cFNxLMM15JDUGUVoe6nNEUO
uxCPCZUn06mXrBAcYDcKK+kT0WYENLXsRrtZWgDYDBdM7uOjJThAtlLwYAJm
cebhLjI2Gd+gjGl51k+RobcKbnq0UrEg6xRWPDyAzLoaINX4zCVdDGPmpRje
A2dgw5DdVSMAV2xAfEZpJIx2EHfBUotSKlitgUKKPJKr6tUAAxvFOvbwQHwg
fPTbLenXvDs/S8GN3stZzBuJ0xr+CUv3R1ozfEViDqTA1uDgRIXkj3CgIssF
q07iGy/cI+oRB62sNCwgbCwCKasX0FMbxp0YksuIbP95H/Rytiljy6QnvQf+
36H4EdfrRI62D3ZN6F0zlojcB1hFcmI3EHyQJyNJetqhIIWw3cCEepvSWuVq
IPKJ+ELZKyIR9GSUz4aAE/DAlqEpgX3FL9AzCL5wHJgU0EdF6OkmLAv9kQDu
wHUYay6kMBhI+TUH2QEgEMxxcAePhveoJEHhdmTjzfQ1eTacp7fdkm+GG/3X
zDG4s9GHO9Pqnam6w2Hbm+XN7U2pUWxv5kmIEk0bpvcGiR7iouN8MkV/LyFk
A14H6RSphsgGpM0bqVZpsPBmKpyp05IOrAi/pvSFsu/A5A7YxM8qYjvEVopg
YCLc4jwCKxDDDiq/TSGS1tSq/JfRju+TLQAbyVjG5F+ABLqkxYnbaQDW+VYB
PWBMXtVqs8Xb9FW7cFO0Eb62GiwdKZKd5KF2l/donYyg6oEgZ2eRhNgPRCgP
vYQBVTry5kgjA4O0oLMxIBIML4uv8oX6NQ9Ac2FFgP8Zct2Sqj1pt+T1p0/X
gBB4zT7LMwI19Eaf09DDfYN9uP700gyTlWFELipJVG/zbAkMUiMD6AeDlPwi
mh0RxrcqcUeoAAcfjs7OZKgyNDwNz/3SpAV8gXAHJA+sHRJd7iENF+CwMESG
ndAhCgxSAYmKhZqRpojGDyBpSAl/191tLtix2j0mpImawLpVwrrn6evkXjTI
rQCgG3iR9/gIKN+TKiKNhlvugnB465mG6k4GD1RpmAehvwi0vLfG6KEFATEW
lW2rhuokZSA2OTp0Ho67BEE/+AVfjpOYhggKhCdwj506ynQNQbBQpha8yEj5
OfCrdJKCoCoqqR35OhbA5pzcebN5qJV1fQqgqSyMsqgY5SEa/jzyDSnjGOzH
La5cezU0+qCNRsoWo2ugCKzCfSELKNUzBbPJ7H6u7L1DwfUoB4Rbrg7DkISF
9dn5iXZ/QCvcFCpUN+hBUFhhH7M8ReOBhn1FnJaoUTyJgi+KNUHQOI/91lBl
t0qZoCxAg4J1hHQW69hvbNGRGl6h9AFDyLQ6EF04lnd/eIHhRp1v5/FrTQIj
tGRce0xPrMmijJAjO9g7F5EjTkwCCyKN+2tGkvn5eH4G6MagwRHgK4FzCrdY
IM/Oz0TdmMCaoFCapRkgMGMjpPnHuXLG5GXl2oQNyZqTkfcyukPBgYk5tts9
jjp4DWWkmFGUgIEgzEXWEW5DdByptSsRwIwOEMuavScD1LFZGeSSFb0DldUg
Y+9GO7mUhqaZuPESsHeZFVOhzM/AX8NORm6aJ/MkINpG0zgYoRPDBd9CIocy
dUCyrFi72eetUg0hfvvtN64M4VMBjHhpCkEaQRvy0g4E75mXTLwOJCZgw14i
mKCgqfCQWCRYwHbpbrbkpaMRYQwCuJwrvGcQ4k3G6VxdMVbOTKrRuTZqdVk2
kqeNAdUJgPNWpswK5mdV/fKzOvV6rnYhtjrlKooWhQDackLD2cycUKXjkHLd
YwS6QCBWCSvL3mhvtvtWVLxOC00ma+H8wC6kFnVvGfVq/dOhdSX55nQnzcOM
4w1dv0L8GgU7t9Xrwvyhwg5RDIHQbQyuko0srAK8SIwOF9Wn4jOJHY15UfgQ
17gFLoxH6GudnA6jsREnF3b/sdmyvDRSKMZh7CFZ7jwG864J3lsYxS5igsGy
zjUsxfsH9M7PXvZ2t3exUt7vXXT7g63tQW/7l2fqmdvb7G3tdvubtgL52f9J
f44vbPXBCiqV3kD+E23AHl4Abzkgq/dRL14w3TWHC7Z2yfqA0AR/MI8d++m1
BDjg1xysJCufKbSUYJeXlOL96eqK8rK1WYaVNBFbQNYMO9JpfIs7DooD6ZaO
QYErX9cbia/A5hRs2NyuxVU+X2HJxht+FV/dtZ/1Q+wRgFJOayeurAGCAKxZ
+U+M4Io+/gaUkEv+s1FO//koIb/9Z6OEvVyHcl1wRSgp6mWUfvY0RgAoLeYT
qyxQPgzkCyOokg4F950zLdNHpYrX6qCwhNfokvOItbQs9uPeVflrIBvHlIDI
eQx47gcYXQ0hTLlfyERQUQNI6v60B8qQQShDxRYwjkBUE1wzGoqfKTS+gNB4
hYLj8UQ1nyAQF0FM7OeUWFJHlAbk4Rs6AaLw26XwW6vvW6/K0a/yQq9rBZML
Ta0+QLkwVlhbuopt6Cw/xeOjv8KnBcsrFwYmmrcvUrdueVt6YTCJ9p1QjSHm
0Dv6Vt1abHtqOty/h4E+F30UNJxOO8XABgOPkQ8z++ECHgGBO2+ltA/SBvJt
50CId3PtomuenejCG9cmCh+Cz3WJvvHx4tTdaaLXGkG6kN3XDH14AI+DtzGZ
GBcspAMPfWAzxIOcOlgImEG03udULcOk2hZRRl7Zhgp+q3yhayBYpSd9K3M6
RHLByV+RPnLGPs1nXuSCh/JNYXRGISo4RyFOE29Cma+leMvLvygrtJgDpAow
wo5Q2Wq8jIESUIj2zAmVr0/dnEUpcSApbhxkco6M0fpqkd7SGRAW8PDQa2kq
DaKXZgoSGE/UTAW7e1AWl4pDW+b/p08CJjjGwJLKjSjzXrpYRmRGS6nlSsqf
vQnGUxSFNdJm5dkpmJrSshVP2xQsEewItipOp3KMI0n0sRZcxfMe2Akk/pEP
3dEQQbCb6oPaDDSKVjfOE33EU6GKAqC//EBH8lwyTyFKrRzNN1sCWwyo2UFW
JA13+lx5oUuW/wAESDa8JCshWfLpbDFPvQmJ4NG7n39+9xZVFetGI32sGpUD
WBMOqCOic8RFDn2SHqoER1DbhXifxDdBynulbWlBFggDhXe6+HJKJK+w3KaS
g9l7ZbyJnTmAh+CqWstJZcM5ig/eL0ClTvN13YH+46NI86FrrD6Hczo3cCou
+eTDxTgP5Ul0EyRxxEdmjaP4/KQp3hfoHOB84T/q52txqRn9EbYTfC0WSga2
Liwgz3vElvCrPDtecCpfxTqv4S4ivTg87lneRHv/Ve6iykl0CwRPR510eJOm
AGjVJvk8Qfa3ttvt3d1dTKRX2GdOB8g4rzqN4twyXQHPpzXWSR9e0Wkx1/Xb
JvLoX5W/BvIgusdtnkgVgkmeKS+CC9xeoCj17iXlAHw8jkV3waeWx9ap5cOL
4rhyaeXg1eyD0ONqyvRU+1SJ9lGsj+nrP/r0xzNH6Hh+CBxLlw5oa1I5bZHj
sSAT9FQPAib9MbVNhSrjMzEQ89ScH0TyGs90uQp9zVkSH4S1kMMteT2/Jj8h
qLqWYjXjOv0VxmPSjVssgwxlzJhIRE4WyxQPFmkovJYw1JRpvb0Yd35dd+bc
5rYGKqMF2H7V0lkddptxfEJTG+RY+YfsMqImN33Ehw5UlN7T1OUxXrz1QBaX
zr4R2fX05ctrPtGBzIN+J8rsmj7LntpnzZEPVg+Glvfa4sf4VsHetjTdejXX
kHAVyKf6d6Ko2yDAZgufOweoKB4tLo/Xb5fZR3Ee+uzcx7HGM1RF34WoViup
UImHASOsb2DRAQspIlW/VszRvvwgL+nk44N81XBaDnzzZfNKfhD0szJ85s1l
B+hIQFE72JwxgT1ftJwdWpX2FR2galT8BmcLlHV0xbQGMgNBQQT8pQDMx53o
SO4wZDESAq1edWXOtw6MclxHlPOZZ5c4/Er2Xh2f/XB2IS+dtmMurrDM6SyM
uBIWAVUcTtcBL3eH8D+e/BVGL9FQpceJceg7Qrtu6BCHHtLQpmBO2RT+IYWc
kATk3qnhHDx21zx/6711BLN+AfHYA2O8Ago7OFc8ivIwXPEoj3RsueI5L6NR
Spx0mo7IsYJXoRoZ3pHElJ7k7REsd/YognMWsWENyWWNNAPDkRfOp558hT9g
h+UeyOQozMnD8+EuqLcoTZYBtFCRqRT0t7rUl458VT0JhFtiWB2ncWnsHcYG
y4CbWsnRr0f3FN2KbAn4+N8+vrs4ka/8GDKAYiK+KwqFKRf1+rUjUe+dN2+Q
I6S6lVVfOmS/VxsC58oRqPgLG/Ng4D7PLSi8QJhHR3yuggCM2ZuBwS/EnvwL
ZssQksk/3HV35Y8XaPvABKeKj/C0wdSn/GIYetHnClIC6+DXAX8d01e/K+jM
hQ7tzViGpsc9t6/419jtdU/hIz7IxQW/YgAgrgN7W+KjS37WRBqixQOoPCXz
DDdC5cFvPIBKi9q5z6f9OWS2wjZsmrMN5myPrWHJW75skmwvLBXtRwHGIlXC
6WsGpD2rEAk+wPkbjLsSDF59Ro+EqIob6VxEDRm1DgDlvubuJ8cIav1DQogp
N1p4W4/Wzfck1tWLseYrfhakg5ECi7wnDz9w9wcF1h+/7Xa7O/UmbYyjT0+5
XDDGJjIafbTCduLon04hwQTRKEcf1I9OcPTRuRyBAkNAiOc3WZ5EDHO8wnAj
DOgTpI3BF8x8Icb2hgyyW8cREGoJIGCTSMgbaRwGfp42CaR/KhvYb/NNcwUz
EfST1SjTSBR3RVfQbNWxo4EOw4HQ/w5bV5qASOacHeHn47dc1NGPC7h9c6ia
xBMvq4smGtNgMi1H0DJ5KrA35f2mqCAi1I0GBwtA2wEw5hD+P6II4wR+nTpN
ucH+v44bDefYkezzZZ+HgZlYWAsq+jEGEzuAcBf+52maBkJUlijL8Ucw7hj+
Nwsx48EMlefgUax7w4660moHoh4pNLbKb1mOT1teUahYwWGyqmDfIBdFQa0T
NDS4e0uCCekbBExxwl3BQTTPs1rgftfVr0gsffZkPINEpHvX78vaKOKuv+H2
t9cBfydf1gPvuFuHa4C3juSnWuCtY+M0hHbIxQeZ1u8zGkey3eTGMMEiUR26
0XU3dmFo190VOsypPu/x8x48f7eAwMB/R/DficMVz3v0vCe0LFrPLSHHv4f0
lwX9WIs7/j11tHQNZNURFM131MmJWFDEsL8M8jN8ByigntqAjzCFCb/sBW73
3O9Qxjz3izBRWfncQOgYUBz89P7HgwUWbvbcLfT9JfY9eeD+gpkK4MSjVazQ
20fJsNKF8oAu72JKCW6UjoCwsuhiOXPfMS9LtREJlmGWihK6FcvEdaZ2RGeh
Zar73MrCykJCbRr7dAuYKLp+V/Zom2yzUmOn9lEw30UzOB+MDrng4CtuwrVO
oPG2qSNgcQJinijTjVdwPURHVzbmr20wxBYb8KTiaeqsQ+8TfJGL15FyDxB1
3nB/vm4arbDAlgiqQrx48UJOB0ulI4D+Ud15QHIwo9qq3f1OJRe7eRX2vKwZ
6EaWorizeGpvN72WiHmB2G8szIsRVKpo4Vd3p7cFv7h80Zkqz+/I7Q3Z0VhT
uNqW22P47+W1aJg3GZYXff36tXTGMSSob940W9zoyBtM7dJFnWe5D2OKzLL7
nCvvwND7AtRnSnaABCyfz80lUKX7TbEcK8z7CRxMc5DVKD2TeSWwCXaFuhQV
bnKBwy5uWGWmKVsGjIC1yfsgzY9mrUEAkJVK705Z7YUuzK4Rj/Ma8TjEbebe
GUc8CpY0SDRrZe2QG8vXi5ldiPpHBE13sgep+F0SUBUBqqoXL4vIUYi16ZHV
s7epz6nwTb/y3RDx8fwnN/XGyhq5tTASjfpQZbrmzR2YZ9U3rzhXNI2i5gTb
UDbH5tVoYjcKkoiZliezWD0czUZKNVAwYvBAv+aH3W7CCCTxbXuTjhQwcAZO
3HgQ52ocrka5QkCpz2FfHoKAbjbgAoRZHjaXY0kpL81TWfy4dPb30SvbN5yr
K3l4JfQtyzuyv+yUjt4lh/43+ss1s44jDhdmhcw3II0UwULCvV8m2v0uOlpg
KSYZ2MZ7LhsTMPorNAxpXq1j8LRGy/w6xXiOgqF++VmteuHRC77AWoun7NvA
ZkNLu55Urms/uy5frtF9g4u6xDEDlZ1RZF3sdrvmg5uHB/1SLUo7vgyHkwZf
jJ8qmv+48U+/RPv4OKgXLmpP2ZfFJIIaHN1xHob3ivKnfbnJ0RQ9mAHCqdnd
vg4hIWDsub2+HuEXRaOFEf2dFn3t0tdGl796ZV16WaLNZ0/SxB1ck6DWvylI
R900kCJs8IhZEOW612NhxNauMO2DceTXjsCl4kD62u6W7yyGypvjMdeTi6X4
QdgtijyHVUzmpxC/xuNxCvYK08iiLt2UJY1YALPoYTgDxFh/QbAqPiHojRgv
pF3lcStxltfMkTrTYhNzJVA+XL9spdESVIgNWg5LXspLEA4Gzsp+p31ZWatF
oJbGythyaufCkQWumnxpIWGqNTQg/6vtjJ+tdeZaF5+2D6UbByWvtTPcW7+M
Ahud6U2BZ1sXGPu7zAvM7BY9itdVG2Lah6nDf4UBwZa5fVnBAukf40dzRRYU
X/cX2DNf2Z90NFUzFr4pRPF4/J7JS+n8yYEUWCX38gqvXjhlY8qVEOVILfwd
cKj8L0DgufPcy6YuBACzeXa/LMYd8zyNw7ymCmQGJHEMG56mKwcwflEhm9kA
I8zbofhICDOZS+Q/h2ohbAwIU1w/i0XV0f9PLIpiJmQdizS5xaZzjPGqsRxs
GOOHf8FONs0/7IFrZthLjOcSbMKRzvcO0D6NU2IH8HKO/0jClSgGaBCYKI8S
0wYKSxtlrnkntCOxp8RXYTBLcdIBTkooLSE9e2/+WQwYcvb+ZtO0COE+T8hi
CJrbgtEWXliw0hyfNBDJdokErk7zDF9akU06PRHWHYa6KU8QtQdZIKqGDGHP
QsZw9We7Iae9bQaUYbrRr9vT+o8zAKCt58BfLtxBiCuG33we/KuePc6C33gm
fH8FfP+Z8Bsr4DU1Dv18An5zNXz5eQJ+6znwcH8F+HY9OJhU+F1+9kG+Nk1Z
ObXbtiFCKTDgd7OqEcLWDgoJ1MiNRxnEKSi1z7oS5X2ecdGr84cdeg2ZpgRa
BduTPRhfC+D0nCLykxWArttbAdJ3dGSxac2zJ/sYe26uANkyMFv2LP0tANna
QpPNpsQw+tlmq4mBXma9A7Bfse88zVBNgoj/bRnKP2N6ofh5DqAWgTlrRc+y
1kMsYfDoLGYUh9gNpMhtrfXENUjWgRYMQFB6Cbo83GCulVwijiNlGinwtcqF
fXp6aZ670ZclCPA+Vbr3rdFuNFoxRUHh/lPIRZWkfdl9PUdy3oCH1WMK2aEH
wkImWasX7+Oa9pe9yVMu8nv0LUsM36MNRRa7oYomsDtmTeafM8IeBd5wBy3O
fOFs7ve4aFqFEBz+lCiACsbKZ5MdipFAO4rAaM04e1byun9wTBnQnJlZq5RP
lEvaVtHkN3xTwX4HZV9OVFQSVFInrPu8gIFTWWOH4rwOBREdjBQ0JywGMdw3
9ORf6O8fHT5g10f+ndp2ALz9yqrxtOjvHv3dd+rzJgz7VydO8HRt5vREysP5
0sHocxTfhsqfUK/a8r+Dgqvixivl7ztR7OjkCNKhkZovvgWz6oX3mp7Jlqj+
Yzh1LZj0gmh5snBLjfRROqcXKHSWdRSfH/wkb+PkM97519DLU/kjxOSfsdHu
9TeuK+VP8cgL/xInfjqQMI2v37rkX9i+4LpvxP8Czm6gHQVQAAA=

-->

</rfc>
