<?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.17 (Ruby 3.0.2) -->
<?rfc docindent="yes"?>
<?rfc strict="yes"?>
<?rfc compact="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-quic-qlog-main-schema-14" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.14.2 -->
  <front>
    <title abbrev="qlog">qlog: Structured Logging for Network Protocols</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-quic-qlog-main-schema-14"/>
    <author initials="R." surname="Marx" fullname="Robin Marx" role="editor">
      <organization>Akamai</organization>
      <address>
        <email>rmarx@akamai.com</email>
      </address>
    </author>
    <author initials="L." surname="Niccolini" fullname="Luca Niccolini" role="editor">
      <organization>Meta</organization>
      <address>
        <email>lniccolini@meta.com</email>
      </address>
    </author>
    <author initials="M." surname="Seemann" fullname="Marten Seemann" role="editor">
      <organization/>
      <address>
        <email>martenseemann@gmail.com</email>
      </address>
    </author>
    <author initials="L." surname="Pardue" fullname="Lucas Pardue" role="editor">
      <organization>Cloudflare</organization>
      <address>
        <email>lucas@lucaspardue.com</email>
      </address>
    </author>
    <date year="2026" month="July" day="06"/>
    <area>Transport</area>
    <workgroup>QUIC</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>qlog provides extensible structured logging for network protocols, allowing for
easy sharing of data that benefits common debug and analysis methods and
tooling. This document describes key concepts of qlog: formats, files, traces,
events, and extension points. This definition includes the high-level log file
schemas, and generic event schemas. Requirements and guidelines for creating
protocol-specific event schemas are also presented. All schemas are defined
independent of serialization format, allowing logs to be represented in various
ways such as JSON, CSV, or protobuf.</t>
    </abstract>
    <note>
      <name>Note to Readers</name>
      <ul empty="true">
        <li>
          <t>Note to RFC editor: Please remove this section before publication.</t>
        </li>
      </ul>
      <t>Feedback and discussion are welcome at
<eref target="https://github.com/quicwg/qlog">https://github.com/quicwg/qlog</eref>. Readers are
advised to refer to the "editor's draft" at that URL for an up-to-date version
of this document.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>Endpoint logging is a useful strategy for capturing and understanding how
applications using network protocols are behaving, particularly where protocols
have an encrypted wire image that restricts observers' ability to see what is
happening.</t>
      <t>Many applications implement logging using a custom, non-standard logging format.
This has an effect on the tools and methods that are used to
analyze the logs, for example to perform root cause analysis of an
interoperability failure between distinct implementations. A lack of a common
format impedes the development of common tooling that can be used by all parties
that have access to logs.</t>
      <t>qlog is an extensible structured logging for network protocols that allows for
easy sharing of data that benefits common debug and analysis methods and
tooling. This document describes key concepts of qlog: formats, files, traces,
events, and extension points. This definition includes the high-level log file
schemas, and generic event schemas. Requirements and guidelines for creating
protocol-specific event schemas are also presented. Accompanying documents
define event schemas for QUIC (<xref target="QLOG-QUIC"/>) and HTTP/3 (<xref target="QLOG-H3"/>).</t>
      <t>The goal of qlog is to provide amenities and default characteristics that each
logging file should contain (or should be able to contain), such that generic
and reusable toolsets can be created that can deal with logs from a variety of
different protocols and use cases.</t>
      <t>As such, qlog provides versioning, metadata inclusion, log aggregation, event
grouping and log file size reduction techniques.</t>
      <t>All qlog schemas can be serialized in many ways (e.g., JSON, CBOR, protobuf,
etc). This document describes only how to employ <xref target="JSON"/>, its subset
<xref target="I-JSON"/>, and its streamable derivative
<xref target="JSON-Text-Sequences"/>.</t>
      <section anchor="conventions-and-terminology">
        <name>Conventions and Terminology</name>
        <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 BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <t>Serialization examples in this document use JSON (<xref target="JSON"/>) unless
otherwise indicated.</t>
        <t>Events are defined with an importance level as described in <xref target="importance"/>.</t>
      </section>
      <section anchor="use-of-cddl">
        <name>Use of CDDL</name>
        <t>To define events and data structures, all qlog documents use the Concise Data
Definition Language <xref target="CDDL"/>. This document uses the basic syntax, the
specific <tt>text</tt>, <tt>uint</tt>, <tt>float32</tt>, <tt>float64</tt>, <tt>bool</tt>, and <tt>any</tt> types, as well
as the <tt>.default</tt>, <tt>.size</tt>, and <tt>.regexp</tt> control operators, the <tt>~</tt> unwrapping
operator, and the <tt>$</tt> and <tt>$$</tt> extension points syntax from <xref target="CDDL"/>.</t>
        <t>Additionally, this document defines the following custom types for
clarity:</t>
        <figure anchor="cddl-custom-types-def">
          <name>Additional CDDL type definitions</name>
          <sourcecode type="cddl"><![CDATA[
; CDDL's uint is defined as being 64-bit in size
; but for many protocol fields it is better to be restrictive
; and explicit
uint8 = uint .size 1
uint16 = uint .size 2
uint32 = uint .size 4
uint64 = uint .size 8

; an even-length lowercase string of hexadecimally encoded bytes
; examples: 82dc, 027339, 4cdbfd9bf0
; this is needed because the default CDDL binary string (bytes/bstr)
; is only CBOR and not JSON compatible
hexstring = text .regexp "([0-9a-f]{2})*"
]]></sourcecode>
        </figure>
        <t>All timestamps and time-related values (e.g., offsets) in qlog are
logged as <tt>float64</tt> in the millisecond resolution.</t>
        <t>Other qlog documents can define their own CDDL-compatible (struct) types
(e.g., separately for each Packet type that a protocol supports).</t>
        <t>The ordering of member fields in qlog CDDL type definitions is not significant.
The ordering of member fields in the serialization formats defined in this
document, JSON (<xref target="format-json"/>) and JSON Text Sequences (<xref target="format-json-seq"/>),
is not significant and qlog tools <bcp14>MUST NOT</bcp14> assume so. Other qlog serialization
formats <bcp14>MAY</bcp14> define field order significance, if they do they <bcp14>MUST</bcp14> define
requirements for qlog tools supporting those formats.</t>
        <ul empty="true">
          <li>
            <t>Note to RFC editor: Please remove the following text in this section before
publication.</t>
          </li>
        </ul>
        <t>The main general CDDL syntax conventions in this document a reader
should be aware of for easy reading comprehension are:</t>
        <ul spacing="normal">
          <li>
            <tt>? obj</tt> : this object is optional</li>
          <li>
            <tt>TypeName1 / TypeName2</tt> : a union of these two types (object can be either type 1 OR
type 2)</li>
          <li>
            <tt>obj: TypeName</tt> : this object has this concrete type</li>
          <li>
            <tt>obj: [* TypeName]</tt> : this object is an array of this type with
minimum size of 0 elements</li>
          <li>
            <tt>obj: [+ TypeName]</tt> : this object is an array of this type with
minimum size of 1 element</li>
          <li>
            <tt>TypeName = ...</tt> : defines a new type</li>
          <li>
            <tt>EnumName = "entry1" / "entry2" / entry3 / ...</tt>: defines an enum</li>
          <li>
            <tt>StructName = { ... }</tt> : defines a new struct type</li>
          <li>
            <tt>;</tt> : single-line comment</li>
          <li>
            <tt>* text =&gt; any</tt> : special syntax to indicate 0 or more fields that
have a string key that maps to any value. Used to indicate a generic
JSON object.</li>
        </ul>
      </section>
    </section>
    <section anchor="design-overview">
      <name>Design Overview</name>
      <t>The main tenets for the qlog design are:</t>
      <ul spacing="normal">
        <li>Streamable, event-based logging</li>
        <li>A flexible format that can reduce log producer overhead, at the cost of
increased complexity for consumers (e.g. tools)</li>
        <li>Extensible and pragmatic</li>
        <li>Aggregation and transformation friendly (e.g., the top-level element
for the non-streaming format is a container for individual traces,
group_ids can be used to tag events to a particular context)</li>
        <li>Metadata is stored together with event data</li>
      </ul>
      <t>This is achieved by a logical logging hierarchy of:</t>
      <ul spacing="normal">
        <li>
          <t>Log file
          </t>
          <ul spacing="normal">
            <li>
              <t>Trace(s)
              </t>
              <ul spacing="normal">
                <li>Event(s)</li>
              </ul>
            </li>
          </ul>
        </li>
      </ul>
      <t>An abstract LogFile class is declared (<xref target="abstract-logfile"/>), from which all
concrete log file formats derive using log file schemas. This document defines
the QLogFile (<xref target="qlog-file-schema"/>) and QLogFileSeq (<xref target="qlog-file-seq-schema"/>)
log file schemas.</t>
      <t>A trace is conceptually fluid but the conventional use case is to group events
related to a single data flow, such as a single logical QUIC connection, at a
single vantage point (<xref target="vantage-point"/>). Concrete trace definitions relate to
the log file schemas they are contained in; see (<xref target="traces"/>, <xref target="trace"/>, and
<xref target="traceseq"/>).</t>
      <t>Events are logged at a time instant and convey specific details of the logging
use case. For example, a network packet being sent or received. This document
declares an abstract Event class (<xref target="abstract-event"/>) containing common fields,
which all concrete events derive from. Concrete events are defined by event
schemas that declare or extend a namespace, which contains one or more related
event types or their extensions. For example, this document defines two event
schemas for two generic event namespaces <tt>loglevel</tt> and <tt>simulation</tt> (see
<xref target="generic-event-schema"/>).</t>
    </section>
    <section anchor="abstract-logfile">
      <name>Abstract LogFile Class</name>
      <t>A Log file is intended to contain a collection of events that are in some way
related. An abstract LogFile class containing fields common to all log files is
defined in <xref target="abstract-logfile-def"/>. Each concrete log file schema derives from
this using the CDDL unwrap operator (~) and can extend it by defining semantics
and any custom fields.</t>
      <figure anchor="abstract-logfile-def">
        <name>LogFile definition</name>
        <sourcecode type="cddl"><![CDATA[
LogFile = {
    file_schema: text
    serialization_format: text
    ? title: text
    ? description: text
}
]]></sourcecode>
      </figure>
      <t>The required "file_schema" field identifies the concrete log file schema. It
<bcp14>MUST</bcp14> have a value that is an absolute URI; see <xref target="schema-uri"/> for rules and
guidance.</t>
      <t>The required "serialization_format" field indicates the serialization
format using a media type <xref target="RFC2046"/>. It is case-insensitive.</t>
      <t>In order to make it easier to parse and identify qlog files and their
serialization format, the "file_schema" and "serialization_format" fields and
their values <bcp14>SHOULD</bcp14> be in the first 256 characters/bytes of the resulting log
file.</t>
      <t>The optional "title" and "description" fields provide additional free-text
information about the file.</t>
      <section anchor="schema-uri">
        <name>Concrete Log File Schema URIs</name>
        <t>Concrete log file schemas <bcp14>MUST</bcp14> identify themselves using a URI <xref target="RFC3986"/>.</t>
        <t>Log file schemas defined by RFCs <bcp14>MUST</bcp14> register a URI in the "qlog log file
schema URIs" registry and <bcp14>SHOULD</bcp14> use a URN of the form
<tt>urn:ietf:params:qlog:file:&lt;schema-identifier&gt;</tt>, where <tt>&lt;schema-identifier&gt;</tt> is
a globally-unique text name using only characters in the URI unreserved range;
see <xref section="2.3" sectionFormat="of" target="RFC3986"/>. This document registers
<tt>urn:ietf:params:qlog:file:contained</tt> (<xref target="qlog-file-schema"/>) and
<tt>urn:ietf:params:qlog:file:sequential</tt> (<xref target="qlog-file-seq-schema"/>).</t>
        <t>Private or non-standard log file schemas <bcp14>MAY</bcp14> register a URI in the "qlog log
file schema URIs" registry but <bcp14>MUST NOT</bcp14> use a URN of the form
<tt>urn:ietf:params:qlog:file:&lt;schema-identifier&gt;</tt>. URIs that contain a domain name
<bcp14>SHOULD</bcp14> also contain a month-date in the form mmyyyy. For example,
"https://example.org/072024/globallyuniquelogfileschema". The definition of the
log file schema and assignment of the URI <bcp14>MUST</bcp14> have been authorized by the owner
of the domain name on or very close to that date. This avoids problems when
domain names change ownership. The URI does not need to be dereferencable,
allowing for confidential use or to cover the case where the log file schema
continues to be used after the organization that defined them ceases to exist.</t>
        <t>The "qlog log file schema URIs" registry operates under the Expert Review
policy, per <xref section="4.5" sectionFormat="of" target="RFC8126"/>.  When reviewing requests, the expert
<bcp14>MUST</bcp14> check that the URI is appropriate to the concrete log file schema and
satisfies the requirements in this section. A request to register a private or
non-standard log file schema URI using a URN of the form
<tt>urn:ietf:params:qlog:file:&lt;schema-identifier&gt;</tt> <bcp14>MUST</bcp14> be rejected.</t>
        <t>Registration requests should use the template defined in <xref target="iana"/>.</t>
      </section>
    </section>
    <section anchor="qlog-file-schema">
      <name>QlogFile schema</name>
      <t>A qlog file using the QlogFile schema can contain several individual traces and
logs from multiple vantage points that are in some way related. The top-level
element in this schema defines only a small set of "header" fields and an array
of component traces. This is defined in <xref target="qlog-file-def"/> as:</t>
      <figure anchor="qlog-file-def">
        <name>QlogFile definition</name>
        <sourcecode type="cddl"><![CDATA[
QlogFile = {
    ~LogFile
    ? traces: [+ Trace /
                TraceError]
}
]]></sourcecode>
      </figure>
      <t>The QlogFile schema URI is <tt>urn:ietf:params:qlog:file:contained</tt>.</t>
      <t>QlogFile extends LogFile using the CDDL unwrap operator (~), which copies the
fields presented in <xref target="abstract-logfile"/>. Additionally, the optional "traces"
field contains an array of qlog traces (<xref target="trace"/>), each of which contain
metadata and an array of qlog events (<xref target="abstract-event"/>).</t>
      <t>The default serialization format for QlogFile is JSON; see <xref target="format-json"/> for
guidance on populating the "serialization_format" field and other
considerations. Where a qlog file is serialized to a JSON format, one of the
downsides is that it is inherently a non-streamable format. Put differently, it
is not possible to simply append new qlog events to a log file without "closing"
this file at the end by appending "]}]}". Without these closing tags, most JSON
parsers will be unable to parse the file entirely. The alternative QlogFileSeq
(<xref target="qlog-file-seq-schema"/>) is better suited to streaming use cases.</t>
      <t>JSON serialization example:</t>
      <figure anchor="qlog-file-ex">
        <name>QlogFile example</name>
        <artwork><![CDATA[
{
    "file_schema": "urn:ietf:params:qlog:file:contained",
    "serialization_format": "application/qlog+json",
    "title": "Name of this particular qlog file (short)",
    "description": "Description for this group of traces (long)",
    "traces": [...]
}
]]></artwork>
      </figure>
      <section anchor="traces">
        <name>Traces</name>
        <t>It can be advantageous to group several related qlog traces together in a single
file. For example, it is possible to simultaneously perform logging on the
client, on the server, and on a single point on their common network path. For
analysis, it is useful to aggregate these three individual traces together into
a single file, so it can be uniquely stored, transferred, and annotated.</t>
        <t>The QlogFile "traces" field is an array that contains a list of individual qlog
traces. When capturing a qlog at a vantage point, it is expected that the traces
field contains a single entry. Files can be aggregated, for example as part of a
post-processing operation, by copying the traces in component to files into the
combined "traces" array of a new, aggregated qlog file.</t>
      </section>
      <section anchor="trace">
        <name>Trace</name>
        <t>The exact conceptual definition of a Trace can be fluid. For example, a trace
could contain all events for a single connection, for a single endpoint, for a
single measurement interval, for a single protocol, etc. In the normal use case
however, a trace is a log of a single data flow collected at a single location
or vantage point. For example, for QUIC, a single trace only contains events for
a single logical QUIC connection for either the client or the server.</t>
        <t>A Trace contains some metadata in addition to qlog events, defined in
<xref target="trace-def"/> as:</t>
        <figure anchor="trace-def">
          <name>Trace definition</name>
          <sourcecode type="cddl"><![CDATA[
Trace = {
    ? title: text
    ? description: text
    ? common_fields: CommonFields
    ? vantage_point: VantagePoint
    event_schemas: [+text]
    events: [* Event]
}
]]></sourcecode>
        </figure>
        <t>The optional "title" and "description" fields provide additional free-text
information about the trace.</t>
        <t>The optional "common_fields" field is described in <xref target="common-fields"/>.</t>
        <t>The optional "vantage_point" field is described in <xref target="vantage-point"/>.</t>
        <t>The required "event_schemas" field contains event schema URIs that identify
concrete event namespaces and their associated types recorded in the "events"
field. Requirements and guidelines are defined in <xref target="event-types-and-schema"/>.</t>
        <t>The semantics and context of the trace can mainly be deduced from the entries in
the "common_fields" list and "vantage_point" field.</t>
        <t>JSON serialization example:</t>
        <figure anchor="trace-ex">
          <name>Trace example</name>
          <artwork><![CDATA[
{
    "title": "Name of this particular trace (short)",
    "description": "Description for this trace (long)",
    "common_fields": {
        "ODCID": "abcde1234",
        "time_format": "relative_to_epoch",
        "reference_time": {
            "clock_type": "system",
            "epoch": "1970-01-01T00:00:00.000Z"
        },
    },
    "vantage_point": {
        "name": "backend-67",
        "type": "server"
    },
    "event_schemas": ["urn:ietf:params:qlog:events:quic"],
    "events": [...]
}
]]></artwork>
        </figure>
      </section>
      <section anchor="traceerror">
        <name>TraceError</name>
        <t>A TraceError indicates that an attempt to find/convert a file for inclusion in
the aggregated qlog was made, but there was an error during the process. Rather
than silently dropping the erroneous file, it can be explicitly included in the
qlog file as an entry in the "traces" array, defined in <xref target="trace-error-def"/> as:</t>
        <figure anchor="trace-error-def">
          <name>TraceError definition</name>
          <sourcecode type="cddl"><![CDATA[
TraceError = {
    error_description: text

    ; the original URI used for attempted find of the file
    ? uri: text
    ? vantage_point: VantagePoint
}
]]></sourcecode>
        </figure>
        <t>JSON serialization example:</t>
        <figure anchor="trace-error-ex">
          <name>TraceError example</name>
          <artwork><![CDATA[
{
    "error_description": "File could not be found",
    "uri": "/srv/traces/today/latest.qlog",
    "vantage_point": { type: "server" }
}
]]></artwork>
        </figure>
        <t>Note that another way to combine events of different traces in a single qlog file
is through the use of the "group_id" field, discussed in <xref target="group-ids"/>.</t>
      </section>
    </section>
    <section anchor="qlog-file-seq-schema">
      <name>QlogFileSeq schema</name>
      <t>A qlog file using the QlogFileSeq schema can be serialized to a streamable JSON
format called JSON Text Sequences (JSON-SEQ) (<xref target="RFC7464"/>). The top-level
element in this schema defines only a small set of "header" fields and a single
component trace. This is defined in <xref target="qlog-file-seq-def"/> as:</t>
      <figure anchor="qlog-file-seq-def">
        <name>QlogFileSeq definition</name>
        <sourcecode type="cddl"><![CDATA[
QlogFileSeq = {
    ~LogFile
    trace: TraceSeq
}
]]></sourcecode>
      </figure>
      <t>The QlogFileSeq schema URI is <tt>urn:ietf:params:qlog:file:sequential</tt>.</t>
      <t>QlogFileSeq extends LogFile using the CDDL unwrap operator (~), which copies the
fields presented in <xref target="abstract-logfile"/>. Additionally, the required "trace"
field contains a singular trace (<xref target="trace"/>). All qlog events in the file are
related to this trace; see <xref target="traceseq"/>.</t>
      <t>See <xref target="format-json-seq"/> for guidance on populating the "serialization_format"
field and other serialization considerations.</t>
      <t>JSON-SEQ serialization example:</t>
      <figure anchor="json-seq-ex">
        <name>Top-level element</name>
        <artwork><![CDATA[
// list of qlog events, serialized in accordance with RFC 7464,
// starting with a Record Separator character and ending with a
// newline.
// For display purposes, Record Separators are rendered as <RS>

<RS>{
    "file_schema": "urn:ietf:params:qlog:file:sequential",
    "serialization_format": "application/qlog+json-seq",
    "title": "Name of JSON Text Sequence qlog file (short)",
    "description": "Description for this trace file (long)",
    "trace": {
      "common_fields": {
        "group_id":"127ecc830d98f9d54a42c4f0842aa87e181a",
        "time_format": "relative_to_epoch",
        "reference_time": {
            "clock_type": "system",
            "epoch": "1970-01-01T00:00:00.000Z"
        },
      },
      "vantage_point": {
        "name":"backend-67",
        "type":"server"
      },
      "event_schemas": ["urn:ietf:params:qlog:events:quic",
                        "urn:ietf:params:qlog:events:http3"]
    }
}
<RS>{"time": 2, "name": "quic:parameters_set", "data": { ... } }
<RS>{"time": 7, "name": "quic:packet_sent", "data": { ... } }
...
]]></artwork>
      </figure>
      <section anchor="traceseq">
        <name>TraceSeq</name>
        <t>TraceSeq is used with QlogFileSeq. It is conceptually similar to a Trace, with
the exception that qlog events are not contained within it, but rather appended
after it in a QlogFileSeq.</t>
        <figure anchor="trace-seq-def">
          <name>TraceSeq definition</name>
          <sourcecode type="cddl"><![CDATA[
TraceSeq = {
    ? title: text
    ? description: text
    ? common_fields: CommonFields
    ? vantage_point: VantagePoint
    event_schemas: [+text]
}
]]></sourcecode>
        </figure>
      </section>
    </section>
    <section anchor="vantage-point">
      <name>VantagePoint</name>
      <t>A VantagePoint describes the vantage point from which a trace originates,
defined in <xref target="vantage-point-def"/> as:</t>
      <figure anchor="vantage-point-def">
        <name>VantagePoint definition</name>
        <sourcecode type="cddl"><![CDATA[
VantagePoint = {
    ? name: text
    type: VantagePointType
    ? flow: VantagePointFlow
}

; client = endpoint which initiates the connection
; server = endpoint which accepts the connection
; network = observer in between client and server
VantagePointType = "client" /
                   "server" /
                   "network" /
                   "unknown"

; client = vantage point follows client data flow semantics
;          (a "packet sent" event goes towards the server)
; server = vantage point follows server data flow semantics
;          (a "packet sent" event goes towards the client)
; unknown = the flow's direction is unknown
VantagePointFlow = "client" /
                   "server" /
                   "unknown"
]]></sourcecode>
      </figure>
      <t>JSON serialization examples:</t>
      <figure anchor="vantage-point-ex">
        <name>VantagePoint example</name>
        <artwork><![CDATA[
{
    "name": "aioquic client",
    "type": "client"
}

{
    "name": "wireshark trace",
    "type": "network",
    "flow": "client"
}
]]></artwork>
      </figure>
      <t>The flow field is only required if the type is "network" (for example, the trace
is generated from a packet capture). It is used to disambiguate events like
"packet sent" and "packet received". This is indicated explicitly because for
multiple reasons (e.g., privacy) data from which the flow direction can be
otherwise inferred (e.g., IP addresses) might not be present in the logs.</t>
      <t>Meaning of the different values for the flow field:</t>
      <ul spacing="normal">
        <li>"client" indicates that this vantage point follows client data flow semantics (a
"packet sent" event goes in the direction of the server).</li>
        <li>"server" indicates that this vantage point follows server data flow semantics (a
"packet sent" event goes in the direction of the client).</li>
        <li>"unknown" indicates that the flow's direction is unknown.</li>
      </ul>
      <t>Depending on the context, tools confronted with "unknown" values in the
vantage_point can either try to heuristically infer the semantics from
protocol-level domain knowledge (e.g., in QUIC, the client always sends the
first packet) or give the user the option to switch between client and server
perspectives manually.</t>
    </section>
    <section anchor="abstract-event">
      <name>Abstract Event Class</name>
      <t>Events are logged at a time instant and convey specific details of the logging
use case. An abstract Event class containing fields common to all events is
defined in <xref target="event-def"/>.</t>
      <figure anchor="event-def">
        <name>Event definition</name>
        <sourcecode type="cddl"><![CDATA[
Event = {
    time: float64
    name: text
    data: $ProtocolEventData
    ? tuple: TupleID
    ? time_format: TimeFormat
    ? group_id: GroupID
    ? system_info: SystemInformation

    ; events can contain any amount of custom fields
    * text => any
}
]]></sourcecode>
      </figure>
      <t>Each qlog event <bcp14>MUST</bcp14> contain the mandatory fields: "time"
(<xref target="time-based-fields"/>), "name" (<xref target="event-types-and-schema"/>), and "data"
(<xref target="data-field"/>).</t>
      <t>Each qlog event is an instance of a concrete event type that derives from the
abstract Event class; see <xref target="event-types-and-schema"/>. They extend it by defining
the specific values and semantics of common fields, in particular the <tt>name</tt> and
<tt>data</tt> fields. Furthermore, they can optionally add custom fields.</t>
      <t>Each qlog event <bcp14>MAY</bcp14> contain the optional fields: "time_format"
(<xref target="time-based-fields"/>), tuple (<xref target="tuple-field"/>), and "group_id"
(<xref target="group-ids"/>).</t>
      <t>Multiple events can appear in a Trace or TraceSeq and they might contain fields
with identical values. It is possible to optimize out this duplication using
"common_fields" (<xref target="common-fields"/>).</t>
      <t>Example qlog event:</t>
      <figure anchor="event-ex">
        <name>Event example</name>
        <artwork><![CDATA[
{
    "time": 1553986553572,

    "name": "quic:packet_sent",
    "data": { ... },

    "group_id": "127ecc830d98f9d54a42c4f0842aa87e181a",

    "time_format": "relative_to_epoch",

    "ODCID": "127ecc830d98f9d54a42c4f0842aa87e181a"
}
]]></artwork>
      </figure>
      <section anchor="time-based-fields">
        <name>Timestamps</name>
        <t>Each event <bcp14>MUST</bcp14> include a "time" field to indicate the timestamp that it
occurred. It is a duration measured from some point in time; its units depend on
the type of clock chosen and system used. The time field is a float64 and it is
typically used to represent a duration in milliseconds, with a fractional component
to microsecond or nanosecond resolution.</t>
        <t>There are several options for generating and logging timestamps, these are
governed by the ReferenceTime type (optionally included in the "reference_time"
field contained in a trace's "common_fields" (<xref target="common-fields"/>)) and TimeFormat
type (optionally included in the "time_format" field contained in the event
itself, or a trace's "common_fields").</t>
        <t>There is no requirement that events in the same trace use the same time format.
However, using a single time format for related events can make them easier to
analyze.</t>
        <t>The reference time governs from which point in time the "time" field values are measured and is defined as:</t>
        <figure anchor="reference-time-def">
          <name>ReferenceTime definition</name>
          <sourcecode type="cddl"><![CDATA[
ReferenceTime = {
    clock_type: "system" / "monotonic" / text .default "system"
    epoch: RFC3339DateTime / "unknown"

    ? wall_clock_time: RFC3339DateTime
}

RFC3339DateTime = text .default "1970-01-01T00:00:00.000Z"
]]></sourcecode>
        </figure>
        <t>The required "clock_type" field represents the type of clock used for time
measurements. The value "system" represents a clock that uses system time,
commonly measured against a chosen or well-known epoch. However, depending on
the system, system time can potentially jump forward or back. In contrast, a
clock using monotonic time is generally guaranteed to never go backwards. The
value "monotonic" represents such a clock.</t>
        <t>The required "epoch" field is the start of the ReferenceTime. When using the
"system" clock type, the epoch field <bcp14>SHOULD</bcp14> have a date/time value using the
format defined in <xref target="RFC3339"/>. However, the value "unknown" <bcp14>MAY</bcp14> be used.</t>
        <t>When using the "monotonic" clock type, the epoch field <bcp14>MUST</bcp14> have the value
"unknown".</t>
        <t>The optional "wall_clock_time" field can be used to provide an approximate
date/time value that logging commenced at if the epoch value is "unknown". It
uses the format defined in <xref target="RFC3339"/>. Note that conversion of timestamps to
calendar time based on wall clock times cannot be safely relied on.</t>
        <t>The time format details how "time" values are encoded relative to the reference
time and is defined as:</t>
        <figure anchor="time-format-def">
          <name>TimeFormat definition</name>
          <sourcecode type="cddl"><![CDATA[
TimeFormat = "relative_to_epoch" /
             "relative_to_previous_event" .default "relative_to_epoch"
]]></sourcecode>
        </figure>
        <dl>
          <dt>relative_to_epoch:</dt>
          <dd>
            <t>A duration relative to the ReferenceTime "epoch" field. This approach uses the
largest amount of characters. It is good for stateless loggers. This is the default value of the "time_format" field.</t>
          </dd>
          <dt>relative_to_previous_event:</dt>
          <dd>
            <t>A delta-encoded value, based on the previously logged value. The first event
in a trace is always relative to the ReferenceTime. This approach uses the
least amount of characters. It is suitable for stateful loggers.</t>
          </dd>
        </dl>
        <t>Events in each individual trace <bcp14>SHOULD</bcp14> be logged in strictly ascending timestamp
order (though not necessarily absolute value, for the "relative_to_previous_event"
format). Tools <bcp14>MAY</bcp14> sort all events on the timestamp before processing them,
though are not required to (as this could impose a significant processing
overhead). This can be a problem especially for multi-threaded and/or streaming
loggers, which could consider using a separate post-processor to order qlog events
in time if a tool does not provide this feature.</t>
        <t>Tools <bcp14>SHOULD NOT</bcp14> assume the ability to derive the absolute calendar timestamp of
an event from qlog traces. Tools should not rely on timestamps to be consistent
across traces, even those generated by the same logging endpoint. For reasons of
privacy, the reference time <bcp14>MAY</bcp14> have minimization or anonymization applied.</t>
        <t>Example of a log using the relative_to_epoch format:</t>
        <figure anchor="rel-epoch-time-ex">
          <name>Relative to epoch timestamps</name>
          <artwork><![CDATA[
"common_fields": {
    "time_format": "relative_to_epoch",
    "reference_time": {
          "clock_type": "system",
          "epoch": "1970-01-01T00:00:00.000Z"
    },
},
"events": [
  {
    "time": 1553986553572,
    "name": "quic:packet_received",
    "data": { ... },
  },
  {
    "time": 1553986553577,
    "name": "quic:packet_received",
    "data": { ... },
  },
  {
    "time": 1553986553587,
    "name": "quic:packet_received",
    "data": { ... },
  },
  {
    "time": 1553986553597,
    "name": "quic:packet_received",
    "data": { ... },
  },
]
]]></artwork>
        </figure>
        <t>Example of a log using the relative_to_previous_event format:</t>
        <figure anchor="rel-last-event-time-ex">
          <name>Relative-to-previous-event timestamps</name>
          <artwork><![CDATA[
"common_fields": {
    "time_format": "relative_to_previous_event",
    "reference_time": {
          "clock_type": "system",
          "epoch": "1970-01-01T00:00:00.000Z"
    },
},
"events": [
  {
    "time": 1553986553572,
    "name": "quic:packet_received",
    "data": { ... },
  },
  {
    "time": 5,
    "name": "quic:packet_received",
    "data": { ... },
  },
  {
    "time": 10,
    "name": "quic:packet_received",
    "data": { ... },
  },
  {
    "time": 10,
    "name": "quic:packet_received",
    "data": { ... },
  },
]
]]></artwork>
        </figure>
        <t>Example of a monotonic log using the relative_to_epoch format:</t>
        <figure anchor="mono-time-ex">
          <name>Monotonic timestamps</name>
          <artwork><![CDATA[
"common_fields": {
    "time_format": "relative_to_epoch",
    "reference_time": {
          "clock_type": "monotonic",
          "epoch": "unknown",
          "wall_clock_time": "2024-10-10T10:10:10.000Z"
    },
},
"events": [
  {
    "time": 0,
    "name": "quic:packet_received",
    "data": { ... },
  },
  {
    "time": 5,
    "name": "quic:packet_received",
    "data": { ... },
  },
  {
    "time": 15,
    "name": "quic:packet_received",
    "data": { ... },
  },
  {
    "time": 25,
    "name": "quic:packet_received",
    "data": { ... },
  },
]
]]></artwork>
        </figure>
      </section>
      <section anchor="tuple-field">
        <name>Tuple</name>
        <t>A qlog event is typically associated with a single network "path", which is
usually aligned with a four-tuple of IP addresses and ports. The optional
"tuple" field (of type TupleID) identifies a single network four-tuple and can
be used to associate individual events with a specific "path".</t>
        <t>Definition:</t>
        <figure anchor="tuple-def">
          <name>TupleID definition</name>
          <sourcecode type="cddl"><![CDATA[
TupleID = text .default ""
]]></sourcecode>
        </figure>
        <t>Because tuple definitions can depend and vary based on the underlying protocols
and mechanisms used, this document intentionally does not define further how to
choose this identifier's value per tuple or how to log other parameters that can
be associated with such a tuple. This is expected to be defined by extension
schemas that want to use the tuple field. Implementers are for example free to
encode or serialize tuple information directly into the TupleID's contents or to
log associated info in a separate event. For example, QUIC has the
"tuple_assigned" event to couple the TupleID contents to a specific tuple
configuration, see <xref section="4.7" sectionFormat="of" target="QLOG-QUIC"/>.</t>
        <t>The "tuple" field is intentionally marked as optional, as there can be many
practical or logical reasons why implementations might not want to log it for
every event. For example, the TupleID contents will usually be the same for all
events in a single connection and bears no repeating. Similarly, application
level protocols will typically not care which tuple a specific frame is
sent/received on.</t>
        <t>However, in some situations, such as during QUIC's Connection Migration or when
a transport protocol can use multiple paths, it is useful to be able to split
events across multiple (concurrent) tuples and/or paths, especially for
packet-level events. Even in those cases however, it is allowed to log the
"tuple" field only for some events in the trace when salient (for example only
when QUIC PATH_CHALLENGE and PATH_RESPONSE frames are involved, or when the
first packet on a new path is sent/received) and omit it when not.</t>
      </section>
      <section anchor="group-ids">
        <name>Grouping</name>
        <t>As discussed in <xref target="trace"/>, a single qlog file can contain several traces taken
from different vantage points. However, a single trace from one endpoint can also
contain events from a variety of sources. For example, a server implementation
might choose to log events for all incoming connections in a single large
(streamed) qlog file. As such, a method for splitting up events belonging
to separate logical entities is required.</t>
        <t>The simplest way to perform this splitting is by associating a "group id" to
each event that indicates to which conceptual "group" each event belongs. A
post-processing step can then extract events per group. However, this group
identifier can be highly protocol and context-specific. In the example above,
the QUIC "Original Destination Connection ID" could be used to uniquely identify
a connection. As such, they might add a "ODCID" field to each event.
Additionally, a service providing different levels of Quality of Service (QoS)
to their users might wish to group connections per QoS level applied. They might
instead prefer a "qos" field.</t>
        <t>As such, to provide consistency and ease of tooling in cross-protocol and
cross-context setups, qlog instead defines the common "group_id" field, which
contains a string value. Implementations are free to use their preferred string
serialization for this field, so long as it contains a unique value per logical
group. Some examples can be seen in <xref target="group-id-ex"/>.</t>
        <figure anchor="group-id-def">
          <name>GroupID definition</name>
          <sourcecode type="cddl"><![CDATA[
GroupID = text
]]></sourcecode>
        </figure>
        <t>JSON serialization example for events grouped either by QUIC Connection IDs, or
according to an endpoint-specific Quality of Service (QoS) logic that includes
the service level:</t>
        <figure anchor="group-id-ex">
          <name>GroupID example</name>
          <artwork><![CDATA[
"events": [
    {
        "time": 1553986553579,
        "group_id": "qos=premium",
        "name": "quic:packet_received",
        "data": { ... }
    },
    {
        "time": 1553986553581,
        "group_id": "127ecc830d98f9d54a42c4f0842aa87e181a",
        "name": "quic:packet_sent",
        "data": { ... }
    }
]
]]></artwork>
        </figure>
        <t>Note that in some contexts (for example a transport protocol that can use
multiple paths) it might make sense to add additional contextual per-event
fields (for example TupleID, see <xref target="tuple-field"/>), rather than use the group_id
field for that purpose.</t>
        <t>Note also that, typically, a single trace only contains events belonging to a
single logical group (for example, an individual QUIC connection). As such,
instead of logging the "group_id" field with an identical value for each event
instance, this field is typically logged once in "common_fields", see
<xref target="common-fields"/>.</t>
      </section>
      <section anchor="systeminformation">
        <name>SystemInformation</name>
        <t>The "system_info" field can be used to record system-specific details related to an
event. This is useful, for instance, where an application splits work across
CPUs, processes, or threads and events for a single trace occur on potentially
different combinations thereof. Each field is optional to support deployment
diversity.</t>
        <sourcecode type="cddl"><![CDATA[
SystemInformation = {
  ? processor_id: uint32
  ? process_id: uint32
  ? thread_id: uint32
}
]]></sourcecode>
      </section>
      <section anchor="common-fields">
        <name>CommonFields</name>
        <t>As discussed in the previous sections, information for a typical qlog event
varies in three main fields: "time", "name" and associated data. Additionally,
there are also several more advanced fields that allow mixing events from
different protocols and contexts inside of the same trace (for example
"group_id"). In most "normal" use cases however, the values of these advanced
fields are consistent for each event instance (for example, a single trace
contains events for a single QUIC connection).</t>
        <t>To reduce file size and make logging easier, qlog uses the "common_fields" list
to indicate those fields and their values that are shared by all events in this
component trace. This prevents these fields from being logged for each individual
event. An example of this is shown in <xref target="common-fields-ex"/>.</t>
        <figure anchor="common-fields-ex">
          <name>CommonFields example</name>
          <artwork><![CDATA[
JSON serialization with repeated field values
per-event instance:

{
    "events": [{
            "group_id": "127ecc830d98f9d54a42c4f0842aa87e181a",
            "time_format": "relative_to_epoch",
            "reference_time": {
              "clock_type": "system",
              "epoch": "2019-03-29T22:55:53.572Z"
            },

            "time": 2,
            "name": "quic:packet_received",
            "data": { ... }
        },{
            "group_id": "127ecc830d98f9d54a42c4f0842aa87e181a",
            "time_format": "relative_to_epoch",
            "reference_time": {
              "clock_type": "system",
              "epoch": "2019-03-29T22:55:53.572Z"
            },

            "time": 7,
            "name": "http:frame_parsed",
            "data": { ... }
        }
    ]
}

JSON serialization with repeated field values instead
extracted to common_fields:

{
    "common_fields": {
        "group_id": "127ecc830d98f9d54a42c4f0842aa87e181a",
        "time_format": "relative_to_epoch",
        "reference_time": {
            "clock_type": "system",
            "epoch": "2019-03-29T22:55:53.572Z"
        },
    },
    "events": [
        {
            "time": 2,
            "name": "quic:packet_received",
            "data": { ... }
        },{
            "time": 7,
            "name": "http:frame_parsed",
            "data": { ... }
        }
    ]
}
]]></artwork>
        </figure>
        <t>The "common_fields" field is a generic dictionary of key-value pairs, where the
key is always a string and the value can be of any type, but is typically also a
string or number. As such, unknown entries in this dictionary <bcp14>MUST</bcp14> be disregarded
by the user and tools (i.e., the presence of an unknown field is explicitly NOT an
error).</t>
        <t>The list of default qlog fields that are typically logged in common_fields (as
opposed to as individual fields per event instance) are shown in the listing
below:</t>
        <figure anchor="common-fields-def">
          <name>CommonFields definition</name>
          <sourcecode type="cddl"><![CDATA[
CommonFields = {
    ? tuple: TupleID
    ? time_format: TimeFormat
    ? reference_time: ReferenceTime
    ? group_id: GroupID
    * text => any
}
]]></sourcecode>
        </figure>
        <t>Tools <bcp14>MUST</bcp14> be able to deal with these fields being defined either on each event
individually or combined in common_fields. Note that if at least one event in a
trace has a different value for a given field, this field <bcp14>MUST NOT</bcp14> be added to
common_fields but instead defined on each event individually. Good examples of such
fields are "time" and "data", which are divergent by nature.</t>
      </section>
    </section>
    <section anchor="event-types-and-schema">
      <name>Concrete Event Types and Event Schemas</name>
      <t>Concrete event types, as well as related data types, are grouped in event
namespaces which in turn are defined in one or multiple event schemas.</t>
      <t>As an example, the <tt>QUICPacketSent</tt> and <tt>QUICPacketHeader</tt> event and data types
would be part of the <tt>quic</tt> namespace, which is defined in an event schema with
URI <tt>urn:ietf:params:qlog:events:quic</tt>. A later extension that adds a new QUIC
frame <tt>QUICNewFrame</tt> would also be part of the <tt>quic</tt> namespace, but defined in
a new event schema with URI
<tt>urn:ietf:params:qlog:events:quic#new-frame-extension</tt>. Similarly, the first
document containing qlog event definitions for a new hypothetical protocol
called "IPoAC" would be part of the new event namespace <tt>ipoac</tt> which is defined
as part of the new Event Schema URI <tt>urn:ietf:params:qlog:events:ipoac</tt>, both of
which are defined and registered in that first document.</t>
      <t>Concrete event types <bcp14>MUST</bcp14> belong to a single event namespace and <bcp14>MUST</bcp14> have a
registered non-empty identifier of type <tt>text</tt>.</t>
      <t>New namespaces <bcp14>MUST</bcp14> have a registered non-empty globally-unique text identifier
using only characters in the URI unreserved range; see <xref section="2.3" sectionFormat="of" target="RFC3986"/>. Namespaces are mutable and <bcp14>MAY</bcp14> be extended with new events.</t>
      <t>The value of a qlog event <tt>name</tt> field <bcp14>MUST</bcp14> be the concatenation of namespace
identifier, colon (':'), and event type identifier (for example:
quic:packet_sent). The resulting concatenation <bcp14>MUST</bcp14> be globally unique, so log
files can contain events from multiple event schemas without the risk of name
collisions.</t>
      <t>A single event schema can contain exactly one of the below:</t>
      <ul spacing="normal">
        <li>A definition for a new event namespace</li>
        <li>An extension of an existing namespace (adding new events/data types and/or
extending existing events/data types within the namespace with new fields)</li>
      </ul>
      <t>A single document can define multiple event schemas (for example see
<xref target="generic-event-schema"/>).</t>
      <t>An event schema <bcp14>MUST</bcp14> have a single URI <xref target="RFC3986"/> that <bcp14>MUST</bcp14> be absolute. The
URI <bcp14>MUST</bcp14> include the namespace identifier. Event schemas that extend an existing
namespace <bcp14>MUST</bcp14> furthermore include a non-empty globally-unique "extension"
identifier using a URI fragment (characters after a "#" in the URI) using only
characters in the URI unreserved range; see <xref section="2.3" sectionFormat="of" target="RFC3986"/>.
Registration guidance and requirement for event schema URIs are provided in
<xref target="event-schema-reg"/>. Event schemas by themselves are immutable once defined and
<bcp14>MUST NOT</bcp14> be extended.</t>
      <t>Implementations that record concrete event types <bcp14>SHOULD</bcp14> list all event schemas
in use in a specific trace. This is achieved by including the appropriate URIs
in the <tt>event_schemas</tt> field of the Trace (<xref target="trace"/>) and TraceSeq
(<xref target="traceseq"/>) classes. The <tt>event_schemas</tt> is a hint to tools about the
possible event namespaces, their extensions, and the event types/data types
contained therein, that a qlog trace might contain. The trace <bcp14>MAY</bcp14> still contain
event types that do not belong to a listed event schema. Inversely, not all
event types associated with an event schema listed in <tt>event_schemas</tt> are
guaranteed to be logged in a qlog trace. Tools <bcp14>MUST NOT</bcp14> treat either of these as
an error; see <xref target="tooling"/>.</t>
      <t>In the following hypothetical example, a qlog trace contains events belonging to:</t>
      <ul spacing="normal">
        <li>The two event namespaces defined by event schemas in this document
(<xref target="generic-event-schema"/>).</li>
        <li>Events in a namespace named <tt>rick</tt> specified in a hypothetical RFC</li>
        <li>Extensions to the <tt>rick</tt> namespace defined in two separate new event schemas
(with URI extension identifiers <tt>astley</tt> and <tt>moranis</tt>)</li>
        <li>Events from three private event schemas, detailing definitions for and
extensions to two namespaces (<tt>pickle</tt> and <tt>cucumber</tt>)</li>
      </ul>
      <t>The standardized schema URIs use a URN format, the private schemas use a URI
with domain name.</t>
      <figure anchor="event-schemas">
        <name>Example event_schemas serialization</name>
        <artwork><![CDATA[
"event_schemas": [
  "urn:ietf:params:qlog:events:loglevel",
  "urn:ietf:params:qlog:events:simulation",
  "urn:ietf:params:qlog:events:rick",
  "urn:ietf:params:qlog:events:rick#astley",
  "urn:ietf:params:qlog:events:rick#moranis",
  "https://example.com/032024/pickle.html",
  "https://example.com/032024/pickle.html#lilly",
  "https://example.com/032025/cucumber.html"
]
]]></artwork>
      </figure>
      <section anchor="event-schema-reg">
        <name>Event Schema URIs</name>
        <t>Event schemas defined by RFCs <bcp14>MUST</bcp14> register all namespaces and concrete event
types they contain in the "qlog event schema URIs" registry.</t>
        <t>Event schemas that define a new namespace <bcp14>SHOULD</bcp14> use a URN of the form
<tt>urn:ietf:params:qlog:events:&lt;namespace identifier&gt;</tt>, where <tt>&lt;namespace
identifier&gt;</tt> is globally unique. For example, this document defines two event
schemas (<xref target="generic-event-schema"/>) for two namespaces: <tt>loglevel</tt> and
<tt>simulation</tt>.
Other examples of event schema define the <tt>quic</tt> <xref target="QLOG-QUIC"/> and <tt>http3</tt>
          <xref target="QLOG-H3"/> namespaces.</t>
        <t>Event schemas that extend an existing namespace <bcp14>SHOULD</bcp14> use a URN of the form
<tt>urn:ietf:params:qlog:events:&lt;namespace identifier&gt;#&lt;extension identifier&gt;</tt>,
where the combination of <tt>&lt;namespace identifier&gt;</tt> and <tt>&lt;extension identifier&gt;</tt>
is globally unique.</t>
        <t>Private or non-standard event schemas <bcp14>MAY</bcp14> be registered in the "qlog event
schema URIs" registry but <bcp14>MUST NOT</bcp14> use a URN of the forms outlined above. URIs
that contain a domain name <bcp14>SHOULD</bcp14> also contain a month-date in the form mmyyyy.
For example, "https://example.org/072024/customeventschema#customextension". The
definition of the event schema and assignment of the URI <bcp14>MUST</bcp14> have been
authorized by the owner of the domain name on or very close to that date. This
avoids problems when domain names change ownership. The URI does not need to be
dereferencable, allowing for confidential use or to cover the case where the
event schemas continue to be used after the organization that defined them
ceases to exist.</t>
        <t>The "qlog event schema URIs" registry operates under the Expert Review policy,
per <xref section="4.5" sectionFormat="of" target="RFC8126"/>.  When reviewing requests, the expert <bcp14>MUST</bcp14> check
that the URI is appropriate to the event schema and satisfies the requirements
in <xref target="event-types-and-schema"/> and this section. A request to register a private
or non-standard schema URI using a URN of the forms reserved for schemas defined
by an RFC above <bcp14>MUST</bcp14> be rejected.</t>
        <t>Registration requests should use the template defined in <xref target="iana"/>.</t>
      </section>
      <section anchor="data-field">
        <name>Extending the Data Field</name>
        <t>An event's "data" field is a generic key-value map (e.g., JSON object). It
defines the per-event metadata that is to be logged. Its specific subfields and
their semantics are defined per concrete event type. For example, data field
definitions for QUIC and HTTP/3 can be found in <xref target="QLOG-QUIC"/> and <xref target="QLOG-H3"/>.</t>
        <t>In order to keep qlog fully extensible, two separate CDDL extension points
("sockets" or "plugs") are used to fully define data fields.</t>
        <t>Firstly, to allow existing data field definitions to be extended (for example by
adding an additional field needed for a new protocol feature), a CDDL "group
socket" is used. This takes the form of a subfield with a name of <tt>*
$$NAMESPACE-EVENTTYPE-extension</tt>. This field acts as a placeholder that can
later be replaced with newly defined fields by assigning them to the socket with
the <tt>//=</tt> operator. Multiple extensions can be assigned to the same group
socket. An example is shown in <xref target="groupsocket-extension-example"/>.</t>
        <figure anchor="groupsocket-extension-example">
          <name>Example of using a generic CDDL group socket to extend an existing event data definition</name>
          <artwork><![CDATA[
; original definition in event schema A
MyNSEventX = {
    field_a: uint8

    * $$myns-eventx-extension
}

; later extension of EventX in event schema B
$$myns-eventx-extension //= (
  ? additional_field_b: bool
)

; another extension of EventX in event schema C
$$myns-eventx-extension //= (
  ? additional_field_c: text
)

; if schemas A, B and C are then used in conjunction,
; the combined MyNSEventX CDDL is equivalent to this:
MyNSEventX = {
    field_a: uint8

    ? additional_field_b: bool
    ? additional_field_c: text
}
]]></artwork>
        </figure>
        <t>Secondly, to allow documents to define fully new event data field definitions
(as opposed to extend existing ones), a CDDL "type socket" is used. For this
purpose, the type of the "data" field in the qlog Event type (see <xref target="event-def"/>)
is the extensible <tt>$ProtocolEventData</tt> type. This field acts as an open enum of
possible types that are allowed for the data field. As such, any new event data
field is defined as its own CDDL type and later merged with the existing
<tt>$ProtocolEventData</tt> enum using the <tt>/=</tt> extension operator. Any generic
key-value map type can be assigned to <tt>$ProtocolEventData</tt>. The example in
<xref target="protocoleventdata-def"/> demonstrates <tt>$ProtocolEventData</tt> being extended with
two types.</t>
        <figure anchor="protocoleventdata-def">
          <name>ProtocolEventData extension</name>
          <artwork><![CDATA[
; We define two new concrete events in a new event schema
MyNSEvent1 /= {
    field_1: uint8

    * $$myns-event1-extension
}

MyNSEvent2 /= {
    field_2: bool

    * $$myns-event2-extension
}

; the events are both merged with the existing
; $ProtocolEventData type enum
$ProtocolEventData /= MyNSEvent1 / MyNSEvent2

; the "data" field of a qlog event can now also be of type
; MyNSEvent1 and MyNSEvent2
]]></artwork>
        </figure>
        <t>Event schema defining new qlog events <bcp14>MUST</bcp14> properly extend <tt>$ProtocolEventData</tt>
when defining data fields to enable automated validation of aggregated qlog
schemas. Furthermore, they <bcp14>SHOULD</bcp14> add a <tt>* $$NAMESPACE-EVENTTYPE-extension</tt>
extension field to newly defined event data to allow the new events to be
properly extended by other event schema.</t>
        <t>A combined but purely illustrative example of the use of both extension points
for a conceptual QUIC "packet_sent" event is shown in <xref target="data-ex"/>:</t>
        <figure anchor="data-ex">
          <name>Example of an extended 'data' field for a conceptual QUIC packet_sent event</name>
          <artwork><![CDATA[
; defined in the main QUIC event schema
QUICPacketSent = {
    ? packet_size: uint16
    header: QUICPacketHeader
    ? frames:[* QUICFrame]

    * $$quic-packetsent-extension
}

; Add the event to the global list of recognized qlog events
$ProtocolEventData /= QUICPacketSent

; Defined in a separate event schema that describes a
; theoretical QUIC protocol extension
$$quic-packetsent-extension //= (
  ? additional_field: bool
)

; If both schemas are utilized at the same time,
; the following JSON serialization would pass an automated
; CDDL schema validation check:

{
  "time": 123456,
  "name": "quic:packet_sent",
  "data": {
      "packet_size": 1280,
      "header": {
          "packet_type": "1RTT",
          "packet_number": 123
      },
      "frames": [
          {
              "frame_type": "stream",
              "offset": 456
          },
          {
              "frame_type": "padding"
          }
      ],
      additional_field: true
  }
}
]]></artwork>
        </figure>
        <section anchor="trigger-field">
          <name>Triggers</name>
          <t>It can be useful to understand the cause or trigger of an event. Sometimes,
events are caused by a variety of other events and additional information is
needed to identify the exact details. Commonly, the context of the surrounding
log messages gives a hint about the cause. However, in highly-parallel and
optimized implementations, corresponding log messages might be separated in
time, making it difficult to build an accurate context.</t>
          <t>Including a "trigger" as part of the event itself is one method for providing
fine-grained information without much additional overhead. In circumstances
where a trigger is useful, it is <bcp14>RECOMMENDED</bcp14> for the purpose of consistency that
the event data definition contains an optional field named "trigger", holding a
string value.</t>
          <t>For example, the QUIC "packet_dropped" event (<xref section="5.7" sectionFormat="of" target="QLOG-QUIC"/>)
includes a trigger field that identifies the precise reason why a QUIC packet
was dropped:</t>
          <figure anchor="trigger-ex">
            <name>Trigger example</name>
            <artwork><![CDATA[
QUICPacketDropped = {

    ; Primarily packet_type should be filled here,
    ; as other fields might not be decryptable or parsable
    ? header: PacketHeader
    ? raw: RawInfo
    ? datagram_id: uint32
    ? details: {* text => any}
    ? trigger:
        "internal_error" /
        "rejected" /
        "unsupported" /
        "invalid" /
        "duplicate" /
        "connection_unknown" /
        "decryption_failure" /
        "key_unavailable" /
        "general"

    * $$quic-packetdropped-extension
}
]]></artwork>
          </figure>
        </section>
      </section>
      <section anchor="importance">
        <name>Event Importance Levels</name>
        <t>Depending on how events are designed, it may be that several events allow the
logging of similar or overlapping data. For example the separate QUIC
<tt>connection_started</tt> event overlaps with the more generic
<tt>connection_state_updated</tt>. In these cases, it is not always clear which event
should be logged or used, and which event should take precedence if e.g., both are
present and provide conflicting information.</t>
        <t>To aid in this decision making, qlog defines three event importance levels, in
decreasing order of importance and expected usage:</t>
        <ul spacing="normal">
          <li>Core</li>
          <li>Base</li>
          <li>Extra</li>
        </ul>
        <t>Concrete event types <bcp14>SHOULD</bcp14> define an importance level.</t>
        <t>Core-level events <bcp14>SHOULD</bcp14> be present in all qlog files for a given protocol.
These are typically tied to basic packet and frame parsing and creation, as well
as listing basic internal metrics. Tool implementers <bcp14>SHOULD</bcp14> expect and add
support for these events, though <bcp14>SHOULD NOT</bcp14> expect all Core events to be present
in each qlog trace.</t>
        <t>Base-level events add additional debugging options and <bcp14>MAY</bcp14> be present in qlog
files. Most of these can be implicitly inferred from data in Core events (if
those contain all their properties), but for many it is better to log the events
explicitly as well, making it clearer how the implementation behaves. These
events are for example tied to passing data around in buffers, to how internal
state machines change, and used to help show when decisions are actually made
based on received data. Tool implementers <bcp14>SHOULD</bcp14> at least add support for
showing the contents of these events, if they do not handle them explicitly.</t>
        <t>Extra-level events are considered mostly useful for low-level debugging of the
implementation, rather than the protocol. They allow more fine-grained tracking
of internal behavior. As such, they <bcp14>MAY</bcp14> be present in qlog files and tool
implementers <bcp14>MAY</bcp14> add support for these, but they are not required to.</t>
        <t>Note that in some cases, implementers might not want to log for example data
content details in Core-level events due to performance or privacy considerations.
In this case, they <bcp14>SHOULD</bcp14> use (a subset of) relevant Base-level events instead to
ensure usability of the qlog output. As an example, implementations that do not
log QUIC <tt>packet_received</tt> events and thus also not which (if any) ACK frames the
packet contains, <bcp14>SHOULD</bcp14> log <tt>packets_acked</tt> events instead.</t>
        <t>Finally, for event types whose data (partially) overlap with other event types'
definitions, where necessary the event definition document should include explicit
guidance on which to use in specific situations.</t>
      </section>
      <section anchor="tooling-expectations">
        <name>Tooling Expectations</name>
        <t>qlog is an extensible format and it is expected that new event schema will
emerge that define new namespaces, event types, event fields (e.g., a field
indicating an event's privacy properties), as well as values for the "trigger"
property within the "data" field, or other member fields of the "data" field, as
they see fit.</t>
        <t>It <bcp14>SHOULD NOT</bcp14> be expected that general-purpose tools will recognize or visualize
all forms of qlog extension. Tools <bcp14>SHOULD</bcp14> allow for the presence of unknown
event fields and make an effort to visualize even unknown data if possible,
otherwise they <bcp14>MUST</bcp14> ignore it.</t>
      </section>
      <section anchor="further-design-guidance">
        <name>Further Design Guidance</name>
        <t>There are several ways of defining concrete event types. In practice, two main
types of approach have been observed: a) those that map directly to concepts
seen in the protocols (e.g., <tt>packet_sent</tt>) and b) those that act as aggregating
events that combine data from several possible protocol behaviors or code paths
into one (e.g., <tt>parameters_set</tt>). The latter are typically used as a means to
reduce the amount of unique event definitions, as reflecting each possible
protocol event as a separate qlog entity would cause an explosion of event
types.</t>
        <t>Additionally, logging duplicate data is typically prevented as much as possible.
For example, packet header values that remain consistent across many packets are
split into separate events (for example <tt>spin_bit_updated</tt> or
<tt>connection_id_updated</tt> for QUIC).</t>
        <t>Finally, when logging additional state change events, those state changes can
often be directly inferred from data on the wire (for example flow control limit
changes). As such, if the implementation is bug-free and spec-compliant, logging
additional events is typically avoided. Exceptions have been made for common
events that benefit from being easily identifiable or individually logged (for
example <tt>packets_acked</tt>).</t>
      </section>
    </section>
    <section anchor="generic-event-schema">
      <name>The Generic Event Schemas</name>
      <t>The two following generic event schemas define two namespaces and several
concrete event types that are common across protocols, applications, and use
cases.</t>
      <section anchor="loglevel-events">
        <name>Loglevel events</name>
        <t>In typical logging setups, users utilize a discrete number of well-defined
logging categories, levels or severities to log freeform (string) data. The
loglevel event namespace replicates this approach to allow implementations to
fully replace their existing text-based logging by qlog. This is done by
providing events to log generic strings for the typical well-known logging
levels (error, warning, info, debug, verbose). The namespace identifier is
"loglevel". The event schema URI is <tt>urn:ietf:params:qlog:events:loglevel</tt>.</t>
        <figure anchor="loglevel-events-def">
          <name>LogLevelEventData and ProtocolEventData extension</name>
          <sourcecode type="cddl"><![CDATA[
LogLevelEventData = LogLevelError /
                    LogLevelWarning /
                    LogLevelInfo /
                    LogLevelDebug /
                    LogLevelVerbose

$ProtocolEventData /= LogLevelEventData
]]></sourcecode>
        </figure>
        <t>The event types are further defined below, their identifier is the heading name.</t>
        <section anchor="error">
          <name>error</name>
          <t>Used to log details of an internal error that might not get reflected on the
wire. It has Core importance level.</t>
          <figure anchor="loglevel-error-def">
            <name>LogLevelError definition</name>
            <sourcecode type="cddl"><![CDATA[
LogLevelError = {
    ? code: uint64
    ? message: text

    * $$loglevel-error-extension
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="warning">
          <name>warning</name>
          <t>Used to log details of an internal warning that might not get reflected on the
wire. It has Base importance level.</t>
          <figure anchor="loglevel-warning-def">
            <name>LogLevelWarning definition</name>
            <sourcecode type="cddl"><![CDATA[
LogLevelWarning = {
    ? code: uint64
    ? message: text

    * $$loglevel-warning-extension
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="info">
          <name>info</name>
          <t>Used mainly for implementations that want to use qlog as their one and only
logging format but still want to support unstructured string messages. The event
has Extra importance level.</t>
          <figure anchor="loglevel-info-def">
            <name>LogLevelInfo definition</name>
            <sourcecode type="cddl"><![CDATA[
LogLevelInfo = {
    message: text

    * $$loglevel-info-extension
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="debug">
          <name>debug</name>
          <t>Used mainly for implementations that want to use qlog as their one and only
logging format but still want to support unstructured string messages. The event
has Extra importance level.</t>
          <figure anchor="loglevel-debug-def">
            <name>LogLevelDebug definition</name>
            <sourcecode type="cddl"><![CDATA[
LogLevelDebug = {
    message: text

    * $$loglevel-debug-extension
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="verbose">
          <name>verbose</name>
          <t>Used mainly for implementations that want to use qlog as their one and only
logging format but still want to support unstructured string messages. The event
has Extra importance level.</t>
          <figure anchor="loglevel-verbose-def">
            <name>LogLevelVerbose definition</name>
            <sourcecode type="cddl"><![CDATA[
LogLevelVerbose = {
    message: text

    * $$loglevel-verbose-extension
}
]]></sourcecode>
          </figure>
        </section>
      </section>
      <section anchor="sim-events">
        <name>Simulation Events</name>
        <t>When evaluating a protocol implementation, one typically sets up a series of
interoperability or benchmarking tests, in which the test situations can change
over time. For example, the network bandwidth or latency can vary during the
test, or the network can be fully disabled for a short time. In these setups, it
is useful to know when exactly these conditions are triggered, to allow for
proper correlation with other events. This namespace defines event types to
allow logging of such simulation metadata and its identifier is "simulation".
The event schema URI is <tt>urn:ietf:params:qlog:events:simulation</tt>.</t>
        <figure anchor="sim-events-def">
          <name>SimulationEventData and ProtocolEventData extension</name>
          <sourcecode type="cddl"><![CDATA[
SimulationEventData = SimulationScenario /
                SimulationMarker

$ProtocolEventData /= SimulationEventData
]]></sourcecode>
        </figure>
        <t>The event types are further defined below, their identifier is the heading name.</t>
        <section anchor="scenario">
          <name>scenario</name>
          <t>Used to specify which specific scenario is being tested at this particular
instance. This supports, for example, aggregation of several simulations into
one trace (e.g., split by <tt>group_id</tt>). It has Extra importance level; see
<xref target="importance"/>.</t>
          <figure anchor="simulation-scenario-def">
            <name>SimulationScenario definition</name>
            <sourcecode type="cddl"><![CDATA[
SimulationScenario = {
    ? name: text
    ? details: {* text => any }

    * $$simulation-scenario-extension
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="marker">
          <name>marker</name>
          <t>Used to indicate when specific emulation conditions are triggered at set times
(e.g., at 3 seconds in 2% packet loss is introduced, at 10s a NAT rebind is
triggered). It has Extra importance level.</t>
          <figure anchor="simulation-marker-def">
            <name>SimulationMarker definition</name>
            <sourcecode type="cddl"><![CDATA[
SimulationMarker = {
    ? type: text
    ? message: text

    * $$simulation-marker-extension
}
]]></sourcecode>
          </figure>
        </section>
      </section>
    </section>
    <section anchor="raw-info">
      <name>Raw packet and frame information</name>
      <t>While qlog is a high-level logging format, it also allows the inclusion of most
raw wire image information, such as byte lengths and byte values. This is useful
when for example investigating or tuning packetization behavior or determining
encoding/framing overheads. However, these fields are not always necessary, can
take up considerable space, and can have a considerable privacy and security
impact (see <xref target="privacy"/>). Where applicable, these fields are grouped in a
separate, optional, field named "raw" of type RawInfo. The exact definition of
entities, headers, trailers and payloads depend on the protocol used.</t>
      <figure anchor="raw-info-def">
        <name>RawInfo definition</name>
        <sourcecode type="cddl"><![CDATA[
RawInfo = {

    ; the full byte length of the entity (e.g., packet or frame),
    ; including possible headers and trailers
    ? length: uint64

    ; the byte length of the entity's payload,
    ; excluding possible headers or trailers
    ? payload_length: uint64

    ; the (potentially truncated) contents of the full entity,
    ; including headers and possibly trailers
    ? data: hexstring
}
]]></sourcecode>
      </figure>
      <t>All fields in RawInfo are defined as optional. It is acceptable to log any field
without the others. Logging length related fields and omitting the data field
permits protocol debugging without the risk of logging potentially sensitive
data. The data field, if logged, is not required to contain the contents of a
full entity and can be truncated, see <xref target="truncated-values"/>. The length fields,
if logged, should indicate the length of the full entity, even if the data
field is omitted or truncated.</t>
      <t>Protocol entities containing an on-the-wire length field (for example a packet
header or QUIC's stream frame) are strongly recommended to re-use the
<tt>raw.length</tt> field instead of defining a separate length field, to maintain
consistency and prevent data duplication.</t>
      <t>This document does not specify explicit header_length or trailer_length fields.
In protocols without trailers, header_length can be calculated by subtracting
the payload_length from the length. In protocols with trailers (e.g., QUIC's
AEAD tag), event definition documents <bcp14>SHOULD</bcp14> define how to support header_length
calculation.</t>
    </section>
    <section anchor="concrete-formats">
      <name>Serializing qlog</name>
      <t>qlog schema definitions in this document are intentionally agnostic to
serialization formats. The choice of format is an implementation decision.</t>
      <t>Other documents related to qlog (for example event definitions for specific
protocols), <bcp14>SHOULD</bcp14> be similarly agnostic to the employed serialization format
and <bcp14>SHOULD</bcp14> clearly indicate this. If not, they <bcp14>MUST</bcp14> include an explanation on
which serialization formats are supported and on how to employ them correctly.</t>
      <t>Serialization formats make certain tradeoffs between usability, flexibility,
interoperability, and efficiency. Implementations should take these into
consideration when choosing a format. Some examples of possible formats are
JSON, CBOR, CSV, protocol buffers, flatbuffers, etc. which each have their own
characteristics. For instance, a textual format like JSON can be more flexible
than a binary format but more verbose, typically making it less efficient than a
binary format. A plaintext readable (yet relatively large) format like JSON is
potentially more usable for users operating on the logs directly, while a more
optimized yet restricted format can better suit the constraints of a large scale
operation. A custom or restricted format could be more efficient for analysis
with custom tooling but might not be interoperable with general-purpose qlog
tools.</t>
      <t>Considering these tradeoffs, JSON-based serialization formats provide features
that make them a good starting point for qlog flexibility and interoperability.
For these reasons, JSON is a recommended default and expanded considerations are
given to how to map qlog to JSON (<xref target="format-json"/>), and its streaming counterpart
JSON Text Sequences (<xref target="format-json-seq"/>). <xref target="json-interop"/> presents
interoperability considerations for both formats, and <xref target="optimizations"/> presents
potential optimizations.</t>
      <t>Serialization formats require appropriate deserializers/parsers. The
"serialization_format" field (<xref target="abstract-logfile"/>) is used to indicate the
chosen serialization format.</t>
      <section anchor="format-json">
        <name>qlog to JSON mapping</name>
        <t>As described in <xref target="qlog-file-schema"/>, JSON is the default qlog serialization.
When mapping qlog to normal JSON, QlogFile (<xref target="qlog-file-def"/>) is used. The
Media Type is "application/qlog+json" per <xref target="RFC6839"/>. The file
extension/suffix <bcp14>SHOULD</bcp14> be ".qlog".</t>
        <t>In accordance with <xref section="8.1" sectionFormat="of" target="RFC8259"/>, JSON files are required to use
UTF-8 both for the file itself and the string values it contains. In addition,
all qlog field names <bcp14>MUST</bcp14> be lowercase when serialized to JSON.</t>
        <t>In order to serialize CDDL-based qlog event and data structure
definitions to JSON, the official CDDL-to-JSON mapping defined in
<xref section="E" sectionFormat="of" target="CDDL"/> <bcp14>SHOULD</bcp14> be employed.</t>
      </section>
      <section anchor="format-json-seq">
        <name>qlog to JSON Text Sequences mapping</name>
        <t>One of the downsides of using normal JSON is that it is inherently a
non-streamable format. A qlog serializer could work around this by opening a
file, writing the required opening data, streaming qlog events by appending
them, and then finalizing the log by appending appropriate closing tags e.g.,
"]}]}". However, failure to append closing tags, could lead to problems because
most JSON parsers will fail if a document is malformed. Some streaming JSON
parsers are able to handle missing closing tags, however they are not widely
deployed in popular environments (e.g., Web browsers)</t>
        <t>To overcome the issues related to JSON streaming, a qlog mapping to a streamable
JSON format called JSON Text Sequences (JSON-SEQ) (<xref target="RFC7464"/>) is provided.</t>
        <t>JSON Text Sequences are very similar to JSON, except that objects are
serialized as individual records, each prefixed by an ASCII Record Separator
(&lt;RS&gt;, 0x1E), and each ending with an ASCII Line Feed character (\n, 0x0A). Note
that each record can also contain any amount of newlines in its body, as long as
it ends with a newline character before the next &lt;RS&gt; character.</t>
        <t>In order to leverage the streaming capability, each qlog event is serialized and
interpreted as an individual JSON Text Sequence record, that is appended as a
new object to the back of an event stream or log file. Put differently, unlike
default JSON, it does not require a document to be wrapped as a full object with
"{ ... }" or "[... ]".</t>
        <t>This alternative record streaming approach cannot be accommodated by QlogFile
(<xref target="qlog-file-def"/>). Instead, QlogFileSeq is defined in <xref target="qlog-file-seq-def"/>,
which notably includes only a single trace (TraceSeq) and omits an explicit
"events" array. An example is provided in <xref target="json-seq-ex"/>. The "group_id" field
can still be used on a per-event basis to include events from conceptually
different sources in a single JSON-SEQ qlog file.</t>
        <t>When mapping qlog to JSON-SEQ, the Media Type is "application/qlog+json-seq" per
<xref target="RFC8091"/>. The file extension/suffix <bcp14>SHOULD</bcp14> be ".sqlog" (for "streaming"
qlog).</t>
        <t>While not specifically required by the JSON-SEQ specification, all qlog field
names <bcp14>MUST</bcp14> be lowercase when serialized to JSON-SEQ.</t>
        <t>In order to serialize all other CDDL-based qlog event and data structure
definitions to JSON-SEQ, the official CDDL-to-JSON mapping defined in
<xref section="E" sectionFormat="of" target="CDDL"/> <bcp14>SHOULD</bcp14> be employed.</t>
        <section anchor="supporting-json-text-sequences-in-tooling">
          <name>Supporting JSON Text Sequences in tooling</name>
          <t>Note that JSON Text Sequences are not supported in most default programming
environments (unlike normal JSON). However, several custom JSON-SEQ parsing
libraries exist in most programming languages that can be used and the format is
easy enough to parse with existing implementations (i.e., by splitting the file
into its component records and feeding them to a normal JSON parser individually,
as each record by itself is a valid JSON object).</t>
        </section>
      </section>
      <section anchor="json-interop">
        <name>JSON Interoperability</name>
        <t>Some JSON implementations have issues with the full JSON format, especially those
integrated within a JavaScript environment (e.g., Web browsers, NodeJS). I-JSON
(Internet-JSON) is a subset of JSON for such environments; see
<xref target="I-JSON"/>. One of the key limitations of JavaScript, and thus I-JSON,
is that it cannot represent full 64-bit integers in standard operating mode
(i.e., without using BigInt extensions), instead being limited to the range
-(2<sup>53</sup>)+1 to (2<sup>53</sup>)-1.</t>
        <t>To accommodate such constraints in CDDL, <xref section="E" sectionFormat="of" target="CDDL"/> recommends
defining new CDDL types for int64 and uint64 that limit their values to the
restricted 64-bit integer range. However, some of the protocols that qlog is
intended to support (e.g., QUIC, HTTP/3), can use the full range of uint64
values.</t>
        <t>As such, to support situations where I-JSON is in use, serializers <bcp14>MAY</bcp14> encode
uint64 values using JSON strings. qlog parsers, therefore, <bcp14>SHOULD</bcp14> support
parsing of uint64 values from JSON strings or JSON numbers unless there is out-of-band
information indicating that neither the serializer nor parser are constrained by
I-JSON.</t>
      </section>
      <section anchor="truncated-values">
        <name>Truncated values</name>
        <t>For some use cases (e.g., limiting file size, privacy), it can be necessary not
to log a full raw blob (using the <tt>hexstring</tt> type) but instead a truncated
value. For example, one might only store the first 100 bytes of an HTTP response
body to be able to discern which file it actually contained. In these cases, the
original byte-size length cannot be obtained from the serialized value directly.</t>
        <t>As such, all qlog schema definitions <bcp14>SHOULD</bcp14> include a separate,
length-indicating field for all fields of type <tt>hexstring</tt> they specify, see for
example <xref target="raw-info"/>. This not only ensures the original length can always be
retrieved, but also allows the omission of any raw value bytes of the field
completely (e.g., out of privacy or security considerations).</t>
        <t>To reduce overhead however and in the case the full raw value is logged, the
extra length-indicating field can be left out. As such, tools <bcp14>SHOULD</bcp14> be able to
deal with this situation and derive the length of the field from the raw value
if no separate length-indicating field is present. The main possible
permutations are shown by example in <xref target="truncated-values-ex"/>.</t>
        <figure anchor="truncated-values-ex">
          <name>Example for serializing truncated hexstrings</name>
          <artwork><![CDATA[
// both the content's value and its length are present
// (length is redundant)
{
    "content_length": 5,
    "content": "051428abff"
}

// only the content value is present, indicating it
// represents the content's full value. The byte
// length is obtained by calculating content.length / 2
{
    "content": "051428abff"
}

// only the length is present, meaning the value
// was omitted
{
    "content_length": 5,
}

// both value and length are present, but the lengths
// do not match: the value was truncated to
// the first three bytes.
{
    "content_length": 5,
    "content": "051428"
}
]]></artwork>
        </figure>
      </section>
      <section anchor="optimizations">
        <name>Optimization of serialized data</name>
        <t>Both the JSON and JSON-SEQ formatting options described above are serviceable in
general small to medium scale (debugging) setups. However, these approaches tend
to be relatively verbose, leading to larger file sizes. Additionally, generalized
JSON(-SEQ) (de)serialization performance is typically (slightly) lower than that
of more optimized and predictable formats. Both aspects present challenges to
large scale setups, though they may still be practical to deploy; see <xref target="ANRW-2020"/>.
JSON and JSON-SEQ compress very well using commonly-available algorithms such as
GZIP or Brotli.</t>
        <t>During the development of qlog, a multitude of alternative formatting
and optimization options were assessed and the results are <eref target="https://github.com/quiclog/internet-drafts/issues/30#issuecomment-617675097">summarized on the qlog
github
repository</eref>.</t>
        <t>Formal definition of additional qlog formats or encodings that use the
optimization techniques described here, or any other optimization technique is
left to future activity that can apply the following guidelines.</t>
        <t>In order to help tools correctly parse and process serialized qlog, it is
<bcp14>RECOMMENDED</bcp14> that new formats also define suitable file extensions and media
types. This provides a clear signal and avoids the need to provide out-of-band
information or to rely on heuristic fallbacks; see <xref target="tooling"/>.</t>
      </section>
    </section>
    <section anchor="methods-of-access-and-generation">
      <name>Methods of access and generation</name>
      <t>Different implementations will have different ways of generating and storing
qlogs. However, there is still value in defining a few default ways in which to
steer this generation and access of the results.</t>
      <section anchor="set-file-output-destination-via-an-environment-variable">
        <name>Set file output destination via an environment variable</name>
        <t>To provide users control over where and how qlog files are created, two
environment variables are defined. The first, QLOGFILE, indicates a full path to
where an individual qlog file should be stored. This path <bcp14>MUST</bcp14> include the full
file extension. The second, QLOGDIR, sets a general directory path in which qlog
files should be placed. This path <bcp14>MUST</bcp14> include the directory separator character
at the end.</t>
        <t>In general, QLOGDIR should be preferred over QLOGFILE if an endpoint is prone to
generate multiple qlog files. This can for example be the case for a QUIC server
implementation that logs each QUIC connection in a separate qlog file. An
alternative that uses QLOGFILE would be a QUIC server that logs all connections in
a single file and uses the "group_id" field (<xref target="group-ids"/>) to allow post-hoc
separation of events.</t>
        <t>Implementations <bcp14>SHOULD</bcp14> provide support for QLOGDIR and <bcp14>MAY</bcp14> provide support for
QLOGFILE.</t>
        <t>When using QLOGDIR, it is up to the implementation to choose an appropriate naming
scheme for the qlog files themselves. The chosen scheme will typically depend on
the context or protocols used. For example, for QUIC, it is recommended to use the
Original Destination Connection ID (ODCID), followed by the vantage point type of
the logging endpoint. Examples of all options for QUIC are shown in
<xref target="qlogdir-example"/>.</t>
        <figure anchor="qlogdir-example">
          <name>Environment variable examples for a QUIC implementation</name>
          <artwork><![CDATA[
Command: QLOGFILE=/srv/qlogs/client.qlog quicclientbinary

Should result in the the quicclientbinary executable logging a
single qlog file named client.qlog in the /srv/qlogs directory.
This is for example useful in tests when the client sets up
just a single connection and then exits.

Command: QLOGDIR=/srv/qlogs/ quicserverbinary

Should result in the quicserverbinary executable generating
several logs files, one for each QUIC connection.
Given two QUIC connections, with ODCID values "abcde" and
"12345" respectively, this would result in two files:
/srv/qlogs/abcde_server.qlog
/srv/qlogs/12345_server.qlog

Command: QLOGFILE=/srv/qlogs/server.qlog quicserverbinary

Should result in the the quicserverbinary executable logging
a single qlog file named server.qlog in the /srv/qlogs directory.
Given that the server handled two QUIC connections before it was
shut down, with ODCID values "abcde" and "12345" respectively,
this would result in event instances in the qlog file being
tagged with the "group_id" field with values "abcde" and "12345".
]]></artwork>
        </figure>
      </section>
    </section>
    <section anchor="tooling">
      <name>Tooling requirements</name>
      <t>Tools ingesting qlog <bcp14>MUST</bcp14> indicate which qlog version(s), qlog format(s), qlog
file and event schema(s), compression methods and potentially other input file
formats (for example .pcap) they support. Tools <bcp14>SHOULD</bcp14> at least support .qlog
files in the default JSON format (<xref target="format-json"/>). Additionally, they <bcp14>SHOULD</bcp14>
indicate exactly which values for and properties of the name
(namespace:event_type) and data fields they look for to execute their logic.
Tools <bcp14>SHOULD</bcp14> perform a (high-level) check if an input qlog file adheres to the
expected qlog file and event schemas. If a tool determines a qlog file does not
contain enough supported information to correctly execute the tool's logic, it
<bcp14>SHOULD</bcp14> generate a clear error message to this effect.</t>
      <t>Tools <bcp14>MUST NOT</bcp14> produce breaking errors for any field names and/or values in the
qlog format that they do not recognize. Tools <bcp14>SHOULD</bcp14> indicate even unknown event
occurrences within their context (e.g., marking unknown events on a timeline for
manual interpretation by the user).</t>
      <t>Tool authors should be aware that, depending on the logging implementation, some
events will not always be present in all traces. For example, using a circular
logging buffer of a fixed size, it could be that the earliest events (e.g.,
connection setup events) are later overwritten by "newer" events. Alternatively,
some events can be intentionally omitted out of privacy or file size
considerations. Tool authors are encouraged to make their tools robust enough to
still provide adequate output for incomplete logs.</t>
    </section>
    <section anchor="privacy">
      <name>Security and privacy considerations</name>
      <t>Protocols such as TLS <xref target="RFC8446"/> and QUIC <xref target="RFC9000"/> offer secure protection
for the wire image <xref target="RFC8546"/>. Logging can reveal aspects of the wire image
that would ordinarily be protected, creating tension between observability,
security and privacy, especially if data can be correlated across data sources.</t>
      <t>qlog permits logging of a broad and detailed range of data. Operators and
implementers are responsible for deciding what data is logged to address their
requirements and constraints. As per <xref target="RFC6973"/>, operators must be aware that
data could be compromised, risking the privacy of all participants. Where
entities expect protocol features to ensure data privacy, logging might
unknowingly be subject to broader privacy risks, undermining their ability to
assess or respond effectively.</t>
      <section anchor="data-at-risk">
        <name>Data at risk</name>
        <t>qlog operators and implementers need to consider security and privacy risks when
handling qlog data, including logging, storage, usage, and more. The
considerations presented in this section may pose varying risks depending on the
data itself or its handling.</t>
        <t>The following is a non-exhaustive list of example data types that could contain
sensitive information that might allow identification or correlation of
individual connections, endpoints, users or sessions across qlog or other data
sources (e.g., captures of encrypted packets):</t>
        <ul spacing="normal">
          <li>IP addresses and transport protocol port numbers.</li>
          <li>Session, Connection, or User identifiers e.g., QUIC Connection IDs <xref section="9.5" sectionFormat="of" target="RFC9000"/>).</li>
          <li>System-level information e.g., CPU, process, or thread identifiers.</li>
          <li>Stored State e.g., QUIC address validation and retry tokens, TLS session
tickets, and HTTP cookies.</li>
          <li>TLS decryption keys, passwords, and HTTP-level API access or authorization tokens.</li>
          <li>High-resolution event timestamps or inter-event timings, event counts, packet
sizes, and frame sizes.</li>
          <li>Full or partial raw packet and frame payloads that are encrypted.</li>
          <li>Full or partial raw packet and frame payloads that are plaintext e.g., HTTP Field
values, HTTP response data, or TLS SNI field values.</li>
        </ul>
      </section>
      <section anchor="operational-implications-and-recommendations">
        <name>Operational implications and recommendations</name>
        <t>Operational considerations should focus on authorizing capture and access to logs. Logging of
Internet protocols using qlog can be equivalent to the ability to store or read plaintext
communications. Without a more detailed analysis, all of the security considerations of plaintext access apply.</t>
        <t>It is recommended that qlog capture is subject to access control and auditing.
These controls should support granular levels of information capture based on
role and permissions (e.g., capture of more-sensitive data requires higher
privileges).</t>
        <t>It is recommended that access to stored qlogs is subject to access control and
auditing.</t>
        <t>End users might not understand the implications of qlog to security or privacy,
and their environments might limit access control techniques. Implementations should
make enabling qlog conspicuous (e.g., requiring clear and explicit actions to
start a capture) and resistant to social engineering, automation, or drive-by
attacks; for example, isolation or sandboxing of capture from other activities
in the same process or component.</t>
        <t>It is recommended that data retention policies are defined for the storage of
qlog files.</t>
        <t>It is recommended that qlog files are encrypted in transit and at rest.</t>
      </section>
      <section anchor="data-minimization-or-anonymization">
        <name>Data minimization or anonymization</name>
        <t>Applying data minimization or anonymization techniques to qlog might help
address some security and privacy risks. However, removing or anonymizing data
without sufficient care might not enhance privacy or security and
could diminish the utility of qlog data.</t>
        <t>Operators and implementers should balance the value of logged data with the
potential risks of voluntary or involuntary disclosure to trusted or untrusted
entities. Importantly, both the breadth and depth of the data needed to make it
 useful, as well as the definition of entities depend greatly on the intended
use cases. For example, a research project might be tightly scoped, time bound,
and require participants to explicitly opt in to having their data collected
with the intention for this to be shared in a publication. Conversely, a server
administrator might desire to collect telemetry, from users whom they have no
relationship with, for continuing operational needs.</t>
        <t>The most extreme form of minimization or anonymization is deleting a field,
equivalent to not logging it. qlog implementations should offer fine-grained
control for this on a per-use-case or per-connection basis.</t>
        <t>Data can undergo anonymization, pseudonymization, permutation, truncation,
re-encryption, or aggregation; see <xref section="B" sectionFormat="of" target="DNS-PRIVACY"/> for
techniques, especially regarding IP addresses. However, operators should be
cautious because many anonymization methods have been shown to be insufficient to safeguard
user privacy or identity, particularly with large or easily correlated data sets.</t>
        <t>Operators should consider end user rights and preferences. Active user participation (as
indicated by <xref target="RFC6973"/>) on a per-qlog basis is challenging but aligning qlog
capture, storage, and removal with existing user preference and privacy controls
is crucial. Operators should consider aggressive approaches to deletion or
aggregation.</t>
        <t>The most sensitive data in qlog is typically contained in RawInfo type fields
(see <xref target="raw-info"/>). Therefore, qlog users should exercise caution and limit the
inclusion of such fields for all but the most stringent use cases.</t>
      </section>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>IANA is requested to register a new entry in the "IETF URN Sub-namespace for
Registered Protocol Parameter Identifiers" registry (<xref target="RFC3553"/>):</t>
      <dl>
        <dt>Registered Parameter Identifier:</dt>
        <dd>
          <t>qlog</t>
        </dd>
        <dt>Reference:</dt>
        <dd>
          <t>This Document</t>
        </dd>
        <dt>IANA Registry Reference:</dt>
        <dd>
          <t><eref brackets="angle" target="https://www.iana.org/assignments/qlog"/></t>
        </dd>
      </dl>
      <t>IANA is requested to create the "qlog log file schema URIs" registry
at <eref target="https://www.iana.org/assignments/qlog"/> for the purpose of registering
log file schema. It has the following format/template:</t>
      <dl>
        <dt>Log File Schema URI:</dt>
        <dd>
          <t>[the log file schema identifier]</t>
        </dd>
        <dt>Description:</dt>
        <dd>
          <t>[a description of the log file schema]</t>
        </dd>
        <dt>Reference:</dt>
        <dd>
          <t>[to a specification defining the log file schema]</t>
        </dd>
      </dl>
      <t>This document furthermore adds the following two new entries to the "qlog log
file schema URIs" registry:</t>
      <table>
        <thead>
          <tr>
            <th align="left">Log File Schema URI</th>
            <th align="left">Description</th>
            <th align="left">Reference</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">urn:ietf:params:qlog:file:contained</td>
            <td align="left">Concrete log file schema that can contain several traces from multiple vantage points.</td>
            <td align="left">
              <xref target="qlog-file-schema"/></td>
          </tr>
          <tr>
            <td align="left">urn:ietf:params:qlog:file:sequential</td>
            <td align="left">Concrete log file schema containing a single trace, optimized for sequential read and write access.</td>
            <td align="left">
              <xref target="qlog-file-seq-schema"/></td>
          </tr>
        </tbody>
      </table>
      <t>IANA is requested to create the "qlog event schema URIs" registry
at <eref target="https://www.iana.org/assignments/qlog"/> for the purpose of registering
event schema. It has the following format/template:</t>
      <dl>
        <dt>Event schema URI:</dt>
        <dd>
          <t>[the event schema identifier]</t>
        </dd>
        <dt>Namespace:</dt>
        <dd>
          <t>[the identifier of the namespace that this event schema either defines or extends]</t>
        </dd>
        <dt>Event Types:</dt>
        <dd>
          <t>[a comma-separated list of concrete event types defined in the event schema]</t>
        </dd>
        <dt>Description:</dt>
        <dd>
          <t>[a description of the event schema]</t>
        </dd>
        <dt>Reference:</dt>
        <dd>
          <t>[to a specification defining the event schema definition]</t>
        </dd>
      </dl>
      <t>This document furthermore adds the following two new entries to the "qlog event
schema URIs" registry:</t>
      <dl>
        <dt>Event schema URI:</dt>
        <dd>
          <t>urn:ietf:params:qlog:events:loglevel</t>
        </dd>
        <dt>Namespace</dt>
        <dd>
          <t>loglevel</t>
        </dd>
        <dt>Event Types</dt>
        <dd>
          <t>error,warning,info,debug,verbose</t>
        </dd>
        <dt>Description:</dt>
        <dd>
          <t>Well-known logging levels for free-form text.</t>
        </dd>
        <dt>Reference:</dt>
        <dd>
          <t><xref target="loglevel-events"/></t>
        </dd>
        <dt>Event schema URI:</dt>
        <dd>
          <t>urn:ietf:params:qlog:events:simulation</t>
        </dd>
        <dt>Namespace</dt>
        <dd>
          <t>simulation</t>
        </dd>
        <dt>Event Types</dt>
        <dd>
          <t>scenario,marker</t>
        </dd>
        <dt>Description:</dt>
        <dd>
          <t>Events for simulation testing.</t>
        </dd>
        <dt>Reference:</dt>
        <dd>
          <t><xref target="sim-events"/></t>
        </dd>
      </dl>
      <section anchor="iana-media-types">
        <name>Media Type Registrations</name>
        <t>IANA is requested to register the following media types in the "Media Types"
registry &lt;https://www.iana.org/assignments/media-types/&gt;.</t>
        <section anchor="iana-qlog-json">
          <name>application/qlog+json Media Type</name>
          <dl>
            <dt>Type name:</dt>
            <dd>
              <t>application</t>
            </dd>
            <dt>Subtype name:</dt>
            <dd>
              <t>qlog+json</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; see <xref target="format-json"/></t>
            </dd>
            <dt>Security considerations:</dt>
            <dd>
              <t>See <xref target="privacy"/> of this document</t>
            </dd>
            <dt>Interoperability considerations:</dt>
            <dd>
              <t>See <xref target="json-interop"/> of this document</t>
            </dd>
            <dt>Published specification:</dt>
            <dd>
              <t>This document</t>
            </dd>
            <dt>Applications that use this media type:</dt>
            <dd>
              <t>Applications that generate, consume, or process qlog-format network protocol
logs, such as protocol analyzers, debugging tools, and performance monitoring
systems.</t>
            </dd>
          </dl>
          <t>Additional information:</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>.qlog</t>
            </dd>
            <dt>Macintosh file type code(s):</dt>
            <dd>
              <t>n/a</t>
            </dd>
            <dt>Person to contact for further information:</dt>
            <dd>
              <t>QUIC WG, quic@ietf.org</t>
            </dd>
            <dt>Intended usage:</dt>
            <dd>
              <t>COMMON</t>
            </dd>
            <dt>Restrictions on usage:</dt>
            <dd>
              <t>n/a</t>
            </dd>
            <dt>Author:</dt>
            <dd>
              <t>QUIC WG, quic@ietf.org</t>
            </dd>
            <dt>Change controller:</dt>
            <dd>
              <t>IETF</t>
            </dd>
          </dl>
        </section>
        <section anchor="iana-qlog-json-seq">
          <name>application/qlog+json-seq Media Type</name>
          <dl>
            <dt>Type name:</dt>
            <dd>
              <t>application</t>
            </dd>
            <dt>Subtype name:</dt>
            <dd>
              <t>qlog+json-seq</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; see <xref target="format-json-seq"/></t>
            </dd>
            <dt>Security considerations:</dt>
            <dd>
              <t>See <xref target="privacy"/> of this document</t>
            </dd>
            <dt>Interoperability considerations:</dt>
            <dd>
              <t>See <xref target="json-interop"/> of this document</t>
            </dd>
            <dt>Published specification:</dt>
            <dd>
              <t>This document</t>
            </dd>
            <dt>Applications that use this media type:</dt>
            <dd>
              <t>Applications that generate, consume, or process qlog-format network protocol
logs in a streaming fashion, such as protocol analyzers, debugging tools, and
performance monitoring systems.</t>
            </dd>
          </dl>
          <t>Additional information:</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>.sqlog</t>
            </dd>
            <dt>Macintosh file type code(s):</dt>
            <dd>
              <t>n/a</t>
            </dd>
            <dt>Person to contact for further information:</dt>
            <dd>
              <t>QUIC WG, quic@ietf.org</t>
            </dd>
            <dt>Intended usage:</dt>
            <dd>
              <t>COMMON</t>
            </dd>
            <dt>Restrictions on usage:</dt>
            <dd>
              <t>n/a</t>
            </dd>
            <dt>Author:</dt>
            <dd>
              <t>QUIC WG, quic@ietf.org</t>
            </dd>
            <dt>Change controller:</dt>
            <dd>
              <t>IETF</t>
            </dd>
          </dl>
        </section>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="JSON">
          <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>
        <reference anchor="I-JSON">
          <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="JSON-Text-Sequences">
          <front>
            <title>JavaScript Object Notation (JSON) Text Sequences</title>
            <author fullname="N. Williams" initials="N." surname="Williams"/>
            <date month="February" year="2015"/>
            <abstract>
              <t>This document describes the JavaScript Object Notation (JSON) text sequence format and associated media type "application/json-seq". A JSON text sequence consists of any number of JSON texts, all encoded in UTF-8, each prefixed by an ASCII Record Separator (0x1E), and each ending with an ASCII Line Feed character (0x0A).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7464"/>
          <seriesInfo name="DOI" value="10.17487/RFC7464"/>
        </reference>
        <reference anchor="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">
          <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>
        <reference anchor="CDDL">
          <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="RFC2046">
          <front>
            <title>Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types</title>
            <author fullname="N. Freed" initials="N." surname="Freed"/>
            <author fullname="N. Borenstein" initials="N." surname="Borenstein"/>
            <date month="November" year="1996"/>
            <abstract>
              <t>This second document defines the general structure of the MIME media typing system and defines an initial set of media types. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2046"/>
          <seriesInfo name="DOI" value="10.17487/RFC2046"/>
        </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="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>
        <reference anchor="RFC7464">
          <front>
            <title>JavaScript Object Notation (JSON) Text Sequences</title>
            <author fullname="N. Williams" initials="N." surname="Williams"/>
            <date month="February" year="2015"/>
            <abstract>
              <t>This document describes the JavaScript Object Notation (JSON) text sequence format and associated media type "application/json-seq". A JSON text sequence consists of any number of JSON texts, all encoded in UTF-8, each prefixed by an ASCII Record Separator (0x1E), and each ending with an ASCII Line Feed character (0x0A).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7464"/>
          <seriesInfo name="DOI" value="10.17487/RFC7464"/>
        </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="RFC6839">
          <front>
            <title>Additional Media Type Structured Syntax Suffixes</title>
            <author fullname="T. Hansen" initials="T." surname="Hansen"/>
            <author fullname="A. Melnikov" initials="A." surname="Melnikov"/>
            <date month="January" year="2013"/>
            <abstract>
              <t>A content media type name sometimes includes partitioned meta- information distinguished by a structured syntax to permit noting an attribute of the media as a suffix to the name. This document defines several structured syntax suffixes for use with media type registrations. In particular, it defines and registers the "+json", "+ber", "+der", "+fastinfoset", "+wbxml" and "+zip" structured syntax suffixes, and provides a media type structured syntax suffix registration form for the "+xml" structured syntax suffix. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6839"/>
          <seriesInfo name="DOI" value="10.17487/RFC6839"/>
        </reference>
        <reference anchor="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>
        <reference anchor="RFC8091">
          <front>
            <title>A Media Type Structured Syntax Suffix for JSON Text Sequences</title>
            <author fullname="E. Wilde" initials="E." surname="Wilde"/>
            <date month="February" year="2017"/>
            <abstract>
              <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 "+json-seq" as a structured syntax suffix for JSON text sequences.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8091"/>
          <seriesInfo name="DOI" value="10.17487/RFC8091"/>
        </reference>
        <reference anchor="RFC9000">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </reference>
        <reference anchor="RFC6973">
          <front>
            <title>Privacy Considerations for Internet Protocols</title>
            <author fullname="A. Cooper" initials="A." surname="Cooper"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <author fullname="B. Aboba" initials="B." surname="Aboba"/>
            <author fullname="J. Peterson" initials="J." surname="Peterson"/>
            <author fullname="J. Morris" initials="J." surname="Morris"/>
            <author fullname="M. Hansen" initials="M." surname="Hansen"/>
            <author fullname="R. Smith" initials="R." surname="Smith"/>
            <date month="July" year="2013"/>
            <abstract>
              <t>This document offers guidance for developing privacy considerations for inclusion in protocol specifications. It aims to make designers, implementers, and users of Internet protocols aware of privacy-related design choices. It suggests that whether any individual RFC warrants a specific privacy considerations section will depend on the document's content.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6973"/>
          <seriesInfo name="DOI" value="10.17487/RFC6973"/>
        </reference>
        <reference anchor="DNS-PRIVACY">
          <front>
            <title>Recommendations for DNS Privacy Service Operators</title>
            <author fullname="S. Dickinson" initials="S." surname="Dickinson"/>
            <author fullname="B. Overeinder" initials="B." surname="Overeinder"/>
            <author fullname="R. van Rijswijk-Deij" initials="R." surname="van Rijswijk-Deij"/>
            <author fullname="A. Mankin" initials="A." surname="Mankin"/>
            <date month="October" year="2020"/>
            <abstract>
              <t>This document presents operational, policy, and security considerations for DNS recursive resolver operators who choose to offer DNS privacy services. With these recommendations, the operator can make deliberate decisions regarding which services to provide, as well as understanding how those decisions and the alternatives impact the privacy of users.</t>
              <t>This document also presents a non-normative framework to assist writers of a Recursive operator Privacy Statement, analogous to DNS Security Extensions (DNSSEC) Policies and DNSSEC Practice Statements described in RFC 6841.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="232"/>
          <seriesInfo name="RFC" value="8932"/>
          <seriesInfo name="DOI" value="10.17487/RFC8932"/>
        </reference>
        <reference anchor="RFC3553">
          <front>
            <title>An IETF URN Sub-namespace for Registered Protocol Parameters</title>
            <author fullname="M. Mealling" initials="M." surname="Mealling"/>
            <author fullname="L. Masinter" initials="L." surname="Masinter"/>
            <author fullname="T. Hardie" initials="T." surname="Hardie"/>
            <author fullname="G. Klyne" initials="G." surname="Klyne"/>
            <date month="June" year="2003"/>
            <abstract>
              <t>This document describes a new sub-delegation for the 'ietf' URN namespace for registered protocol items. The 'ietf' URN namespace is defined in RFC 2648 as a root for persistent URIs that refer to IETF- defined resources. 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="73"/>
          <seriesInfo name="RFC" value="3553"/>
          <seriesInfo name="DOI" value="10.17487/RFC3553"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="QLOG-QUIC">
          <front>
            <title>QUIC event definitions for qlog</title>
            <author fullname="Robin Marx" initials="R." surname="Marx">
              <organization>Akamai</organization>
            </author>
            <author fullname="Luca Niccolini" initials="L." surname="Niccolini">
              <organization>Meta</organization>
            </author>
            <author fullname="Marten Seemann" initials="M." surname="Seemann">
         </author>
            <author fullname="Lucas Pardue" initials="L." surname="Pardue">
              <organization>Cloudflare</organization>
            </author>
            <date day="20" month="October" year="2025"/>
            <abstract>
              <t>   This document describes a qlog event schema containing concrete qlog
   event definitions and their metadata for the core QUIC protocol and
   selected extensions.

Note to Readers

      Note to RFC editor: Please remove this section before publication.

   Feedback and discussion are welcome at https://github.com/quicwg/qlog
   (https://github.com/quicwg/qlog).  Readers are advised to refer to
   the "editor's draft" at that URL for an up-to-date version of this
   document.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-quic-qlog-quic-events-12"/>
        </reference>
        <reference anchor="QLOG-H3">
          <front>
            <title>HTTP/3 qlog event definitions</title>
            <author fullname="Robin Marx" initials="R." surname="Marx">
              <organization>Akamai</organization>
            </author>
            <author fullname="Luca Niccolini" initials="L." surname="Niccolini">
              <organization>Meta</organization>
            </author>
            <author fullname="Marten Seemann" initials="M." surname="Seemann">
         </author>
            <author fullname="Lucas Pardue" initials="L." surname="Pardue">
              <organization>Cloudflare</organization>
            </author>
            <date day="20" month="October" year="2025"/>
            <abstract>
              <t>   This document defines a qlog event schema containing concrete events
   for the core HTTP/3 protocol and selected extensions.

Note to Readers

      Note to RFC editor: Please remove this section before publication.

   Feedback and discussion are welcome at https://github.com/quicwg/qlog
   (https://github.com/quicwg/qlog).  Readers are advised to refer to
   the "editor's draft" at that URL for an up-to-date version of this
   document.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-quic-qlog-h3-events-12"/>
        </reference>
        <reference anchor="ANRW-2020" target="https://qlog.edm.uhasselt.be/anrw/">
          <front>
            <title>Debugging QUIC and HTTP/3 with qlog and qvis</title>
            <author initials="R." surname="Marx" fullname="Robin Marx">
              <organization/>
            </author>
            <author initials="M." surname="Piraux" fullname="Maxime Piraux">
              <organization/>
            </author>
            <author initials="P." surname="Quax" fullname="Peter Quax">
              <organization/>
            </author>
            <author initials="W." surname="Lamotte" fullname="Wim Lamotte">
              <organization/>
            </author>
            <date year="2020" month="September"/>
          </front>
        </reference>
        <reference anchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="RFC8546">
          <front>
            <title>The Wire Image of a Network Protocol</title>
            <author fullname="B. Trammell" initials="B." surname="Trammell"/>
            <author fullname="M. Kuehlewind" initials="M." surname="Kuehlewind"/>
            <date month="April" year="2019"/>
            <abstract>
              <t>This document defines the wire image, an abstraction of the information available to an on-path non-participant in a networking protocol. This abstraction is intended to shed light on the implications that increased encryption has for network functions that use the wire image.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8546"/>
          <seriesInfo name="DOI" value="10.17487/RFC8546"/>
        </reference>
      </references>
    </references>
    <section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>Much of the initial work by Robin Marx was done at the Hasselt and KU Leuven
Universities.</t>
      <t>Thanks to Jana Iyengar, Brian Trammell, Dmitri Tikhonov, Stephen Petrides, Jari
Arkko, Marcus Ihlar, Victor Vasiliev, Mirja Kuehlewind, Jeremy Laine, Kazu
Yamamoto, Christian Huitema, Hugo Landau, Will Hawkins, Mathis Engelbart, Kazuho
Oku, and Jonathan Lennox for their feedback and suggestions.</t>
    </section>
    <section numbered="false" removeInRFC="true" anchor="change-log">
      <name>Change Log</name>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-main-schema-13">
        <name>Since draft-ietf-quic-qlog-main-schema-13:</name>
        <ul spacing="normal">
          <li>Added IANA registration templates (#425)</li>
          <li>Added clarification on extending qlog with new protocol support (#516)</li>
          <li>Wide range of editorial changes</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-main-schema-12">
        <name>Since draft-ietf-quic-qlog-main-schema-12:</name>
        <ul spacing="normal">
          <li>Changed Path and related fields to Tuple (#491)</li>
          <li>Replaced all lenght fields with raw.length (#495)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-main-schema-10">
        <name>Since draft-ietf-quic-qlog-main-schema-10:</name>
        <ul spacing="normal">
          <li>Multiple editorial changes</li>
          <li>Remove protocol_types and move event_schemas to Trace and TraceSeq (#449)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-main-schema-09">
        <name>Since draft-ietf-quic-qlog-main-schema-09:</name>
        <ul spacing="normal">
          <li>Renamed <tt>protocol_type</tt> to <tt>protocol_types</tt> (#427)</li>
          <li>Moved Trigger section. Purely editorial (#430)</li>
          <li>Removed the concept of categories and updated extension and event schema logic
to match. Major change (#439)</li>
          <li>Reworked completely how we handle timestamps and clocks. Major change (#433)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-main-schema-08">
        <name>Since draft-ietf-quic-qlog-main-schema-08:</name>
        <ul spacing="normal">
          <li>TODO (we forgot...)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-main-schema-07">
        <name>Since draft-ietf-quic-qlog-main-schema-07:</name>
        <ul spacing="normal">
          <li>Added path and PathID (#336)</li>
          <li>Removed custom definition of uint64 type (#360, #388)</li>
          <li>ProtocolEventBody is now called ProtocolEventData (#352)</li>
          <li>Editorial changes (#364, #289, #353, #361, #362)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-main-schema-06">
        <name>Since draft-ietf-quic-qlog-main-schema-06:</name>
        <ul spacing="normal">
          <li>Editorial reworking of the document (#331, #332)</li>
          <li>Updated IANA considerations section (#333)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-main-schema-05">
        <name>Since draft-ietf-quic-qlog-main-schema-05:</name>
        <ul spacing="normal">
          <li>Updated qlog_version to 0.4 (due to breaking changes) (#314)</li>
          <li>Renamed 'transport' category to 'quic' (#302)</li>
          <li>Added 'system_info' field (#305)</li>
          <li>Removed 'summary' and 'configuration' fields (#308)</li>
          <li>Editorial and formatting changes (#298, #303, #304, #316, #320, #321, #322, #326, #328)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-main-schema-04">
        <name>Since draft-ietf-quic-qlog-main-schema-04:</name>
        <ul spacing="normal">
          <li>Updated RawInfo definition and guidance (#243)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-main-schema-03">
        <name>Since draft-ietf-quic-qlog-main-schema-03:</name>
        <ul spacing="normal">
          <li>Added security and privacy considerations discussion (#252)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-main-schema-02">
        <name>Since draft-ietf-quic-qlog-main-schema-02:</name>
        <ul spacing="normal">
          <li>No changes - new draft to prevent expiration</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-main-schema-01">
        <name>Since draft-ietf-quic-qlog-main-schema-01:</name>
        <ul spacing="normal">
          <li>Change the data definition language from TypeScript to CDDL (#143)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-main-schema-00">
        <name>Since draft-ietf-quic-qlog-main-schema-00:</name>
        <ul spacing="normal">
          <li>Changed the streaming serialization format from NDJSON to JSON Text Sequences
(#172)</li>
          <li>Added Media Type definitions for various qlog formats (#158)</li>
          <li>Changed to semantic versioning</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-marx-qlog-main-schema-draft-02">
        <name>Since draft-marx-qlog-main-schema-draft-02:</name>
        <ul spacing="normal">
          <li>These changes were done in preparation of the adoption of the drafts by the QUIC
working group (#137)</li>
          <li>Moved RawInfo, Importance, Generic events and Simulation events to this document.</li>
          <li>Added basic event definition guidelines</li>
          <li>Made protocol_type an array instead of a string (#146)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-marx-qlog-main-schema-01">
        <name>Since draft-marx-qlog-main-schema-01:</name>
        <ul spacing="normal">
          <li>
            <t>Decoupled qlog from the JSON format and described a mapping instead (#89)
            </t>
            <ul spacing="normal">
              <li>Data types are now specified in this document and proper definitions for
fields were added in this format</li>
              <li>64-bit numbers can now be either strings or numbers, with a preference for
numbers (#10)</li>
              <li>binary blobs are now logged as lowercase hex strings (#39, #36)</li>
              <li>added guidance to add length-specifiers for binary blobs (#102)</li>
            </ul>
          </li>
          <li>Removed "time_units" from Configuration. All times are now in ms instead (#95)</li>
          <li>Removed the "event_fields" setup for a more straightforward JSON format
(#101,#89)</li>
          <li>Added a streaming option using the NDJSON format (#109,#2,#106)</li>
          <li>Described optional optimization options for implementers (#30)</li>
          <li>Added QLOGDIR and QLOGFILE environment variables, clarified the .well-known URL
usage (#26,#33,#51)</li>
          <li>Overall tightened up the text and added more examples</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-marx-qlog-main-schema-00">
        <name>Since draft-marx-qlog-main-schema-00:</name>
        <ul spacing="normal">
          <li>All field names are now lowercase (e.g., category instead of CATEGORY)</li>
          <li>Triggers are now properties on the "data" field value, instead of separate field
types (#23)</li>
          <li>group_ids in common_fields is now just also group_id</li>
        </ul>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+296XYb2ZUu+P88RVzIvUS6AHDQzHS6iikpM1WlyaLS2b52
LjEABMmwAAQyIkAKZsnP0n/7HfpX3xfr/e3hDAGAkpz2rep7q5YrBQIRZ9xn
nz1+ezAYuLZsp8VR1vt5Wp0fZSdtvRy3y7qYZM+r8/Nyfp6dVXX2smivqvp9
9rqu2mpcTZuey0ejurg8yvCem1TjeT6jZiZ1ftYOyqI9G/y8LMcD/DqY5eV8
0Iwvilk+OLjrxnlbnFf16ihr2olz5aI+yqjbpj3c33+0f+jyusiPsrd1Pm8W
Vd069HxeV8vFUfa7H549du+LFX01Ocqezduinhft4Al6da5p8/nkXT6t5jSS
VdG4RXmU/ZEG3M9ogOV8UszbftZQm3Vx1tCn1Uw/tHU5pp/G1WyR64cZPUw/
lfNpOS9+ci5fthdVfeSybED/n9EPzVH2Zpi9yOsP/IUswJtqVM7Dl1VNi3r8
Pqcl4L9pCcrpUVbP6IF/yfn7IXXGv9UVNqKYlG1Vp908H2YvyzGtezkvo76e
L8d55wfu70XR5nFv07k98y8z+ukzOnwxzE4Kens+j7qjSbXFPPlBO5jxL438
8C/n+HJrJ35Gr/N6siw602nir3kyj6fVcnI2JaJIpoRn/4X/u+AXNvfn5hUt
dVteFkdEaPOz8FeW/e75q+8GIKgjfu/Z4MmwQ7f8qbgEITh74fs7Wx+/uBM9
fPzyzY+Dw/3DfXm8zevzoj3KLtp20Rzt7eGFYTGZDZcXedMU03Y4KvbyeX21
J4/roXxSjJZyCjHQjMg7+/7t29d7d7Krsr3gs8df/nxZ0pHEmxM6XEcZOh7s
P+JvAuHaFm+h1fTHF/mHclZkr8s6X276/XVBhy/73TLf9OOP5Sx7ns+qti2c
c4PBIMtHdMjobDnHg17U1WU5KZqs+ADKKUfTAqfQeM804j1z5T0L4z39LJ9O
qyv93RV5s8qai7zGF9UZViDP2ou8zUbFvDgr24aPczXPJlhNXq98nk9XTdlk
dB4uqkmDL11b4YycD7O3F/QLcYwleAC91YzrckRjJcZDTc3HxYLapJ6EZQpR
0ajOymlB/2Ca9K8TWuhzfzpLGsOiKulb64OGNy9bfF/Ox9MlFqS9KLKL8vxi
MKUGplgJbtgJ/9T2zmlmxLIy7iPTn4bZm4KosS6YdclzS1pkMLCGl3JMnLWl
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

-->

</rfc>
