<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.29 (Ruby 3.4.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-wilton-netconf-yang-push-lite-02" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title abbrev="YANG-Push Lite">YANG Datastore Telemetry (YANG Push Lite)</title>
    <seriesInfo name="Internet-Draft" value="draft-wilton-netconf-yang-push-lite-02"/>
    <author fullname="Robert Wilton" role="editor">
      <organization>Cisco Systems</organization>
      <address>
        <email>rwilton@cisco.com</email>
      </address>
    </author>
    <author fullname="Holger Keller">
      <organization>Deuetsche Telekom</organization>
      <address>
        <email>Holger.Keller@telekom.de</email>
      </address>
    </author>
    <author fullname="Benoit Claise">
      <organization>Huawei</organization>
      <address>
        <email>benoit.claise@huawei.com</email>
      </address>
    </author>
    <author fullname="Ebben Aries">
      <organization>Juniper</organization>
      <address>
        <email>exa@juniper.net</email>
      </address>
    </author>
    <author fullname="James Cumming">
      <organization>Nokia</organization>
      <address>
        <email>james.cumming@nokia.com</email>
      </address>
    </author>
    <author fullname="Thomas Graf">
      <organization>Swisscom</organization>
      <address>
        <email>Thomas.Graf@swisscom.com</email>
      </address>
    </author>
    <date year="2025" month="October" day="20"/>
    <area>Operations and Management</area>
    <workgroup>Network Configuration</workgroup>
    <keyword>YANG Push</keyword>
    <keyword>Observability</keyword>
    <keyword>Network Telemetry</keyword>
    <keyword>Operational Data</keyword>
    <abstract>
      <?line 129?>

<t>YANG Push Lite is a YANG datastore telemetry solution, as an alternative specification to the Subscribed Notifications and YANG Push solution, specifically optimized for the efficient observability of operational data.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://rgwilton.github.io/draft-yp-observability/draft-wilton-netconf-yp-observability.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-wilton-netconf-yang-push-lite/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Network Configuration Working Group mailing list (<eref target="mailto:netconf@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/netconf/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/netconf/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/rgwilton/draft-yp-observability"/>.</t>
    </note>
  </front>
  <middle>
    <?line 133?>

<section anchor="document-status">
      <name>Document Status</name>
      <t><em>RFC Editor: If present, please remove this section before publication.</em>
        <em>RFC Editor: Please replace 'RFC XXXX' with the RFC number for this RFC.</em></t>
      <t>Based on the feedback received during the IETF 121 NETCONF session, this document has currently been written as a self-contained lightweight protocol and document replacement for <xref target="RFC8639"/> and <xref target="RFC8641"/>, defining a separate configuration data model.</t>
      <t><strong>The comparison between YANG Push and YANG Push Lite is now in <xref target="DifferencesFromYangPush"/>.</strong></t>
      <t><strong>Open issues are either now being tracked inline in the text or in <xref target="OpenIssuesTracker"/> for the higher level issues.</strong></t>
    </section>
    <section anchor="conventions">
      <name>Conventions</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>
      <?line -18?>

<t>All <em>YANG tree diagrams</em> used in this document follow the notation
defined in <xref target="RFC8340"/>.</t>
    </section>
    <section anchor="introduction">
      <name>Introduction</name>
      <t><xref target="I-D.ietf-nmop-yang-message-broker-integration"/> describes an architecture for how YANG datastore telemetry, e.g., <xref target="RFC8641"/>, can be integrated effectively with message brokers, e.g., <xref target="Kafka"/>, that forms part of a wider architecture for a <em>Network Anomaly Detection Framework</em>, specified in <xref target="I-D.ietf-nmop-network-anomaly-architecture"/>.</t>
      <t>This document specifies "YANG Push Lite", an lightweight alternative to Subscribed Notifications <xref target="RFC8639"/> and YANG Push <xref target="RFC8641"/>. YANG Push Lite is a separate YANG datastore telemetry solution, which can be implemented independently or, if desired, alongside <xref target="RFC8639"/> and <xref target="RFC8641"/>.</t>
      <t>At a high level, YANG Push Lite is designed to solve a similar set of requirements as YANG Push, and it reuses a significant subset of the ideas and base solution from YANG Push.  YANG Push Lite defines a separate data model to allow concurrent implementation of both protocols and to facilitate more significant changes in behavior, but many of the data nodes are taken from YANG Push and have the same, or very similar definitions.</t>
      <t>The following sections give the background for the solution, and highlight the key ways that this specification differs from the specifications that it is derived from.</t>
      <section anchor="background-and-motivation-for-yang-push-lite">
        <name>Background and Motivation for YANG Push Lite</name>
        <t>A push based telemetry solution, as described both in this document and also the YANG Push solution described by <xref target="RFC8639"/> and <xref target="RFC8641"/>, is beneficial because it allows operational data to be exported by publishers more immediately and efficiently compared to legacy poll based mechanisms, such as SNMP <xref target="RFC3411"/>.  Some further background information on the general motivations for push based telemetry, which equally apply here, can be found in the <em>Motivation</em> (section 1.1) of <xref target="RFC8639"/> and the Introduction (section 1) of <xref target="RFC8641"/>.  The remainder of this section is focused on the reasons why a new lightweight version of YANG Push has been specified, and what problems is aims to solve.</t>
        <t>Early implementation efforts of the <xref target="I-D.ietf-nmop-yang-message-broker-integration"/> architecture hit issues with using either of the two common YANG datastore telemetry solutions that have been specified, i.e., <xref target="gNMI"/> or YANG Push <xref target="RFC8641"/>.</t>
        <t>gNMI is specified by the OpenConfig Industry Consortium.  It is more widely implemented, but operators report that some inter-operability issues between device implementations cause problems.  Many of the OpenConfig protocols and data models are also expected to evolve more rapidly than IETF protocols and models - that are expected to have a more gradual pace of evolution once an RFC has been published.</t>
        <t>YANG Push <xref target="RFC8641"/> was standardized by the IETF in 2019, but market adoption has been rather slow.  During 2023/2024, when vendors started implementing, or considering implementing, YANG Push, it was seen that some design choices for how particular features have been specified in the solution make it expensive and difficult to write performant implementations, particularly when considering the complexities and distributed nature of operational data.  In addition, some design choices of how the data is encoded (e.g., YANG Patch <xref target="RFC8072"/>) make more sense when considering changes in configuration data but less sense when the goal is to export a subset of the operational data off the device in an efficient fashion for both devices (publishers) and clients (receivers).</t>
        <t>Hence, during 2024, the vendors and operators working towards YANG telemetry solutions agreed to a plan to implement a subset of <xref target="RFC8639"/> and <xref target="RFC8641"/>, including common agreements of features that are not needed and would not be implemented, and deviations from the standards for some aspects of encoding YANG data.  In addition, the implementation efforts identified the minimal subset of functionality needed to support the initial telemetry use cases, and areas of potential improvement and optimization to the overall YANG Push telemetry solution (which has been written up as a set of small internet drafts that augment or extend the base YANG Push solution).</t>
        <t>Out of this work, consensus was building to specify a cut down version of Subscribed Notifications <xref target="RFC8639"/> and YANG Push <xref target="RFC8641"/> that is both more focussed on the operational telemetry use case and is also easier to implement, achieved by relaxing some of the constraints on consistency on the device, and removing, or simplifying some of the operational features.  This has resulted in this specification, YANG Push Lite.</t>
        <t>The implementation efforts also gave rise to potential improvements to the protocol and encoding of notification messages.</t>
      </section>
      <section anchor="OperationalModellingComplexities">
        <name>Complexities in Modelling the Operational State Datastore</name>
        <t>The YANG abstraction of a single datastore of related consistent data works very well for configuration that has a strong requirement to be self consistent, and that is always updated, and validated, in a transactional way.  But for producers of telemetry data, the YANG abstraction of a single operational datastore is not really possible for devices managing a non-trivial quantity of operational data.</t>
        <t>Some systems may store their operational data in a single logical database, yet it is less likely that the operational data can always be updated in a transactional way, and often for memory efficiency reasons such a database does not store individual leaves, but instead semi-consistent records of data at a container or list entry level.</t>
        <t>For other systems, the operational information may be distributed across multiple internal nodes (e.g., linecards), and potentially many different process daemons within those distributed nodes.  Such systems generally do not, and cannot, exhibit full consistency <xref target="Consistency"/> of the operational data (which would require transactional semantics across all daemons and internal nodes), only offering an eventually consistent <xref target="EventualConsistency"/> view of the data instead.</t>
        <t>In practice, many network devices will manage their operational data as a combination of some data being stored in a central operational datastore, and other, higher scale, and potentially more frequently changing data (e.g., statistics or FIB information) being stored elsewhere in a more memory efficient and performant way.</t>
      </section>
      <section anchor="complexities-for-consumers-of-yang-push-data">
        <name>Complexities for Consumers of YANG Push Data</name>
        <t>For the consumer of the telemetry data, there is a requirement to associate a schema with the instance-data that will be provided by a subscription.  One approach is to fetch and build the entire schema for the device, e.g., by fetching YANG library, and then use the subscription XPath to select the relevant subtree of the schema that applies only to the subscription.  The problem with this approach is that if the schema ever changes, e.g., after a software update, then it is reasonably likely of some changes occurring with the global device schema even if there are no changes to the schema subtree under the subscription path.  Hence, it would be helpful to identify and version the schema associated with a particular subscription path, and also to encoded the instance data relatively to the subscription path rather than as an absolute path from the root of the operational datastore.</t>
        <t><strong>TODO More needs to be added here, e.g., encoding, on-change considerations.  Splitting subscriptions up.</strong></t>
        <t>This document proposes a new opt-in YANG-Push encoding format to use instead of the "push-update" and "push-change-update" notifications defined in <xref target="RFC8641"/>.</t>
        <ol spacing="normal" type="1"><li>
            <t>To allow the device to split a subscription into smaller child subscriptions for more efficient independent and concurrent processing.  I.e., reusing the ideas from <xref target="I-D.ietf-netconf-distributed-notif"/>.  However, all child subscriptions are still encoded from the same subscription point.</t>
          </li>
        </ol>
        <section anchor="combined-periodic-and-on-change-subscription">
          <name>Combined periodic and on-change subscription</name>
          <t>Sometimes it is helpful to have a single subscription that covers both periodic and on-change notifications.</t>
          <t>There are two ways in which this may be useful:</t>
          <ol spacing="normal" type="1"><li>
              <t>For generally slow changing data (e.g., a device's physical inventory), then on-change notifications may be most appropriate.  However, in case there is any lost notification that isn't always detected, for any reason, then it may also be helpful to have a slow cadence periodic backup notification of the data (e.g., once every 24 hours), to ensure that the management systems should always eventually converge on the current state in the network.</t>
            </li>
            <li>
              <t>For data that is generally polled on a periodic basis (e.g., once every 10 minutes) and put into a time series database, then it may be helpful for some data trees to also get more immediate notifications that the data has changed.  Hence, a combined periodic and on-change subscription, would facilitate more frequent notifications of changes of the state, to reduce the need of having to always wait for the next periodic event.</t>
            </li>
          </ol>
          <t>Hence, this document introduces the fairly intuitive "periodic-and-on-change" update trigger that creates a combined periodic and on-change subscription, and allows the same parameters to be configured.  For some use cases, e.g., where a time-series database is being updated, the new encoding format proposed previously may be most useful.</t>
        </section>
      </section>
      <section anchor="DraftRelationships">
        <name>Relationships to existing RFCs and Internet Drafts</name>
        <t>This document, specifying YANG Push Lite, is intended to be a lightweight alternative for <xref target="RFC8639"/> and <xref target="RFC8641"/>, but that also incorporates various extensions since those RFCs were written.  Often substantial parts of those documents and models have been incorporated almost verbatim, but modified to fit the YANG Push Lite functionality and module structure.</t>
        <t>Hence, the authors of this draft would like to sincerely thank and acknowledge the very significant effort put into those RFCs and drafts by authors, contributors and reviewers.  In particular, We would like to thank the listed authors of these documents: Eric Voit, Alex Clemm, Alberto Gonzalez Prieto, Einar Nilsen-Nygaard, Ambika Prasad Tripathy, Balazs Lengyel, Alexander Clemm, Benoit Claise, Qin Wu, Qiufang Ma, Alex Huang Feng, Thomas Graf, Pierre Francois.</t>
        <section anchor="rfc-8639-and-rfc-8641">
          <name>RFC 8639 and RFC 8641</name>
          <t>This document is primarily intended to be a lightweight alternative for <xref target="RFC8639"/> and <xref target="RFC8641"/>, but it intentionally reuses substantial parts of the design and data model of those RFCs.</t>
          <t>YANG Push Lite is defined using a separate module namespace, and hence can be implemented independently or, if desired, alongside <xref target="RFC8639"/> and <xref target="RFC8641"/>, and the various extensions to YANG Push.</t>
          <t>A more complete description of the main differences in YANG Push Lite compares to <xref target="RFC8639"/> and <xref target="RFC8641"/> is given in <xref target="DifferencesFromYangPush"/>.</t>
        </section>
        <section anchor="i-ddraft-ietf-netconf-notif-envelope-and-rfc-5277">
          <name><xref target="I-D.draft-ietf-netconf-notif-envelope"/> and RFC 5277</name>
          <t>All of the notifications defined in this specification, i.e., both the datastore update message and subscription lifecycle update notifications (<xref target="LifecycleNotifications"/>) depend upon and use the notification envelope format defined in <xref target="I-D.draft-ietf-netconf-notif-envelope"/>.</t>
          <t>As such, this specification does not make any use of the notification format defined in <xref target="RFC5277"/>, but this does not prevent implementations using <xref target="RFC5277"/> format notifications for other YANG notifications, e.g., for the "NETCONF" event stream defined in <xref target="RFC5277"/>.</t>
        </section>
        <section anchor="rfc-9196-and-i-ddraft-netana-netconf-yp-transport-capabilities">
          <name>RFC 9196 and <xref target="I-D.draft-netana-netconf-yp-transport-capabilities"/></name>
          <t>This document uses the capabilities concepts defined in <xref target="RFC9196"/>.</t>
          <t>In particular, it augments into the ietf-system-capabilities YANG module, but defines an equivalent alternative capability structure for the ietf-notification-capabilities YANG module, which defines the capabilities for YANG Push <xref target="RFC8641"/>.</t>
          <t>The generic transport capabilities defined in <xref target="I-D.draft-netana-netconf-yp-transport-capabilities"/> have been incorporated into the ietf-yp-lite YANG module, to augment YANG Push Lite transport capabilities and to use the different identities.</t>
        </section>
        <section anchor="i-ddraft-ietf-netconf-https-notif-and-i-ddraft-ietf-netconf-udp-notif">
          <name><xref target="I-D.draft-ietf-netconf-https-notif"/> and <xref target="I-D.draft-ietf-netconf-udp-notif"/></name>
          <t>The ietf-yp-lite YANG module has subsumed and extended the <em>receivers</em> data model defined in the ietf-subscribed-notif-receivers YANG module defined in <xref target="I-D.draft-ietf-netconf-https-notif"/>.</t>
          <t>The overall YANG Push Lite solution anticipates and requires new bis versions of both of these transports documents that augment into the <em>receivers/receiver/transport-type</em> choice statement, and also augment the transport identity defined in the ietf-yp-lite data model.</t>
        </section>
        <section anchor="i-ddraft-ietf-netconf-distributed-notif">
          <name><xref target="I-D.draft-ietf-netconf-distributed-notif"/></name>
          <t><strong>TODO.  It is likely that some of the base support for distributed notifications will be incorporated into this draft.  If so, add acknowledgements to the authors.</strong></t>
        </section>
      </section>
    </section>
    <section anchor="overview">
      <name>YANG Push Lite Overview</name>
      <t>This document specifies a lightweight telemetry solution that provides a subscription service for updates to the state and changes in state from a chosen datastore.</t>
      <t>Subscriptions specify when notification messages (also referred to as <em>updates</em>) should be sent, what data to include in the update records, and where those notifications should be sent.</t>
      <t>A YANG Push lite subscription comprises:</t>
      <ul spacing="normal">
        <li>
          <t>a target datastore for the subscription, where the monitored subscription data is logically sourced from.</t>
        </li>
        <li>
          <t>a set of selection filters to choose which datastore nodes from the target datastore the subscription is monitoring or sampling, as described in <xref target="pathsAndFilters"/>.</t>
        </li>
        <li>
          <t>a choice of how update event notifications for the datastore's data nodes are triggered.  I.e., either periodic sampling of the current state, on-change event-driven, or both.  These are described in <strong>TODO, add reference</strong>.</t>
        </li>
        <li>
          <t>a choice of encoding of the messages, e.g., JSON, or CBOR.</t>
        </li>
        <li>
          <t>a set of one or more receivers for which datastore updates and subscription notifications are sent, as described in <xref target="receivers"/>;  </t>
          <ul spacing="normal">
            <li>
              <t>for configured subscriptions, the receivers parameters are configured, and specify transport, receiver, and encoding parameters.</t>
            </li>
            <li>
              <t>for dynamic subscriptions, the receiver uses the same transport session on which the dynamic subscription has been created.</t>
            </li>
          </ul>
        </li>
      </ul>
      <t>If a subscription is valid and acceptable to the publisher, and if a suitable connection can be made to one or more receivers associated with a subscription, then the publisher will enact the subscription, periodically sampling or monitoring changes to the chosen datastore's data nodes that match the selection filter.  Push updates are subsequently sent by the publisher to the receivers, as per the terms of the subscription.</t>
      <t>Subscriptions may be set up in two ways: either through configuration - or YANG RPCs to create and manage dynamic subscriptions.  These two mechanisms are described in <xref target="ConfiguredAndDynamic"/>.</t>
      <t>Changes to the state of subscription are notified to receivers as subscription lifecycle notifications.  These are described in <xref target="LifecycleNotifications"/>.</t>
      <t>Security access control mechanisms, e.g., NACM {RFC8341}} can be used to ensure the receivers only get access to the information for which they are allowed.  This is further described in <xref target="security"/>.</t>
      <t>While the functionality defined in this document is transport agnostic, transports like the Network Configuration Protocol (NETCONF) <xref target="RFC6241"/> or RESTCONF <xref target="RFC8040"/> can be used to configure or dynamically signal subscriptions.  In the case of configured subscription, the transport used for carrying the subscription notifications is entirely independent from the protocol used to configure the subscription, and other transports, e.g., <xref target="I-D.draft-ietf-netconf-udp-notif"/> defines a simple UDP based transport for Push notifications. Transport considerations are described in <xref target="transports"/>. <strong>TODO the reference to draft-ietf-netconf-udp-notif isn't right, it wouldn't be that draft, but a -bis version of it.  James is querying whether we need this at all</strong></t>
      <t><strong>TODO Introduce capabilities and operational monitoring</strong></t>
      <t>This document defines a YANG data model, that includes RPCs and notifications, for configuring and managing subscriptions and associated configuration, and to define the format of a <em>update</em> notification message.  The YANG model is defined in <xref target="yp-lite-yang-module"/> and associated tree view in <xref target="yp-lite-tree"/>.  The YANG data model defined in this document conforms to the Network Management Datastore Architecture defined in <xref target="RFC8342"/>.</t>
    </section>
    <section anchor="terminology">
      <name>Definitions</name>
      <t>This document reuses the terminology defined in <xref target="RFC7950"/>, <xref target="RFC8341"/>, <xref target="RFC8342"/>, <xref target="RFC8639"/> and <xref target="RFC8641"/>.</t>
      <t>The following terms are taken from <xref target="RFC8342"/>:</t>
      <ul spacing="normal">
        <li>
          <t><em>Datastore</em>: A conceptual place to store and access information.  A datastore might be implemented, for example, using files, a database, flash memory locations, or combinations thereof.  A datastore maps to an instantiated YANG data tree.</t>
        </li>
        <li>
          <t><em>Client</em>: An entity that can access YANG-defined data on a server, over some network management protocol.</t>
        </li>
        <li>
          <t><em>Configuration</em>: Data that is required to get a device from its initial default state into a desired operational state.  This data is modeled in YANG using "config true" nodes.  Configuration can originate from different sources.</t>
        </li>
        <li>
          <t><em>Configuration datastore</em>: A datastore holding configuration.</t>
        </li>
      </ul>
      <t>The following terms are taken from <xref target="RFC8639"/>:</t>
      <ul spacing="normal">
        <li>
          <t><em>Configured subscription</em>: A subscription installed via configuration into a configuration datastore.</t>
        </li>
        <li>
          <t><em>Dynamic subscription</em>: A subscription created dynamically by a subscriber via a Remote Procedure Call (RPC).</t>
        </li>
        <li>
          <t><em>Event</em>: An occurrence of something that may be of interest.  Examples include a configuration change, a fault, a change in status, crossing a threshold, or an external input to the system.</t>
        </li>
        <li>
          <t><em>Event occurrence time</em>: A timestamp matching the time an originating process identified as when an event happened.</t>
        </li>
        <li>
          <t><em>Event record</em>: A set of information detailing an event.</t>
        </li>
        <li>
          <t><em>Event stream</em>: A continuous, chronologically ordered set of events aggregated under some context.</t>
        </li>
        <li>
          <t><em>Event stream filter</em>: Evaluation criteria that may be applied against event records in an event stream.  Event records pass the filter when specified criteria are met.</t>
        </li>
        <li>
          <t><em>Notification message</em>: Information intended for a receiver indicating that one or more events have occurred.</t>
        </li>
        <li>
          <t><em>Publisher</em>: An entity responsible for streaming notification messages per the terms of a subscription.</t>
        </li>
        <li>
          <t><em>Receiver</em>: A target to which a publisher pushes subscribed event records.  For dynamic subscriptions, the receiver and subscriber are the same entity.</t>
        </li>
        <li>
          <t><em>Subscriber</em>: A client able to request and negotiate a contract for the generation and push of event records from a publisher.  For dynamic subscriptions, the receiver and subscriber are the same entity.</t>
        </li>
      </ul>
      <t>The following terms are taken from <xref target="RFC8641"/>:</t>
      <ul spacing="normal">
        <li>
          <t><em>Datastore node</em>: A node in the instantiated YANG data tree associated with a datastore.  In this document, datastore nodes are often also simply referred to as "objects".</t>
        </li>
        <li>
          <t><em>Datastore node update</em>: A data item containing the current value of a datastore node at the time the datastore node update was created, as well as the path to the datastore node.</t>
        </li>
        <li>
          <t><em>Datastore subscription</em>: A subscription to a stream of datastore node updates.</t>
        </li>
        <li>
          <t><em>Datastore subtree</em>: A datastore node and all its descendant datastore nodes.</t>
        </li>
        <li>
          <t><em>On-change subscription</em>: A datastore subscription with updates that are triggered when changes in subscribed datastore nodes are detected.</t>
        </li>
        <li>
          <t><em>Periodic subscription</em>: A datastore subscription with updates that are triggered periodically according to some time interval.</t>
        </li>
        <li>
          <t><em>Selection filter</em>: Evaluation and/or selection criteria that may be applied against a targeted set of objects.</t>
        </li>
        <li>
          <t><em>Update record</em>: A representation of one or more datastore node updates.  In addition, an update record may contain which type of update led to the datastore node update (e.g., whether the datastore node was added, changed, or deleted).  Also included in the update record may be other metadata, such as a subscription ID of the subscription for which the update record was generated.  In this document, update records are often also simply referred to as "updates".</t>
        </li>
        <li>
          <t><em>Update trigger</em>: A mechanism that determines when an update record needs to be generated.</t>
        </li>
        <li>
          <t><em>YANG-Push</em>: The subscription and push mechanism for datastore updates that is specified in <xref target="RFC8641"/>.</t>
        </li>
      </ul>
      <t>This document introduces the following terms:</t>
      <ul spacing="normal">
        <li>
          <t><em>Subscription</em>: A registration with a publisher, stipulating the information that one or more receivers wish to have pushed from the publisher without the need for further solicitation.</t>
        </li>
        <li>
          <t><em>Subscription Identifier</em>: A numerical identifier for a configured or dynamic subscription.  Also referred to as the subscription-id.</t>
        </li>
        <li>
          <t><em>YANG-Push-Lite</em>: The light weight subscription and push mechanism for datastore updates that is specified in this document. <strong>Add comment</strong></t>
        </li>
      </ul>
    </section>
    <section anchor="pathsAndFilters">
      <name>Subscription paths and selection filters</name>
      <t>A key part of a subscription is to select which data nodes should be monitored, and so a subscription must specify both the selection filters and the datastore against which these selection filters will be applied.  This information is used to choose, and subsequently push, <em>update</em> notifications from the publisher's datastore(s) to the subscription's receiver(s).</t>
      <t>Filters can either be defined inline within a configured subscription (<xref target="SubscriptionYangTree"/>), a dynamic subscription's <em>establish-subscription</em> RPC (<xref target="EstablishSubscriptionYangTree"/>), or as part of the <em>datastore-telemetry/filters</em> container (<xref target="FilterContainerYangTree"/>) which can then be referenced from a configured or dynamic subscription.</t>
      <t>The following selection filter types are included in the YANG Push Lite data model and may be applied against a datastore:</t>
      <ul spacing="normal">
        <li>
          <t><em>YPaths</em>: A list of basic YANG path selection filters that defines a path to a subtree of data nodes in the data tree, with some simple constraints on keys. See <xref target="YPaths"/>.</t>
        </li>
        <li>
          <t><em>subtree</em>: A subtree selection filter identifies one or more datastore subtrees.  When specified, <em>update</em> records will only include the datastore nodes of selected datastore subtree(s).  The syntax and semantics correspond to those specified in <xref target="RFC6241"/>, Section 6.</t>
        </li>
        <li>
          <t><em>XPaths</em>: A list of <em>XPath</em> (<xref target="XPATH"/>) selection filter expressions.  When specified, updates will only come from the selected datastore nodes that match the node set associated with the XPath expression.</t>
        </li>
      </ul>
      <t>These filters are used as selectors that define which data nodes fall within the scope of a subscription.  A publisher <bcp14>MUST</bcp14> support YPath filters, and <bcp14>MAY</bcp14> also support subtree or XPath filters.</t>
      <t>For both YPath and XPath based filters, each filter may define a list of path expressions.  Each of these filter path expressions <bcp14>MAY</bcp14> be processed by the publisher independently, and if two or more filter path expressions end up selecting overlapping data nodes then the publisher <bcp14>MAY</bcp14> notify duplicate values for those data nodes, but the encoded data that is returned <bcp14>MUST</bcp14> always be syntactically valid, i.e., as per section 5.3 of <xref target="RFC8342"/>.</t>
      <section anchor="YPaths">
        <name><em>YPath</em> definition</name>
        <t>A <em>YPath</em> represents a simple path into a YANG schema tree, where some of the list key values may be constrained.</t>
        <t>It is encoded in the similar format to the YANG JSON encoding for instance-identifier, section 6.11 of <xref target="RFC7951"/>, except with more flexibility on the keys, in that keys may be left-out or be bound to a regular expression filter.</t>
        <t>The rules for constructing a YPath are:</t>
        <ul spacing="normal">
          <li>
            <t>A YPath is a sequence of data tree path segment separated by a '/' character.  If the path starts with a '/' then it is absolute path from the root of the schema, otherwise it is a relative path, where the context of the relative path must be declared.</t>
          </li>
          <li>
            <t>Constraints on key values may be specified within a single pair of '[' ']' brackets, where:  </t>
            <ul spacing="normal">
              <li>
                <t>keys may be given in any order, and may be omitted, in which case they match any value.  Key matches are separated by a comma (,) with optional space character either side.</t>
              </li>
              <li>
                <t>key match is given by <em>&lt;key&gt;=&lt;value&gt;</em>, with optional space characters either side of the equals (=), and value is specified as:      </t>
                <ul spacing="normal">
                  <li>
                    <t>'&lt;value&gt;', for an exact match of the key's value.  Single quote characters (') must be escaped with a backslash (\).</t>
                  </li>
                  <li>
                    <t>r'&lt;reg-expr&gt;', for a regex match of the key value using <xref target="RFC9485"/>, and where the regular-expression is a full match of the string, i.e, it implicit anchors to the start and end of the value.</t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
        </ul>
        <t>Some examples of YPaths:</t>
        <ul spacing="normal">
          <li>
            <t><em>/ietf-interfaces:interfaces/interface[name='eth0']/ietf-ip:ipv6/ip</em> - which identifies is 'ipv6/ip' data node in the ietf-ip module for the 'eth0' interface.</t>
          </li>
          <li>
            <t><em>/ietf-interfaces:interfaces/interface[name=r'eth.*']/ietf-ip:ipv6/ip</em> - which identifies all interfaces with a name that start with "eth".</t>
          </li>
          <li>
            <t><em>/example:multi-keys-list[first-key='foo', second-key=r'bar.*']</em> - which identifies all entries in the 'multi-keys-list, where the first-key matches foo, and the second-key starts with bar.</t>
          </li>
          <li>
            <t><em>/ietf-interfaces:interfaces/interface</em> - which identifies the <em>interface</em> list data node in the ietf-interfaces module for all interfaces.  I.e., the interface list 'name' key is unrestricted.</t>
          </li>
          <li>
            <t><em>/ietf-interfaces:interfaces/interface[]</em> - alternative form of the previous YPath.</t>
          </li>
        </ul>
      </section>
      <section anchor="the-filters-container">
        <name>The "filters" Container</name>
        <t>The "filters" container maintains a list of all datastore subscription filters that persist outside the lifecycle of a single subscription.  This enables predefined filters that may be referenced by more than one configured or dynamic subscription.</t>
        <t>Below is a tree diagram for the "filters" container.  All objects contained in this tree are described in the YANG module in <xref target="ietf-yp-lite-yang"/>.</t>
        <figure anchor="FilterContainerYangTree">
          <sourcecode type="yangtree"><![CDATA[
module: ietf-yp-lite-config
  +--rw datastore-telemetry!
     +--rw filters
        +--rw filter* [name]
           +--rw name             string
           +--rw (filter)
              +--:(path)
              |  +--rw path       ypath
              +--:(subtree)
              |  +--rw subtree    <anydata> {ypl:subtree}?
              +--:(xpath)
                 +--rw xpath      yang:xpath1.0 {ypl:xpath}?

  augment /ypl:establish-subscription/ypl:input/ypl:target
            /ypl:filter:
    +--:(by-reference)
  augment /ypl:subscription-started/ypl:target:
    +-- filter-ref?   filter-ref
]]></sourcecode>
        </figure>
      </section>
      <section anchor="decomposing-subscription-filters">
        <name>Decomposing Subscription Filters</name>
        <t>In order to address the issues described in <xref target="OperationalModellingComplexities"/>, YANG Push Lite allows for publishers to send subtrees of data nodes in separate <em>update</em> notifications, rather than requiring that the subscription data be returned as a single datastore <em>update</em> notification covering all data nodes matched by the subscription filter.  This better facilitates publishers that internally group some of their operational data fields together into larger structures for efficiency, and avoids publishers or receivers having to consume potentially very large notification messages.  For example, each entry in the <em>/ietf-interfaces:interface/interface</em> list could be represented as an object of data internally within the publisher.  In essence, a client specified subscription filter can be decomposed by a publisher into more specific non-overlapping filters that are then used to return the data.</t>
        <t>In particular:</t>
        <ol spacing="normal" type="1"><li>
            <t>A Publisher <bcp14>MAY</bcp14> decompose a client specified subscription filter path into a set of non-overlapping subscription filter paths that collectively cover the same data.  The publisher is allowed to return data for each of these decomposed subscription filter paths in separate <em>update</em> notification messages, each with separate, perhaps more precise, <em>observation-time</em> timestamps, but all using the same notification <em>event-time</em>.</t>
          </li>
          <li>
            <t>A Publisher <bcp14>MAY</bcp14> split large lists into multiple separate update messages, each with separate <em>observation-time</em> timestamps, but all using the same notification <em>event-time</em>.  E.g., if a device has 10,000 entries in a list, it may return them in a single response, or it may split them into multiple smaller messages, perhaps for 500 interfaces at a time.</t>
          </li>
        </ol>
        <!--
1. A Publisher is allowed to generate on-change notifications at an *object* level, which hence may contain other associated fields that may not have changed state, rather than restricting the on-change notifications strictly to only those specific fields that have changed state.  E.g., if a subscribers registers on the path */ietf-interfaces:interfaces/interface\[name = \*\]/oper-status*, and if interface *eth1* had a change in the *oper-status* leaf state, then rather than just publishing the updated *oper-status* leaf, the publisher may instead publish all the data associated with that interface entry object, i.e., everything under */ietf-interfaces:interface/interface\[name = eth1\]*.  **TODO Does it have to be the entire subtree that is published?  Do we need to add a capability annotation to indicate the object publication paths?**
-->

<t>To ensure that clients can reasonably process data returned via decomposed filters then:</t>
        <ol spacing="normal" type="1"><li>
            <t><em>update</em> notifications <bcp14>MUST</bcp14> indicate the precise subtree of data that the update message is updating or replacing, i.e., so a receiver can infer that data nodes no longer being notified by the publisher have been deleted:  </t>
            <ul spacing="normal">
              <li>
                <t>if we support splitting list entries in multiple updates, then something like a <em>more_data</em> flag is needed to indicate that the given update message is not complete.</t>
              </li>
            </ul>
          </li>
        </ol>
      </section>
    </section>
    <section anchor="events">
      <name>Datastore Event Streams</name>
      <t>In YANG Push Lite, a subscription, based on the selected filters, will generate a ordered stream of datastore <em>update</em> records that is referred to as an event stream.  Each subscription logically has a different event stream of update records, even if multiple subscriptions use the same filters to select datastore nodes.</t>
      <t>As YANG-defined event records are created by a system, they may be assigned to one or more streams.  The event record is distributed to a subscription's receiver(s) where (1) a subscription includes the identified stream and (2) subscription filtering does not exclude the event record from that receiver.</t>
      <t>Access control permissions may be used to silently exclude event records from an event stream for which the receiver has no read access.  See <xref target="RFC8341"/>, Section 3.4.6 for an example of how this might be accomplished.  Note that per Section 2.7 of this document, subscription state change notifications are never filtered out. <strong>TODO, filtering and NACM filtering should be dependent on whether it is a configured or dynamic subscription.</strong></t>
      <t>If subscriber permissions change during the lifecycle of a subscription and event stream access is no longer permitted, then the subscription <bcp14>MUST</bcp14> be terminated. <strong>TODO, check this</strong></t>
      <t>Event records <bcp14>SHALL</bcp14> be sent to a receiver in the order in which they were generated.  I.e., the publisher <bcp14>MUST</bcp14> not reorder the events when enqueuing notifications on the transport session, but there is no guarantee of delivery order.</t>
      <t>Event records <bcp14>MUST NOT</bcp14> be sent before a <em>subscription-started</em> notification (<xref target="SubscriptionStartedNotification"/>) or after a <em>subscription-terminated</em> notification (<xref target="SubscriptionTerminatedNotification"/>), or to a particular receiver that has been sent a <em>receiver-disconnected</em> notification (<xref target="ReceiverDisconnectedNotification"/>).</t>
      <section anchor="FullNotificationExample">
        <name>Notification Envelope</name>
        <t>All notifications in the event stream <bcp14>MUST</bcp14> be encoded using <xref target="I-D.draft-ietf-netconf-notif-envelope"/> to wrap the notification message, and <bcp14>MUST</bcp14> include the <em>event-time</em>, <em>hostname</em>, and <em>sequence-number</em> leafs in all messages.</t>
        <t>The following example illustrates a fully encoded <em>update</em> notification that includes the notification envelope and additional meta-data fields.  The <em>update</em> notification, i.e., as defined via the <em>notification</em> statement in the yang-push-lite YANG module, is carried in the <em>contents</em> anydata data node.</t>
        <figure>
          <name>Example of update notification including notification envelope</name>
          <sourcecode type="json"><![CDATA[
{
  "ietf-yp-notification:envelope": {
    "event-time": "2024-10-10T08:00:05.22Z",
    "hostname": "example-router",
    "sequence-number": 3219,
    "contents": {
      "ietf-yp-lite:update": {
        "id": 1011,
        "snapshot-type": "periodic",
        "observation-time": "2024-10-10T08:00:05.11Z",
        "updates": [
          {
            "target-path": "ietf-interfaces:interfaces/interface",
            "data": {
              "ietf-interfaces:interfaces": {
                "ietf-interfaces:interface": [
                  {
                    "name": "eth0",
                    "type": "iana-if-type:ethernetCsmacd",
                    "enabled": true,
                    "ietf-interfaces:oper-status": "up",
                    "ietf-interfaces:admin-status": "up"
                  },
                  {
                    "name": "eth1",
                    "type": "iana-if-type:ethernetCsmacd",
                    "enabled": true,
                    "ietf-interfaces:oper-status": "up",
                    "ietf-interfaces:admin-status": "up"
                  }
                ]
              }
            }
          }
        ]
      }
    }
  }
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="EventRecords">
        <name>Event Records</name>
        <t>A single <em>update</em> record is used for all datastore notifications.  It is used to report the current state of a set of data nodes at a given target path for either periodic, on-change, or resync notifications, and also for on-change notifications to indicate that the data node at the given target path has been deleted.</t>
        <t>The schema for this notifications is given in the following tree diagram:</t>
        <figure>
          <name>'update' notification</name>
          <sourcecode type="yangtree"><![CDATA[
    +---n update
    |  +--ro id?                 subscription-id
    |  +--ro path-prefix?        string
    |  +--ro snapshot-type?      enumeration
    |  +--ro observation-time?   yang:date-and-time
    |  +--ro updates* [target-path]
    |  |  +--ro target-path    string
    |  |  +--ro data?          <anydata>
    |  +--ro complete?           empty
]]></sourcecode>
        </figure>
        <t>The normative definitions for the notifications fields are given in the YANG module in <xref target="ietf-yp-lite-yang"/>.  The fields can be informatively summarized as:</t>
        <ul spacing="normal">
          <li>
            <t><em>id</em> - identifies the subscription the notification relates to.</t>
          </li>
          <li>
            <t><em>path-prefix</em> - identifies the absolute instance-data path to which all target-paths are data are encoded relative to.</t>
          </li>
          <li>
            <t><em>snapshot-type</em> - this indicates what type of event causes the update message to be sent.  I.e., a periodic collection, an on-change event, or a resync collection.</t>
          </li>
          <li>
            <t><em>observation-time</em> - the time that the data was sampled, or when the on-change event occurred that caused the message to be published.</t>
          </li>
          <li>
            <t><em>target-path</em> - identifies the data node that is being acted on, either providing the replacement data for, or that data node that is being deleted.</t>
          </li>
          <li>
            <t><em>data</em> - the full replacement data subtree for the content at the target-path, encoded from the path-prefix.</t>
          </li>
          <li>
            <t><em>complete</em> - if present, this flag indicates that a periodic collection (<strong>TODO, what about on-change</strong>) is complete. Setting this flag is semantically equivalent to the server sending a separate update-complete notification.</t>
          </li>
        </ul>
        <!--
- *incomplete* - indicates that the message is incomplete for any reason.  For example, perhaps a periodic subscription expects to retrieve data from multiple data sources, but one of those data sources is unavailable.  Normally, a receiver can use the absence of a field in an update message to implicitly indicate that the field has been deleted, but that should not be inferred if the incomplete-update leaf is present because not all changes that have occurred since the last update are actually included with this update.-->

<t>As per the structure of the <em>update</em> notification, a single notification <bcp14>MAY</bcp14> provide updates for multiple target-paths.</t>
      </section>
      <section anchor="types-of-subscription-event-monitoring">
        <name>Types of subscription event monitoring</name>
        <t>Subscription can either be based on sampling the requested data on a periodic cadence or being notified when the requested data changes.  In addition, this specification allows for subscriptions that both notify on-change and also with a periodic cadence, which can help ensure that the system eventually converges on the right state, even if on-change notification were somehow lost or mis-processed anywhere in the data processing pipeline.</t>
        <t>The schema for the update-trigger container is given in the following tree diagram:</t>
        <figure>
          <name>'update-trigger' container</name>
          <sourcecode type="yangtree"><![CDATA[
module: ietf-yp-lite-config
  +--rw datastore-telemetry!
     +--rw subscriptions
        +--rw subscription* [name]
           +--rw update-trigger
              +--rw periodic!
              |  +--rw period         centiseconds
              |  +--rw anchor-time?   yang:date-and-time
              +--rw on-change! {on-change}?
                 +--rw sync-on-start?   boolean

  augment /ypl:establish-subscription/ypl:input/ypl:target
            /ypl:filter:
    +--:(by-reference)
  augment /ypl:subscription-started/ypl:target:
    +-- filter-ref?   filter-ref
]]></sourcecode>
        </figure>
        <t>The normative definitions for the update-trigger fields are given in the <em>ietf-yp-lite</em> YANG module in <xref target="ietf-yp-lite-yang"/>.  They are also described in the following sections.</t>
      </section>
      <section anchor="periodic-events">
        <name>Periodic events</name>
        <t>In a periodic subscription, the data included as part of an update record corresponds to data that could have been read using a retrieval operation.  Only the state that exists in the system at the time that it is being read is reported, periodic updates never explicitly indicate whether any data-nodes or list entries have been deleted.  Instead, receivers must infer deletions by the absence of data during a particular collection event.</t>
        <t>For periodic subscriptions, triggered updates will occur at the boundaries of a specified time interval.  These boundaries can be calculated from the periodic parameters:</t>
        <ul spacing="normal">
          <li>
            <t>a <em>period</em> that defines the duration between push updates.</t>
          </li>
          <li>
            <t>an <em>anchor-time</em>; update intervals fall on the points in time that are a multiple of a <em>period</em> from an <em>anchor-time</em>.  If an <em>anchor-time</em> is not provided, then the publisher chooses a suitable anchor-time, e.g., perhaps the time that the subscription was first instantiated by the publisher.</t>
          </li>
        </ul>
        <t>The anchor time and period are particularly useful, in fact required, for when the collected telemetry data is being stored in a time-series database and the subscription is setup to ensure that each collection is placed in a separate time-interval bucket.</t>
        <t>Periodic update notifications are expected, but not required, to use a single <em>target-path</em> per <em>update</em> notification.</t>
      </section>
      <section anchor="on-change-events">
        <name>On-Change events</name>
        <t>In an on-change subscription, <em>update</em> records indicate updated values or when a monitored data node or list node has been deleted.  An <em>update</em> record is sent whenever a change in the subscribed information is detected. <em>update</em> records <bcp14>SHOULD</bcp14> be generated at the same subtree as equivalent periodic subscription rather than only the specific data node that is on-change notifiable.  The goal is to ensure that the <em>update</em> message contains a consistent set of data on the subscription path.</t>
        <t>Each entry in the <em>updates</em> list identifies a data node (i.e., list entry, container, leaf or leaf-list), via the <em>target-path</em> that either has changes is state or has been deleted.</t>
        <t>A delete of a specific individual data node or subtree may be notified in two different ways:</t>
        <ul spacing="normal">
          <li>
            <t>if the data that is being deleted is below the <em>target-path</em> then the delete is implicit by the publisher returning the current data node subtree with the delete data nodes missing.  I.e., the receiver must implicitly infer deletion.</t>
          </li>
          <li>
            <t>if the data node is being deleted at the target path.  E.g., if an interface is deleted then an entire list entry related to that interface may be removed.  In this case, the <em>target path</em> identifies the list entry that is being deleted, but the data returned is just an empty object <tt>{}</tt>, which replaces all the existing data for that object in the receiver. <strong>TODO, is this better as a delete flag, or separate delete list?</strong></t>
          </li>
        </ul>
        <t>On-change subscriptions also support the following additional parameters:</t>
        <ul spacing="normal">
          <li>
            <t><em>sync-on-start</em> defines whether or not a complete snapshot of all subscribed data is sent at the start of a subscription.  Such early synchronization establishes the frame of reference for subsequent updates.</t>
          </li>
        </ul>
        <section anchor="OnChangeConsiderations">
          <name>On-Change Notifiable Datastore Nodes</name>
          <t>Publishers are not required to support on-change notifications for all data nodes, and they may not be able to generate on-change updates for some data nodes.  Possible reasons for this include:</t>
          <ul spacing="normal">
            <li>
              <t>the value of the datastore node changes frequently (e.g., the in-octets counter as defined in <xref target="RFC8343"/>),</t>
            </li>
            <li>
              <t>small object changes that are frequent and meaningless (e.g., a temperature gauge changing 0.1 degrees),</t>
            </li>
            <li>
              <t>or no implementation is available to generate a notification when the source variable for a particular data node has changed.</t>
            </li>
          </ul>
          <t>In addition, publishers are not required to notify every change or value for an on-change monitored data node.  Instead, publishers <bcp14>MAY</bcp14> limit the rate at which changes are reported for a given data node, i.e., effectively deciding the interval at which an underlying value is sampled.  If a data node changes value and then reverts back to the original value within a sample interval then the publisher <bcp14>MAY</bcp14> not detect the change and it would go unreported.  However, if the data node changes to a new value after it has been sampled, then the change and latest state are reported to the receiver.  In addition, if a client was to query the value (e.g., through a NETCONF get-data RPC) then they <bcp14>MUST</bcp14> see the same observed value as would be notified.</t>
          <t>To give an example, if the interface link state reported by hardware is changing state hundreds of times per second, then it would be entirely reasonable to limit those interface state changes to a much lower cadence, e.g., perhaps every 100 milliseconds.  In the particular case of interfaces, there may also be data model specific forms of more advanced dampening that are more appropriate, e.g., that notify interface down events immediately, but rate limit how quickly the interface is allowed to transition to up state, which overall acts as a limit on the rate at which the interface state may change, and hence also act as a limit on the rate at which on-change notifications could be generated.</t>
          <t>The information about what nodes support on-change notifications is reported using capabilities operational data model.  This is further described in <xref target="ConformanceAndCapabilities"/>.</t>
        </section>
        <section anchor="on-change-considerations">
          <name>On-Change Considerations</name>
          <t>On-change subscriptions allow receivers to receive updates whenever changes to targeted objects occur.  As such, on-change subscriptions are particularly effective for data that changes infrequently but for which applications need to be quickly notified, with minimal delay, whenever a change does occur.</t>
          <t>On-change subscriptions tend to be more difficult to implement than periodic subscriptions.  Accordingly, on-change subscriptions may not be supported by all implementations or for every object.</t>
          <t>Whether or not to accept or reject on-change subscription requests when the scope of the subscription contains objects for which on-change is not supported is up to the publisher implementation.  A publisher <bcp14>MAY</bcp14> accept an on-change subscription even when the scope of the subscription contains objects for which on-change is not supported.  In that case, updates are sent only for those objects within the scope of the subscription that do support on-change updates, whereas other objects are excluded from update records, even if their values change.  In order for a subscriber to determine whether objects support on-change subscriptions, objects are marked accordingly on a publisher.  Accordingly, when subscribing, it is the responsibility of the subscriber to ensure that it is aware of which objects support on-change and which do not.  For more on how objects are so marked, see Section 3.10. <strong>TODO Is this paragraph and the one below still the right choice for YANG Push Lite?</strong></t>
          <t>Alternatively, a publisher <bcp14>MAY</bcp14> decide to simply reject an on-change subscription if the scope of the subscription contains objects for which on-change is not supported.  In the case of a configured subscription, the publisher <bcp14>MAY</bcp14> suspend the subscription.</t>
        </section>
      </section>
      <section anchor="combined-periodic-and-on-change-subscriptions">
        <name>Combined periodic and on-change subscriptions</name>
        <t>A single subscription may created to generate notifications both when changes occur and on a periodic cadence.  Such subscriptions are equivalent to having separate periodic and on-change subscriptions on the same path, except that they share the same subscription-id and filter paths.</t>
      </section>
      <section anchor="streaming-update-examples">
        <name>Streaming Update Examples</name>
        <t><strong>TODO, Generate new JSON based example of a periodic, and delete messages.  Current placeholders are the existing YANG Push Notifications.</strong></t>
        <t>Figure XXX provides an example of a notification message for a subscription tracking the operational status of a single Ethernet interface (per <xref target="RFC8343"/>).  This notification message is encoded XML <em>W3C.REC-xml-20081126</em> over the Network Configuration Protocol
(NETCONF) as per <xref target="RFC8640"/>.</t>
        <figure>
          <name>Example 'update' periodic notification</name>
          <artwork align="left"><![CDATA[
<notification
  xmlns="urn:ietf:params:xml:ns:netconf:notification:1.0">
<eventTime>2017-10-25T08:00:11.22Z</eventTime>
<push-update xmlns="urn:ietf:params:xml:ns:yang:ietf-yang-push">
  <id>1011</id>
  <datastore-contents>
    <interfaces
     xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces">
      <interface>
        <name>eth0</name>
        <oper-status>up</oper-status>
      </interface>
    </interfaces>
  </datastore-contents>
</push-update>
</notification>
]]></artwork>
        </figure>
        <t>Figure XXX provides an example of an on-change notification message for
the same subscription.</t>
        <figure>
          <name>Example 'update' on-change notification</name>
          <artwork align="left"><![CDATA[
<notification
  xmlns="urn:ietf:params:xml:ns:netconf:notification:1.0">
<eventTime>2017-10-25T08:22:33.44Z</eventTime>
<push-change-update
    xmlns="urn:ietf:params:xml:ns:yang:ietf-yang-push">
  <id>89</id>
  <datastore-changes>
    <yang-patch>
      <patch-id>0</patch-id>
      <edit>
        <edit-id>edit1</edit-id>
        <operation>replace</operation>
        <target>/ietf-interfaces:interfaces</target>
        <value>
          <interfaces
              xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces">
            <interface>
              <name>eth0</name>
              <oper-status>down</oper-status>
            </interface>
          </interfaces>
        </value>
      </edit>
    </yang-patch>
  </datastore-changes>
</push-change-update>
</notification>
]]></artwork>
        </figure>
      </section>
    </section>
    <section anchor="ReceiversEtAl">
      <name>Receivers, Transports, and Encodings</name>
      <section anchor="receivers">
        <name>Receivers</name>
        <t>Every subscription is associated with one or more receivers, which each identify the destination host, transport and encoding settings, where all notifications for a subscription are sent.</t>
        <t>For configured subscriptions there is no explicit association with an existing transport session, and hence the properties associated with the receiver are explicitly configured, as described in <xref target="ConfiguredReceivers"/>.</t>
        <t>For dynamic subscriptions, the receiver, and most associated properties are implicit from the session on which the dynamic subscription was initiated, as described in <xref target="DynamicSubscriptionReceivers"/>.</t>
        <section anchor="ConfiguredReceivers">
          <name>Receivers for Configured Subscriptions</name>
          <t>For configured subscriptions, receivers are configured independently from the subscriptions and then referenced from the subscription configuration.</t>
          <t>Configured subscriptions <bcp14>MAY</bcp14> have multiple receivers, e.g., to facilitate redundancy.  Each receiver <bcp14>MAY</bcp14> be configured with different transports and associated transport settings, but they <bcp14>MUST</bcp14> all share the same encoding.</t>
          <t>All subscription notifications, including lifecycle notifications (<xref target="LifecycleNotifications"/>), are sent to all receivers except for the <em>receiver-disconnected</em> notification, which is only sent to the affected receiver, and only if the subscription remains active because of other active receivers.</t>
          <t>Below is a tree diagram for <em>datastore-telemetry/receivers</em> container. All objects contained in this tree are described in the YANG module in <xref target="yp-lite-yang-module"/>.</t>
          <t>These parameters identify how to connect to each receiver.  For each subscription, the publisher uses the referenced receiver configuration to establish transport connectivity to the receiver.</t>
          <figure anchor="ReceiversYangTree">
            <name>datastore-telemetry/receivers container</name>
            <sourcecode type="yangtree"><![CDATA[
module: ietf-yp-lite-config
  +--rw datastore-telemetry!
     +--rw receivers
        +--rw receiver* [name]
           +--rw name                      string
           +--rw encoding                  ypl:encoding
           +--rw dscp?                     inet:dscp
           +---x reset
           +--rw (notification-message-origin)?
           |  +--:(interface-originated)
           |  |  +--rw source-interface?   if:interface-ref
           |  |          {interface-designation}?
           |  +--:(address-originated)
           |     +--rw source-vrf?         leafref {supports-vrf}?
           |     +--rw source-address?     inet:ip-address-no-zone
           +--rw (transport-type)

  augment /ypl:establish-subscription/ypl:input/ypl:target
            /ypl:filter:
    +--:(by-reference)
  augment /ypl:subscription-started/ypl:target:
    +-- filter-ref?   filter-ref
]]></sourcecode>
          </figure>
          <t>Each configured receiver has the following associated properties:</t>
          <ul spacing="normal">
            <li>
              <t>a <em>name</em> to identify and reference the receiver in the subscription configuration.</t>
            </li>
            <li>
              <t>a <em>transport</em>, which identifies the transport protocol to use for all connections to the receiver.  </t>
              <ul spacing="normal">
                <li>
                  <t>any transport-specific related parameters, some of which may be mandatory, others optional to specify, e.g., DSCP.  There are likely to be various data nodes related to establishing appropriate security and encryption.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>an <em>encoding</em> to encode all YANG notification messages to the receiver, i.e., see <xref target="Encodings"/>.</t>
            </li>
            <li>
              <t>optional parameters to identify where traffic should egress the publisher:  </t>
              <ul spacing="normal">
                <li>
                  <t>a <em>source-interface</em>, identifying the egress interface to use from the publisher, implicitly choosing the source IP address and VRF.</t>
                </li>
                <li>
                  <t>a <em>source-vrf</em>, identifying the Virtual Routing and Forwarding (VRF) instance on which to reach receivers.  This VRF is a network instance as defined in <xref target="RFC8529"/>.  Publisher support for VRFs is optional and advertised using the <em>supports-vrf</em> feature.</t>
                </li>
                <li>
                  <t>a <em>source-address</em> address, identifying the IP address to source notification messages from.</t>
                </li>
              </ul>
              <t>
If none of the above parameters are set, the publisher <bcp14>MAY</bcp14> choose which interface(s) and address(es) to source subscription notifications from.</t>
            </li>
          </ul>
          <t>This specification is transport independent, e.g., see <xref target="transports"/>, and thus the YANG module defined in <xref target="yp-lite-yang-module"/> cannot directly define and expose these transport parameters.  Instead, receiver-specific transport connectivity parameters <bcp14>MUST</bcp14> be configured via transport-specific augmentations to the YANG choice node <em>/datastore-telemetry/receivers/receiver/transport-type</em>.</t>
          <t>A publisher supporting configured subscriptions clearly must support at least one YANG data model that augments transport connectivity parameters onto <em>/datastore-telemetry/receivers/receiver/transport-type</em>.  For an example of a similar such augmentation (but for YANG Push), see <xref target="I-D.draft-ietf-netconf-udp-notif"/>. <strong>TODO, this reference and text will need to be updated to a UDP-notif bis document, that augments the new YANG Push Lite receiver path.</strong></t>
        </section>
        <section anchor="DynamicSubscriptionReceivers">
          <name>Receivers for Dynamic Subscriptions</name>
          <t>For dynamic subscriptions, each subscription has a single receiver that is implicit from the host that initiated the <em>establish-subscription</em> RPC, reusing the same transport session for all the subscription notifications.</t>
          <t>Hence most receiver parameters for a dynamic subscription, e.g., related to the transport, are implicitly determined and cannot be explicitly controlled.</t>
          <t>Dynamic subscriptions <bcp14>MUST</bcp14> specify an encoding (see <xref target="Encodings"/>) and <bcp14>MAY</bcp14> specify DSCP Marking (see <xref target="DSCP"/>) for the telemetry notifications in the <em>establish-subscription</em> RPC (see <xref target="EstablishSubscriptionYangTree"/>).</t>
        </section>
        <section anchor="ReceiverStates">
          <name>Receiver Session States and State Machine</name>
          <t>Each subscription will need to establish a subscription to the specified receiver.  Multiple subscriptions may share one or more transport sessions to the same receiver.</t>
          <t>A receiver in YANG Push Lite can be in one of the following states:</t>
          <ul spacing="normal">
            <li>
              <t><strong>Configured</strong>: The receiver has been configured on the publisher, but the receiver is not referenced by any valid subscriptions and hence there is no attempt to establish a connection to the receiver.</t>
            </li>
            <li>
              <t><strong>Connecting</strong>: The receiver has at least one associated subscription and the publisher is attempting to establish a transport session and complete any required security exchanges, but this process has not yet succeeded.</t>
            </li>
            <li>
              <t><strong>Active</strong>: The receiver has at least one associated subscription, a transport session has been established (if required), security exchanges have successfully completed, and the publisher is able to send notifications to the receiver.</t>
            </li>
          </ul>
          <t>The state transitions for a receiver are illustrated below:</t>
          <figure anchor="ReceiverStateDiagram">
            <name>Receiver Session State Diagram</name>
            <artwork align="left"><![CDATA[
                    .-------------------.
                    |                   |
                    |    Configured     |
                    |                   |
                    '-------------------'
                            |  ^
  Receiver is referenced by |  |  No configured subscriptions
  1 or more subscriptions   |  |  reference the receiver
                            v  |
                    .-------------------.
                    |                   |
                    |    Connecting     |
                    |                   |
                    '-------------------'
                            |  ^
  Transport and/or security |  |  Transport or security session
  has been established.     |  |  has been lost or failed.
                            v  |
                    .-------------------.
                    |                   |
                    |      Active       |
                    |                   |
                    '-------------------'
]]></artwork>
          </figure>
          <t>This state model allows implementations and operators to clearly distinguish between receivers that are simply configured, those that are in the process of connecting, and those that are actively being used.</t>
          <t>If the configuration has changed such that there were previously connections to a receiver, but that receiver is no longer referenced by valid subscriptions, then the publisher <bcp14>MUST</bcp14> close any associated transport sessions to the receiver, but <bcp14>MAY</bcp14> delay the closing for a short period of time (no more than 15 minutes) to potentially allow existing transport session to be reused by new subscriptions.</t>
        </section>
      </section>
      <section anchor="transports">
        <name>Transports</name>
        <t>This document describes a transport-agnostic mechanism for subscribing to YANG datastore telemetry.  Hence, separate specifications are required to define transports that support YANG Push Lite.  The requirements for these transport specifications are documented in the following section:</t>
        <section anchor="requirements-for-yang-push-lite-transport-specifications">
          <name>Requirements for Yang Push Lite Transport Specifications</name>
          <t>This section provides requirements for any transport specifications supporting the YANG Push Lite solution presented in this document.</t>
          <t>The transport specification <bcp14>MUST</bcp14> provide YANG modules, to be implemented by publishers implementing the YANG Push configuration model in <xref target="config-subs-data-model"/>, that:</t>
          <ul spacing="normal">
            <li>
              <t>augments the <em>datastore-telemetry/receivers/transport-type</em> choice statement with a container that both identifies the transport and contains all transport specific parameters.</t>
            </li>
            <li>
              <t>augments <em>/sysc:system-capabilities/transport/transport-capabilities/</em> container with any transport specific capabilities or options (conditional on a YANG <em>when</em> statement).  Note, encodings for a given transport are advertised directly via the ietf-yp-lite-capabilities YANG Model <xref target="yp-lite-yang-capabilities-module"/>.</t>
            </li>
          </ul>
          <t>Using a secure transport is <bcp14>RECOMMENDED</bcp14>.  Thus, any transport specification <bcp14>MUST</bcp14> provide a mechanism to ensure secure communication between the publisher and receiver in a hostile environment, e.g., through the use of transport layer encryption.  Transport specifications <bcp14>MAY</bcp14> also specify a mechanism for unencrypted communications, which can be used when transport layer security is not required, e.g., if the transport session is being secured via another mechanism, or when operating within a controlled environment or test lab.</t>
          <t>Any transport specification <bcp14>SHOULD</bcp14> support mutual receiver and publisher authentication at the transport layer.</t>
          <t>The transport selected by the subscriber to reach the publisher <bcp14>SHOULD</bcp14> be able to support multiple "establish-subscription" requests made in the same transport session.</t>
          <t>The transport specification <bcp14>MUST</bcp14> specifying how multiple subscriptions referencing the same receiver are to be handled at the transport layer.  The transport specification <bcp14>MAY</bcp14> require separate transport sessions per subscription to a given receiver, or it <bcp14>MAY</bcp14> allow multiple subscriptions to the same receiver to be multiplexed over a shared transport session.</t>
          <t>A specification for a transport built upon this document can choose whether to use the same logical channel for the RPCs and the event records.  However, the <em>update</em> records and the subscription state change notifications <bcp14>MUST</bcp14> be sent on the same transport session.</t>
          <t>The transport specification <bcp14>MAY</bcp14> specify a keepalive mechanism to keep the transport session alive.  There is no YANG Push Lite protocol or application level keepalive mechanism.</t>
          <t><strong>TODO, do we need to mention anything about transport session timeouts, e.g., which would cause a subscription to be terminated.  What about buffering?  Is that a transport consideration?</strong></t>
          <t>Additional transport requirements may be dictated by the choice of transport used with a subscription.</t>
          <section anchor="DSCP">
            <name>DSCP Marking</name>
            <t>YANG Push Lite supports <em>dscp</em> marking to differentiate prioritization of notification messages during network transit.</t>
            <t>A receiver with a <em>dscp</em> leaf results in a corresponding Differentiated Services Code Point (DSCP) marking <xref target="RFC2474"/>} being placed in the IP header of any resulting <em>update</em> notification messages and subscription state change notifications.  A publisher <bcp14>MUST</bcp14> respect the DSCP markings for subscription traffic egressing that publisher.</t>
            <t>The transport specification <bcp14>MUST</bcp14> specify if there are any particular quality-of-service or class-of-service considerations related to handling DSCP settings associated with the subscription.</t>
          </section>
        </section>
      </section>
      <section anchor="Encodings">
        <name>Encodings</name>
        <t>The <em>update</em> notification (<xref target="EventRecords"/>) and subscription lifecycle notifications (<xref target="LifecycleNotifications"/>) can be encoded in any format that has a definition for encoding YANG data.  For a given subscription, all notification messages are encoded using the same encoding.</t>
        <t>Some IETF standards for YANG encodings known at the time of publication are:</t>
        <ul spacing="normal">
          <li>
            <t>JSON, defined in <xref target="RFC7951"/></t>
          </li>
          <li>
            <t>CBOR, defined in <xref target="RFC9254"/>, and <xref target="RFC9595"/> for using compressed schema identifiers (YANG SIDs)</t>
          </li>
          <li>
            <t>XML, defined in <xref target="RFC7950"/></t>
          </li>
        </ul>
        <t>To maximize interoperability, all implementations are <bcp14>RECOMMENDED</bcp14> to support both JSON and CBOR encodings.  Constrained platforms may not be able to support JSON and hence may choose to only support CBOR encoding.  JSON encoding may not be supported in the scenario that another encoding becomes the defacto standard (e.g., as JSON has largely replaced XML as the defacto choice for text based encoding).  Support for the XML encoding and/or CBOR encoding using YANG SIDs is <bcp14>OPTIONAL</bcp14>.</t>
        <t>Encodings are defined in the <em>ietf-yp-lite.yang</em> as YANG identities that derive from the <em>encoding</em> base identity.  Additional encodings can be defined by defining and implementing new identities that derive from the <em>encoding</em> base identity, and also advertising those identities as part of the ietf-yp-lite-capabilities YANG module's transport capabilities <xref target="yp-lite-yang-capabilities-module"/>.</t>
      </section>
    </section>
    <section anchor="ConfiguredAndDynamic">
      <name>Setting up and Managing Subscriptions</name>
      <t>Subscriptions can be set up and managed in two ways:</t>
      <ol spacing="normal" type="1"><li>
          <t>Configured Subscriptions - a subscription created and principally controlled by configuration.</t>
        </li>
        <li>
          <t>Dynamic Subscriptions - a subscription created and principally controlled via YANG RPCs from a telemetry receiver.</t>
        </li>
      </ol>
      <t>Conformant implementations <bcp14>MUST</bcp14> implement at least one of the two mechanisms above for establishing and maintaining subscriptions, but they <bcp14>MAY</bcp14> choose to only implement a single mechanism.</t>
      <t>The core behavior for both configured and dynamic subscription is the same, with the key differentiation being how they are provisioned, and how the transport is setup.  This next section describes the functionality that is common to both types of subscription, followed by the sections that describe the specifics and differences between the two ways of managing subscriptions.</t>
      <section anchor="CommonSubscriptionParameters">
        <name>Common Subscription Parameters</name>
        <t>All subscriptions require the following state to be instantiated:</t>
        <ul spacing="normal">
          <li>
            <t>a <em>name</em> to identify the subscription.</t>
          </li>
          <li>
            <t>the <em>target</em> for the subscription, comprising:
            </t>
            <ul spacing="normal">
              <li>
                <t>the target datastore, as per <xref target="RFC8342"/></t>
              </li>
              <li>
                <t>a set of selection filters to choose which datastore nodes the subscription is monitoring or sampling, as described in <xref target="pathsAndFilters"/>.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>the <em>update-trigger</em> to indicate when <em>update</em> notifications are generated:
            </t>
            <ul spacing="normal">
              <li>
                <t><em>periodic</em>, for the publisher to send updated copies of the state on a periodic basis</t>
              </li>
              <li>
                <t><em>on-change</em>, for the publisher to send state updates when the internal state changes, i.e., event driven.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>receiver, transport, and encoding parameters, as per <xref target="receivers"/>.  How these are provided differs for configured vs dynamic subscriptions and is further explained in the sections below.</t>
          </li>
        </ul>
        <t>Subscription names <bcp14>MUST</bcp14> be unique across all configured and dynamic subscriptions.  Configured subscription take precedence over dynamic subscription, so:</t>
        <ul spacing="normal">
          <li>
            <t>attempts to create a dynamic subscription with a name that conflicts with any other subscription (configured or dynamic) <bcp14>MUST</bcp14> fail,</t>
          </li>
          <li>
            <t>configuring a subscription, assuming it passes configuration validation, replaces any dynamic subscriptions with the same name.  Thus, causing the dynamic subscription to be immediately terminated (see <xref target="TerminatingSubscriptions"/>).</t>
          </li>
          <li>
            <t><strong>TODO: We want to make the name optional to be specified for dynamic subscriptions?  If not provided then the publisher could allocate using "dyn-&lt;XXX&gt;", where XXX is an increasing numeric subscription id?</strong></t>
          </li>
        </ul>
        <!--
// This needs to be part of the management model part of the specification.

Both configured and dynamic subscriptions are represented in the list *datastore-telemetry/subscriptions/subscription*, and most of the functionality and behavior of configured and dynamic subscriptions described in this document is specified to be the same or very similar.  However, they differ in how they are created and in the associated lifecycle management, described in the following sections:

A publisher MAY terminate a dynamic subscription at any time. Similarly, it MAY decide to temporarily suspend the sending of notification messages for any dynamic subscription, or for one or more receivers of a configured subscription.  Such termination or suspension is driven by internal considerations of the publisher.
-->

<section anchor="subscription-states">
          <name>Subscription States</name>
          <t>YANG Push Lite has a small set of simple states for a subscription on a publisher.  These states are intended to help clients easily determine the health and status of a subscription.</t>
          <ul spacing="normal">
            <li>
              <t><strong>Invalid</strong>: a subscription that is invalid for any reason.  E.g., the subscription references an invalid filter expression for the current device schema.  Normally, invalid configurations should be rejected by the system, whether due to subscription configuration or <em>establish-subscription</em> RPC, and hence this state should rarely be seen.</t>
            </li>
            <li>
              <t><strong>Inactive</strong>: a valid subscription, but one that is not active because it has no associated receivers.  This state is unlikely to be seen for dynamic subscriptions.</t>
            </li>
            <li>
              <t><strong>Connecting</strong>: a subscription that is valid, and has appropriate receiver configuration, but the publisher has not managed to successfully connect to any receivers yet, and hence has not sent a <em>subscription-started</em> notification.  Transport security failures would be in this state.  <strong>TODO, what about no route to the receiver?</strong></t>
            </li>
            <li>
              <t><strong>Active</strong>: a valid subscription, connected to all specified receivers, that has sent a <em>subscription-stated</em> notification and is generating <em>update</em> notifications, as per the terms of the subscription update policy.</t>
            </li>
            <li>
              <t><strong>Partial</strong>: this is the same as per the description of <em>Active</em> above except that is has only managed to successfully connect to some receivers, not all of specified receivers associated with the subscription.</t>
            </li>
            <li>
              <t><strong>Terminated</strong>: represents a subscription that has finished.  Subscriptions would only be expected to transiently be in this state and hence it would not normally be reported.  Terminated dynamic subscriptions, or unconfigured subscriptions, should quickly be removed from the operational state of the device.  Terminated</t>
            </li>
          </ul>
          <t>Below is a state diagram illustrating the states, and the likely changes between states.  However, this is not a formal state machine and publishers can move between arbitrary states based on changes to subscription properties, the system, connectivity to receivers, or resource constraints on the system.  New subscriptions should choose an appropriate starting state, e.g., either Inactive or Invalid.</t>
          <figure>
            <name>Publisher's States for a Subscription</name>
            <artwork><![CDATA[
                  .-------------------.         .-------------------.
                  |                   |         |                   |
                  |    Inactive       | <------>|     Invalid       |
                  |                   |         |                   |
                  '-------------------'         '-------------------'
                            ^
                            |
                            v
                  .-------------------.
                  |                   |
                  |    Connecting     |
                  |                   |
                  '-------------------'
                            ^
                            |
                            |
    .-------------------.   |    .-------------------.
    |                   |<------>|                   |
    |    Active         |        |     Partial       |
    |                   |        |                   |
    '-------------------'        '-------------------'

                  .-------------------.
                  |                   |
                  |    Terminated     |
                  |                   |
                  '-------------------'
]]></artwork>
          </figure>
          <!--
A subscription in the *valid* state may move to the *invalid* state in one of two ways.  First, it may be modified in a way that fails a re-evaluation.  See (2) in the diagram.  Second, the publisher might determine that the subscription is no longer supportable.  This could be because of an unexpected but sustained increase in an event stream's event records, degraded CPU capacity, a more complex referenced filter, or other subscriptions that have usurped resources.  See (3) in the diagram.  No matter the case, a *subscription-terminated* notification is sent to any receivers in the *active* or state.  Finally, a subscription may be deleted by configuration (4).

When a subscription is in the *valid* state, a publisher will attempt to connect with all receivers of a configured subscription and deliver notification messages.  Below is the state machine for each receiver of a configured subscription.  This receiver state machine is fully contained in the state machine of the configured subscription and is only relevant when the configured subscription is in the *valid* state.

When a configured subscription first moves to the *valid* state, the *state* leaf of each receiver is initialized to the *connecting* state.  If transport connectivity is not available to any receivers and there are any notification messages to deliver, a transport session is established (e.g., per {{RFC8071}}).  Individual receivers are moved to the *active* state when a *subscription-started* subscription state change notification is successfully passed to that receiver (a).  Event records are only sent to active receivers. Receivers of a configured subscription remain active on the publisher if both (1) transport connectivity to the receiver is active and (2) event records are not being dropped due to a publisher's sending capacity being reached.  In addition, a configured subscription's receiver MUST be moved to the "connecting" state if the receiver is reset via the "reset" action (b), (c).  For more on the "reset" action, see Section 2.5.5.  If transport connectivity cannot be achieved while in the "connecting" state, the receiver MAY be moved to the "disconnected" state.

A configured subscription's receiver MUST be moved to the "suspended" state if there is transport connectivity between the publisher and receiver but (1) delivery of notification messages is failing due to a publisher's buffer capacity being reached or (2) notification messages cannot be generated for that receiver due to insufficient CPU (d).  This is indicated to the receiver by the "subscription-suspended" subscription state change notification.

A configured subscription's receiver MUST be returned to the "active" state from the "suspended" state when notification messages can be generated, bandwidth is sufficient to handle the notification messages, and a receiver has successfully been sent a "subscription-resumed" or "subscription-modified" subscription state change notification (e).  The choice as to which of these two subscription state change notifications is sent is determined by whether the subscription was modified during the period of suspension.

Modification of a configured subscription is possible at any time.  A "subscription-modified" subscription state change notification will be sent to all active receivers, immediately followed by notification messages conforming to the new parameters.  Suspended receivers will
also be informed of the modification.  However, this notification will await the end of the suspension for that receiver (e).
-->

</section>
        <section anchor="CreatingSubscriptions">
          <name>Creating Subscriptions</name>
          <t>After a subscription is successfully established, the publisher immediately sends a <em>subscription-started</em> subscription state change notification to each receiver.  It is quite possible that upon configuration, reboot, or even steady-state operations, a transport session may not be currently available to the receiver.  In this case, when there is something to transport for an active subscription, transport-specific "call home" operations <xref target="RFC8071"/> will be used to establish the connection. <strong>TODO - this should just reference the transport RFCs</strong>.  When transport connectivity is available, notification messages may then be pushed.</t>
          <t>With active configured subscriptions, it is allowable to buffer event records even after a <em>subscription-started</em> has been sent.  However, if events are lost (rather than just delayed) due to buffer capacity being reached, a <em>subscription-terminated</em> notification <bcp14>MUST</bcp14> be sent, followed by a new <em>subscription-started</em> notification. These notifications indicate an event record discontinuity has occurred.</t>
        </section>
        <section anchor="ModifyingSubscriptions">
          <name>Modifying Subscriptions</name>
          <t>Subscriptions <bcp14>MAY</bcp14> be modified in various ways:</t>
          <ol spacing="normal" type="1"><li>
              <t>the subscription <em>filter</em> (inline, referring to a different named filter, or changing the referenced filter), <em>update-triggers</em>, or <em>description</em> may be changed.</t>
            </li>
            <li>
              <t><em>receivers</em> may be added or removed.</t>
            </li>
            <li>
              <t>parameter associated with a receiver may be changed.</t>
            </li>
          </ol>
          <t>The following sections describe how these changes are handled.</t>
          <section anchor="ChangingSubscriptionConfiguration">
            <name>Changing configuration associated with the subscription</name>
            <t>If any of the following properties associated with a subscription are changed:</t>
            <ul spacing="normal">
              <li>
                <t>the content of an inline filter,</t>
              </li>
              <li>
                <t>the name, or content, of a referenced filter,</t>
              </li>
              <li>
                <t>the <em>encoding</em>,</t>
              </li>
              <li>
                <t>the <em>update-triggers</em>,</t>
              </li>
              <li>
                <t>the <em>description</em> field,</t>
              </li>
              <li>
                <t>the YANG schema used by subscription,</t>
              </li>
              <li>
                <t>any other fields that are included in a <em>subscription-started</em> notification message</t>
              </li>
            </ul>
            <t>then the subscription must be terminated, as per <xref target="TerminatingSubscriptions"/>, and then recreated, as per <xref target="CreatingSubscriptions"/>.  This can be used to trigger any necessary actions on the receiver to ensure that it can successfully process any changes to the subscription <em>update</em> notifications.</t>
            <t>If the publisher believes that the schema associated with a subscription may have changed then it may defensively terminate and recreate the subscription.</t>
          </section>
          <section anchor="AddingReceivers">
            <name>Adding receivers</name>
            <t>If the modification involves adding one or more receivers, then once the transport session to the new receiver(s) has been established, i.e., they have reached the <em>receiver active</em> state (<xref target="ReceiverStates"/>), then a new <em>subscription-started</em> notification (<xref target="SubscriptionStartedNotification"/>) <bcp14>MUST</bcp14> be sent on the subscription to <strong>all receivers</strong>.</t>
          </section>
          <section anchor="RemovingReceivers">
            <name>Removing receivers</name>
            <t>If all receivers, or the last active receiver, is removed then the subscription becomes <em>inactive</em> and a <em>subscription-terminated</em> notification <bcp14>SHOULD</bcp14> be sent to all receivers, if possible, prior to bringing down any session to the receivers.  Obviously, if the transport session to the receiver has closed then it will not be possible to send a <em>subscription-terminated</em> notification to that receiver.</t>
            <t>If one or more receivers are removed, but at least one receiver for the subscription remains active, then a <em>receiver-disconnected</em> notification is sent <em>only</em> to the receivers that has been removed from the subscription.  Any receivers that are still active don't receiver any notification.</t>
          </section>
          <section anchor="changing-receiver-configuration">
            <name>Changing receiver configuration</name>
            <t>If the settings associated with a receiver are changed, then the publisher has two choices:</t>
            <ol spacing="normal" type="1"><li>
                <t>It <bcp14>MAY</bcp14> treat the change as a removal of the receiver (<xref target="RemovingReceivers"/>), followed by the addition of a receiver (<xref target="AddingReceivers"/>).</t>
              </li>
              <li>
                <t>If it is a minor configuration change, e.g., a change to the DSCP settings, then it <bcp14>MAY</bcp14> dynamically update the transport session behavior without notifying the receiver.</t>
              </li>
            </ol>
            <t><strong>TODO, should we add changing the source address/port as an example here?  Or it is just simpler to just always force the receiver to be removed and re-added for simplicity?  Is further prose required about what is allowed to be handled in this fashion?</strong></t>
          </section>
        </section>
        <section anchor="TerminatingSubscriptions">
          <name>Terminating Subscriptions</name>
          <t>Subscriptions can be terminated by the publisher due to any of the following circumstances:</t>
          <ol spacing="normal" type="1"><li>
              <t>The subscription has been unconfigured.</t>
            </li>
            <li>
              <t>Some subscription, receiver, transport or encoding configuration has been removed, e.g., receiver configuration, such that there is no longer the sufficient minimum information to maintain the subscription.</t>
            </li>
            <li>
              <t>A dynamic subscription has been terminated via a <em>delete-subscription</em> or <em>kill-subscription</em> YANG RPC.</t>
            </li>
            <li>
              <t>Transport connectivity to all receivers have been lost, either due to network issues, or a failure in the security session state.</t>
            </li>
            <li>
              <t>The publisher doesn't have sufficient resources to honor the terms of the subscription, i.e., it is generating too many <em>update</em> notifications, or attempting to send too much data.</t>
            </li>
            <li>
              <t>The subscription parameters have changed in such a way that means the subscription needs to be reset by terminating and recreating it, i.e., as described for some changes in <xref target="ChangingSubscriptionConfiguration"/>.</t>
            </li>
            <li>
              <t>The <em>reset</em> RPC is invoked on a configured subscription, or on the referenced receiver associated with a configured subscription.</t>
            </li>
            <li>
              <t>From a receiver perspective, if transport connectivity is lost, then that is equivalent to terminating the subscription via a <em>subscription-terminated</em> notification.</t>
            </li>
          </ol>
          <t><strong>TODO, check this list, some of these are not really MAYs, but MUSTs, but perhaps those are the references into this section.</strong></t>
          <t>If possible, the publisher <bcp14>MUST</bcp14> try and close the subscription gracefully by generating a <em>subscription-terminated</em> notification to all receivers before closing any sessions to any receivers that have no remaining subscriptions.  Publishers <bcp14>MAY</bcp14> complete their current collection if one is in progress before generating the <em>subscription-terminated</em> notification.  Obviously, if transport connectivity to a receiver has been lost then neither of these two actions will be possible.</t>
          <t>The publisher <bcp14>MUST NOT</bcp14> generate any further events, e.g., <em>update</em> notifications, related to the subscription after the <em>subscription-terminated</em> notification has been generated.  In addition, receivers <bcp14>SHOULD</bcp14> ignore any messages received outside of an active subscription, i.e., either before a <em>subscription-started</em> notification or after a <em>subscription-terminated</em> or <em>receiver-disconnected</em> notification.</t>
          <t>If the publisher accepts the request, which it <bcp14>MUST</bcp14>, if the subscription-id matches a dynamic subscription established in the same transport session, then it should stop the subscription and send a <em>subscription-terminated</em> notification.</t>
        </section>
      </section>
      <section anchor="LifecycleNotifications">
        <name>Subscription Lifecycle Notifications</name>
        <t>In addition to sending event records to receivers, a publisher also sends subscription lifecycle state change notifications when lifecycle events related to subscription management occur.</t>
        <t>Subscription state change notifications are generated per subscription, and are injected into the steam of <em>update</em> messages for that that subscription.  These notifications <bcp14>MUST NOT</bcp14> be dropped or filtered.</t>
        <t>Future extensions, or implementations <bcp14>MAY</bcp14> augment additional fields into the notification structures.  Receivers <bcp14>MUST</bcp14> silently ignore unexpected fields.</t>
        <t>The complete set of subscription state change notifications is described in the following subsections:</t>
        <section anchor="SubscriptionStartedNotification">
          <name>"subscription-started"</name>
          <t>The subscription started notification is sent to a receiver to indicate that a subscription is active and they may start to receive <em>update</em> records from the publisher.</t>
          <t>The subscription started notification may be sent for any of these reasons:</t>
          <ol spacing="normal" type="1"><li>
              <t>A new subscription (configured or dynamic) has been started.</t>
            </li>
            <li>
              <t>A receiver has been added to a subscription.</t>
            </li>
            <li>
              <t>The properties of a subscription has been changed, in which case a <em>subscription-terminated</em> notification should be sent, followed by a <em>subscription-started</em> notification if the new properties are valid.</t>
            </li>
            <li>
              <t>A configured subscription previously failed, and was terminated.  After the publisher has successfully re-established a connection to the receiver and is read to send datastore event records again.</t>
            </li>
          </ol>
          <t>Below is the tree diagram for the <em>subscription-started</em> notification.  All data nodes contained in this tree diagram are described in the YANG module in <xref target="yp-lite-yang-module"/>.</t>
          <figure>
            <name>subscription-started Notification Tree Diagram</name>
            <sourcecode type="yangtree"><![CDATA[
    +---n subscription-started
    |  +--ro id                subscription-id
    |  +--ro name              subscription-name
    |  +--ro description?      string
    |  +--ro target
    |  |  +--ro datastore?       identityref
    |  |  +--ro (filter)
    |  |     +--:(path)
    |  |     |  +--ro path       ypath
    |  |     +--:(subtree)
    |  |     |  +--ro subtree    <anydata> {ypl:subtree}?
    |  |     +--:(xpath)
    |  |        +--ro xpath      yang:xpath1.0 {ypl:xpath}?
    |  +--ro update-trigger
    |     +--ro periodic!
    |     |  +--ro period         centiseconds
    |     |  +--ro anchor-time?   yang:date-and-time
    |     +--ro on-change! {on-change}?
    |        +--ro sync-on-start?   boolean
]]></sourcecode>
          </figure>
        </section>
        <section anchor="SubscriptionTerminatedNotification">
          <name>"subscription-terminated"</name>
          <t>For a receiver, this notification indicates that no further event records for an active subscription should be expected from the publisher unless and until a new <em>subscription-started</em> notification is received.</t>
          <t>A <em>subscription-terminated</em> notification <bcp14>SHOULD</bcp14> only be sent by a publisher to a receiver if a <em>subscription-started</em> notification was previously sent.</t>
          <t>The subscription terminated notification may be sent to a receiver for any of these reasons:</t>
          <ol spacing="normal" type="1"><li>
              <t>A receiver has been removed from a configured subscription.</t>
            </li>
            <li>
              <t>A subscription has been stopped, either due to the change/removal of some configuration, or an RPC has been used to delete or kill a subscription.</t>
            </li>
            <li>
              <t>The properties of a subscription has been changed, in which case a <em>subscription-terminated</em> notification should be sent, followed by a <em>subscription-started</em> notification if the new properties are valid.</t>
            </li>
            <li>
              <t>A subscription has failed for any reason, e.g.,:  </t>
              <ul spacing="normal">
                <li>
                  <t>The publisher is no longer able to honor the subscription, due to resource constraints, or the filter is no longer valid.</t>
                </li>
                <li>
                  <t>Any transport level buffer to the receiver has become full, and the hence the publisher is dropping <em>update</em> notifications.</t>
                </li>
              </ul>
            </li>
          </ol>
          <t>Below is a tree diagram for "subscription-terminated".  All objects contained in this tree are described in the YANG module in <xref target="yp-lite-yang-module"/>.</t>
          <figure>
            <name>subscription-terminated Notification Tree Diagram</name>
            <sourcecode type="yangtree"><![CDATA[
    +---n subscription-terminated
    |  +--ro name      subscription-name
    |  +--ro id        subscription-id
    |  +--ro reason    identityref
]]></sourcecode>
          </figure>
          <t><strong>TODO Augmenting extra fields is better for clients?</strong>  The <em>reason</em> data node identityref indicates why a subscription has been terminated, and could be extended with further reasons in future.  I suggest that we change this to an enum with an optional description field.**</t>
        </section>
        <section anchor="ReceiverDisconnectedNotification">
          <name>"receiver-disconnected"</name>
          <t>Configured subscriptions support multiple receivers.  If one particular receiver is slow to process notifications, e.g., causing</t>
          <t>The <em>receiver-disconnected</em> notification is sent to a specific receiver if the publisher has a multi-receiver subscription, and the publisher has decided to stop sending notification to a particular receiver, but the subscription will continue sending updates to other receivers.  Note the <em>subscription-terminated</em> notification is a publisher is stopping sending messages to all receivers.</t>
          <t>Possible reasons as to why a publisher may disconnect a receiver are:</t>
          <ul spacing="normal">
            <li>
              <t>the receiver is too slow processing the messages causing the subscription to back pressure overflowing internal buffers,</t>
            </li>
            <li>
              <t>the transport session is unreliable, frequently dropping and reconnecting.</t>
            </li>
          </ul>
          <figure>
            <name>update-complete Notification Tree Diagram</name>
            <sourcecode type="yangtree"><![CDATA[
    +---n update-complete
       +--ro id    subscription-id
]]></sourcecode>
          </figure>
        </section>
        <section anchor="update-completed">
          <name>"update-completed"</name>
          <t><strong>TODO, this description needs to be updated</strong>.</t>
          <t>This notification indicates that all of the event records prior to the current time have been passed to a receiver.  It is sent before any notification messages containing an event record with a timestamp later than (1) the subscription's start time.</t>
          <t>After the <em>update-complete</em> notification has been sent, additional event records will be sent in sequence as they arise naturally on the publisher.</t>
          <t>Below is a tree diagram for <em>update-complete</em>.  All objects contained in this tree are described in the YANG module in Section 4.</t>
          <figure>
            <name>update-complete Notification Tree Diagram</name>
            <sourcecode type="yangtree"><![CDATA[
    +---n update-complete
       +--ro id    subscription-id
]]></sourcecode>
          </figure>
        </section>
      </section>
      <section anchor="configured-subscriptions">
        <name>Configured Subscriptions</name>
        <t>Configured subscriptions allow the management of subscriptions via configuration so that a publisher can send notification messages to a receiver.</t>
        <t>This document specifies the ietf-yp-lite-config YANG module <xref target="yp-lite-config-yang-module"/> that defines an configuration model for configuring subscriptions.  Support for this YANG module is <bcp14>OPTIONAL</bcp14> and is advertised using the normal YANG mechanisms, e.g., <xref target="RFC8525"/>. <strong>TODO, do we also advertise support via capabilities, i.e., <eref target="https://github.com/rgwilton/draft-yp-observability/issues/16">issue 16</eref></strong></t>
        <t>In addition to the common subscription parameters described in <xref target="CommonSubscriptionParameters"/>, a configured subscription also includes:</t>
        <ul spacing="normal">
          <li>
            <t>one or more associated receivers for the subscription, as described in <xref target="receivers"/>.  The references receivers specify all transport, receiver, and encoding parameters.</t>
          </li>
        </ul>
        <t>Configured subscriptions have several characteristics distinguishing them from dynamic subscriptions, such as:</t>
        <ul spacing="normal">
          <li>
            <t>configured subscriptions are created, modified or deleted, by any configuration client with write permission on the subscription configuration.</t>
          </li>
          <li>
            <t>configured subscriptions have the ability to send notification messages to more than one receiver.  All receivers for a given subscription <bcp14>MUST</bcp14> use the same encoding.</t>
          </li>
          <li>
            <t>The lifetime of a configured subscription is tied to the configuration.  I.e., if a valid and complete configuration exists for a subscription, then the publisher <bcp14>MUST</bcp14> attempt to connect to the receiver and honor the requirements of the subscription.  In particular:  </t>
            <ul spacing="normal">
              <li>
                <t>If the configuration is altered or removed then the subscription will similarly be altered or removed.</t>
              </li>
              <li>
                <t>If the device reboots, then the configured subscription will obviously end, but once the subscription configuration has been processed after boot up, then the subscription will be recreated again, assuming the subscription configuration is still valid.</t>
              </li>
              <li>
                <t>If transport connectivity to the receiver is broken, then any subscriptions using that transport are terminated, but the publisher <bcp14>MUST</bcp14> periodically attempt to re-establish connection to the receiver and re-activate any configured subscriptions to that receiver.</t>
              </li>
              <li>
                <t>Note, if there are no active subscriptions for a given receiver then any transport session(s) associated with that receiver <bcp14>MUST</bcp14> be closed, but that <bcp14>MAY</bcp14> be after a short delay.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Other than the <em>reset</em> YANG Action, described in <xref target="reset"/>, there are no YANG RPCs to dynamically create, modify, or delete a configured subscription, any alterations <bcp14>MUST</bcp14> be done via changes to the configuration.</t>
          </li>
        </ul>
        <section anchor="creating-a-configured-subscription">
          <name>Creating a Configured Subscription</name>
          <t>Configured subscriptions are those created via changes to the publisher's configuration, e.g., using the YANG module defined in <xref target="config-subs-data-model"/>, or an equivalent configuration mechanism, such as a command-line interface, or alternative YANG configuration model.</t>
          <t>After the configuration change has been accepted by the system, then the subscription is updated, as per <xref target="CreatingSubscriptions"/>.</t>
          <t><strong>TODO, to see an example of subscription creation using configuration operations over NETCONF, see Appendix A.</strong></t>
        </section>
        <section anchor="modifying-a-configured-subscription">
          <name>Modifying a Configured Subscription</name>
          <t>Configured subscriptions can be modified due to configuration changes in the subscription configuration or referenced configuration, i.e., filters or receivers.  After the configuration change has been accepted by the system, then the subscription is updated, as per <xref target="ModifyingSubscriptions"/>.</t>
        </section>
        <section anchor="deleting-a-configured-subscription">
          <name>Deleting a Configured Subscription</name>
          <t>Configured subscriptions can be deleted via configuration.  After the configuration change has been accepted by the system the subscription is terminated, as per <xref target="TerminatingSubscriptions"/>.</t>
        </section>
        <section anchor="reset">
          <name>Resetting a Configured Subscription</name>
          <t>Configured subscriptions are generally expected to self-monitor and automatically reconnect to the receivers if they experience network or transport issues.  However, the data model also defines explicit YANG <em>actions</em> to either: (i) reset a single subscription, or (ii) reset all subscriptions and the transports(s) associated with a specific configured receiver instance.</t>
          <t>These reset actions primarily act at the subscription application layer, but may be useful if a receiver or collector determines that a configured subscription is not behaving correctly, and wishes to force a reset of the subscription without modifying the configuration associated with the subscription or forcing a configuration change on the publisher device.</t>
          <t>The reset action on a subscription is handled equivalently to removing and re-adding the subscription configuration.  I.e., the subscription <bcp14>MUST</bcp14> be terminated, as per <xref target="TerminatingSubscriptions"/> before being recreated, as per <xref target="CreatingSubscriptions"/>.  The reset action also resets (terminated and re-establishes) any subscription specific transport session that is not shared with any other subscriptions.</t>
          <t>The reset action on a receiver is handled equivalently to removing and re-adding the receiver configuration for the receiver that has been reset.  Specifically, every subscription referencing the receiver <bcp14>MUST</bcp14> be terminated, as per <xref target="TerminatingSubscriptions"/> before being recreated, as per <xref target="CreatingSubscriptions"/>.  Any transport sessions tied to the subscriptions referencing the reset receiver <bcp14>MUST</bcp14> also be terminated and re-established.</t>
        </section>
      </section>
      <section anchor="DynamicSubscriptions">
        <name>Dynamic Subscriptions</name>
        <t>Dynamic subscriptions are where a subscriber initiates a subscription negotiation with a publisher via a YANG RPC <xref target="RFC7950"/>.</t>
        <t>Support for dynamic subscriptions is <bcp14>OPTIONAL</bcp14>, with its availability advertised via the <em>dynamic</em> YANG feature in the ietf-yp-lite YANG module <xref target="yp-lite-yang-module"/>, and also via the capabilities module <xref target="yp-lite-yang-capabilities-module"/>.</t>
        <t>Dynamic subscription differ from configured subscription in the following ways:</t>
        <ul spacing="normal">
          <li>
            <t>Dynamic subscription reuse the same transport session on which the <em>establish-subscription</em> RPC was received to send back any notifications, and so the transport and receiver do not need to be specified and each dynamic subscription can always only have a single receiver.</t>
          </li>
          <li>
            <t>The publisher <bcp14>MUST</bcp14> reply to the <em>establish-subscription</em> RPC before sending the <em>subscription-started</em> or any <em>update</em> notifications for this subscription.</t>
          </li>
          <li>
            <t>The lifetime of a dynamic subscription is bound by the transport session used to establish it.  If the transport session fails then the dynamic subscription <bcp14>MUST</bcp14> be terminated.</t>
          </li>
          <li>
            <t>Active dynamic subscriptions cannot be modified on the fly, instead, the client is required to send a <em>delete-subscription</em> YANG RPC followed by a <em>establish-subscription</em> YANG RPC.</t>
          </li>
          <li>
            <t>Dynamic subscriptions can either be terminated by the client that established the subscription sending a <em>delete-subscription</em> YANG RPC on the same transport session, or any client with sufficient access permissions invoking the <em>kill-subscription</em> YANG RPC.</t>
          </li>
          <li>
            <t>A publisher <bcp14>MAY</bcp14> terminate a dynamic subscription at any time, i.e., due to internal constraints of the publisher.</t>
          </li>
          <li>
            <t>If a dynamic subscription is terminated for any reason, then the client is responsible for re-establishing the subscription if it is still required.</t>
          </li>
          <li>
            <t>If the publisher cannot honor the terms of a dynamic subscription then the subscription <bcp14>MUST</bcp14> be terminated. <strong>TODO, is this a <bcp14>SHOULD</bcp14> or <bcp14>MUST</bcp14>, do we want some leeway for temporary issues? E.g., allow some buffering. Also, this effectively applies to config subscriptions as well and hence should move.</strong></t>
          </li>
        </ul>
        <!--

### Dynamic Subscription State Machine

Below is the publisher's state machine for a dynamic subscription. Each state is shown in its own box.  It is important to note that such a subscription doesn't exist at the publisher until an *establish-subscription* RPC is accepted.  The mere request by a subscriber to establish a subscription is not sufficient for that subscription to be externally visible.  Start and end states are depicted to reflect subscription creation and deletion events.

~~~~
                  .........
                  : start :
                  :.......:
                      |
              establish-subscription
                      |
                      |
                      v
                 .- - - - - - - - - - -.
                 | receiver  |
                 |  active   |
                 |           |
                 '- - - - - - - - - - -'
                      |
            delete/kill-subscription
                      |
                      v
                  .........
                  :  end  :
                  :.......:
~~~~
{: title="Publisher's State Machine for a Dynamic Subscription"}

Of interest in this state machine are the following:

- Successful "establish-subscription" RPCs move the subscription to the "active" state.

- A "delete-subscription" or "kill-subscription" RPC will end the subscription.

- A publisher may choose to end a subscription when there is not sufficient CPU or bandwidth available to service the subscription.  This is announced to the subscriber via the *subscription-terminated* subscription state change notification.  The receiver will need to establish a new subscription.

-->

<section anchor="EstablishDynamic">
          <name>Establishing a Dynamic Subscription</name>
          <t>The <em>establish-subscription</em> RPC allows a subscriber to request the creation of a subscription.</t>
          <t>In addition to the common subscription parameters described in <xref target="CommonSubscriptionParameters"/>, the <em>establish-subscription</em> YANG RPC:</t>
          <ul spacing="normal">
            <li>
              <t>includes the <em>encoding</em> to be used for all YANG push lite notifications</t>
            </li>
            <li>
              <t>optionally includes DSCP settings to use for the transport.</t>
            </li>
            <li>
              <t>a dynamic subscription may reference a configured target <em>filter</em>.  If the configuration for the referenced filter changes then the subscription <bcp14>MUST</bcp14> be terminated <xref target="TerminatingSubscriptions"/>.</t>
            </li>
          </ul>
          <t>The DSCP code point settings for all subscription using the same transport session <bcp14>MUST</bcp14> be the same.  Attempts to invoke <em>establish-subscription</em> with a different DSCP code point <bcp14>MUST</bcp14> be rejected.</t>
          <t>If the publisher can satisfy the <em>establish-subscription</em> request, it replies with a numeric identifier for the subscription and then immediately starts streaming notification messages.</t>
          <t>A dynamic subscription request <bcp14>MUST</bcp14> be declined if a publisher determines that it may be unable to provide update records meeting the terms of an <em>establish-subscription</em> RPC request.</t>
          <t>Below is a tree diagram for <em>establish-subscription</em> YANG RPC.  All objects contained in this tree are described in the YANG module in <xref target="yp-lite-yang-module"/>.</t>
          <figure anchor="EstablishSubscriptionYangTree">
            <name>establish-subscription YANG RPC</name>
            <sourcecode type="yangtree"><![CDATA[
    +---x establish-subscription {dynamic}?
    |  +---w input
    |  |  +---w name              subscription-name
    |  |  +---w description?      string
    |  |  +---w target
    |  |  |  +---w datastore?       identityref
    |  |  |  +---w (filter)
    |  |  |     +--:(path)
    |  |  |     |  +---w path       ypath
    |  |  |     +--:(subtree)
    |  |  |     |  +---w subtree    <anydata> {ypl:subtree}?
    |  |  |     +--:(xpath)
    |  |  |        +---w xpath      yang:xpath1.0 {ypl:xpath}?
    |  |  +---w update-trigger
    |  |  |  +---w periodic!
    |  |  |  |  +---w period         centiseconds
    |  |  |  |  +---w anchor-time?   yang:date-and-time
    |  |  |  +---w on-change! {on-change}?
    |  |  |     +---w sync-on-start?   boolean
    |  |  +---w encoding          encoding
    |  |  +---w dscp?             inet:dscp
    |  +--ro output
    |     +--ro id    subscription-id
]]></sourcecode>
          </figure>
          <t>A publisher <bcp14>MAY</bcp14> reject the "establish-subscription" RPC for many reasons, as described in Section 2.4.6.</t>
          <!--
TODO - Decide the simplest mechanism for returning RPC errors.

Below is a tree diagram for "establish-subscription-stream-error-info" RPC yang-data.  All objects contained in this tree are described in the YANG module in {{yp-lite-yang-module}}.

~~~~
    yang-data establish-subscription-stream-error-info
      +- -ro establish-subscription-stream-error-info
        +- -ro reason?                   identityref
        +- -ro filter-failure-hint?      string

        Figure 3: "establish-subscription-stream-error-info"
                    RPC yang-data Tree Diagram
~~~~
{: align="left" title="\"establish-subscription-stream-error-info\" Tree Diagram"}
-->

</section>
        <section anchor="deleting-a-dynamic-subscription">
          <name>Deleting a Dynamic Subscription</name>
          <t>The <em>delete-subscription</em> operation permits canceling an existing dynamic subscription that was established on the same transport session connecting to the subscriber.</t>
          <t>The publisher responds to the request in the following way:</t>
          <ul spacing="normal">
            <li>
              <t>If the name identifier matches a <em>dynamic</em> subscription created on the same transport session then it <bcp14>MUST</bcp14> terminate the subscription, as per <xref target="TerminatingSubscriptions"/>.  </t>
              <t>
The publisher <bcp14>MAY</bcp14> reply back to the client before the subscription has been terminated, i.e., it may act asynchronously with respect to the delete request, however, the publisher <bcp14>MUST</bcp14> allow the client to create a new subscription using the same name immediately after either the RPC operation completes or the <em>subscription-terminated</em> notification (<xref target="SubscriptionTerminatedNotification"/>) has been transmitted.</t>
            </li>
            <li>
              <t>Otherwise, the request is failed with an "unknown subscription" error message.</t>
            </li>
          </ul>
          <t>Below is the tree diagram for the <em>delete-subscription</em> RPC.  All objects contained in this tree are described in the YANG module in <xref target="yp-lite-yang-module"/>.</t>
          <figure anchor="DeleteSubscriptionYangTree">
            <name>delete-subscription YANG RPC</name>
            <sourcecode type="yangtree"><![CDATA[
    +---x delete-subscription {dynamic}?
    |  +---w input
    |     +---w name    subscription-name
]]></sourcecode>
          </figure>
        </section>
        <section anchor="killing-a-dynamic-subscription">
          <name>Killing a Dynamic Subscription</name>
          <t>The <em>kill-subscription</em> RPC operation permits a client, that has the required access permissions, to forcibly terminate any arbitrary dynamic subscription, identified by subscription name, including those not associated with the transport session used for the <em>kill-subscription</em> RPC.  The subscription is terminated as per <xref target="TerminatingSubscriptions"/>.</t>
          <t>The publisher <bcp14>MAY</bcp14> reply back to the client before the subscription has been terminated, i.e., it may act asynchronously with respect to the delete request, however, the publisher <bcp14>MUST</bcp14> allow the client to create a new subscription using the same name immediately after the <em>subscription-terminated</em> notification (<xref target="SubscriptionTerminatedNotification"/>) has been transmitted.</t>
          <t>Below is the tree diagram for the <em>kill-subscription</em> RPC.  All objects contained in this tree are described in the YANG module in <xref target="yp-lite-yang-module"/>.</t>
          <figure anchor="KillSubscriptionYangTree">
            <name>kill-subscription YANG RPC</name>
            <sourcecode type="yangtree"><![CDATA[
    +---x kill-subscription {dynamic}?
       +---w input
          +---w name    subscription-name
]]></sourcecode>
          </figure>
        </section>
        <section anchor="rpc-failures">
          <name>RPC Failures</name>
          <t><strong>TODO, we should see if we can simplify how errors are reported.</strong></t>
          <t>Whenever an RPC is unsuccessful, the publisher returns relevant
information as part of the RPC error response.  Transport-level error
processing <bcp14>MUST</bcp14> be done before the RPC error processing described in
this section.  In all cases, RPC error information returned by the
publisher will use existing transport-layer RPC structures, such as
those seen with NETCONF (Appendix A of <xref target="RFC6241"/>) or RESTCONF
(Section 7.1 of <xref target="RFC8040"/>).  These structures <bcp14>MUST</bcp14> be able to encode
subscription-specific errors identified below and defined in this
document's YANG data model.</t>
          <t>As a result of this variety, how subscription errors are encoded in
an RPC error response is transport dependent.  Valid errors that can
occur for each RPC are as follows:</t>
          <artwork><![CDATA[
  establish-subscription         modify-subscription
  ----------------------         ----------------------
  dscp-unavailable               filter-unsupported
  encoding-unsupported           insufficient-resources
  filter-unsupported             no-such-subscription
  insufficient-resources

  delete-subscription            kill-subscription
  ----------------------         ----------------------
  no-such-subscription           no-such-subscription
]]></artwork>
          <t>To see a NETCONF-based example of an error response from the list
above, see the "no-such-subscription" error response illustrated in
<xref target="RFC8640"/>, Figure 10.</t>
          <t>There is one final set of transport-independent RPC error elements
included in the YANG data model defined in this document: three
yang-data structures that enable the publisher to provide to the
receiver any error information that does not fit into existing
transport-layer RPC structures.  These structures are:</t>
          <ol spacing="normal" type="1"><li>
              <t>"establish-subscription-stream-error-info": This <bcp14>MUST</bcp14> be returned
 with the leaf "reason" populated if an RPC error reason has not
 been placed elsewhere in the transport portion of a failed
 "establish-subscription" RPC response.  This <bcp14>MUST</bcp14> be sent if
 hints on how to overcome the RPC error are included.</t>
            </li>
            <li>
              <t>"modify-subscription-stream-error-info": This <bcp14>MUST</bcp14> be returned
 with the leaf "reason" populated if an RPC error reason has not
 been placed elsewhere in the transport portion of a failed
 "modify-subscription" RPC response.  This <bcp14>MUST</bcp14> be sent if hints
 on how to overcome the RPC error are included.</t>
            </li>
            <li>
              <t>"delete-subscription-error-info": This <bcp14>MUST</bcp14> be returned with the
 leaf "reason" populated if an RPC error reason has not been
 placed elsewhere in the transport portion of a failed
 "delete-subscription" or "kill-subscription" RPC response.</t>
            </li>
          </ol>
        </section>
      </section>
    </section>
    <section anchor="robustness-reliability-and-subscription-monitoring">
      <name>Robustness, Reliability, and Subscription Monitoring</name>
      <section anchor="robustness-and-reliability">
        <name>Robustness and Reliability</name>
        <t>It is important for clients to have confidence that the telemetry data that they receive is correct and complete.  The design of YANG Push Lite achieves this in several ways:</t>
        <ul spacing="normal">
          <li>
            <t>the <em>complete</em> flag in <em>update</em> notification, or the equivalent <em>update-complete</em> notification, are used to signal when all data for a periodic collection event has been enqueued.  This allows clients to delete stale information and monitor the performance and behavior of the publisher.</t>
          </li>
          <li>
            <t>publishers use buffers when enqueuing traffic on to a transport to a receiver, but if that buffer becomes full then either the subscription is terminated, or in the case of a configured subscription with multiple receivers the slow receiver is disconnected from the subscription.  In the case of dynamic subscriptions, the client may attempt to re-created the subscription.  For configured subscriptions, the publisher should attempt to periodically recreate the subscription or reconnect the receiver.  </t>
            <ul spacing="normal">
              <li>
                <t><strong>TODO, do we want to allow for a more lossy mode where the publisher just tail drops if the buffer is full?  If we do, then this looks like it should be a configurable option.</strong></t>
              </li>
              <li>
                <t><strong>TODO, ensure that we document how to reconnect to an new receiver</strong></t>
              </li>
            </ul>
          </li>
          <li>
            <t>the <em>notification envelope</em> structure, <xref target="FullNotificationExample"/>, used for all YANG Push notifications contains a monotonically increasing <em>sequence-number</em> field that allows for lost messages in an end-to-end data pipeline spanning multiple transport hops to be detected, allowing appropriate mitigation steps to be taken.  For example, see figure 1 in <xref target="I-D.ietf-nmop-network-anomaly-architecture"/>.  </t>
            <ul spacing="normal">
              <li>
                <t><strong>TODO, sequence-numbers are unique except for the receiver-disconnected message.</strong></t>
              </li>
            </ul>
          </li>
          <li>
            <t>the protocol relies on transport protocols that are either reliable, e.g., TCP or HTTP, or unreliable transports that employ mechanisms for clients to detect when losses at the transport layer have occurred, e.g., the <em>message id</em> in <xref target="I-D.draft-ietf-netconf-udp-notif"/> (<strong>TODO fix reference to bis version, once that becomes available</strong>).</t>
          </li>
          <li>
            <t>finally, if a publisher is not able to honor the expectation for a subscription for any reason, then the publisher always has the option to terminate the subscription.  It can then subsequently refuse to handle new subscriptions if it does not have sufficient resources to handle the subscription.</t>
          </li>
        </ul>
        <!-- TODO, I think that this text is superfluous to requirements, but we will keep it around a bit longer in case it is needed.

A subscription to updates from a datastore is intended to obviate the need for polling.  However, in order to do so, it is critical that subscribers can rely on the subscription and have confidence that they will indeed receive the subscribed updates without having to worry about updates being silently dropped.  In other words, a subscription constitutes a promise on the side of the publisher to provide the receivers with updates per the terms of the subscription, or otherwise notify the receiver if t

Now, there are many reasons why a publisher may at some point no longer be able to fulfill the terms of the subscription, even if the subscription had been initiated in good faith.  For example, the volume of datastore nodes may be larger than anticipated, the interval may prove too short to send full updates in rapid succession, or an internal problem may prevent objects from being collected.  For this reason, the solution defined in this document (1) mandates that a publisher notify receivers immediately and reliably whenever it encounters a situation in which it is unable to keep the terms of the subscription and (2) provides the publisher with the option to suspend the subscription in such a case.  This includes indicating the fact that an update is incomplete as part of a "push-update" or "push-change-update" notification, as well as emitting a "subscription-suspended" notification as applicable.  This is described further in Section 3.11.1.

A publisher SHOULD reject a request for a subscription if it is unlikely that the publisher will be able to fulfill the terms of that subscription request.  In such cases, it is preferable to have a subscriber request a less resource-intensive subscription than to deal with frequently degraded behavior.

The solution builds on [RFC8639].  As defined therein, any loss of an underlying transport connection will be detected and result in subscription termination (in the case of dynamic subscriptions) or suspension (in the case of configured subscriptions), ensuring that situations where the loss of update notifications would go unnoticed will not occur.
-->

</section>
      <section anchor="subscription-monitoring">
        <name>Subscription Monitoring</name>
        <t>In the operational state datastore, the <em>datastore-telemetry</em> container maintains operational state for all configured and dynamic subscriptions.</t>
        <t>Dynamic subscriptions are only present in the <em>datastore-telemetry/subscriptions/subscription</em> list when they are active, and are removed as soon as they are terminated.  Whereas configured subscriptions are present if the list if they are configured, regardless of whether they are active.</t>
        <t><strong>TODO, should dynamic receivers be listed?  Do we need to report per-receiver stats for dynamic subscriptions?</strong></t>
        <t>The operational state is important for monitoring the health of subscriptions, receivers, and the overall telemetry subsystem.</t>
        <t>This includes:</t>
        <t><strong>TODO, update the YANG model with more useful operational data, and mostly this section should briefly summarize and refer to the YANG model.  We should also consider what indications to include from filters that cause a larger amount of internal work but don't generate a large number of transmitted notifications.</strong></t>
        <ul spacing="normal">
          <li>
            <t>per subscription status and counters</t>
          </li>
          <li>
            <t>per receiver status and counters</t>
          </li>
          <li>
            <t>maybe some indication of the overall load on the telemetry subsystem, but we need to consider how useful that actually is, and whether just monitoring the device CPU load and general performance would be a better indication.</t>
          </li>
        </ul>
        <!-- TODO - Consider incorporating some aspects of this text.
Each subscription in the operational state datastore is represented as a list element.  Included in this list are event counters for each receiver, the state of each receiver, and the subscription parameters currently in effect.  The appearance of the leaf "configured-subscription-state" indicates that a particular subscription came into being via configuration.  This leaf also indicates whether the current state of that subscription is "valid", "invalid", or "concluded".

To understand the flow of event records in a subscription, there are two counters available for each receiver.  The first counter is "sent-event-records", which shows the number of events identified for sending to a receiver.  The second counter is "excluded-event-records", which shows the number of event records not sent to a receiver.  "excluded-event-records" shows the combined results of both access control and per-subscription filtering.  For configured subscriptions, counters are reset whenever the subscription's state is evaluated as "valid" (see (1) in Figure 8).

// Taken from another section.
In addition, the YANG Push Lite operational data gives an indication of the overall telemetry load on the device and hence gives an indication to whether a particular telemetry request is likely to be accepted, and honored.
-->

</section>
      <section anchor="publisher-capacity">
        <name>Publisher Capacity</name>
        <t>It is far preferable to decline a subscription request than to accept such a request when it cannot be met.</t>
        <t>Whether or not a subscription can be supported will be determined by a combination of several factors, such as the subscription update trigger (on-change or periodic), the period in which to report changes (one-second periods will consume more resources than one-hour periods), the amount of data in the datastore subtree that is being subscribed to, the number and combination of other subscriptions that are concurrently being serviced, and the overall load from other services running on the publisher.</t>
      </section>
    </section>
    <section anchor="ConformanceAndCapabilities">
      <name>Conformance and Capabilities</name>
      <t>The normative text in this document already indicates which parts of the specification must or should be implemented for a compliant YANG Push Lite implementation via the use of <xref target="RFC2119"/> language.  It also sets out some additional related requirements, e.g., on transports <xref target="transports"/>, that add in additional functionality.</t>
      <t>Some parts of this specification are optional to implement.  Some of these optional parts can be identified through the use of YANG Library <xref target="RFC8525"/> specifying the list of implemented YANG modules and YANG features.  But, the broader approach adopted by this specification is via extending the ietf-system-capabilities YANG module specified in <xref target="RFC9196"/> to make capability information available as standard YANG described operational data.</t>
      <section anchor="capabilities">
        <name>Capabilities</name>
        <t>Publishers <bcp14>SHOULD</bcp14> implement the ietf-system-capabilities YANG module, defined in <xref target="RFC9196"/>, and the ietf-yp-lite-capabilities YANG module, defined in <xref target="yp-lite-yang-capabilities-module"/>) that augments ietf-system-capabilities.</t>
        <t>The ietf-yp-lite-capabilities module contains capabilities to indicate what types of subscriptions and transports may be configured, along with acceptable subscription parameter for given subtrees.</t>
        <t>The schema tree for the ietf-system-capabilities augmented by ietf-yp-lite-capabilities is given below.</t>
        <figure>
          <name>YANG tree for ietf-system-capabilities with ietf-yl-lite-capabilities augmentations.</name>
          <sourcecode type="yangtree"><![CDATA[
module: ietf-system-capabilities
  +--ro system-capabilities
     +--ro datastore-capabilities* [datastore]
     |  +--ro datastore
     |  |       -> /yanglib:yang-library/datastore/name
     |  +--ro per-node-capabilities* []
     |     +--ro (node-selection)?
     |     |  +--:(node-selector)
     |     |     +--ro node-selector?
     |     |             nacm:node-instance-identifier
     |     +--ro yplca:datastore-telemetry
     |        +--ro yplca:periodic-notifications-supported?
     |        |       notification-support
     |        +--ro (yplca:update-period)?
     |        |  +--:(yplca:minimum-update-period)
     |        |  |  +--ro yplca:minimum-update-period?        uint32
     |        |  +--:(yplca:supported-update-period)
     |        |     +--ro yplca:supported-update-period*      uint32
     |        +--ro yplca:on-change-supported?
     |                notification-support
     +--ro yplca:datastore-telemetry
        +--ro yplca:periodic-notifications-supported?
        |       notification-support
        +--ro (yplca:update-period)?
        |  +--:(yplca:minimum-update-period)
        |  |  +--ro yplca:minimum-update-period?        uint32
        |  +--:(yplca:supported-update-period)
        |     +--ro yplca:supported-update-period*      uint32
        +--ro yplca:on-change-supported?
        |       notification-support
        +--ro yplca:transport
           +--ro yplca:transport-capability* [transport-protocol]
              +--ro yplca:transport-protocol    identityref
              +--ro yplca:security-protocol?    identityref
              +--ro yplca:encoding-format*      identityref
]]></sourcecode>
        </figure>
        <t><strong>TODO, do we need additional capabilities, as per <eref target="https://github.com/rgwilton/draft-yp-observability/issues/18">Issue 18</eref></strong></t>
      </section>
      <section anchor="subscription-content-schema-identification">
        <name>Subscription Content Schema Identification</name>
        <t>YANG Module Synchronization</t>
        <t>To make subscription requests, the subscriber needs to know the YANG datastore schemas used by the publisher.  These schemas are available in the YANG library module ietf-yang-library.yang as defined in <xref target="RFC8525"/>.  The receiver is expected to know the YANG library information before starting a subscription.</t>
        <t>The set of modules, revisions, features, and deviations can change at runtime (if supported by the publisher implementation).  For this purpose, the YANG library provides a simple "yang-library-change" notification that informs the subscriber that the library has changed.  In this case, a subscription may need to be updated to take the updates into account.  The receiver may also need to be informed of module changes in order to process updates regarding datastore</t>
        <t><strong>TODO, this section should be updated so that a subscription is restarted if the schema that it is using changes, and to incorporate ideas to fingerprint the subscription schema in the subscription-started notification.</strong></t>
      </section>
    </section>
    <section anchor="ietf-yp-lite-yang">
      <name>Core YANG Push Lite YANG Data Model</name>
      <section anchor="yp-lite-tree">
        <name>ietf-yp-lite YANG tree</name>
        <t>This section shows the full tree output for ietf-yp-lite YANG module.</t>
        <t>Note, this output does not include support for any transport configuration, and for any implementation that supports configured subscriptions using this YANG module then at least one transport would expect to be configurable.</t>
        <figure>
          <name>YANG tree for YANG Push Lite Module Tree Output</name>
          <sourcecode type="yangtree"><![CDATA[
module: ietf-yp-lite

  rpcs:
    +---x establish-subscription {dynamic}?
    |  +---w input
    |  |  +---w name              subscription-name
    |  |  +---w description?      string
    |  |  +---w target
    |  |  |  +---w datastore?       identityref
    |  |  |  +---w (filter)
    |  |  |     +--:(path)
    |  |  |     |  +---w path       ypath
    |  |  |     +--:(subtree)
    |  |  |     |  +---w subtree    <anydata> {ypl:subtree}?
    |  |  |     +--:(xpath)
    |  |  |        +---w xpath      yang:xpath1.0 {ypl:xpath}?
    |  |  +---w update-trigger
    |  |  |  +---w periodic!
    |  |  |  |  +---w period         centiseconds
    |  |  |  |  +---w anchor-time?   yang:date-and-time
    |  |  |  +---w on-change! {on-change}?
    |  |  |     +---w sync-on-start?   boolean
    |  |  +---w encoding          encoding
    |  |  +---w dscp?             inet:dscp
    |  +--ro output
    |     +--ro id    subscription-id
    +---x delete-subscription {dynamic}?
    |  +---w input
    |     +---w name    subscription-name
    +---x kill-subscription {dynamic}?
       +---w input
          +---w name    subscription-name

  notifications:
    +---n subscription-started
    |  +--ro id                subscription-id
    |  +--ro name              subscription-name
    |  +--ro description?      string
    |  +--ro target
    |  |  +--ro datastore?       identityref
    |  |  +--ro (filter)
    |  |     +--:(path)
    |  |     |  +--ro path       ypath
    |  |     +--:(subtree)
    |  |     |  +--ro subtree    <anydata> {ypl:subtree}?
    |  |     +--:(xpath)
    |  |        +--ro xpath      yang:xpath1.0 {ypl:xpath}?
    |  +--ro update-trigger
    |     +--ro periodic!
    |     |  +--ro period         centiseconds
    |     |  +--ro anchor-time?   yang:date-and-time
    |     +--ro on-change! {on-change}?
    |        +--ro sync-on-start?   boolean
    +---n subscription-terminated
    |  +--ro name      subscription-name
    |  +--ro id        subscription-id
    |  +--ro reason    identityref
    +---n receiver-disconnected
    |  +--ro name      subscription-name
    |  +--ro id        subscription-id
    |  +--ro reason    identityref
    +---n update
    |  +--ro id?                 subscription-id
    |  +--ro path-prefix?        string
    |  +--ro snapshot-type?      enumeration
    |  +--ro observation-time?   yang:date-and-time
    |  +--ro updates* [target-path]
    |  |  +--ro target-path    string
    |  |  +--ro data?          <anydata>
    |  +--ro complete?           empty
    +---n update-complete
       +--ro id    subscription-id
]]></sourcecode>
        </figure>
      </section>
      <section anchor="yp-lite-yang-module">
        <name>ietf-yp-lite YANG Model</name>
        <t>This module imports typedefs from <xref target="RFC6991"/>, <xref target="RFC8343"/>, <xref target="RFC8341"/>, <xref target="RFC8529"/>, and <xref target="RFC8342"/>.  It references <xref target="RFC6241"/>, <xref target="XPATH"/> ("XML Path Language (XPath) Version 1.0"), <xref target="RFC7049"/>, <xref target="RFC8259"/>, <xref target="RFC7950"/>, <xref target="RFC7951"/>, and <xref target="RFC7540"/>.</t>
        <t>This YANG module imports typedefs from <xref target="RFC6991"/>, identities from
<xref target="RFC8342"/>, and the "sx:structure" extension from <xref target="RFC8791"/>. It also references <xref target="RFC6241"/>, <xref target="XPATH"/>, and <xref target="RFC7950"/>.</t>
        <figure>
          <name>YANG module ietf-yp-lite</name>
          <sourcecode type="yang" markers="true" name="ietf-yp-lite.yang#0.1.0"><![CDATA[
module ietf-yp-lite {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-yp-lite";
  prefix ypl;

  import ietf-inet-types {
    prefix inet;
    reference
      "RFC 6991: Common YANG Data Types";
  }
  import ietf-netconf-acm {
    prefix nacm;
    reference
      "RFC 8341: Network Configuration Access Control Model";
  }
  import ietf-yang-structure-ext {
    prefix sx;
    reference
      "RFC 8525: YANG Data Structure Extensions";
  }
  import ietf-yang-types {
    prefix yang;
    reference
      "RFC 6991: Common YANG Data Types";
  }
  import ietf-datastores {
    prefix ds;
    reference
      "RFC 8342: Network Management Datastore Architecture (NMDA)";
  }

  organization
    "IETF NETCONF (Network Configuration) Working Group";
  contact
    "WG Web:  <https:/datatracker.ietf.org/wg/netconf/>
     WG List: <mailto:netconf@ietf.org>

     Author:  Robert Wilton
              <mailto:rwilton@cisco.com>";
  description
    "This module contains YANG specifications for YANG-Push lite,
     a simplified version of the YANG-Push [RFC 8641] protocol.

     The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL
     NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED',
     'MAY', and 'OPTIONAL' in this document are to be interpreted as
     described in BCP 14 (RFC 2119) (RFC 8174) when, and only when,
     they appear in all capitals, as shown here.

     Copyright (c) 2025 IETF Trust and the persons identified as
     authors of the code.  All rights reserved.

     Redistribution and use in source and binary forms, with or
     without modification, is permitted pursuant to, and subject to
     the license terms contained in, the Revised BSD License set
     forth in Section 4.c of the IETF Trust's Legal Provisions
     Relating to IETF Documents
     (https://trustee.ietf.org/license-info).

     This version of this YANG module is part of RFC XXXX
     (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself
     for full legal notices.";

  revision 2025-08-03 {
    description
      "Initial revision.";
    reference
      "XXXX: YANG Push Lite";
  }

  /*
   * FEATURES
   */

  feature dynamic {
    description
      "This feature indicates that dynamic establishment of
       subscriptions is
       supported.";
  }

  feature on-change {
    description
      "This feature indicates that on-change triggered subscriptions
       are supported.";
  }

  feature subtree {
    description
      "This feature indicates support for YANG subtree filtering.";
    reference
      "RFC 6241: Network Configuration Protocol (NETCONF),
                 Section 6";
  }

  feature xpath {
    description
      "This feature indicates support for XPath filtering.";
    reference
      "XML Path Language (XPath) Version 1.0
       (https://www.w3.org/TR/1999/REC-xpath-19991116)";
  }

  /*
   * IDENTITIES
   */
  /* Identities for RPC and notification errors */

  identity delete-subscription-error {
    description
      "Base identity for the problem found while attempting to
       fulfill either a 'delete-subscription' RPC request or a
       'kill-subscription' RPC request.";
  }

  identity establish-subscription-error {
    description
      "Base identity for the problem found while attempting to
       fulfill an 'establish-subscription' RPC request.";
  }

  identity subscription-terminated-reason {
    description
      "Base identity for the problem condition communicated to a
       receiver as part of a 'subscription-terminated'
       notification.";
  }

  identity dscp-unavailable {
    base establish-subscription-error;
    description
      "The publisher is unable to mark notification messages with
       prioritization information in a way that will be respected
       during network transit.";
  }

  identity encoding-unsupported {
    base establish-subscription-error;
    description
      "Unable to encode notification messages in the desired
       format.";
  }

  identity filter-unavailable {
    base subscription-terminated-reason;
    description
      "Referenced filter does not exist.  This means a receiver is
       referencing a filter that doesn't exist or to which it
       does not have access permissions.";
  }

  identity filter-unsupported {
    base establish-subscription-error;
    description
      "Cannot parse syntax in the filter.  This failure can be from
       a syntax error or a syntax too complex to be processed by the
       publisher.";
  }

  identity insufficient-resources {
    base establish-subscription-error;
    description
      "The publisher does not have sufficient resources to support
       the requested subscription.  An example might be that
       allocated CPU is too limited to generate the desired set of
       notification messages.";
  }

  identity no-such-subscription {
    base delete-subscription-error;
    base subscription-terminated-reason;
    description
      "Referenced subscription doesn't exist.  This may be as a
       result of a nonexistent subscription ID, an ID that belongs to
       another subscriber, or an ID for a configured subscription.";
  }

  identity stream-unavailable {
    base subscription-terminated-reason;
    description
      "Not a subscribable event stream.  This means the referenced
       event stream is not available for subscription by the
       receiver.";
  }

  identity suspension-timeout {
    base subscription-terminated-reason;
    description
      "Termination of a previously suspended subscription.  The
       publisher has eliminated the subscription, as it exceeded a
       time limit for suspension.";
  }

  identity unsupportable-volume {
    base subscription-terminated-reason;
    description
      "The publisher does not have the network bandwidth needed to
       get the volume of generated information intended for a
       receiver.";
  }

  /* Identities for encodings */

  identity configurable-encoding {
    description
      "If a transport identity derives from this identity, it means
       that it supports configurable encodings.  An example of a
       configurable encoding might be a new identity such as
       'encode-cbor'.  Such an identity could use
       'configurable-encoding' as its base.  This would allow a
       dynamic subscription encoded in JSON (RFC 8259) to request
       that notification messages be encoded via the Concise Binary
       Object Representation (CBOR) (RFC 7049).  Further details for
       any specific configurable encoding would be explored in a
       transport document based on this specification.
       
       TODO - Clear up this text or use YANG-CBOR reference";
    reference
      "RFC 8259: The JavaScript Object Notation (JSON) Data
                 Interchange Format
       RFC 7049: Concise Binary Object Representation (CBOR)";
  }

  identity encoding {
    description
      "Base identity to represent data encodings.";
  }

  identity json {
    base encoding;
    description
      "Encode data using JSON as described in RFC 7951.";
    reference
      "RFC 7951: JSON Encoding of Data Modeled with YANG";
  }

  identity xml {
    base encoding;
    description
      "Encode data using XML as described in RFC 7950.";
    reference
      "RFC 7950: The YANG 1.1 Data Modeling Language";
  }

  identity cbor {
    base encoding;
    description
      "Encode data using CBOR as described in RFC 9245,
       without using YANG SIDs";
    reference
      "RFC 9245: Encoding of Data Modeled with YANG in the
       Concise Binary Object Representation (CBOR).";
  }

  identity cbor-sids {
    base encoding;
    description
      "Encode data using JSON as described in RFC 7951, using YANG
       SIDs.";
    reference
      "RFC 9245: Encoding of Data Modeled with YANG in the
       Concise Binary Object Representation (CBOR).

       RFC 9595: YANG Schema Item iDentifier (YANG SID).";
  }

  /* Identities for transports */

  identity transport {
    description
      "An identity that represents the underlying mechanism for
       passing notification messages.";
  }


  /*
   * TYPEDEFs
   */

  typedef ypath {
    type string {
      length "1..max";
    }
    description
      "A type for YANG instance data paths.";
  }

  typedef encoding {
    type identityref {
      base encoding;
    }
    description
      "Specifies a data encoding, e.g., for a data subscription.";
  }

  typedef subscription-name {
    type string {
      length "1..64";
      // TODO, is it reasonable to limit this to 64 characters?
    } 
    description
      "A user friendly name for a subscription.";
  }

  typedef subscription-id {
    type uint32;
    description
      "A type for subscription identifiers.";
  }

  typedef transport {
    type identityref {
      base transport;
    }
    description
      "Specifies the transport used to send notification messages
       to a receiver.";
  }

// TODO - Consider changes to list keys or reordering of
//        user-ordered lists.

  typedef centiseconds {
    type uint32;
    description
      "A period of time, measured in units of 0.01 seconds.";
  }

  typedef subscription-type {
    type enumeration {
      enum configured {
        description
          "A subscription that is created and managed via
           configuration.";
      }
      enum dynamic {
        description
          "A subscription that is created and managed via RPC
           primitives.";
      }
    }
    description
      "Indicate the type of subscription.";
  }

  typedef subscription-status {
    type enumeration {
      enum invalid {
        description
          "The subscription as a whole is unsupportable with its
          current parameters.";
      }
      enum inactive {
        description
          "The subscription is supportable with its current
          parameters, but it is not currently connected to any
          connected receivers";
      }
      enum active {
        description
          "The subscription is actively running, and is connected
           to at least one receiver.

           A subscription-started notification must have been sent
           for a subscription to be in this state, and the receiver
           will receive update notifications, as per the
           update-trigger selection.";
      }
    }
    description
      "Indicates the status of a subscription";
  }

  /*
   * GROUPINGS
   */

  grouping dscp {
    description
      "This grouping describes QoS information concerning a
       subscription.  This information is passed to lower layers
       for transport prioritization and treatment.";
    leaf dscp {
      type inet:dscp;
      default "0";
      description
        "The desired network transport priority level.  This is the
         priority set on notification messages encapsulating the
         results of the subscription.  This transport priority is
         shared for all receivers of a given subscription.";
    }
  }

  grouping filter-choice {
    description
      "This grouping defines the types of selectors for objects
       from a datastore.";
    choice filter {
      mandatory true;
      description
        "The content filter specification for this request.";

      leaf path {
        type ypath;
        mandatory true;
        description
          "A basic path filter that allows wildcard, regex, or
           fixed value for list keys.  Each format is TODO";
      }
      anydata subtree {
        if-feature "ypl:subtree";
        mandatory true;
        description
          "This parameter identifies the portions of the
           target datastore to retrieve.";
        reference
          "RFC 6241: Network Configuration Protocol (NETCONF),
                     Section 6";
      }
      leaf xpath {
        if-feature "ypl:xpath";
        type yang:xpath1.0;
        mandatory true;
        description
          "This parameter contains an XPath expression identifying
           the portions of the target datastore to retrieve.

           If the expression returns a node set, all nodes in the
           node set are selected by the filter.  Otherwise, if the
           expression does not return a node set, the filter
           doesn't select any nodes.

           The expression is evaluated in the following XPath
           context:

           o  The set of namespace declarations is the set of prefix
              and namespace pairs for all YANG modules implemented
              by the server, where the prefix is the YANG module
              name and the namespace is as defined by the
              'namespace' statement in the YANG module.

              If the leaf is encoded in XML, all namespace
              declarations in scope on the 'stream-xpath-filter'
              leaf element are added to the set of namespace
              declarations.  If a prefix found in the XML is
              already present in the set of namespace declarations,
              the namespace in the XML is used.

           o  The set of variable bindings is empty.

           o  The function library is comprised of the core
              function library and the XPath functions defined in
              Section 10 in RFC 7950.

           o  The context node is the root node of the target
              datastore.";
        reference
          "XML Path Language (XPath) Version 1.0
           (https://www.w3.org/TR/1999/REC-xpath-19991116)
           RFC 7950: The YANG 1.1 Data Modeling Language,
                     Section 10";
      }
    }
  }

  grouping update-policy {
    description
      "This grouping describes the susbcription update policy";

    container update-trigger {
      description
        "This container describes all conditions under which
         subscription update messages are generated";

      container periodic {
        presence "indicates a periodic subscription";
        description
          "The publisher is requested to periodically notify the
            receiver regarding the current values of the datastore
            as defined by the selection filter.";
        leaf period {
          type centiseconds;
          mandatory true;
          description
            "Duration of time that should occur between periodic
              push updates, in units of 0.01 seconds.";
        }
        leaf anchor-time {
          type yang:date-and-time;
          description
            "Designates a timestamp before or after which a series
              of periodic push updates are determined.  The next
              update will take place at a point in time that is a
              multiple of a period from the 'anchor-time'.
              For example, for an 'anchor-time' that is set for the
              top of a particular minute and a period interval of a
              minute, updates will be sent at the top of every
              minute that this subscription is active.";
        }
      }
      container on-change {
        if-feature "on-change";
        presence "indicates an on-change subscription";
        description
          "The publisher is requested to notify the receiver
            regarding changes in values in the datastore subset as
            defined by a selection filter.";

        leaf sync-on-start {
          type boolean;
          default "true";
          description
            "When this object is set to 'false', (1) it restricts an
             on-change subscription from sending 'push-update'
             notifications and (2) pushing a full selection per the
             terms of the selection filter MUST NOT be done for
             this subscription.  Only updates about changes
             (i.e., only 'push-change-update' notifications)
             are sent.  When set to 'true' (the default behavior),
             in order to facilitate a receiver's synchronization,
             a full update is sent, via a 'push-update' notification,
             when the subscription starts.  After that,
             'push-change-update' notifications are exclusively sent,
             unless the publisher chooses to resync the subscription
             via a new 'push-update' notification.";
        }
      }
    }
  }

  grouping subscription-common {
    description
      "Common settings that are shared between dynamic and
       configured subscriptions.";

    leaf name {
      type subscription-name;
      mandatory true;
      description
        "The client provided name for the subscription.

         This MUST be unique across all subscriptions.  Configuring
         a subscription with a name already used by a dynamic
         subscription will replace the dynamic subscription, forcing
         it to be terminated.";
    }

    leaf description {
      type string {
        length "1..1000";
      }
      description
        "Open text allowing a configuring entity to embed the
         originator or other specifics of this subscription.";
    }

    container target {
      description
        "Identifies the source of information against which a
         subscription is being applied as well as specifics on the
         subset of information desired from that source.";
      leaf datastore {
        type identityref {
          base ds:datastore;
        }
        default "ds:operational";
        description
          "Datastore from which to retrieve data, defaults to
           operational";
      }

      uses filter-choice;
    }

    uses update-policy;
  }


  /*
   * RPCs
   */

  rpc establish-subscription {
    if-feature "dynamic";
    description
      "This RPC allows a subscriber to create (and possibly
       negotiate) a subscription on its own behalf.  If successful,
       the subscription remains in effect for the duration of the
       subscriber's association with the publisher or until the
       subscription is terminated.  If an error occurs or the
       publisher cannot meet the terms of a subscription, an RPC
       error is returned, and the subscription is not created.
       In that case, the RPC reply's 'error-info' MAY include
       suggested parameter settings that would have a higher
       likelihood of succeeding in a subsequent
       'establish-subscription' request.";
    input {
      uses subscription-common;

      leaf encoding {
        type encoding;
        mandatory true;
        description
          "The encoding to use for the subscription notifications.";
      }

      uses dscp;

    }
    output {
      leaf id {
        type subscription-id;
        mandatory true;
        description
          "Identifier used for this subscription.";
      }
    }
  }

  sx:structure establish-subscription-stream-error-info {
    container establish-subscription-stream-error-info {
      description
        "If any 'establish-subscription' RPC parameters are
         unsupportable against the event stream, a subscription
         is not created and the RPC error response MUST indicate the
         reason why the subscription failed to be created.  This
         yang-data MAY be inserted as structured data in a
         subscription's RPC error response to indicate the reason for
         the failure.  This yang-data MUST be inserted if hints are
         to be provided back to the subscriber.";
      leaf reason {
        type identityref {
          base establish-subscription-error;
        }
        description
          "Indicates the reason why the subscription has failed to
           be created to a targeted event stream.";
      }
      leaf filter-failure-hint {
        type string;
        description
          "Information describing where and/or why a provided
           filter was unsupportable for a subscription.  The
           syntax and semantics of this hint are
           implementation specific.";
      }
    }
  }

  rpc delete-subscription {
    if-feature "dynamic";
    description
      "This RPC allows a subscriber to delete a subscription that
       was previously created by that same subscriber using the
       'establish-subscription' RPC.

       Only subscriptions that were created using
       'establish-subscription' from the same origin as this RPC
       can be deleted via this RPC. // TODO - Why same origin?

       If an error occurs, the server replies with an 'rpc-error'
       where the 'error-info' field MAY contain a
       'delete-subscription-error-info' structure.";
    input {
      leaf name {
        type subscription-name;
        mandatory true;
        description
          "The name of the dynamic subscription to be deleted.";
      }
    }
  }

  rpc kill-subscription {
    if-feature "dynamic";
    nacm:default-deny-all;
    description
      "This RPC allows an operator to delete a dynamic subscription
       without restrictions on the originating subscriber or
       underlying transport session.

       Only dynamic subscriptions, i.e., those that were created
       using 'establish-subscription', may be deleted via this RPC.

       If an error occurs, the server replies with an 'rpc-error'
       where the 'error-info' field MAY contain a
       'delete-subscription-error-info' structure.";
    input {
      leaf name {
        type subscription-name;
        mandatory true;
        description
          "The name of the dynamic subscription to be deleted.";
      }
    }
  }

  sx:structure delete-subscription-error-info {
    container delete-subscription-error-info {
      description
        "If a 'delete-subscription' RPC or a 'kill-subscription' RPC
         fails, the subscription is not deleted and the RPC error
         response MUST indicate the reason for this failure.  This
         yang-data MAY be inserted as structured data in a
         subscription's RPC error response to indicate the reason
         for the failure.";
      leaf reason {
        type identityref {
          base delete-subscription-error;
        }
        mandatory true;
        description
          "Indicates the reason why the subscription has failed to be
           deleted.";
      }
    }
  }

  /*
   * NOTIFICATIONS
   */

  notification subscription-started {
    //ypl:subscription-state-notification;
    description
      "This notification indicates that a configured subscription
       has started and notifications will now be sent.";
    leaf id {
      type subscription-id;
      mandatory true;
      description
        "This references the affected subscription.";
    }
    uses subscription-common;
  }

  notification subscription-terminated {
    //ypl:subscription-state-notification;
    description
      "This notification indicates that a subscription has been
       terminated.";
    leaf name {
      type subscription-name;
      mandatory true;
      description
        "The name of the subscription that has been terminated.";
    }
    leaf id {
      type subscription-id;
      mandatory true;
      description
        "This references the affected subscription.";
    }
    leaf reason {
      type identityref {
        base subscription-terminated-reason;
      }
      mandatory true;
      description
        "Identifies the condition that resulted in the
         termination.";
    }
  }

  notification receiver-disconnected {
    description
      "This notification indicates that a receiver has been
       disconnected from a subscription.  This notification is only
       sent to the affected receiver if the transport is still
       available, and only if the subscription remains active due
       to other active receivers.

       The receiver will not receive any further notifications
       for this subscription unless it receives a new
       'subscription-started' notification for this
       subscription.";
    leaf name {
      type subscription-name;
      mandatory true;
      description
        "The name of the subscription.";
    }
    leaf id {
      type subscription-id;
      mandatory true;
      description
        "The subscription identifier";
    }
    leaf reason {
      type identityref {
        base subscription-terminated-reason;
          // TODO, add new receiver disconnected reasons.
      }
      mandatory true;
      description
        "Identifies the condition that resulted in the
         termination.";
    }
  }

  notification update {
    description
      "This notification contains a push update that in turn
       contains data subscribed to via a subscription.  In the case
       of a periodic subscription, this notification is sent for
       periodic updates.  It can also be used for synchronization
       updates of an on-change subscription.  This notification
       shall only be sent to receivers of a subscription.";
    leaf id {
      type subscription-id;
      description
        "This references the subscription that drove the
         notification to be sent.";
    }

    leaf path-prefix {
      type string;
      description
        "Specifies the common prefix that all other paths and data
         are encoded relative to.

         TODO - This should be a JSONified instance data path.";
    }

    leaf snapshot-type {
      type enumeration {
        enum "periodic" {
          description
            "The update message is due to a periodic update.";
        }
        enum "on-change-update" {
          description
            "The update message is due to an on-change update.  This
             means that one or more fields have changed under the
             snapshot path.

             TODO - Split this into a on-change-delete msg?";
        }
        enum "on-change-delete" {
          description
            "The update message is due to an on-change event where
             the data node at the target path has been delete.";
        }
        enum "resync" {
          description
            "This indicates that the update is to resynchronize the
             state, e.g., after a subscription started notification.

             Ideally, the resync message SHOULD be the first
             notification sent when a subscription has started, but
             it is not gauranteed or required to be the first
             (e.g., if an on-change event occurs).

             These messages can be used to ensure that all state
             has been sent to the client, and can be used to purge
             stale data.

             TODO - In the distributed notification case, need a
             notification to indicate that all child subscriptions
             have been sent.";
        }
      }
      description
        "This indicates the type of notification message that is
         being sent.";
    }

    leaf observation-time {
      type yang:date-and-time;
      description
        "The time that the update was observed by the publisher.";
    }

    list updates {
      key "target-path";
      description
        "This list contains the updated data.  It constitutes a
         snapshot at the time of update of the set of data that has
         been subscribed to.  The snapshot corresponds to the same
         snapshot that would be returned in a corresponding 'get'
         operation with the same selection filter parameters
         applied.";

      leaf target-path {
        type string;
        description
          "The target path of the data that is being replaced, i.e.,
           updated or deleted.  The path is given relative to the
           path-prefix.";
      }

      anydata data {
        description
          "This contains the updated data.  It constitutes a
          snapshot at the time of update of the set of data that has
          been subscribed to.  The snapshot corresponds to the same
          snapshot that would be returned in a corresponding 'get'
          operation with the same selection filter parameters
          applied.

          For an on-change delete notification, the
          datastore-snapshot will be absent for the given target
          path.

          The snapshot is encoded relative to the path-prefix.";
      }
    }

    leaf complete {
      type empty;
      description
        "This flag indicates that this is the last
         notification in a series of notifications that together
         constitute a complete snapshot of the subscribed data at
         the event-time.

         The 'update-complete' notification MAY be used as an
         alternative to setting this flag, and is semantically
         equivalent.";
    }
  }

  // TODO - Need to signal when an initial replay has completed, or
  //        possibly when any period subscription has completed.
  // TODO - Need to think about list key entries that are no longer
  //        present.
  notification update-complete {
    //ypl:subscription-state-notification;
    //if-feature "replay";
    description
      "This notification indicates the end of a periodic collection
       or resync event for an on-change subscription, and can be used
       to indicate that the receiver has a complete snapshot of the
       subscribed data at the event-time, and hence the client MAY
       use this as a signal that it can purge stale state
       information.
       
       Alternatively, the 'complete' flag in the update
       notification MAY be used instead of sending this notification
       as a separate message, and both are semantically equivalent.";
    leaf id {
      type subscription-id;
      mandatory true;
      description
        "This references the affected subscription.";
    }
  }
}
]]></sourcecode>
        </figure>
      </section>
    </section>
    <section anchor="config-subs-data-model">
      <name>Configured Subscription YANG Data Model</name>
      <t>This document specifies the ietf-yp-lite-config YANG module <xref target="yp-lite-config-yang-module"/> that defines an NMDA <xref target="RFC8342"/> compatible YANG data model for configuring subscriptions.  Support for this YANG module is <bcp14>OPTIONAL</bcp14> and is advertised using the normal mechanisms, e.g., <xref target="RFC8525"/>.</t>
      <t>Below is a tree diagram for the "subscriptions" container.  All objects contained in this tree are described in the YANG module in <xref target="yp-lite-yang-module"/>.  In the operational datastore <xref target="RFC8342"/>, the "subscription" list contains entries both for configured and dynamic subscriptions.</t>
      <figure anchor="SubscriptionYangTree">
        <name>subscriptions container Tree Diagram</name>
        <sourcecode type="yangtree"><![CDATA[
module: ietf-yp-lite-config
  +--rw datastore-telemetry!
     +--rw subscriptions
        +--rw subscription* [name]
           +--rw name
           |       subscription-name
           +--rw description?                        string
           +--rw target
           |  +--rw datastore?          identityref
           |  +--rw (filter)
           |     +--:(path)
           |     |  +--rw path          ypath
           |     +--:(subtree)
           |     |  +--rw subtree       <anydata> {ypl:subtree}?
           |     +--:(xpath)
           |     |  +--rw xpath         yang:xpath1.0 {ypl:xpath}?
           |     +--:(by-reference)
           |        +--rw filter-ref    filter-ref
           +--rw update-trigger
           |  +--rw periodic!
           |  |  +--rw period         centiseconds
           |  |  +--rw anchor-time?   yang:date-and-time
           |  +--rw on-change! {on-change}?
           |     +--rw sync-on-start?   boolean
           +--rw receivers* [name]
           |  +--rw name
           |  |       -> /datastore-telemetry/receivers/receiver/name
           |  +--ro status?       enumeration
           |  +--ro statistics
           |     +--ro receiver-disconnected-count?
           |             yang:zero-based-counter64
           +--ro id
           |       ypl:subscription-id
           +--ro status?
           |       ypl:subscription-status
           +--ro last-sequence-number?
           |       yang:zero-based-counter64
           +--ro last-notification-time?
           |       yang:date-and-time
           +--ro last-periodic-collection-time?
           |       yang:date-and-time
           +--ro last-on-change-notification-time?
           |       yang:date-and-time
           +--ro statistics
           |  +--ro started-notification-count?
           |  |       yang:zero-based-counter64
           |  +--ro terminated-notification-count?
           |  |       yang:zero-based-counter64
           |  +--ro update-notification-count?
           |  |       yang:zero-based-counter64
           |  +--ro periodic-collection-count?
           |  |       yang:zero-based-counter64
           |  +--ro excluded-event-records?
           |          yang:zero-based-counter64
           +---x reset

  augment /ypl:establish-subscription/ypl:input/ypl:target
            /ypl:filter:
    +--:(by-reference)
  augment /ypl:subscription-started/ypl:target:
    +-- filter-ref?   filter-ref
]]></sourcecode>
      </figure>
      <t>An overview of the behavior for configured subscriptions is specified in <xref target="configured-subscriptions"/>, with further details specified in the ietf-yp-lite-config YANG module.</t>
      <section anchor="yp-lite-config-tree">
        <name>ietf-yp-lite-config YANG tree</name>
        <t>This section shows the full tree output for ietf-yp-lite-config YANG module.</t>
        <t>Note, this output does not include support for any transport configuration, and for any implementation that supports configured subscriptions using this YANG module then at least one transport would expect to be configurable.</t>
        <figure>
          <name>YANG tree for YANG Push Lite Config Module Tree Output</name>
          <sourcecode type="yangtree"><![CDATA[
module: ietf-yp-lite-config
  +--rw datastore-telemetry!
     +--rw filters
     |  +--rw filter* [name]
     |     +--rw name             string
     |     +--rw (filter)
     |        +--:(path)
     |        |  +--rw path       ypath
     |        +--:(subtree)
     |        |  +--rw subtree    <anydata> {ypl:subtree}?
     |        +--:(xpath)
     |           +--rw xpath      yang:xpath1.0 {ypl:xpath}?
     +--rw subscriptions
     |  +--rw subscription* [name]
     |     +--rw name
     |     |       subscription-name
     |     +--rw description?                        string
     |     +--rw target
     |     |  +--rw datastore?          identityref
     |     |  +--rw (filter)
     |     |     +--:(path)
     |     |     |  +--rw path          ypath
     |     |     +--:(subtree)
     |     |     |  +--rw subtree       <anydata> {ypl:subtree}?
     |     |     +--:(xpath)
     |     |     |  +--rw xpath         yang:xpath1.0 {ypl:xpath}?
     |     |     +--:(by-reference)
     |     |        +--rw filter-ref    filter-ref
     |     +--rw update-trigger
     |     |  +--rw periodic!
     |     |  |  +--rw period         centiseconds
     |     |  |  +--rw anchor-time?   yang:date-and-time
     |     |  +--rw on-change! {on-change}?
     |     |     +--rw sync-on-start?   boolean
     |     +--rw receivers* [name]
     |     |  +--rw name
     |     |  |       -> /datastore-telemetry/receivers/receiver/name
     |     |  +--ro status?       enumeration
     |     |  +--ro statistics
     |     |     +--ro receiver-disconnected-count?
     |     |             yang:zero-based-counter64
     |     +--ro id
     |     |       ypl:subscription-id
     |     +--ro status?
     |     |       ypl:subscription-status
     |     +--ro last-sequence-number?
     |     |       yang:zero-based-counter64
     |     +--ro last-notification-time?
     |     |       yang:date-and-time
     |     +--ro last-periodic-collection-time?
     |     |       yang:date-and-time
     |     +--ro last-on-change-notification-time?
     |     |       yang:date-and-time
     |     +--ro statistics
     |     |  +--ro started-notification-count?
     |     |  |       yang:zero-based-counter64
     |     |  +--ro terminated-notification-count?
     |     |  |       yang:zero-based-counter64
     |     |  +--ro update-notification-count?
     |     |  |       yang:zero-based-counter64
     |     |  +--ro periodic-collection-count?
     |     |  |       yang:zero-based-counter64
     |     |  +--ro excluded-event-records?
     |     |          yang:zero-based-counter64
     |     +---x reset
     +--rw receivers
        +--rw receiver* [name]
           +--rw name                      string
           +--rw encoding                  ypl:encoding
           +--rw dscp?                     inet:dscp
           +---x reset
           +--rw (notification-message-origin)?
           |  +--:(interface-originated)
           |  |  +--rw source-interface?   if:interface-ref
           |  |          {interface-designation}?
           |  +--:(address-originated)
           |     +--rw source-vrf?         leafref {supports-vrf}?
           |     +--rw source-address?     inet:ip-address-no-zone
           +--rw (transport-type)

  augment /ypl:establish-subscription/ypl:input/ypl:target
            /ypl:filter:
    +--:(by-reference)
       +-- filter-ref?   filter-ref
  augment /ypl:subscription-started/ypl:target:
    +-- filter-ref?   filter-ref
]]></sourcecode>
        </figure>
      </section>
      <section anchor="yp-lite-config-yang-module">
        <name>ietf-yp-lite-config YANG Model</name>
        <t>This module has import dependencies on <xref target="RFC6991"/>, <xref target="RFC8343"/>, and <xref target="RFC8529"/>, and ietf-yang-push-lite.yang (this RFC).  In addition, this YANG module references <xref target="BCP14"/> (<xref target="RFC2119"/> <xref target="RFC8174"/>), and <xref target="RFC8529"/>.</t>
        <figure>
          <name>YANG module ietf-yp-lite-config</name>
          <sourcecode type="yang" markers="true" name="ietf-yp-lite-config.yang#0.1.0"><![CDATA[
module ietf-yp-lite-config {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-yp-lite-config";
  prefix yplco;

  import ietf-inet-types {
    prefix inet;
    reference
      "RFC 6991: Common YANG Data Types";
  }
  import ietf-interfaces {
    prefix if;
    reference
      "RFC 8343: A YANG Data Model for Interface Management";
  }
  import ietf-network-instance {
    prefix ni;
    reference
      "RFC 8529: YANG Data Model for Network Instances";
  }
  import ietf-yang-types {
    prefix yang;
    reference
      "RFC 6991: Common YANG Data Types";
  }
  import ietf-yp-lite {
    prefix ypl;
    reference
      "RFC XXXX: YANG Push Lite";
  }

  organization
    "IETF NETCONF (Network Configuration) Working Group";
  contact
    "WG Web:  <https:/datatracker.ietf.org/wg/netconf/>
     WG List: <mailto:netconf@ietf.org>

     Author:  Robert Wilton
              <mailto:rwilton@cisco.com>";
  description
    "This module contains YANG specifications for YANG-Push lite
     configuration and operational state model.

     The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL
     NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED',
     'MAY', and 'OPTIONAL' in this document are to be interpreted as
     described in BCP 14 (RFC 2119) (RFC 8174) when, and only when,
     they appear in all capitals, as shown here.

     Copyright (c) 2025 IETF Trust and the persons identified as
     authors of the code.  All rights reserved.

     Redistribution and use in source and binary forms, with or
     without modification, is permitted pursuant to, and subject to
     the license terms contained in, the Revised BSD License set
     forth in Section 4.c of the IETF Trust's Legal Provisions
     Relating to IETF Documents
     (https://trustee.ietf.org/license-info).

     This version of this YANG module is part of RFC XXXX
     (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself
     for full legal notices.";

  revision 2025-08-03 {
    description
      "Initial revision.";
    reference
      "XXX: YANG Push Lite";
  }

  /*
   * FEATURES
   */

  feature interface-designation {
    description
      "This feature indicates that a publisher supports sourcing all
       receiver interactions for a configured subscription from a
       single designated egress interface.";
  }

  feature supports-vrf {
    description
      "This feature indicates that a publisher supports VRF
       configuration for configured subscriptions.  VRF support for
       dynamic subscriptions does not require this feature.";
    reference
      "RFC 8529: YANG Data Model for Network Instances,
                 Section 6";
  }

  /*
   * TYPEDEFs
   */

  typedef filter-ref {
    type leafref {
      path "/datastore-telemetry/filters/filter/name";
    }
    description
      "This type is used to reference a selection filter.";
  }

  /*
   * GROUPINGS
   */
  grouping filter-ref {
    description
      "This grouping is used to reference a selection filter.";
    leaf filter-ref {
      type filter-ref;
      mandatory true;
      description
        "References an existing selection filter that is to be
        applied to the subscription.";
    }
  }

  /*
   * DATA NODES
   */

  container datastore-telemetry {
    presence "Enables datastore telemetry";
    description
    "YANG Push Lite Datastore Telemetry Configuration and State.";
    container filters {
      description
        "Contains a list of configurable filters that can be applied
         to subscriptions.  This facilitates the reuse of complex
         filters once defined.";

      list filter {
        key "name";
        description
          "A list of preconfigured filters that can be applied
          to datastore subscriptions.";
        leaf name {
          type string;
          description
            "A unique name to identify the selection filters.";
        }
        uses ypl:filter-choice;
      }
    }
    container subscriptions {
      description
        "Contains the list of currently active subscriptions, i.e.,
        subscriptions that are currently in effect, used for
        subscription management and monitoring purposes.  This
        includes subscriptions that have been set up via
        RPC primitives as well as subscriptions that have been
        established via configuration.";
      list subscription {
        key "name";
        description
          "The identity and specific parameters of a subscription.
          Subscriptions in this list can be created using a control
          channel or RPC or can be established through configuration.

          If the 'kill-subscription' RPC or configuration operations
          are used to delete a subscription, a
          'subscription-terminated' message is sent to any active or
          suspended receivers.";

        uses ypl:subscription-common;

        list receivers {
          key "name";
          min-elements 1;
          description
            "A host intended as a recipient for the notification
            messages of a subscription.  For configured
            subscriptions, transport-specific network parameters
            (or a leafref to those parameters) may be augmented to a
            specific receiver in this list.";
          leaf name {
            type leafref {
              path "/datastore-telemetry/receivers/receiver/name";
            }
            description
              "Identifies a unique receiver for a subscription.";
          }

          leaf status {
            type enumeration {
              enum disconnected {
                description
                  "This subscription does not have an active session
                   with the receiver, and it is not trying to
                   connect.

                  E.g., this state may be reported if the
                  subscription is not valid, or has not been started
                  yet.";
              }
              enum connecting {
                description
                  "The publisher is trying to establish a session
                   with the receiver for this subscription.

                   For a session less transport, this state may be
                   used to indicate that there is no route to the
                   receiver.

                   A receiver in connecting state may indicate that
                   the transport or associated security session
                   could not be established, and the publisher is
                   periodically trying to establish the connection.";
              }
              enum active {
                description
                  "The publisher has successfully connected (if over
                   a session based transport) to the receiver for
                   this subscription, and the publisher is able to
                   send notifications to the receiver.";
              }
            }
            config false;
            description
              "Specifies the connection status of the receiver for
               this subscription.";
          }

          container statistics {
            config false;
            description
              "Statistics related to the number of messages sent to
               this specific receiver for this subscription.";

            leaf receiver-disconnected-count {
              type yang:zero-based-counter64;
              config false;
              description
                "The number of times that the receiver has been
                 disconnected since the subscription
                 receiver entry was created and the configuration
                 was applied by the publisher";
            }
          }
        }

        leaf id {
          type ypl:subscription-id;
          config false;
          mandatory true;
          description
            "Publisher allocated identifier for a subscription;
              Unique in a given publisher.";
        }

        leaf status {
          type ypl:subscription-status;
          config false;
          description
            "The presence of this leaf indicates that the
             subscription originated from configuration, not through
             a controlchannel or RPC.  The value indicates the state
             of the subscription as established by the publisher.";
        }

        leaf last-sequence-number {
          type yang:zero-based-counter64;
          config false;
          description
            "The envelope sequence number for the last notification
             sent for this subscription.

             The sequence number is initialized to zero when the
             subscription first becomes active and the first
             subscription-started notification is sent.";
        }

        leaf last-notification-time {
          type yang:date-and-time;
          config false;
          description
            "The notification envelope event-time timestamp of the
             last notification sent for this subscription.

             The timestamp is initialized to the time when the
             subscription first becomes active and the first
             subscription-started notification is sent.";
        }

        leaf last-periodic-collection-time {
          type yang:date-and-time;
          config false;
          description
            "The event-time timestamp of the last completed periodic
             collection or resynchronization collection for this
             subscription, and used as the event-time in the
             notification header.

             The timestamp is initialized to the time when the
             subscription first becomes active and the first
             subscription-started notification is sent.";
        }

        leaf last-on-change-notification-time {
          type yang:date-and-time;
          config false;
          description
            "The notification envelope event-time timestamp of the
             last on-change notification sent for this subscription.

             The timestamp is initialized to the time when the
             subscription first becomes active and the first
             subscription-started notification is sent.";
        }

        container statistics {
          config false;
          description
            "Statistics related to the number of messages generated
             for this subscription.";

          leaf started-notification-count {
            type yang:zero-based-counter64;
            config false;
            description
              "The number of subscription-started notifications
               sent for this subscription since the subscription
               list entry was created and the configuration
               was applied by the publisher.";
          }

          leaf terminated-notification-count {
            type yang:zero-based-counter64;
            config false;
            description
              "The number of subscription-terminated notifications
               sent for this subscription since the subscription
               list entry was created and the configuration
               was applied by the publisher.";
          }

          leaf update-notification-count {
            type yang:zero-based-counter64;
            config false;
            description
              "The number of update records generated for the
               subscription, to be queued to one of more active
               receivers.

               The count is re-initialized to 0 when the
               subscription first becomes active and the
               subscription-started notification is sent.

               The count is incremented even if the update
               record has been generated, but is not queued to
               any receiver.";
          }

          leaf periodic-collection-count {
            type yang:zero-based-counter64;
            config false;
            description
              "The number of periodic collections completed for
               the subscription.

               The count is re-initialized to 0 when the
               subscription first becomes active and the
               subscription-started notification is sent.

               The count is incremented even if the update
               record has been generated, but is not queued to
               any receiver.";
          }

          leaf excluded-event-records {
            type yang:zero-based-counter64;
            config false;
            description
              "The number of event records explicitly removed via
              either an event stream filter or an access control
              filter so that they are not passed to a receiver.
              This count is set to zero each time
              'sent-event-records' is initialized.";
          }
        }

        action reset {
          description
            "Reset the subscription.

             This action will cause a new subscription-started
             message to be sent for the subscription";
        }
      }
    }
    container receivers {
      description
        "A container for all instances of configured receivers.";

      list receiver {
        key "name";

        leaf name {
          type string;
          description
            "An arbitrary but unique name for this receiver
            instance.";
        }

        leaf encoding {
  /*        when 'not(../transport) or derived-from(../transport,
          "ypl:configurable-encoding")';*/
          type ypl:encoding;
          mandatory true;
          description
            "The type of encoding for notification messages.  For a
             dynamic subscription, if not included as part of an
             'establish-subscription' RPC, the encoding will be
             populated with the encoding used by that RPC.  For a
             configured subscription, if not explicitly configured,
             the encoding will be the default encoding for an
             underlying transport.";
        }

        uses ypl:dscp;

        action reset {
          description
            "Resets all configured subscriptions that reference
             this receiver.

             This action is directly equivalent to invoking the 
             'reset' action on all subscriptions that references
             this receiver configuration.";
        }

        choice notification-message-origin {
          description
            "Identifies the egress interface on the publisher
            from which notification messages are to be sent.";
          case interface-originated {
            description
              "When notification messages are to egress a specific,
              designated interface on the publisher.";
            leaf source-interface {
              if-feature "interface-designation";
              type if:interface-ref;
              description
                "References the interface for notification
                 messages.";
            }
          }
          case address-originated {
            description
              "When notification messages are to depart from a
              publisher using a specific originating address and/or
              routing context information.";
            leaf source-vrf {
              if-feature "supports-vrf";
              type leafref {
                path
                  '/ni:network-instances/ni:network-instance/' 
                  + 'ni:name';
              }
              description
                "VRF from which notification messages should egress a
                publisher.";
            }
            leaf source-address {
              type inet:ip-address-no-zone;
              description
                "The source address for the notification messages.
                If a source VRF exists but this object doesn't, a
                publisher's default address for that VRF must
                be used.";
            }
          }
        }

        choice transport-type {
          mandatory true;
          description
            "Choice of different types of transports used to
             send notifications.  The 'case' statements must
             be augmented in by other modules.";
        }

        description
          "A list of all receiver instances.";
      }
    }
  }

  augment "/ypl:establish-subscription/ypl:input/ypl:"
        + "target/ypl:filter" {

    description
      "Augment the 'establish-subscription' RPC to allow
       referencing a configured receiver.";

    case by-reference {
      description
        "Incorporates a filter that has been configured
         separately.";
      uses filter-ref {
        refine "filter-ref" {
          mandatory false;
        }
      }
    }
  }

  augment "/ypl:subscription-started/ypl:target" {

    description
      "Allow a subscription-started notification to include a
       referenced named filter";
    uses filter-ref {
      refine "filter-ref" {
        mandatory false;
      }
    }
  }

  augment "/datastore-telemetry/subscriptions/subscription/"
        + "target/filter" {

    description
      "Augment the subscription filter to allow
       referencing a filter configured separately.";

    case by-reference {
      description
        "Incorporates a filter that has been configured
         separately.";
      uses filter-ref;
    }
  }
}
]]></sourcecode>
        </figure>
      </section>
    </section>
    <section anchor="capabilities-yang-data-model">
      <name>Capabilities YANG Data Model</name>
      <section anchor="yp-lite-capabilities-tree">
        <name>ietf-yp-lite-capabilities YANG tree</name>
        <t>This section shows the tree output for ietf-yp-lite-capabilities YANG module, which augments the ietf-system-capabilities YANG module <xref target="RFC9196"/>.</t>
      </section>
      <section anchor="yp-lite-yang-capabilities-module">
        <name>ietf-yp-lite-capabilities YANG Model</name>
        <t>This module imports typedefs from the yang-push-lite YANG module.</t>
        <t>This module augments the ietf-system-capabilities YANG module <xref target="RFC9196"/>.</t>
        <figure>
          <name>YANG module ietf-yp-lite-capabilities</name>
          <sourcecode type="yang" markers="true" name="ietf-yp-lite-capabilities.yang#0.1.0"><![CDATA[
module ietf-yp-lite-capabilities {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-yp-lite-capabilities";
  prefix yplca;

  import ietf-system-capabilities {
    prefix sysc;
    reference
      "RFC 9196: YANG Modules Describing Capabilities for Systems
       and Datastore Update Notifications";
  }
  import ietf-yp-lite {
    prefix ypl;
    reference
      "RFC XXX: YANG Push Lite";
  }

  organization
    "IETF NETCONF (Network Configuration) Working Group";
  contact
    "WG Web:  <https:/datatracker.ietf.org/wg/netconf/>
     WG List: <mailto:netconf@ietf.org>

     Author:  Robert Wilton
              <mailto:rwilton@cisco.com>";
  description
    "This module contains YANG specifications for YANG-Push lite.

     The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL
     NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED',
     'MAY', and 'OPTIONAL' in this document are to be interpreted as
     described in BCP 14 (RFC 2119) (RFC 8174) when, and only when,
     they appear in all capitals, as shown here.

     Copyright (c) 2025 IETF Trust and the persons identified as
     authors of the code.  All rights reserved.

     Redistribution and use in source and binary forms, with or
     without modification, is permitted pursuant to, and subject to
     the license terms contained in, the Revised BSD License set
     forth in Section 4.c of the IETF Trust's Legal Provisions
     Relating to IETF Documents
     (https://trustee.ietf.org/license-info).

     This version of this YANG module is part of RFC XXXX
     (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself
     for full legal notices.";

  revision 2024-11-11 {
    description
      "Initial revision.";
    reference
      "XXX: YANG Push Lite";
  }

  /*
   * IDENTITIES
   */

  identity security-protocol {
    description
      "Identity for security protocols.";
  }

  identity tls12 {
    base security-protocol;
    description
      "Indicates TLS Protocol Version 1.2. TLS 1.2 is obsolete,
       and thus it is NOT RECOMMENDED to enable this feature.";
    reference
      "RFC 5246: The Transport Layer Security (TLS) Protocol
                 Version 1.2";
  }

  identity tls13 {
    base security-protocol;
    description
      "Indicates TLS Protocol Version 1.3.";
    reference
      "RFC 8446: The Transport Layer Security (TLS)
                 Protocol Version 1.3";
  }

  identity dtls12 {
    base security-protocol;
    description
      "Indicates DTLS Protocol Version 1.2. TLS 1.2 is obsolete,
       and thus it is NOT RECOMMENDED to enable this feature.";
    reference
      "RFC 6347: The Datagram Transport Layer Security (TLS) Protocol
                 Version 1.2";
  }

  identity dtls13 {
    base security-protocol;
    description
      "Indicates DTLS Protocol Version 1.3.";
    reference
      "RFC 9147: The Datagram Transport Layer Security (TLS)
                 Protocol Version 1.3";
  }

  identity ssh {
    base security-protocol;
    description
      "Indicates SSH.";
  }


  grouping yp-lite-capabilities {
    description
      "Capabilities related to YANG Push Lite subscriptions
       and notifications";
    container datastore-telemetry {
      description
        "Capabilities related to YANG Push List subscriptions
         and notifications";
      typedef notification-support {
        type bits {
          bit config-changes {
            description
              "The publisher is capable of sending
               notifications for 'config true' nodes for the
               relevant scope and subscription type.";
          }
          bit state-changes {
            description
              "The publisher is capable of sending
               notifications for 'config false' nodes for the
               relevant scope and subscription type.";
          }
        }
        description
          "Type for defining whether 'on-change' or
           'periodic' notifications are supported for all data nodes,
           'config false' data nodes, 'config true' data nodes, or
           no data nodes.

           The bits config-changes or state-changes have no effect
           when they are set for a datastore or for a set of nodes
           that does not contain nodes with the indicated config
           value.  In those cases, the effect is the same as if no
           support was declared.  One example of this is indicating
           support for state-changes for a candidate datastore that
           has no effect.";
      }

      leaf periodic-notifications-supported {
        type notification-support;
        description
          "Specifies whether the publisher is capable of
           sending 'periodic' notifications for the selected
           data nodes, including any subtrees that may exist
           below them.";
        reference
          "RFC 8641: Subscription to YANG Notifications for
           Datastore Updates, 'periodic' subscription concept";
      }
      choice update-period {
        description
          "Supported update period value or values for
           'periodic' subscriptions.";
        leaf minimum-update-period {
          type uint32;
          units "centiseconds";
          description
            "Indicates the minimal update period that is
             supported for a 'periodic' subscription.

             A subscription request to the selected data nodes with
             a smaller period than what this leaf specifies is
             likely to result in a 'period-unsupported' error.";
        }
        leaf-list supported-update-period {
          type uint32;
          units "centiseconds";
          description
            "Supported update period values for a 'periodic'
             subscription.

             A subscription request to the selected data nodes with a
             period not included in the leaf-list will result in a
             'period-unsupported' error.";
        }
      }
      leaf on-change-supported {
        type notification-support;
        description
          "Specifies whether the publisher is capable of
           sending 'on-change' notifications for the selected
           data nodes and the subtree below them.";
      }
    }
  }

  grouping yp-lite-transport-capabilities {
    description
      "Capabilities related to transports supporting Yang Push Lite";
    container transport {
      description
        "Specifies capabilities related to YANG-Push transports.";
      list transport-capability {
        key "transport-protocol";
        description
          "Indicates a list of capabilities related to notification
                  transport.";
        leaf transport-protocol {
          type identityref {
            base ypl:transport;
          }
          description
            "Indicates supported transport protocol for YANG-Push.";
        }
        leaf security-protocol {
          type identityref {
            base security-protocol;
          }
          description
            "Indicates transport security protocol.";
        }
        leaf-list encoding-format {
          type identityref {
            base ypl:encoding;
          }
          description
            "Indicates supported encoding formats.";
        }
      }
    }
  }

  // YANG Push Lite Capabilities
  augment "/sysc:system-capabilities" {
    description
      "Adds system level capabilities for YANG Push Lite";
    uses yp-lite-capabilities;
  }

  augment "/sysc:system-capabilities/yplca:datastore-telemetry" {
    description
      "Adds system level Yang Push Lite transport capabilities";
    uses yp-lite-transport-capabilities;
  }

  augment "/sysc:system-capabilities/sysc:datastore-capabilities"
        + "/sysc:per-node-capabilities" {
    description
      "Add datastore and node-level capabilities";
    uses yp-lite-capabilities;
  }
}
]]></sourcecode>
        </figure>
        <figure>
          <name>YANG tree for YANG Push Lite Capabilities Module Tree Output</name>
          <sourcecode type="yangtree"><![CDATA[
module: ietf-yp-lite-capabilities

  augment /sysc:system-capabilities:
    +--ro datastore-telemetry
       +--ro periodic-notifications-supported?   notification-support
       +--ro (update-period)?
       |  +--:(minimum-update-period)
       |  |  +--ro minimum-update-period?        uint32
       |  +--:(supported-update-period)
       |     +--ro supported-update-period*      uint32
       +--ro on-change-supported?                notification-support
       +--ro transport
          +--ro transport-capability* [transport-protocol]
             +--ro transport-protocol    identityref
             +--ro security-protocol?    identityref
             +--ro encoding-format*      identityref
  augment /sysc:system-capabilities/sysc:datastore-capabilities
            /sysc:per-node-capabilities:
    +--ro datastore-telemetry
       +--ro periodic-notifications-supported?   notification-support
       +--ro (update-period)?
       |  +--:(minimum-update-period)
       |  |  +--ro minimum-update-period?        uint32
       |  +--:(supported-update-period)
       |     +--ro supported-update-period*      uint32
       +--ro on-change-supported?                notification-support
]]></sourcecode>
        </figure>
      </section>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <t>With configured subscriptions, one or more publishers could be used to overwhelm a receiver.  To counter this, notification messages <bcp14>SHOULD NOT</bcp14> be sent to any receiver that does not support this specification.  Receivers that do not want notification messages need only terminate or refuse any transport sessions from the publisher.</t>
      <t>When a receiver of a configured subscription gets a new "subscription-started" message for a known subscription where it is already consuming events, it may indicate that an attacker has done something that has momentarily disrupted receiver connectivity. <strong>TODO - Do we still want this paragraph?</strong>.</t>
      <t>For dynamic subscriptions, implementations need to protect against malicious or buggy subscribers that may send a large number of "establish-subscription" requests and thereby use up system resources.  To cover this possibility, operators <bcp14>SHOULD</bcp14> monitor for such cases and, if discovered, take remedial action to limit the resources used, such as suspending or terminating a subset of the subscriptions or, if the underlying transport is session based, terminating the underlying transport session.</t>
      <t>Using DNS names for configured subscription's receiver "name" lookups can cause situations where the name resolves differently than expected on the publisher, so the recipient would be different than expected.</t>
      <section anchor="use-of-yang-push-lite-with-nacm">
        <name>Use of YANG Push Lite with NACM</name>
        <t><strong>TODO, do we even need this section?</strong></t>
        <t>This specification <bcp14>MAY</bcp14> be used with access control tools, such as NACM <xref target="RFC8341"/>.  Please refer to that specification for normative guidance of how NACM applies.</t>
        <t>For informative purposes, please note that NACM can be used:</t>
        <ul spacing="normal">
          <li>
            <t>NACM can be used to control access to the data nodes and RPCs defined in the YANG modules defined in this document.</t>
          </li>
          <li>
            <t>NACM can be used to control access to the data included in the YANG <em>update</em> notifications.</t>
          </li>
        </ul>
      </section>
      <section anchor="receiver-authorization">
        <name>Receiver Authorization</name>
        <t><strong>TODO Relax when access control must be checked.</strong></t>
        <t><strong>TODO Consider if this is the best place in the document, but this text needs to be updated regardless.</strong></t>
        <t>A receiver of subscription data <bcp14>MUST</bcp14> only be sent updates for which it has proper authorization.  A publisher <bcp14>MUST</bcp14> ensure that no unauthorized data is included in push updates.  To do so, it needs to apply all corresponding checks applicable at the time of a specific pushed update and, if necessary, silently remove any unauthorized data from datastore subtrees.  This enables YANG data that is pushed based on subscriptions to be authorized in a way that is equivalent to a regular data retrieval ("get") operation.</t>
        <t>Each "push-update" and "push-change-update" <bcp14>MUST</bcp14> have access control applied, as depicted in Figure 5.  This includes validating that read access is permitted for any new objects selected since the last notification message was sent to a particular receiver.  A publisher <bcp14>MUST</bcp14> silently omit data nodes from the results that the client is not authorized to see.  To accomplish this, implementations <bcp14>SHOULD</bcp14> apply the conceptual authorization model of <xref target="RFC8341"/>, specifically Section 3.2.4, extended to apply analogously to data nodes included in notifications, not just &lt;rpc-reply&gt; messages sent in response to
&lt;get&gt; and &lt;get-config&gt; requests.</t>
        <figure>
          <name>Access Control for Push Updates</name>
          <artwork align="left"><![CDATA[
                     +-----------------+      +--------------------+
  push-update or --> | datastore node  |  yes | add datastore node |
 push-change-update  | access allowed? | ---> | to update record   |
                     +-----------------+      +--------------------+
]]></artwork>
        </figure>
        <t>A publisher <bcp14>MUST</bcp14> allow for the possibility that a subscription's selection filter references nonexistent data or data that a receiver is not allowed to access.  Such support permits a receiver the ability to monitor the entire lifecycle of some datastore tree without needing to explicitly enumerate every individual datastore node.  If, after access control has been applied, there are no objects remaining in an update record, then the effect varies given if the subscription is a periodic or on-change subscription.  For a periodic subscription, an empty "push-update" notification <bcp14>MUST</bcp14> be sent, so that clients do not get confused into thinking that an update was lost.  For an on-change subscription, a "push-update" notification <bcp14>MUST NOT</bcp14> be sent, so that clients remain unaware of changes made to nodes they don't have read-access for.</t>
        <t>A publisher <bcp14>MAY</bcp14> choose to reject an "establish-subscription" request that selects nonexistent data or data that a receiver is not allowed to access.  The error identity "unchanging-selection" <bcp14>SHOULD</bcp14> be returned as the reason for the rejection.  In addition, a publisher <bcp14>MAY</bcp14> choose to terminate a dynamic subscription or suspend a configured receiver when the authorization privileges of a receiver change or the access controls for subscribed objects change.  In that case, the publisher <bcp14>SHOULD</bcp14> include the error identity "unchanging-selection" as the reason when sending the "subscription-terminated" or "subscription-suspended" notification, respectively.  Such a capability enables the publisher to avoid having to support
continuous and total filtering of a subscription's content for every update record.  It also reduces the possibility of leakage of access-controlled objects.</t>
        <t>If read access into previously accessible nodes has been lost due to a receiver permissions change, this <bcp14>SHOULD</bcp14> be reported as a patch "delete" operation for on-change subscriptions.  If not capable of handling such receiver permission changes with such a "delete", publisher implementations <bcp14>MUST</bcp14> force dynamic subscription re-establishment or configured subscription reinitialization so that appropriate filtering is installed.</t>
      </section>
      <section anchor="yang-module-security-considerations">
        <name>YANG Module Security Considerations</name>
        <t>This section is modeled after the template described in Section 3.7.1 of <xref target="I-D.draft-ietf-netmod-rfc8407bis"/>.</t>
        <t>The "ietf-yp-lite" YANG module defines a data model that is designed to be accessed via YANG-based management protocols, such as NETCONF <xref target="RFC6241"/> and RESTCONF <xref target="RFC8040"/>. These protocols have to use a secure transport layer (e.g., SSH <xref target="RFC4252"/>, TLS <xref target="RFC8446"/>, and QUIC <xref target="RFC9000"/>) and have to use mutual authentication.</t>
        <t>The Network Configuration Access Control Model (NACM) <xref target="RFC8341"/> provides the means to restrict access for particular NETCONF or RESTCONF users to a pre-configured subset of all available NETCONF or RESTCONF protocol operations and content.</t>
        <t>There are a number of data nodes defined in this YANG module that are writable/creatable/deletable (i.e., "config true", which is the default).  All writable data nodes are likely to be reasonably sensitive or vulnerable in some network environments.  Write operations (e.g., edit-config) and delete operations to these data nodes without proper protection or authentication can have a negative effect on network operations.  The following subtrees and data nodes have particular sensitivities/vulnerabilities:</t>
        <ul spacing="normal">
          <li>
            <t>There are no particularly sensitive writable data nodes.</t>
          </li>
        </ul>
        <t>Some of the readable data nodes in this YANG module may be considered sensitive or vulnerable in some network environments.  It is thus important to control read access (e.g., via get, get-config, or notification) to these data nodes. Specifically, the following subtrees and data nodes have particular sensitivities/vulnerabilities:</t>
        <ul spacing="normal">
          <li>
            <t>There are no particularly sensitive readable data nodes.</t>
          </li>
        </ul>
        <t>Some of the RPC or action operations in this YANG module may be considered sensitive or vulnerable in some network environments. It is thus important to control access to these operations. Specifically, the following operations have particular sensitivities/vulnerabilities:</t>
        <ul spacing="normal">
          <li>
            <t>kill-subscription - this RPC operation allows the caller to kill any dynamic subscription, even those created via other users, or other transport sessions.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="namespace-uri-registrations">
        <name>Namespace URI registrations</name>
        <t>This document registers the following namespace URI in the "IETF XML Registry" <xref target="RFC3688"/>:</t>
        <table>
          <name>Namespace URI registrations</name>
          <thead>
            <tr>
              <th align="left">URI</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">urn:ietf:params:xml:ns:yang:ietf-yp-lite</td>
            </tr>
            <tr>
              <td align="left">urn:ietf:params:xml:ns:yang:ietf-yp-lite-config</td>
            </tr>
            <tr>
              <td align="left">urn:ietf:params:xml:ns:yang:ietf-yp-lite-capabilities</td>
            </tr>
          </tbody>
        </table>
        <t>For all registrations:</t>
        <ul spacing="normal">
          <li>
            <t>Registrant Contact: The IESG.</t>
          </li>
          <li>
            <t>XML: N/A; the requested URI is an XML namespace.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="yang-module-name-registrations">
      <name>YANG Module Name registrations</name>
      <t>This document registers the following YANG modules in the "YANG Module Names" registry <xref target="RFC6020"/>:</t>
      <table>
        <name>YANG Module Name Registrations</name>
        <thead>
          <tr>
            <th align="left">Name</th>
            <th align="left">Namespace</th>
            <th align="left">Prefix</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">ietf-yp-lite</td>
            <td align="left">urn:ietf:params:xml:ns:yang:ietf-yp-lite</td>
            <td align="left">ypl</td>
          </tr>
          <tr>
            <td align="left">ietf-yp-lite-config</td>
            <td align="left">urn:ietf:params:xml:ns:yang:ietf-yp-lite-config</td>
            <td align="left">yplco</td>
          </tr>
          <tr>
            <td align="left">ietf-yp-lite-capabilities</td>
            <td align="left">urn:ietf:params:xml:ns:yang:ietf-yp-lite-capabilities</td>
            <td align="left">yplca</td>
          </tr>
        </tbody>
      </table>
      <t>For all registration the reference is "RFC XXXX".</t>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>This initial draft is early work is based on discussions with various folk, particularly Thomas Graf, Holger Keller, Dan Voyer, Nils Warnke, and Alex Huang Feng; but also wider conversations that include: Benoit Claise, Pierre Francois, Paolo Lucente, Jean Quilbeuf, among others.</t>
    </section>
    <section numbered="false" anchor="contributors">
      <name>Contributors</name>
      <t>The following individuals have actively contributed to this draft and the YANG Push Solution.</t>
      <ul spacing="normal">
        <li>
          <t>Dan Voyer</t>
        </li>
      </ul>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="I-D.draft-ietf-netconf-notif-envelope">
          <front>
            <title>Extensible YANG Model for YANG-Push Notifications</title>
            <author fullname="Alex Huang Feng" initials="A. H." surname="Feng">
              <organization>INSA-Lyon</organization>
            </author>
            <author fullname="Pierre Francois" initials="P." surname="Francois">
              <organization>INSA-Lyon</organization>
            </author>
            <author fullname="Thomas Graf" initials="T." surname="Graf">
              <organization>Swisscom</organization>
            </author>
            <author fullname="Benoît Claise" initials="B." surname="Claise">
              <organization>Huawei</organization>
            </author>
            <date day="20" month="October" year="2025"/>
            <abstract>
              <t>   This document defines a new extensible notification structure,
   defined in YANG, for use in YANG-Push Notification messages enabling
   any YANG-compatible encodings such as XML, JSON, or CBOR.
   Additionally, it defines two essential extensions to this structure,
   the support of a hostname and a sequence number and the support of a
   timestamp characterizing the moment when the changed data was
   observed.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-netconf-notif-envelope-03"/>
        </reference>
        <reference anchor="RFC2474">
          <front>
            <title>Definition of the Differentiated Services Field (DS Field) in the IPv4 and IPv6 Headers</title>
            <author fullname="K. Nichols" initials="K." surname="Nichols"/>
            <author fullname="S. Blake" initials="S." surname="Blake"/>
            <author fullname="F. Baker" initials="F." surname="Baker"/>
            <author fullname="D. Black" initials="D." surname="Black"/>
            <date month="December" year="1998"/>
            <abstract>
              <t>This document defines the IP header field, called the DS (for differentiated services) field. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2474"/>
          <seriesInfo name="DOI" value="10.17487/RFC2474"/>
        </reference>
        <reference anchor="RFC6241">
          <front>
            <title>Network Configuration Protocol (NETCONF)</title>
            <author fullname="R. Enns" initials="R." role="editor" surname="Enns"/>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
            <author fullname="J. Schoenwaelder" initials="J." role="editor" surname="Schoenwaelder"/>
            <author fullname="A. Bierman" initials="A." role="editor" surname="Bierman"/>
            <date month="June" year="2011"/>
            <abstract>
              <t>The Network Configuration Protocol (NETCONF) defined in this document provides mechanisms to install, manipulate, and delete the configuration of network devices. It uses an Extensible Markup Language (XML)-based data encoding for the configuration data as well as the protocol messages. The NETCONF protocol operations are realized as remote procedure calls (RPCs). This document obsoletes RFC 4741. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6241"/>
          <seriesInfo name="DOI" value="10.17487/RFC6241"/>
        </reference>
        <reference anchor="RFC6991">
          <front>
            <title>Common YANG Data Types</title>
            <author fullname="J. Schoenwaelder" initials="J." role="editor" surname="Schoenwaelder"/>
            <date month="July" year="2013"/>
            <abstract>
              <t>This document introduces a collection of common data types to be used with the YANG data modeling language. This document obsoletes RFC 6021.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6991"/>
          <seriesInfo name="DOI" value="10.17487/RFC6991"/>
        </reference>
        <reference anchor="RFC7950">
          <front>
            <title>The YANG 1.1 Data Modeling Language</title>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
            <date month="August" year="2016"/>
            <abstract>
              <t>YANG is a data modeling language used to model configuration data, state data, Remote Procedure Calls, and notifications for network management protocols. This document describes the syntax and semantics of version 1.1 of the YANG language. YANG version 1.1 is a maintenance release of the YANG language, addressing ambiguities and defects in the original specification. There are a small number of backward incompatibilities from YANG version 1. This document also specifies the YANG mappings to the Network Configuration Protocol (NETCONF).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7950"/>
          <seriesInfo name="DOI" value="10.17487/RFC7950"/>
        </reference>
        <reference anchor="RFC7951">
          <front>
            <title>JSON Encoding of Data Modeled with YANG</title>
            <author fullname="L. Lhotka" initials="L." surname="Lhotka"/>
            <date month="August" year="2016"/>
            <abstract>
              <t>This document defines encoding rules for representing configuration data, state data, parameters of Remote Procedure Call (RPC) operations or actions, and notifications defined using YANG as JavaScript Object Notation (JSON) text.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7951"/>
          <seriesInfo name="DOI" value="10.17487/RFC7951"/>
        </reference>
        <reference anchor="RFC8340">
          <front>
            <title>YANG Tree Diagrams</title>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <author fullname="L. Berger" initials="L." role="editor" surname="Berger"/>
            <date month="March" year="2018"/>
            <abstract>
              <t>This document captures the current syntax used in YANG module tree diagrams. The purpose of this document is to provide a single location for this definition. This syntax may be updated from time to time based on the evolution of the YANG language.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="215"/>
          <seriesInfo name="RFC" value="8340"/>
          <seriesInfo name="DOI" value="10.17487/RFC8340"/>
        </reference>
        <reference anchor="RFC8341">
          <front>
            <title>Network Configuration Access Control Model</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman"/>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <date month="March" year="2018"/>
            <abstract>
              <t>The standardization of network configuration interfaces for use with the Network Configuration Protocol (NETCONF) or the RESTCONF protocol requires a structured and secure operating environment that promotes human usability and multi-vendor interoperability. There is a need for standard mechanisms to restrict NETCONF or RESTCONF protocol access for particular users to a preconfigured subset of all available NETCONF or RESTCONF protocol operations and content. This document defines such an access control model.</t>
              <t>This document obsoletes RFC 6536.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="91"/>
          <seriesInfo name="RFC" value="8341"/>
          <seriesInfo name="DOI" value="10.17487/RFC8341"/>
        </reference>
        <reference anchor="RFC8342">
          <front>
            <title>Network Management Datastore Architecture (NMDA)</title>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <author fullname="J. Schoenwaelder" initials="J." surname="Schoenwaelder"/>
            <author fullname="P. Shafer" initials="P." surname="Shafer"/>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <author fullname="R. Wilton" initials="R." surname="Wilton"/>
            <date month="March" year="2018"/>
            <abstract>
              <t>Datastores are a fundamental concept binding the data models written in the YANG data modeling language to network management protocols such as the Network Configuration Protocol (NETCONF) and RESTCONF. This document defines an architectural framework for datastores based on the experience gained with the initial simpler model, addressing requirements that were not well supported in the initial model. This document updates RFC 7950.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8342"/>
          <seriesInfo name="DOI" value="10.17487/RFC8342"/>
        </reference>
        <reference anchor="RFC8525">
          <front>
            <title>YANG Library</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman"/>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <author fullname="J. Schoenwaelder" initials="J." surname="Schoenwaelder"/>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <author fullname="R. Wilton" initials="R." surname="Wilton"/>
            <date month="March" year="2019"/>
            <abstract>
              <t>This document describes a YANG library that provides information about the YANG modules, datastores, and datastore schemas used by a network management server. Simple caching mechanisms are provided to allow clients to minimize retrieval of this information. This version of the YANG library supports the Network Management Datastore Architecture (NMDA) by listing all datastores supported by a network management server and the schema that is used by each of these datastores.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8525"/>
          <seriesInfo name="DOI" value="10.17487/RFC8525"/>
        </reference>
        <reference anchor="RFC8529">
          <front>
            <title>YANG Data Model for Network Instances</title>
            <author fullname="L. Berger" initials="L." surname="Berger"/>
            <author fullname="C. Hopps" initials="C." surname="Hopps"/>
            <author fullname="A. Lindem" initials="A." surname="Lindem"/>
            <author fullname="D. Bogdanovic" initials="D." surname="Bogdanovic"/>
            <author fullname="X. Liu" initials="X." surname="Liu"/>
            <date month="March" year="2019"/>
            <abstract>
              <t>This document defines a network instance module. This module can be used to manage the virtual resource partitioning that may be present on a network device. Examples of common industry terms for virtual resource partitioning are VPN Routing and Forwarding (VRF) instances and Virtual Switch Instances (VSIs).</t>
              <t>The YANG data model in this document conforms to the Network Management Datastore Architecture (NMDA) defined in RFC 8342.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8529"/>
          <seriesInfo name="DOI" value="10.17487/RFC8529"/>
        </reference>
        <reference anchor="RFC8791">
          <front>
            <title>YANG Data Structure Extensions</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman"/>
            <author fullname="M. Björklund" initials="M." surname="Björklund"/>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <date month="June" year="2020"/>
            <abstract>
              <t>This document describes YANG mechanisms for defining abstract data structures with YANG.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8791"/>
          <seriesInfo name="DOI" value="10.17487/RFC8791"/>
        </reference>
        <reference anchor="RFC9196">
          <front>
            <title>YANG Modules Describing Capabilities for Systems and Datastore Update Notifications</title>
            <author fullname="B. Lengyel" initials="B." surname="Lengyel"/>
            <author fullname="A. Clemm" initials="A." surname="Clemm"/>
            <author fullname="B. Claise" initials="B." surname="Claise"/>
            <date month="February" year="2022"/>
            <abstract>
              <t>This document defines two YANG modules, "ietf-system-capabilities" and "ietf-notification-capabilities".</t>
              <t>The module "ietf-system-capabilities" provides a placeholder structure that can be used to discover YANG-related system capabilities for servers. The module can be used to report capability information from the server at runtime or at implementation time by making use of the YANG instance data file format.</t>
              <t>The module "ietf-notification-capabilities" augments "ietf-system-capabilities" to specify capabilities related to "Subscription to YANG Notifications for Datastore Updates" (RFC 8641).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9196"/>
          <seriesInfo name="DOI" value="10.17487/RFC9196"/>
        </reference>
        <reference anchor="RFC9254">
          <front>
            <title>Encoding of Data Modeled with YANG in the Concise Binary Object Representation (CBOR)</title>
            <author fullname="M. Veillette" initials="M." role="editor" surname="Veillette"/>
            <author fullname="I. Petrov" initials="I." role="editor" surname="Petrov"/>
            <author fullname="A. Pelov" initials="A." surname="Pelov"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="M. Richardson" initials="M." surname="Richardson"/>
            <date month="July" year="2022"/>
            <abstract>
              <t>YANG (RFC 7950) is a data modeling language used to model configuration data, state data, parameters and results of Remote Procedure Call (RPC) operations or actions, and notifications.</t>
              <t>This document defines encoding rules for YANG in the Concise Binary Object Representation (CBOR) (RFC 8949).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9254"/>
          <seriesInfo name="DOI" value="10.17487/RFC9254"/>
        </reference>
        <reference anchor="RFC9595">
          <front>
            <title>YANG Schema Item iDentifier (YANG SID)</title>
            <author fullname="M. Veillette" initials="M." role="editor" surname="Veillette"/>
            <author fullname="A. Pelov" initials="A." role="editor" surname="Pelov"/>
            <author fullname="I. Petrov" initials="I." role="editor" surname="Petrov"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="M. Richardson" initials="M." surname="Richardson"/>
            <date month="July" year="2024"/>
            <abstract>
              <t>YANG Schema Item iDentifiers (YANG SIDs) are globally unique 63-bit unsigned integers used to identify YANG items. SIDs provide a more compact method for identifying those YANG items that can be used efficiently, notably in constrained environments (RFC 7228). This document defines the semantics, registration processes, and assignment processes for YANG SIDs for IETF-managed YANG modules. To enable the implementation of these processes, this document also defines a file format used to persist and publish assigned YANG SIDs.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9595"/>
          <seriesInfo name="DOI" value="10.17487/RFC9595"/>
        </reference>
        <reference anchor="RFC9485">
          <front>
            <title>I-Regexp: An Interoperable Regular Expression Format</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="T. Bray" initials="T." surname="Bray"/>
            <date month="October" year="2023"/>
            <abstract>
              <t>This document specifies I-Regexp, a flavor of regular expression that is limited in scope with the goal of interoperation across many different regular expression libraries.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9485"/>
          <seriesInfo name="DOI" value="10.17487/RFC9485"/>
        </reference>
        <reference anchor="BCP14">
          <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="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>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC3411">
          <front>
            <title>An Architecture for Describing Simple Network Management Protocol (SNMP) Management Frameworks</title>
            <author fullname="D. Harrington" initials="D." surname="Harrington"/>
            <author fullname="R. Presuhn" initials="R." surname="Presuhn"/>
            <author fullname="B. Wijnen" initials="B." surname="Wijnen"/>
            <date month="December" year="2002"/>
            <abstract>
              <t>This document describes an architecture for describing Simple Network Management Protocol (SNMP) Management Frameworks. The architecture is designed to be modular to allow the evolution of the SNMP protocol standards over time. The major portions of the architecture are an SNMP engine containing a Message Processing Subsystem, a Security Subsystem and an Access Control Subsystem, and possibly multiple SNMP applications which provide specific functional processing of management data. This document obsoletes RFC 2571. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="62"/>
          <seriesInfo name="RFC" value="3411"/>
          <seriesInfo name="DOI" value="10.17487/RFC3411"/>
        </reference>
        <reference anchor="RFC3688">
          <front>
            <title>The IETF XML Registry</title>
            <author fullname="M. Mealling" initials="M." surname="Mealling"/>
            <date month="January" year="2004"/>
            <abstract>
              <t>This document describes an IANA maintained registry for IETF standards which use Extensible Markup Language (XML) related items such as Namespaces, Document Type Declarations (DTDs), Schemas, and Resource Description Framework (RDF) Schemas.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="81"/>
          <seriesInfo name="RFC" value="3688"/>
          <seriesInfo name="DOI" value="10.17487/RFC3688"/>
        </reference>
        <reference anchor="RFC4252">
          <front>
            <title>The Secure Shell (SSH) Authentication Protocol</title>
            <author fullname="T. Ylonen" initials="T." surname="Ylonen"/>
            <author fullname="C. Lonvick" initials="C." role="editor" surname="Lonvick"/>
            <date month="January" year="2006"/>
            <abstract>
              <t>The Secure Shell Protocol (SSH) is a protocol for secure remote login and other secure network services over an insecure network. This document describes the SSH authentication protocol framework and public key, password, and host-based client authentication methods. Additional authentication methods are described in separate documents. The SSH authentication protocol runs on top of the SSH transport layer protocol and provides a single authenticated tunnel for the SSH connection protocol. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4252"/>
          <seriesInfo name="DOI" value="10.17487/RFC4252"/>
        </reference>
        <reference anchor="RFC5277">
          <front>
            <title>NETCONF Event Notifications</title>
            <author fullname="S. Chisholm" initials="S." surname="Chisholm"/>
            <author fullname="H. Trevino" initials="H." surname="Trevino"/>
            <date month="July" year="2008"/>
            <abstract>
              <t>This document defines mechanisms that provide an asynchronous message notification delivery service for the Network Configuration protocol (NETCONF). This is an optional capability built on top of the base NETCONF definition. This document defines the capabilities and operations necessary to support this service. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5277"/>
          <seriesInfo name="DOI" value="10.17487/RFC5277"/>
        </reference>
        <reference anchor="RFC6020">
          <front>
            <title>YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF)</title>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
            <date month="October" year="2010"/>
            <abstract>
              <t>YANG is a data modeling language used to model configuration and state data manipulated by the Network Configuration Protocol (NETCONF), NETCONF remote procedure calls, and NETCONF notifications. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6020"/>
          <seriesInfo name="DOI" value="10.17487/RFC6020"/>
        </reference>
        <reference anchor="RFC7049">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <date month="October" year="2013"/>
            <abstract>
              <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7049"/>
          <seriesInfo name="DOI" value="10.17487/RFC7049"/>
        </reference>
        <reference anchor="RFC7540">
          <front>
            <title>Hypertext Transfer Protocol Version 2 (HTTP/2)</title>
            <author fullname="M. Belshe" initials="M." surname="Belshe"/>
            <author fullname="R. Peon" initials="R." surname="Peon"/>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>This specification describes an optimized expression of the semantics of the Hypertext Transfer Protocol (HTTP), referred to as HTTP version 2 (HTTP/2). HTTP/2 enables a more efficient use of network resources and a reduced perception of latency by introducing header field compression and allowing multiple concurrent exchanges on the same connection. It also introduces unsolicited push of representations from servers to clients.</t>
              <t>This specification is an alternative to, but does not obsolete, the HTTP/1.1 message syntax. HTTP's existing semantics remain unchanged.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7540"/>
          <seriesInfo name="DOI" value="10.17487/RFC7540"/>
        </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="RFC8343">
          <front>
            <title>A YANG Data Model for Interface Management</title>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <date month="March" year="2018"/>
            <abstract>
              <t>This document defines a YANG data model for the management of network interfaces. It is expected that interface-type-specific data models augment the generic interfaces data model defined in this document. The data model includes definitions for configuration and system state (status information and counters for the collection of statistics).</t>
              <t>The YANG data model in this document conforms to the Network Management Datastore Architecture (NMDA) defined in RFC 8342.</t>
              <t>This document obsoletes RFC 7223.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8343"/>
          <seriesInfo name="DOI" value="10.17487/RFC8343"/>
        </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="RFC8040">
          <front>
            <title>RESTCONF Protocol</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman"/>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <date month="January" year="2017"/>
            <abstract>
              <t>This document describes an HTTP-based protocol that provides a programmatic interface for accessing data defined in YANG, using the datastore concepts defined in the Network Configuration Protocol (NETCONF).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8040"/>
          <seriesInfo name="DOI" value="10.17487/RFC8040"/>
        </reference>
        <reference anchor="RFC8071">
          <front>
            <title>NETCONF Call Home and RESTCONF Call Home</title>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <date month="February" year="2017"/>
            <abstract>
              <t>This RFC presents NETCONF Call Home and RESTCONF Call Home, which enable a NETCONF or RESTCONF server to initiate a secure connection to a NETCONF or RESTCONF client, respectively.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8071"/>
          <seriesInfo name="DOI" value="10.17487/RFC8071"/>
        </reference>
        <reference anchor="RFC8072">
          <front>
            <title>YANG Patch Media Type</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman"/>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <date month="February" year="2017"/>
            <abstract>
              <t>This document describes a method for applying patches to configuration datastores using data defined with the YANG data modeling language.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8072"/>
          <seriesInfo name="DOI" value="10.17487/RFC8072"/>
        </reference>
        <reference anchor="RFC8639">
          <front>
            <title>Subscription to YANG Notifications</title>
            <author fullname="E. Voit" initials="E." surname="Voit"/>
            <author fullname="A. Clemm" initials="A." surname="Clemm"/>
            <author fullname="A. Gonzalez Prieto" initials="A." surname="Gonzalez Prieto"/>
            <author fullname="E. Nilsen-Nygaard" initials="E." surname="Nilsen-Nygaard"/>
            <author fullname="A. Tripathy" initials="A." surname="Tripathy"/>
            <date month="September" year="2019"/>
            <abstract>
              <t>This document defines a YANG data model and associated mechanisms enabling subscriber-specific subscriptions to a publisher's event streams. Applying these elements allows a subscriber to request and receive a continuous, customized feed of publisher-generated information.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8639"/>
          <seriesInfo name="DOI" value="10.17487/RFC8639"/>
        </reference>
        <reference anchor="RFC8640">
          <front>
            <title>Dynamic Subscription to YANG Events and Datastores over NETCONF</title>
            <author fullname="E. Voit" initials="E." surname="Voit"/>
            <author fullname="A. Clemm" initials="A." surname="Clemm"/>
            <author fullname="A. Gonzalez Prieto" initials="A." surname="Gonzalez Prieto"/>
            <author fullname="E. Nilsen-Nygaard" initials="E." surname="Nilsen-Nygaard"/>
            <author fullname="A. Tripathy" initials="A." surname="Tripathy"/>
            <date month="September" year="2019"/>
            <abstract>
              <t>This document provides a Network Configuration Protocol (NETCONF) binding to the dynamic subscription capability of both subscribed notifications and YANG-Push.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8640"/>
          <seriesInfo name="DOI" value="10.17487/RFC8640"/>
        </reference>
        <reference anchor="RFC8641">
          <front>
            <title>Subscription to YANG Notifications for Datastore Updates</title>
            <author fullname="A. Clemm" initials="A." surname="Clemm"/>
            <author fullname="E. Voit" initials="E." surname="Voit"/>
            <date month="September" year="2019"/>
            <abstract>
              <t>This document describes a mechanism that allows subscriber applications to request a continuous and customized stream of updates from a YANG datastore. Providing such visibility into updates enables new capabilities based on the remote mirroring and monitoring of configuration and operational state.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8641"/>
          <seriesInfo name="DOI" value="10.17487/RFC8641"/>
        </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="I-D.draft-ietf-netmod-rfc8407bis">
          <front>
            <title>Guidelines for Authors and Reviewers of Documents Containing YANG Data Models</title>
            <author fullname="Andy Bierman" initials="A." surname="Bierman">
              <organization>YumaWorks</organization>
            </author>
            <author fullname="Mohamed Boucadair" initials="M." surname="Boucadair">
              <organization>Orange</organization>
            </author>
            <author fullname="Qin Wu" initials="Q." surname="Wu">
              <organization>Huawei</organization>
            </author>
            <date day="5" month="June" year="2025"/>
            <abstract>
              <t>   This document provides guidelines for authors and reviewers of
   specifications containing YANG data models, including IANA-maintained
   modules.  Recommendations and procedures are defined, which are
   intended to increase interoperability and usability of Network
   Configuration Protocol (NETCONF) and RESTCONF Protocol
   implementations that utilize YANG modules.  This document obsoletes
   RFC 8407.

   Also, this document updates RFC 8126 by providing additional
   guidelines for writing the IANA considerations for RFCs that specify
   IANA-maintained modules.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-netmod-rfc8407bis-28"/>
        </reference>
        <reference anchor="I-D.ietf-nmop-network-anomaly-architecture">
          <front>
            <title>A Framework for a Network Anomaly Detection Architecture</title>
            <author fullname="Thomas Graf" initials="T." surname="Graf">
              <organization>Swisscom</organization>
            </author>
            <author fullname="Wanting Du" initials="W." surname="Du">
              <organization>Swisscom</organization>
            </author>
            <author fullname="Pierre Francois" initials="P." surname="Francois">
              <organization>INSA-Lyon</organization>
            </author>
            <author fullname="Alex Huang Feng" initials="A. H." surname="Feng">
              <organization>INSA-Lyon</organization>
            </author>
            <date day="6" month="September" year="2025"/>
            <abstract>
              <t>   This document describes the motivation and architecture of a Network
   Anomaly Detection Framework and the relationship to other documents
   describing network Symptom semantics and network incident lifecycle.

   The described architecture for detecting IP network service
   interruption is designed to be generic applicable and extensible.
   Different applications are described and examples are referenced with
   open-source running code.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-nmop-network-anomaly-architecture-05"/>
        </reference>
        <reference anchor="I-D.ietf-nmop-yang-message-broker-integration">
          <front>
            <title>An Architecture for YANG-Push to Message Broker Integration</title>
            <author fullname="Thomas Graf" initials="T." surname="Graf">
              <organization>Swisscom</organization>
            </author>
            <author fullname="Ahmed Elhassany" initials="A." surname="Elhassany">
              <organization>Swisscom</organization>
            </author>
            <date day="20" month="October" year="2025"/>
            <abstract>
              <t>   This document describes the motivation and architecture of a native
   YANG-Push notifications and YANG Schema integration into a Message
   Broker and YANG Schema Registry.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-nmop-yang-message-broker-integration-09"/>
        </reference>
        <reference anchor="I-D.draft-ietf-netconf-udp-notif">
          <front>
            <title>UDP-based Transport for Configured Subscriptions</title>
            <author fullname="Alex Huang Feng" initials="A. H." surname="Feng">
              <organization>INSA-Lyon</organization>
            </author>
            <author fullname="Pierre Francois" initials="P." surname="Francois">
              <organization>INSA-Lyon</organization>
            </author>
            <author fullname="Tianran Zhou" initials="T." surname="Zhou">
              <organization>Huawei</organization>
            </author>
            <author fullname="Thomas Graf" initials="T." surname="Graf">
              <organization>Swisscom</organization>
            </author>
            <author fullname="Paolo Lucente" initials="P." surname="Lucente">
              <organization>NTT</organization>
            </author>
            <date day="14" month="October" year="2025"/>
            <abstract>
              <t>   This document describes a UDP-based transport for YANG notifications
   to collect data from network nodes.  A shim header is defined to
   facilitate the data streaming directly from a publishing process on a
   network device to telemetry receivers.  Such a design enables higher
   frequency updates and less performance overhead on publisher and
   receiver processes compared to already established notification
   mechanisms.  A YANG data model is also defined for management of the
   described UDP-based transport.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-netconf-udp-notif-23"/>
        </reference>
        <reference anchor="I-D.draft-netana-netconf-yp-transport-capabilities">
          <front>
            <title>YANG Notification Transport Capabilities</title>
            <author fullname="Qin Wu" initials="Q." surname="Wu">
              <organization>Huawei</organization>
            </author>
            <author fullname="Qiufang Ma" initials="Q." surname="Ma">
              <organization>Huawei</organization>
            </author>
            <author fullname="Alex Huang Feng" initials="A. H." surname="Feng">
              <organization>INSA-Lyon</organization>
            </author>
            <author fullname="Thomas Graf" initials="T." surname="Graf">
              <organization>Swisscom</organization>
            </author>
            <date day="17" month="January" year="2025"/>
            <abstract>
              <t>   This document specifies a YANG module for YANG notifications
   transport capabilities which augments "ietf-system-capabilities" YANG
   module defined in [RFC9196].  The module provides transport,
   encoding, and encryption system capabilities for transport-specific
   notification.  This YANG module can be used by the client to learn
   capability information from the server at runtime or at
   implementation time, by making use of the YANG instance data file
   format.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-netana-netconf-yp-transport-capabilities-01"/>
        </reference>
        <reference anchor="I-D.draft-ietf-netconf-https-notif">
          <front>
            <title>An HTTPS-based Transport for YANG Notifications</title>
            <author fullname="Mahesh Jethanandani" initials="M." surname="Jethanandani">
              <organization>Kloud Services</organization>
            </author>
            <author fullname="Kent Watsen" initials="K." surname="Watsen">
              <organization>Watsen Networks</organization>
            </author>
            <date day="1" month="February" year="2024"/>
            <abstract>
              <t>   This document defines a protocol for sending asynchronous event
   notifications similar to notifications defined in RFC 5277, but over
   HTTPS.  YANG modules for configuring publishers are also defined.
   Examples are provided illustrating how to configure various
   publishers.

   This document requires that the publisher is a "server" (e.g., a
   NETCONF or RESTCONF server), but does not assume that the receiver is
   a server.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-netconf-https-notif-15"/>
        </reference>
        <reference anchor="I-D.draft-ietf-netconf-distributed-notif">
          <front>
            <title>Subscription to Notifications in a Distributed Architecture</title>
            <author fullname="Tianran Zhou" initials="T." surname="Zhou">
              <organization>Huawei</organization>
            </author>
            <author fullname="Guangying Zheng" initials="G." surname="Zheng">
              <organization>Huawei</organization>
            </author>
            <author fullname="Eric Voit" initials="E." surname="Voit">
              <organization>Cisco Systems</organization>
            </author>
            <author fullname="Thomas Graf" initials="T." surname="Graf">
              <organization>Swisscom</organization>
            </author>
            <author fullname="Pierre Francois" initials="P." surname="Francois">
              <organization>INSA-Lyon</organization>
            </author>
            <date day="19" month="October" year="2025"/>
            <abstract>
              <t>   This document describes extensions to the YANG notifications
   subscription to allow metrics being published directly from
   processors on line cards to target receivers, while subscription is
   still maintained at the route processor in a distributed forwarding
   system.


              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-netconf-distributed-notif-16"/>
        </reference>
        <reference anchor="Kafka" target="https://kafka.apache.org/">
          <front>
            <title>Apache Kafka</title>
            <author initials="" surname="Apache.org" fullname="Apache.org">
              <organization/>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="Consistency" target="https://en.wikipedia.org/wiki/Consistency_(database_systems)">
          <front>
            <title>Consistency (database systems)</title>
            <author initials="" surname="Wikipedia" fullname="Wikipedia">
              <organization/>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="EventualConsistency" target="https://www.techopedia.com/definition/29165/eventual-consistency">
          <front>
            <title>Eventual Consistency</title>
            <author initials="M." surname="Rouse" fullname="Margaret Rouse">
              <organization/>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="XPATH" target="https://www.w3.org/TR/1999/REC-xpath-19991116/">
          <front>
            <title>XML Path Language (XPath) Version 1.0</title>
            <author initials="" surname="W3C" fullname="W3C">
              <organization/>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="gNMI" target="https://github.com/openconfig/reference/blob/master/rpc/gnmi/gnmi-specification.md">
          <front>
            <title>gRPC Network Management Interface (gNMI)</title>
            <author initials="" surname="OpenConfig" fullname="OpenConfig">
              <organization/>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="I-D.ietf-netconf-distributed-notif">
          <front>
            <title>Subscription to Notifications in a Distributed Architecture</title>
            <author fullname="Tianran Zhou" initials="T." surname="Zhou">
              <organization>Huawei</organization>
            </author>
            <author fullname="Guangying Zheng" initials="G." surname="Zheng">
              <organization>Huawei</organization>
            </author>
            <author fullname="Eric Voit" initials="E." surname="Voit">
              <organization>Cisco Systems</organization>
            </author>
            <author fullname="Thomas Graf" initials="T." surname="Graf">
              <organization>Swisscom</organization>
            </author>
            <author fullname="Pierre Francois" initials="P." surname="Francois">
              <organization>INSA-Lyon</organization>
            </author>
            <date day="19" month="October" year="2025"/>
            <abstract>
              <t>   This document describes extensions to the YANG notifications
   subscription to allow metrics being published directly from
   processors on line cards to target receivers, while subscription is
   still maintained at the route processor in a distributed forwarding
   system.


              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-netconf-distributed-notif-16"/>
        </reference>
        <reference anchor="I-D.tgraf-netconf-notif-sequencing">
          <front>
            <title>Support of Hostname and Sequencing in YANG Notifications</title>
            <author fullname="Thomas Graf" initials="T." surname="Graf">
              <organization>Swisscom</organization>
            </author>
            <author fullname="Jean Quilbeuf" initials="J." surname="Quilbeuf">
              <organization>Huawei</organization>
            </author>
            <author fullname="Alex Huang Feng" initials="A. H." surname="Feng">
              <organization>INSA-Lyon</organization>
            </author>
            <date day="29" month="June" year="2024"/>
            <abstract>
              <t>   This document specifies a new YANG module that augments the NETCONF
   Event Notification header to support the hostname and sequence number
   to identify from which network node and at which time the message was
   published.  This allows the collector to recognize loss, delay and
   reordering between the publisher and the downstream system storing
   the messages.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-tgraf-netconf-notif-sequencing-06"/>
        </reference>
        <reference anchor="I-D.tgraf-netconf-yang-push-observation-time">
          <front>
            <title>Support of Observation Timestamp in YANG-Push Notifications</title>
            <author fullname="Thomas Graf" initials="T." surname="Graf">
              <organization>Swisscom</organization>
            </author>
            <author fullname="Benoît Claise" initials="B." surname="Claise">
              <organization>Huawei</organization>
            </author>
            <author fullname="Alex Huang Feng" initials="A. H." surname="Feng">
              <organization>INSA-Lyon</organization>
            </author>
            <date day="14" month="December" year="2024"/>
            <abstract>
              <t>   This document extends YANG-Push Notifications with the YANG objects
   observation timestamp and point-in-time for streaming update YANG-
   Push notifications.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-tgraf-netconf-yang-push-observation-time-03"/>
        </reference>
      </references>
    </references>
    <?line 3770?>

<section anchor="DifferencesFromYangPush">
      <name>Functional changes between YANG Push Lite and YANG Push</name>
      <t>This non-normative section highlights the significant functional changes where the YANG Push Lite implementation differs from YANG Push.  However, the main body of this document, from <xref target="overview"/> onwards, provides the normative definition of the YANG Push Lite specification, except for any text or sections that explicitly indicate that they are informative rather being normative.</t>
      <t><em>Note to reviewers: If you notice mistakes in this section during development of the document and solution then please point them out to the authors and the working group.</em> <strong>(RFC editor, please remove this paragraph prior to publication)</strong></t>
      <section anchor="removed-functionality">
        <name>Removed Functionality</name>
        <t>This section lists functionality specified in <xref target="RFC8639"/> and YANG Push which is not specified in YANG Push Lite.</t>
        <ul spacing="normal">
          <li>
            <t>Negotiation and hints of failed subscriptions.</t>
          </li>
          <li>
            <t>The RPC to modify an existing dynamic subscription, instead the subscription must be terminated and re-established.</t>
          </li>
          <li>
            <t>The ability to suspend and resume a dynamic subscription.  Instead a dynamic subscription is terminated if the device cannot reliably fulfill the subscription or a receiver is too slow causing the subscription to be back pressured.</t>
          </li>
          <li>
            <t>Specifying a subscription stop time, and the corresponding subscription-completed notification have been removed.</t>
          </li>
          <li>
            <t>Replaying of buffered event records are not supported.  The nearest equivalent is requesting a sync-on-start replay when the subscription transport session comes up which will reply the current state.</t>
          </li>
          <li>
            <t>QoS weighting and dependency between subscriptions has been removed due to the complexity of implementation.</t>
          </li>
          <li>
            <t>Support for reporting subscription error hints has been removed.  The device <bcp14>SHOULD</bcp14> reject subscriptions that are likely to overload the device, but more onus is placed on the operator configuring the subscriptions or setting up the dynamic subscriptions to ensure that subscriptions are reasonable, as they would be expected to do for any other configuration.</t>
          </li>
          <li>
            <t>The "subscription-state-notif" extension has been removed.</t>
          </li>
          <li>
            <t>The YANG Patch format <xref target="RFC8072"/> is no longer used for on-change subscriptions.</t>
          </li>
        </ul>
      </section>
      <section anchor="changed-functionality">
        <name>Changed Functionality</name>
        <t>This section documents behavior that exists in both YANG Push and YANG Push Lite, but the behavior differs between the two:</t>
        <ul spacing="normal">
          <li>
            <t>All YANG Push Lite notifications messages use <xref target="I-D.draft-ietf-netconf-notif-envelope"/> rather than <xref target="RFC5277"/> used by YANG Push <xref target="RFC8641"/>.</t>
          </li>
          <li>
            <t>Changes to handling receivers:  </t>
            <ul spacing="normal">
              <li>
                <t>Receivers are always configured separately from the subscription and are referenced.</t>
              </li>
              <li>
                <t>Transport and Encoding parameters are configured as part of a receiver definition, and are used by all subscriptions directed towards a given receiver.</t>
              </li>
              <li>
                <t>Encoding is now a mandatory parameter under a receiver and dynamic subscription (rather than specifying a default).</t>
              </li>
              <li>
                <t>If a subscription uses multiple receivers then:      </t>
                <ul spacing="normal">
                  <li>
                    <t>Update messages and lifecycle notifications are sent to all receivers (to preserve sequence numbers)</t>
                  </li>
                  <li>
                    <t>all receivers must be configured with the same encoding</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>Invoking the <em>reset</em> RPC operation on a receiver requires and forces a reset of any transport sessions associated with that receiver.  Previously, the sessions would not be reset if they were used by other subscriptions.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Periodic and on-change message uses a common <em>update</em> notification message format, allowing for the messages to be processed by clients in a similar fashion and to support combined periodic and on-change subscriptions.</t>
          </li>
          <li>
            <t>On-change dampening:  </t>
            <ul spacing="normal">
              <li>
                <t>Client configurable on-change dampening has been removed.</t>
              </li>
              <li>
                <t>However, YANG Push Lite allows a publisher to limit the rate at which a data node is sampled for on-change notifications.  See <xref target="OnChangeConsiderations"/> for further details.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Dynamic subscriptions are no longer mandatory to implement, either or both of Configured and Dynamic Subscriptions may be implemented in YANG Push Lite.</t>
          </li>
          <li>
            <t>The solution focuses solely on datastore subscriptions that each have their own event stream.  Filters cannot be applied to the event stream, only to the set of datastore data nodes that are monitored by the subscription.</t>
          </li>
          <li>
            <t>The lifecycle events of when a subscription-started or subscription-terminated may be sent differs from RFC 8639/RFC 8649:  </t>
            <ul spacing="normal">
              <li>
                <t>Subscription-started notifications are also sent for dynamic subscriptions.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Some of the requirements on transport have been relaxed.</t>
          </li>
          <li>
            <t>The encoding identities have been extended with CBOR encodings, and the "encoding-" prefix has been removed (so that there is a better on the wire representation).</t>
          </li>
          <li>
            <t>YANG Push Lite allows for a publisher to provide an eventually consistent distributed view of the operational datastore, rather than a fully consistent datastore where on-change updates are sent as logic diffs to that datastore.</t>
          </li>
        </ul>
      </section>
      <section anchor="added-functionality">
        <name>Added Functionality</name>
        <ul spacing="normal">
          <li>
            <t>Device capabilities are reported via XXX and additional models that augment that data model.</t>
          </li>
          <li>
            <t>A new <em>update</em> message:  </t>
            <ul spacing="normal">
              <li>
                <t>Covers both on-change and periodic events.</t>
              </li>
              <li>
                <t>Allows multiple updates to be sent in a single message (e.g., for on-change).</t>
              </li>
              <li>
                <t>Allows for a common path prefix to be specified, with any paths and encoded YANG data to be encoded relative to the common path prefix.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>A <em>collection-complete</em> notification, and associated configuration, has been defined to inform collectors when a subscription's periodic collection cycle is complete.</t>
          </li>
          <li>
            <t>TODO - More operational data on the subscription load and performance.</t>
          </li>
          <li>
            <t>All YANG Push Lite configuration is under a new <em>datastore-telemetry</em> presence container</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="subscription-errors-from-rfc-8641">
      <name>Subscription Errors (from RFC 8641)</name>
      <section anchor="rpc-failures-1">
        <name>RPC Failures</name>
        <t>Rejection of an RPC for any reason is indicated via an RPC error
response from the publisher.  Valid RPC errors returned include both
(1) existing transport-layer RPC error codes, such as those seen with
NETCONF in <xref target="RFC6241"/> and (2) subscription-specific errors, such as
those defined in the YANG data model.  As a result, how subscription
errors are encoded in an RPC error response is transport dependent.</t>
        <t>References to specific identities in the ietf-subscribed-
notifications YANG module <xref target="RFC8639"/> or the ietf-yang-push YANG module
may be returned as part of the error responses resulting from failed
attempts at datastore subscription.  For errors defined as part of
the ietf-subscribed-notifications YANG module, please refer to
<xref target="RFC8639"/>.  The errors defined in this document, grouped per RPC, are
as follows:</t>
        <artwork><![CDATA[
      establish-subscription          modify-subscription
      ---------------------------     ---------------------
       cant-exclude                    period-unsupported
       datastore-not-subscribable      update-too-big
       on-change-unsupported           sync-too-big
       on-change-sync-unsupported      unchanging-selection
       period-unsupported
       update-too-big                 resync-subscription
       sync-too-big                   ----------------------------
       unchanging-selection            no-such-subscription-resync
                                       sync-too-big
]]></artwork>
        <t>There is one final set of transport-independent RPC error elements
included in the YANG data model.  These are the four yang-data
structures for failed datastore subscriptions:</t>
        <ol spacing="normal" type="1"><li>
            <t>yang-data "establish-subscription-error-datastore": This <bcp14>MUST</bcp14> be
returned if information identifying the reason for an RPC error
has not been placed elsewhere in the transport portion of a
failed "establish-subscription" RPC response.  This <bcp14>MUST</bcp14> be sent
if hints are included.</t>
          </li>
          <li>
            <t>yang-data "modify-subscription-error-datastore": This <bcp14>MUST</bcp14> be
returned if information identifying the reason for an RPC error
has not been placed elsewhere in the transport portion of a
failed "modify-subscription" RPC response.  This <bcp14>MUST</bcp14> be sent if
hints are included.</t>
          </li>
          <li>
            <t>yang-data "sn:delete-subscription-error": This <bcp14>MUST</bcp14> be returned
if information identifying the reason for an RPC error has not
been placed elsewhere in the transport portion of a failed
"delete-subscription" or "kill-subscription" RPC response.</t>
          </li>
          <li>
            <t>yang-data "resync-subscription-error": This <bcp14>MUST</bcp14> be returned if
information identifying the reason for an RPC error has not been
placed elsewhere in the transport portion of a failed
"resync-subscription" RPC response.</t>
          </li>
        </ol>
      </section>
      <section anchor="failure-notifications">
        <name>Failure Notifications</name>
        <t>A subscription may be unexpectedly terminated or suspended
independently of any RPC or configuration operation.  In such cases,
indications of such a failure <bcp14>MUST</bcp14> be provided.  To accomplish this,
a number of errors can be returned as part of the corresponding
subscription state change notification.  For this purpose, the
following error identities are introduced in this document, in
addition to those that were already defined in <xref target="RFC8639"/>:</t>
        <artwork><![CDATA[
  subscription-terminated        subscription-suspended
  ---------------------------    ----------------------
  datastore-not-subscribable     period-unsupported
  unchanging-selection           update-too-big
                                  synchronization-size
]]></artwork>
      </section>
    </section>
    <section anchor="Examples">
      <name>Examples</name>
      <t>Notes on examples:</t>
      <ul spacing="normal">
        <li>
          <t>To allow for programmatic validation, most notification examples in this section exclude the mandatory notification envelope and associated metadata defined in <xref target="I-D.draft-ietf-netconf-notif-envelope"/>.  Only the full notification example in <xref target="FullNotificationExample"/> includes the notification header.</t>
        </li>
        <li>
          <t>These notification message examples are given using a JSON encoding, but could be encoded using XML or CBOR.</t>
        </li>
        <li>
          <t>Some additional meta data fields, e.g., like those defined in <xref target="I-D.tgraf-netconf-notif-sequencing"/> would also likely be included, but have also been excluded to allow for slightly more concise examples.</t>
        </li>
        <li>
          <t>The examples include the <xref target="I-D.tgraf-netconf-yang-push-observation-time"/> field for the existing YANG-Push Notification format, and the proposed equivalent "observation-time" leaf for the new update notification format.</t>
        </li>
        <li>
          <t>All these examples are created by hand, may contain errors, and may not parse correctly.</t>
        </li>
      </ul>
      <section anchor="example-of-periodic-update-messages">
        <name>Example of periodic update messages</name>
        <t>In this example, a subscription is for <em>/ietf-interfaces:interfaces/interface</em>.  However, for efficiency reasons, the publisher is internally returning the data from two different data providers.</t>
        <t>Of note:</t>
        <ul spacing="normal">
          <li>
            <t>The first periodic message is published for the entries in the <em>/ietf-interfaces:interface/interfaces</em> list, but doesn't contain the data in the <em>statistics</em> child container.</t>
          </li>
          <li>
            <t>the <em>path-prefix</em> is to the subscription subtree, since the device will never return data outside of the subscription subtree.</t>
          </li>
          <li>
            <t>the <em>target-path</em> is elided because the data is returned at the subscription point. **TODO, or should it actually be to the element above? **</t>
          </li>
        </ul>
        <figure>
          <name>Example periodic update for interfaces list</name>
          <sourcecode type="JSON" name="periodic-update.json"><![CDATA[
{
  "ietf-yp-lite:update": {
    "id": 1011,
    "path-prefix": "/ietf-interfaces:interfaces/interface",
    "snapshot-type": "periodic",
    "observation-time": "2024-10-10T08:00:05.11Z",
    "updates": [
      {
        "target-path": "",
        "data": {
          "ietf-interfaces:interface": [
            {
              "name": "eth0",
              "type": "iana-if-type:ethernetCsmacd",
              "enabled": true,
              "ietf-interfaces:oper-status": "up",
              "ietf-interfaces:admin-status": "up"
            },
            {
              "name": "eth1",
              "type": "iana-if-type:ethernetCsmacd",
              "enabled": true,
              "ietf-interfaces:oper-status": "up",
              "ietf-interfaces:admin-status": "up"
            }
          ]
        }
      }
    ],
    "complete": [null]
  }
}
]]></sourcecode>
        </figure>
        <t>For the second notification related to the same subscription:</t>
        <ul spacing="normal">
          <li>
            <t>the second periodic message is published for only the statistics associated with the interfaces.</t>
          </li>
          <li>
            <t>as above, the <em>path-prefix</em> is still to the subscription subtree.</t>
          </li>
          <li>
            <t>the second notification uses a separate observation-time, but would use the same event-time in the notification header so that the two messages can be correlated to the same periodic collection event.</t>
          </li>
          <li>
            <t>the second periodic message has set the <em>complete</em> flag to indicate that it is the last notification as part of the periodic collection.  A separate <em>update-complete</em> notification could have been sent instead.</t>
          </li>
        </ul>
        <figure>
          <name>Example periodic update for interface statistics</name>
          <sourcecode type="JSON" name="periodic-update-stats.json"><![CDATA[
{
  "ietf-yp-lite:update": {
    "id": 1011,
    "path-prefix": "/ietf-interfaces:interfaces/interface",
    "snapshot-type": "periodic",
    "observation-time": "2024-10-10T08:00:05.21Z",
    "updates": [
      {
        "target-path": "",
        "data": {
          "ietf-interfaces:interface": [
            {
              "name": "eth0",
              "statistics": {
                "in-octets": 123456,
                "out-octets": 654321
              }
            },
            {
              "name": "eth1",
              "statistics": {
                "in-octets": 789012,
                "out-octets": 210987
              }
            }
          ]
        }
      }
    ]
  }
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="example-of-an-on-change-update-notification-using-the-new-style-update-message">
        <name>Example of an on-change-update notification using the new style update message</name>
        <t>If the subscription is for on-change notifications, or periodic-and-on-change-notifications, then, if the interface state changed (specifically if the 'state' leaf of the interface changed state), and if the device was capable of generating on-change notifications, then you may see the following message.  A few points of notes here:</t>
        <ul spacing="normal">
          <li>
            <t>The on-change notification contains <strong>all</strong> of the state at the "target-path"  </t>
            <ul spacing="normal">
              <li>
                <t>Not present in the below example, but if the notification excluded some state under an interfaces list entry (e.g., the line-state leaf) then this would logically represent the implicit deletion of that field under the given list entry.</t>
              </li>
              <li>
                <t>In this example it is restricted to a single interface. It could also publish an on-change notification for all interfaces, by indicating a target-path without any keys specified.  TODO - Can it represent notifications for a subset of interfaces?</t>
              </li>
            </ul>
          </li>
          <li>
            <t>The schema of the change message is exactly the same as for the equivalent periodic message.  It doesn't use the YANG Patch format <xref target="RFC8072"/> for on-change messages.</t>
          </li>
          <li>
            <t>The "observation time" leaf represents when the system first observed the on-change event occurring.</t>
          </li>
          <li>
            <t>The on-change event doesn't differentiate the type of change to operational state.  The on-change-update snapshot type is used to indicate the creation of a new entry or some update to some existing state.  Basically, the message can be thought of as the state existing with some current value.</t>
          </li>
        </ul>
        <figure>
          <name>Example YANG Push Lite on-change update message</name>
          <sourcecode type="JSON" markers="true" name="on-change-msg.json"><![CDATA[
{
  "ietf-yp-notification:envelope": {
    "event-time": "2024-09-27T14:16:30.973Z",
    "hostname": "example-router",
    "sequence-number": 454,
    "contents": {
      "ietf-yp-ext:update": {
        "id": 1,
        "subscription-path":
          "Cisco-IOS-XR-pfi-im-cmd-oper:interfaces",
        "target-path":
          "Cisco-IOS-XR-pfi-im-cmd-oper:interfaces/interfaces/
          interface[interface=GigabitEthernet0/0/0/0]",
        "snapshot-type": "on-change-update"
        "observation-time": "2024-09-27T14:16:30.973Z",
        "datastore-snapshot": {
          "interfaces": {
            "interface": [
              {
                "interface-name": "GigabitEthernet0/0/0/0",
                "interface": "GigabitEthernet0/0/0/0",
                "state": "im-state-up",
                "line-state": "im-state-up"
              }
            ]
          }
        }
      }
    }
  }
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="example-of-an-on-change-delete-notification-using-the-new-style-update-message">
        <name>Example of an on-change-delete notification using the new style update message</name>
        <section anchor="update-message-with-single-deleted-data-node">
          <name>Update message with single deleted data node</name>
          <t>If the interface was deleted, and if the system was capable of reporting on-change events for the delete event, then an on-change delete message would be encoded as per the following message.</t>
          <t>Of note:</t>
          <ul spacing="normal">
            <li>
              <t>The ietf-yp-notification:envelope has been elided</t>
            </li>
            <li>
              <t>The deleted data is identified by the target node in the <em>updates/target-path</em> element.</t>
            </li>
            <li>
              <t>The observation time represents the time at which the delete event occurred, e.g., perhaps when the system processed a configuration change.</t>
            </li>
          </ul>
          <figure>
            <name>Example YANG Push Lite on-change delete message</name>
            <sourcecode type="JSON" name="on-change-delete-msg.json"><![CDATA[
{
  "ietf-yp-lite:update": {
    "id": 1012,
    "snapshot-type": "on-change-delete",
    "observation-time": "2025-10-10T08:16:15.11Z",
    "updates": [
      {
        "target-path": "/ietf-interfaces:interfaces/interface[name='eth0']"
      }
    ]
  }
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="update-message-with-multiple-on-change-deletes">
          <name>Update message with multiple on-change deletes</name>
          <t>This follow example illustrates how a single update notification message can contain multiple on-change delete events for different data nodes.  In this example, two separate interfaces are being deleted.</t>
          <t>Of note:</t>
          <ul spacing="normal">
            <li>
              <t>The ietf-yp-notification:envelope has been elided</t>
            </li>
            <li>
              <t><em>prefix-path</em> is used to shorten the target-paths, the full paths can be constructed concatenating the <em>prefix-path</em> with each <em>target-path</em> in the <em>updates</em> list.</t>
            </li>
            <li>
              <t>all delete events share a common observation-time of when the delete events occurred.  If it is necessary to identify separate observation times then the publisher would send separate messages.</t>
            </li>
            <li>
              <t>data node subtrees that are deleted (list entries in this case) are identified by separate entries in the <em>updates</em> list.</t>
            </li>
          </ul>
          <figure>
            <name>Example YANG Push Lite on-change delete message</name>
            <sourcecode type="JSON" name="on-change-multi-delete-msg.json"><![CDATA[
{
  "ietf-yp-lite:update": {
    "id": 1013,
    "path-prefix": "/ietf-interfaces:interfaces",
    "snapshot-type": "on-change-delete",
    "observation-time": "2025-10-10T08:16:16.11Z",
    "updates": [
      {
        "target-path": "interface[name='eth0']"
      },
      {
        "target-path": "interface[name='eth1']"
      }
    ]
  }
}
]]></sourcecode>
          </figure>
        </section>
      </section>
      <section anchor="subscription-rpc-examples-from-rfc-8641">
        <name>Subscription RPC examples (from RFC 8641)</name>
        <t>YANG-Push subscriptions are established, modified, and deleted using
RPCs augmented from <xref target="RFC8639"/>.</t>
        <section anchor="establish-subscription-rpc">
          <name>"establish-subscription" RPC</name>
          <t>The subscriber sends an "establish-subscription" RPC with the
parameters listed in Section 3.1.  An example might look like:</t>
          <artwork><![CDATA[
 <netconf:rpc message-id="101"
     xmlns:netconf="urn:ietf:params:xml:ns:netconf:base:1.0">
   <establish-subscription
       xmlns="urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications"
       xmlns:yp="urn:ietf:params:xml:ns:yang:ietf-yang-push">
     <yp:datastore
          xmlns:ds="urn:ietf:params:xml:ns:yang:ietf-datastores">
       ds:operational
     </yp:datastore>
     <yp:datastore-xpath-filter
         xmlns:ex="https://example.com/sample-data/1.0">
       /ex:foo
     </yp:datastore-xpath-filter>
     <yp:periodic>
       <yp:period>500</yp:period>
     </yp:periodic>
   </establish-subscription>
 </netconf:rpc>

                  Figure 10: "establish-subscription" RPC
]]></artwork>
          <t>A positive response includes the "id" of the accepted subscription.
In that case, a publisher may respond as follows:</t>
          <artwork><![CDATA[
 <rpc-reply message-id="101"
    xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
    <id
      xmlns="urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications">
       52
    </id>
 </rpc-reply>

         Figure 11: "establish-subscription" Positive RPC Response
]]></artwork>
          <t>A subscription can be rejected for multiple reasons, including the
lack of authorization to establish a subscription, no capacity to
serve the subscription at the publisher, or the inability of the
publisher to select datastore content at the requested cadence.</t>
          <t>If a request is rejected because the publisher is not able to serve
it, the publisher <bcp14>SHOULD</bcp14> include in the returned error hints that
help a subscriber understand what subscription parameters might have
been accepted for the request.  These hints would be included in the
yang-data structure "establish-subscription-error-datastore".
However, even with these hints, there are no guarantees that
subsequent requests will in fact be accepted.</t>
          <t>The specific parameters to be returned as part of the RPC error
response depend on the specific transport that is used to manage the
subscription.  For NETCONF, those parameters are defined in
<xref target="RFC8640"/>.  For example, for the following NETCONF request:</t>
          <artwork><![CDATA[
  <rpc message-id="101"
      xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
    <establish-subscription
        xmlns=
          "urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications"
        xmlns:yp="urn:ietf:params:xml:ns:yang:ietf-yang-push">
      <yp:datastore
          xmlns:ds="urn:ietf:params:xml:ns:yang:ietf-datastores">
        ds:operational
      </yp:datastore>
      <yp:datastore-xpath-filter
          xmlns:ex="https://example.com/sample-data/1.0">
        /ex:foo
      </yp:datastore-xpath-filter>
      <yp:on-change>
      </yp:on-change>
    </establish-subscription>
  </rpc>

      Figure 12: "establish-subscription" Request: Example 2
]]></artwork>
          <t>A publisher that cannot serve on-change updates but can serve
periodic updates might return the following NETCONF response:</t>
          <artwork><![CDATA[
 <rpc-reply message-id="101"
   xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"
   xmlns:yp="urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications">
   <rpc-error>
     <error-type>application</error-type>
     <error-tag>operation-failed</error-tag>
     <error-severity>error</error-severity>
     <error-path>/yp:periodic/yp:period</error-path>
     <error-info>
       <yp:establish-subscription-error-datastore>
         <yp:reason>yp:on-change-unsupported</yp:reason>
       </yp:establish-subscription-error-datastore>
     </error-info>
   </rpc-error>
 </rpc-reply>

       Figure 13: "establish-subscription" Error Response: Example 2
]]></artwork>
        </section>
        <section anchor="delete-subscription-rpc">
          <name>"delete-subscription" RPC</name>
          <t>To stop receiving updates from a subscription and effectively delete
a subscription that had previously been established using an
"establish-subscription" RPC, a subscriber can send a
"delete-subscription" RPC, which takes as its only input the
subscription's "id".  This RPC is unmodified from <xref target="RFC8639"/>.</t>
        </section>
        <section anchor="resync-subscription-rpc">
          <name>"resync-subscription" RPC</name>
          <t>This RPC is supported only for on-change subscriptions previously
established using an "establish-subscription" RPC.  For example:</t>
          <artwork><![CDATA[
  <rpc message-id="103"
        xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
    <resync-subscription
        xmlns="urn:ietf:params:xml:ns:yang:ietf-yang-push">
      <id>1011</id>
    </resync-subscription>
  </rpc>

                  Figure 15: "resync-subscription"
]]></artwork>
          <t>On receipt, a publisher must either (1) accept the request and
quickly follow with a "push-update" or (2) send an appropriate error
in an RPC error response.  In its error response, the publisher <bcp14>MAY</bcp14>
include, in the yang-data structure "resync-subscription-error",
supplemental information about the reasons for the error.</t>
        </section>
      </section>
    </section>
    <section anchor="OpenIssuesTracker">
      <name>Summary of Open Issues &amp; Potential Enhancements</name>
      <t>This temporary section lists open issues and enhancements that require further discussion by the authors, or the WG.  Once adopted, it is anticipated that tracking the open issues would move to github.</t>
      <t>The issues are ordered/grouped by the sections in the current document.  I.e., to make it easier to review/update sections of the document.</t>
      <section anchor="issues-related-to-general-ietf-process">
        <name>Issues related to general IETF process</name>
        <ol spacing="normal" type="1"><li>
            <t>If this work progresses we will need simple bis versions of the transports document so that they augment into the new data model paths.  Drafts that would need to be updated as documented in  <xref target="DraftRelationships"/>.</t>
          </li>
          <li>
            <t>Do we need to fold in any text from RFC 8640? and RESTCONF.  I.e., there was this text in the one of the previous docs:   Bindings for subscribed event record delivery for NETCONF and RESTCONF are defined in <xref target="RFC8640"/> and <strong>RESTCONF-Notif</strong>, respectively.
            </t>
            <ul spacing="normal">
              <li>
                <t>Rob: If text is needed for NETCONF and/or RESTCONF then I suspect that it would be better added to this document than to require small separate documents (as was done before).</t>
              </li>
            </ul>
          </li>
          <li>
            <t>What is the right name.  Should we be calling this Yang Push 2 (YPv2) to more clearly indicate that this is intended to be a replacement for Yang Push?  We need to be slightly careful in that this is only specifying implementing a subset of the functionality.</t>
          </li>
        </ol>
      </section>
      <section anchor="issue-related-to-terminologydefinitions">
        <name>Issue related to Terminology/Definitions</name>
        <ol spacing="normal" type="1"><li>
            <t>Should we use the object terminology?
            </t>
            <ul spacing="normal">
              <li>
                <t>Holger: should try and use same terminology as existing YANG Push RFCs.</t>
              </li>
              <li>
                <t>Rob: This issue can be a place holder, to go through and check/update the terminology used, and see if any of the referenced terminology isn't needed in YP Lite.</t>
              </li>
              <li>
                <t>Rob: Update, possible should refine the definition of object to make it clear that it may refer to a single data node or set of data nodes.</t>
              </li>
            </ul>
          </li>
        </ol>
      </section>
      <section anchor="issues-related-to-yang-push-lite-overview">
        <name>Issues related to YANG Push Lite Overview</name>
        <t>None currently.</t>
      </section>
      <section anchor="issues-related-to-subscription-paths-and-selection-filters">
        <name>Issues related to Subscription Paths and Selection Filters</name>
        <ol spacing="normal" type="1"><li>
            <t>This draft introduces a new simple yang path (ypath) format that is like a JSON instance data path, that all implementations <bcp14>MUST</bcp14> support.
            </t>
            <ul spacing="normal">
              <li>
                <t>Vendors already support a simple JSON like path (e.g., using module-names rather than XML namespaces).</t>
              </li>
              <li>
                <t><strong>Open questions (for further discussion):</strong>
                </t>
                <ul spacing="normal">
                  <li>
                    <t>Do we support filtering on non-keys, e.g., this example from Thomas (but which filters on a non-key):
 /if:interfaces-state/if:interface[if:type='ianaift:ethernetCsmacd']/if:statistics</t>
                  </li>
                  <li>
                    <t>Do we support simple regex filtering on the keys (and if so, how would that be expressed, would it be compatible with JSON Path)</t>
                  </li>
                  <li>
                    <t>Do we need any more complex filtering (e.g., Holger's example of only getting entries from a list if they are in a particular state.), or do we always use subtree filters for that?</t>
                  </li>
                </ul>
              </li>
              <li>
                <t><strong>Authors: I provides some suggested text in <xref target="YPaths"/>, but I expect further discussion may be needed. (E.g., how multiple keys should be expressed)</strong></t>
              </li>
            </ul>
          </li>
          <li>
            <t>Advertising subscription schema: https://github.com/rgwilton/draft-yp-observability/issues/11</t>
          </li>
        </ol>
      </section>
      <section anchor="issues-related-to-datastore-event-streams">
        <name>Issues related to Datastore Event Streams</name>
        <section anchor="further-refinements-on-how-a-subscription-can-be-decomposed-internally-into-child-subscriptions-with-the-data-returned-for-each-child-subscription">
          <name>Further refinements on how a subscription can be decomposed internally into child subscriptions with the data returned for each child subscription:</name>
          <ol spacing="normal" type="1"><li>
              <t>Handling lists with separate producers of list entries.  </t>
              <ul spacing="normal">
                <li>
                  <t>If a subscription is decomposed, then should the subscription started message for the configured subscription indicate how that subscription has been decomposed?</t>
                </li>
                <li>
                  <t>Do we need to add an optional replay-end (i.e., after a sync-on-start) or collection-end (i.e., after every collection) notification so that clients can determine when data can be implicitly deleted.      </t>
                  <ul spacing="normal">
                    <li>
                      <t>Rob: I think that we should add the latter, but make it a subscription config option to turn it on.</t>
                    </li>
                    <li>
                      <t>Holger, strong support for adding this, often requested.</t>
                    </li>
                    <li>
                      <t>Thomas, yes we need this, but need to determine whether this is per subscription or per publisher.</t>
                    </li>
                  </ul>
                </li>
              </ul>
            </li>
          </ol>
        </section>
        <section anchor="questionscomments-on-the-notification-message-format">
          <name>Questions/comments on the notification message format:</name>
          <ol spacing="normal" type="1"><li>
              <t>We allow multiple updates within a single message (primary use case is for the on-change case).  What about the timestamp, which is still just once per message (like gNMI)?  Should message bundling be optional/configurable to implement (if they all use a single shared timestamp)?  </t>
              <ul spacing="normal">
                <li>
                  <t>on-change deletes are implicit by an update that replaces an existing entry with an empty data node (e.g., "{}" in JSON)      </t>
                  <ul spacing="normal">
                    <li>
                      <t>An alternative choice here could be an explicit delete flag, we need to decide which would be simpler/better.</t>
                    </li>
                  </ul>
                </li>
                <li>
                  <t>The update message also currently includes a path-prefix to allow (like gNMI) so that they don't necessarily need to be encoded from root, specifically, I think that this makes on-change messages nicer, since the on-change is rooted to the thing that is changing rather than the root of the tree.  We need to define semantics of how this works, e.g., this should probably be controlled via configuration.      </t>
                  <ul spacing="normal">
                    <li>
                      <t>Ideally, the path prefix would be exactly the same as the YPath format that is being specified for configuration.</t>
                    </li>
                    <li>
                      <t>Thomas: We should keep this.</t>
                    </li>
                  </ul>
                </li>
              </ul>
            </li>
          </ol>
          <ul spacing="normal">
            <li>
              <t><em>Further discussion of this issue is needed</em></t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="issues-related-to-receivers-transports-encodings">
        <name>Issues related to Receivers, Transports, &amp; Encodings</name>
        <section anchor="constraints-on-supporting-multiple-receivers">
          <name>Constraints on supporting multiple receivers:</name>
          <ol spacing="normal" type="1"><li>
              <t>Encoding is set per receiver, but do we need to support a subscription supporting more than one receiver with different encodings?
              </t>
              <ul spacing="normal">
                <li>
                  <t>Rob: Note, it is always possible for a client to setup different subscriptions.</t>
                </li>
                <li>
                  <t>Thomas: This could be useful, e.g., when migrating from one encoding to another, particularly, if it reduced the load on the publisher (compared to creating a new separate subscription).</t>
                </li>
                <li>
                  <t>Rob: I don't think that we would end up optimizing for this case (but would need to check).</t>
                </li>
                <li>
                  <t>Also need to check with Nokia/Huawei would support this.</t>
                </li>
                <li>
                  <t><strong>Current status: Left open for further discussion.</strong></t>
                </li>
                <li>
                  <t>Note: This may also have a minor impact on the data model.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>Lifecycle message should be sent per subscription, not per receiver (i.e., every receiver gets the same message (ignoring transport headers)):
              </t>
              <ul spacing="normal">
                <li>
                  <t>Consensus agreed this is the right thing to do.</t>
                </li>
                <li>
                  <t><strong>Action on Rob to check/update the draft.</strong></t>
                </li>
                <li>
                  <t>Notes:
                  </t>
                  <ul spacing="normal">
                    <li>
                      <t>Every receiver gets the same sequence number in the message.</t>
                    </li>
                    <li>
                      <t>subscription-created notification could perhaps have an enum giving a reason for the notification (e.g., new subscription, receiver added).</t>
                    </li>
                  </ul>
                </li>
              </ul>
            </li>
            <li>
              <t>Do we need a per-receiver notification to indicate to a specific receiver that it has been disconnected?
              </t>
              <ul spacing="normal">
                <li>
                  <t>This would seem to only apply to configured subscriptions (since dynamic cannot have more than one receiver).</t>
                </li>
                <li>
                  <t>If the transport session went down, then the publisher would be expected to reconnect anyway.</t>
                </li>
                <li>
                  <t>So, the specific use case is likely to be unconfiguring a receiver for a subscription that has multiple receivers.</t>
                </li>
                <li>
                  <t><strong>Currently parked for further discussion.</strong></t>
                </li>
              </ul>
            </li>
          </ol>
        </section>
        <section anchor="issues-related-to-transports">
          <name>Issues related to Transports:</name>
          <ol spacing="normal" type="1"><li>
              <t><xref target="transports"/> lists quite a lot of rules on what are valid transports and what negotiation/etc is required.  I think we need to check whether we can weaken some of these (although it is possible that these were imposed during a transport directorate review).
              </t>
              <ul spacing="normal">
                <li>
                  <t><strong>Rob: Authors, I've updated the transport section, <xref target="transports"/>, please can you re-review.</strong></t>
                </li>
              </ul>
            </li>
            <li>
              <t>James: We also need to add some text into security section.
              </t>
              <ul spacing="normal">
                <li>
                  <t>Rob: Is this transport specific, or related to application layer authorization?</t>
                </li>
              </ul>
            </li>
            <li>
              <t>What is the rules/restrictions for subscription receiver instances vs transport sessions?  E.g., is this entirely down to the transport to define.</t>
            </li>
          </ol>
        </section>
      </section>
      <section anchor="issues-related-to-setting-up-managing-subscriptions">
        <name>Issues related to Setting up &amp; Managing Subscriptions</name>
        <section anchor="issues-related-to-the-configuration-model">
          <name>Issues related to the configuration model:</name>
          <t>Note some of these apply or impact dynamic subscriptions as well.</t>
          <ol spacing="normal" type="1"><li>
              <t>YP Lite is somewhat different (separate namespace, separate receivers, no event filters, some config has moved to a separate receivers list.)  See the data model and <xref target="DifferencesFromYangPush"/>.</t>
            </li>
            <li>
              <t>We should allow devices to limit which datastores subscriptions can be made against (e.g., not candidate or factory-default as some obvious examples).  Should these be advertised in the capabilities?</t>
            </li>
            <li>
              <t>(James) Should we even document the configuration data model in this document at all, or should it be in a separate document?</t>
            </li>
            <li>
              <t>Some other changes/proposed changes:  </t>
              <ul spacing="normal">
                <li>
                  <t>I've removed some of the YANG features for 'small' one/two changes in configuration.  I propose that we don't need features for these at all (e.g., DSCP settings), or in other cases we can use operational capabilities, or rely on deviations.
                  </t>
                  <ul spacing="normal">
                    <li>
                      <t>I've renamed the encodings (e.g., from "encode-json" to just "json")</t>
                    </li>
                    <li>
                      <t>Maybe further simplification of the receivers list under the subscription.  E.g., do we need stats per subscription per receiver, or just per subscription?  Do want stats across all subscriptions to a given receiver?
                      </t>
                      <ul spacing="normal">
                        <li>
                          <t>Holger: Stats per subscription should be sufficient.  No need for per subscription/pre-receiver stats (which would allow the data model to be simplified a little bit).</t>
                        </li>
                      </ul>
                    </li>
                    <li>
                      <t>Subscription-ids are currently numeric values with the space split between configured and dynamic subscriptions, but I think that the config model would be cleaner if we used names for the configured subscriptions (and we could reserve a prefix "dyn-" for dynamic subscriptions).
                      </t>
                      <ul spacing="normal">
                        <li>
                          <t>Holger, Rob: Strong preference to names.</t>
                        </li>
                        <li>
                          <t>Thomas, keep ids, but rename 'purpose' to name.  Also give receivers an ids and be keyed this.</t>
                        </li>
                      </ul>
                    </li>
                  </ul>
                </li>
              </ul>
            </li>
          </ol>
        </section>
        <section anchor="issues-related-to-dynamic-subscriptions">
          <name>Issues related to dynamic subscriptions:</name>
          <ol spacing="normal" type="1"><li>
              <t>In YP Lite, dynamic subscriptions are designed to be closer to configured subscriptions and share more of the data model and lifecycle handling.  I.e., the primary differentiator is meant to be how they are instantiated.
              </t>
              <ul spacing="normal">
                <li>
                  <t>James, Rob: More alignment is better.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>Do we want to change how RPC errors are reported?  E.g., change the RPC ok response to indicate whether the subscription was successfully created or not, or included extra error information.  Note NETCONF and RESTCONF already define how errors are encoded in XML and JSON (for RESTCONF only).</t>
            </li>
            <li>
              <t>Do we need to allow a dynamic subscription to be modified?  If we do, then it would be better to change the establish-subscription RPC to have an optional existing subscription-id rather than define a separate RPC.  However, my preference is that the existing subscription is deleted and recreated (or if we allow the client to specify the subscription-id then they could just overwrite the subscription)
              </t>
              <ul spacing="normal">
                <li>
                  <t>Holger: Overwrite is a neat idea, but delete/recreate would also be sufficient.</t>
                </li>
                <li>
                  <t>Rob: Related to this, do we allow the client to optionally name dynamic subscriptions (what is config and dynamic subscription names collide)?</t>
                </li>
              </ul>
            </li>
            <li>
              <t>For operational data, should be list dynamic receivers in the receiver list so that they are handled the same as configured subscription?  Or should the information for them be inlined in the subscriptions container?
              </t>
              <ul spacing="normal">
                <li>
                  <t>Rob this requires further thought on exactly how configured/dynamic subscriptions may to underlying transport sessions.  I.e., how fixed or flexible is this depending on the transport.</t>
                </li>
              </ul>
            </li>
          </ol>
        </section>
      </section>
      <section anchor="issues-related-to-subscription-lifecycle">
        <name>Issues related to Subscription Lifecycle</name>
        <ol spacing="normal" type="1"><li>
            <t>Use subscription name as the unique identifier for the subscription configuration.  Subscription id identifies a subscription session.  I.e., if a configured subscription is terminated and re-established then a new subscription id is allocated.</t>
          </li>
          <li>
            <t>Should subscription-started notification include a fingerprint of the schema that is covered by the subscription that would guaranteed to change if the subscription changes?
            </t>
            <ul spacing="normal">
              <li>
                <t>Tracked via https://github.com/rgwilton/draft-yp-observability/issues/11</t>
              </li>
            </ul>
          </li>
          <li>
            <t>If a subscription references a filter, then should that be included inline in the subscription started notification (as per the RFC 8641 text), or should it indicate that it is a referenced filter?
            </t>
            <ul spacing="normal">
              <li>
                <t>Thomas: Do we need referenced filters at all?  Subscriptions could be simplified if everything was done inline.</t>
              </li>
              <li>
                <t>gNMI is only done inline.</t>
              </li>
              <li>
                <t>Juniper also supports filters.</t>
              </li>
              <li>
                <t>Thomas try to simplify as much as possible, then do we need templating?</t>
              </li>
            </ul>
          </li>
          <li>
            <t>When a subscription is terminated, should it be <bcp14>MUST NOT</bcp14> send any more notifications after the terminated message, or <bcp14>SHOULD NOT</bcp14>?  For a dynamic subscription, should the RPC be synchronous and not reply until it knows that all queues have been drained?
            </t>
            <ul spacing="normal">
              <li>
                <t>Tracked via https://github.com/rgwilton/draft-yp-observability/issues/13</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Is a publisher allowed to arbitrarily send a sync-on-start resync, e.g., if it detects data loss, or should it always just terminate and reinitialize the subscription?
            </t>
            <ul spacing="normal">
              <li>
                <t>Holger, terminate &amp; recreate.</t>
              </li>
              <li>
                <t>gNMI, not specified.</t>
              </li>
              <li>
                <t>Thomas: Keep this as implementation detail.</t>
              </li>
              <li>
                <t>Sequence-id indicates that a client is dropping message anyway.</t>
              </li>
              <li>
                <t>Receiver can already monitor and see that there is a problem anyway.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>If the parameters for a subscription change in any way (e.g., the config changes for a configured subscription, or a referenced filter changes in a dynamic subscription) then do we want to say that the subscription <bcp14>MUST</bcp14> be killed and recreated.  I.e., with subscription-terminated/subscription-started notifications? (Section 11)
            </t>
            <ul spacing="normal">
              <li>
                <t>Holger, kill/re-create.</t>
              </li>
              <li>
                <t>Collector would need to no.</t>
              </li>
              <li>
                <t>Ebben: Includes addition or deletion of the path.</t>
              </li>
              <li>
                <t>Benoit: Which parameters are changing, this could impact.  It depends.  Maybe forcing it down keeps it simple.  Would need further definition of what parameters would cause this to be pulled down.</t>
              </li>
              <li>
                <t>Locally relevant, e.g., modifying transport parameters doesn't force a change.</t>
              </li>
              <li>
                <t>Benoit: If you are not sure what you are doing you must recreate.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Should we have a YANG Action to reset a receiver or a subscription?  E.g., discussed in <xref target="reset"/>.
            </t>
            <ul spacing="normal">
              <li>
                <t>There seems to be consensus that having/keeping such a YANG action is useful if a configured subscription is stuck.</t>
              </li>
              <li>
                <t>Further discussion is needed to indicate where such an RPC should be in the data model, and what effect it should have:
                </t>
                <ul spacing="normal">
                  <li>
                    <t>It could be under the subscription list, which would effectively be equivalent to forcing the subscription to terminate and re-initialize across all receivers.</t>
                  </li>
                  <li>
                    <t>It could also be under the receiver list, which would effectively be equivalent to forcing all subscriptions using that receiver to terminate and re-initialize.</t>
                  </li>
                  <li>
                    <t><strong>We also need to consider whether this would clear subscription counters or not.</strong></t>
                  </li>
                  <li>
                    <t><strong>We also consider whether configured subscription <bcp14>MAY</bcp14>/<bcp14>SHOULD</bcp14> share transport sessions where possible, or whether each subscription uses a separate transport session, or whether this is down to the transport session definition.  This decision may impact the design of the data model, and perhaps the transport requirements text.</strong></t>
                  </li>
                  <li>
                    <t><strong>Rob: I've written up some text for the reset action on a subscription and under the receiver (that applies to all subscriptions that reference the receiver configuration).  Unlike the existing reset action, I've removed the return parameter (timestamp of when it took effect), and I think that we should allow it to be processed asynchronously w.r.t the RPC caller.  Authors, please check the latest text.</strong></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <t>Should we support configurable subscription-level keepalives?</t>
          </li>
        </ol>
      </section>
      <section anchor="issues-related-to-performance-reliability-subscription-monitoring">
        <name>Issues related to Performance, Reliability &amp; Subscription Monitoring</name>
        <section anchor="issuesquestions-related-to-operational-data">
          <name>Issues/questions related to operational data:</name>
          <ol spacing="normal" type="1"><li>
              <t>Should we define some additional operational data to help operators check that the telemetry infrastructure is performing correctly, to get an approximation of the load, etc.
              </t>
              <ul spacing="normal">
                <li>
                  <t>Rob: probably, but lower priority.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>Should dynamic subscriptions use the same receivers structure as for configured subscriptions, or should they be inline in the configured subscription?
              </t>
              <ul spacing="normal">
                <li>
                  <t>Thomas: Two sets of counters, one is at the subscription which is about fetching the data, and the other is on the receiver.</t>
                </li>
                <li>
                  <t>James: Can think of some uses cases where listing drop counters per subscription may be helpful.</t>
                </li>
                <li>
                  <t>Rob: Thinking about it further, it probably needs to be separate, since for some transports, each subscription may open a separate transport session to the receiver rather than trying to mux into a single transport (e.g., TCP).</t>
                </li>
              </ul>
            </li>
          </ol>
        </section>
      </section>
      <section anchor="issues-related-to-conformance-and-capabilities">
        <name>Issues related to Conformance and Capabilities</name>
        <ol spacing="normal" type="1"><li>
            <t>Do we advertise that conformance via capabilities and/or YANG features (both for configured and dynamic subscriptions)?  </t>
            <ul spacing="normal">
              <li>
                <t>The current doc uses a mixture of both (e.g., features for supporting config vs dynamic subscriptions), capabilities for advertising other capabilities that either cannot be advertised via features, or would arguably be too fine grained.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>For on-change, should a subscription be rejected (or not brought up) if there are no on-change notifiable nodes?  Alternative is to offer implementation flexibility between these two approaches.
            </t>
            <ul spacing="normal">
              <li>
                <t>Holger: Prefer for the subscription to be rejected.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>CBOR SID encoding:
            </t>
            <ul spacing="normal">
              <li>
                <t>In terms of conformance, we have <bcp14>SHOULD</bcp14> for CBOR, but the draft is silent on whether this means with SIDs or not.</t>
              </li>
              <li>
                <t>Further discussion is required on how to manage SID files.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Check of the current approach in the draft of using a separate tree for YP Lite capabilities rather than reusing the YP capabilities (and augmentations) previously defined.
            </t>
            <ul spacing="normal">
              <li>
                <t>Rob: The draft currently includes a separate tree, which I think is necessary because the supported functionality is different (e.g., dampening), and a implementation may support both YANG Push and YANG Push Lite.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Further work and discussion is required for advertising capabilities for filter paths.  E.g., listing all of the paths that support on-change could be a very long list.  Related, does the draft need to advertise at what points a publisher would decompose a higher subscription into more specific subscriptions.</t>
          </li>
        </ol>
      </section>
      <section anchor="issues-related-to-the-yang-modules">
        <name>Issues related to the YANG Modules</name>
        <t>None open.</t>
      </section>
      <section anchor="issues-related-to-the-security-considerations-nacm-filtering">
        <name>Issues related to the Security Considerations (&amp; NACM filtering)</name>
        <ol spacing="normal" type="1"><li>
            <t>Need to consider how NACM applies to YANG Push Lite, which may differ for dynamic vs configured subscription, but generally we want the permissions to be checked when the subscription is created rather than each time a path is accessed.  </t>
            <ul spacing="normal">
              <li>
                <t>(James) Take out tight binding to NACM from YANG Push Lite altogether.  I.e., decouple YANG Push Lite from what security mechanism is being used.</t>
              </li>
              <li>
                <t>(Rob) Another choice could be to use NACM as an example rather than the only way.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Where should this be in the document (current it in the security considerations section)</t>
          </li>
          <li>
            <t>Do we want to retain the the current text in <xref target="events"/> introduction related to terminating a subscription if permissions change?</t>
          </li>
          <li>
            <t>Also note, text was removed from the transport section related to RPC authorization, and which should be moved to an application (rather than transport) layer security mechanism.</t>
          </li>
        </ol>
      </section>
      <section anchor="issues-related-to-the-iana">
        <name>Issues related to the IANA</name>
        <t>None open.</t>
      </section>
      <section anchor="issues-related-to-the-appendixes">
        <name>Issues related to the Appendixes</name>
        <section anchor="examples-related-issuesquestions">
          <name>Examples related issues/questions:</name>
          <ol spacing="normal" type="1"><li>
              <t>Not a question, but a note that most of the examples need to be updated to reflect the data models currently in the draft.</t>
            </li>
          </ol>
        </section>
      </section>
      <section anchor="summary-of-closedresolved-issues">
        <name>Summary of closed/resolved issues</name>
        <t>This appendix is only intended while the authors/WG are working on the document, and should be deleted prior to WG LC.</t>
        <ol spacing="normal" type="1"><li>
            <t>Rename subscription-terminated to subscription-stopped (Change rejected 21 Feb 25, unnecessary renaming.)</t>
          </li>
          <li>
            <t><bcp14>MUST</bcp14> use envelope, hostname and sequence-number (and event-time) (Decided 21 Feb 25)</t>
          </li>
          <li>
            <t>Don't mandate configured or dynamic subscriptions, allow implementations to implement one or both of them. (Decided 21 Feb 25)</t>
          </li>
          <li>
            <t>Dynamic subscriptions require the encoding to be specified. (Decided 21 Feb 25)</t>
          </li>
          <li>
            <t>DSCP settings are only specified under the receiver (for configured subscriptions) (Decided 21 Feb 25)</t>
          </li>
          <li>
            <t>Config and dynamic subscriptions should be aligned as much as possible.</t>
          </li>
        </ol>
      </section>
      <section anchor="changes">
        <name>Changes</name>
        <ol spacing="normal" type="1"><li>
            <t>Aligned configured and dynamic subscription data models:
- Both are configured by name.
- Made "purpose" field common and renamed to "description" (limited to 1k max characters, previously unrestricted), i.e., now available for dynamic subscriptions.</t>
          </li>
        </ol>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+y9+3obyZEn+j+eokz9IRILgKJa6m5x292mdZnWTOuykjxu
r9s7WwAKZFlAFVxVEEXL3GfZZzlPduKaGZmVBVLdtuc7u0czXxsE6pKXyLj+
ImI6nY66slsXp9nBH85e/kv2JO/ytqubIntXrItN0TVX2SH98nrXXmQ/lF1x
dDDK5/Om+CD3TN0vB6NF3hXndXN1mrXdcjRa1osq38DDl02+6qaX5bqrq2lV
dIu6Wk2v8up8uoWbp2u4eXrv/qjdzTdl25Z11V1t4bbnT989G1W7zbxoTkdL
ePbpCO5si6rdtadZ1+yKEYzii1HeFDmM5tW2aPIO7m6zvFpmL/IqP4c5VN3B
6LJu3p839W4Ll70sOvwzewyDKM93fMvB6H1xBV8vT0dZNs3clOmvV/O2aD7k
8xIGekXf6DPcKvF1OoB8TSs5+lBUuwKfeMO7s4wnfPB7+LGszrN/wevx+01e
ruF7WbPflEW3mtXNOf6UN4sL+Omi67bt6fExXolflR+KmV52jF8cz5v6si2O
5RnHeO952V3s5nB3c867csxbdLWd1nayeO0aFr7tzJv0nhk/ZVbWA3cfp/c9
ump20W3WB6NRvusuatjobAovzbLVbr1m6nlTAwF02e/pMfQbTC2vyr/S6p1m
j8t2UWdvr9qu2LT0e8HL1vCbf7PAC2aLekM/NjXSe7Esgc77L/u+Xp8XTfZv
xXpdNImXPSl2RdcuLviEvJdnygv55hnf/JuOL5gti/5rfltUddllj9d52RaJ
13y/yy+L0j57TnfMFnTHby7od55T/Oync7g2O2vKok08+V93VbmVqcmji4/5
b/7MX89gl/pP/Ff4b5s93m02QJyJZ76s35e5feKf8YbZgm/4TYU/p8f67qLe
5C3Qe75KPPftJbCDRbjGfMcM7/hNK7/Ts0dV3Wzgxg904p5Pn8yY/PAwOOKr
6q5cTYvqQ7Gut3Thm2eP7z/46oF8/PL+gxP9+OiRfvzq0cN7/qN++/UXD+75
j+bb+/rx4f2H/uMj/fiVe+6jk0df6sf7D3UMjx4+0tsePfiaPv728euTB6c0
1pOTR/SUk68ejEZltbKThu9hIPr0L778+mv5+OD+Qx3Uw/tffaUzvHffTeve
Ax3fVw/9tO4/fOSn9YV+fPBAR/31PX/tva9O/Ee3BF9+4Z7wpb/2S7dcj+7d
u5fer029nDarxdcP7n01L1u9hn/d1Fu8BHnpNK+AINZXU2J+XbHodk3Rv5qk
DRBlCzJhChzxfdFMywrEFfPgPSSzW26ZbMJr4GcQMJardU1etdu66aaLfMvM
DY7gnicTQ009O7hqWbZdU853XbH01/5bvnqfn9K56PLmvAD+rOz5Pf40gxEA
kyIhwFexmD+jr/l2+t5xXfo3zfhYnrm76QeSvdkqXxOvAuHVwpiKanGVHkFR
zS7L98BOlnDscQT417G57T8O4Yn5PG+L/2iZbR/ZQZorM3dlFlyZHvbv9a2J
UT8FYdzt8vWNo7+8vJwBGV3UPH5gLcfLYlVWJdLJ8f1HJ18+PC7kYdOFf5qd
gb7MTmXPuF/AEECJ6UDU7UQchIP/8fXZu++Hh3v5BS3zuzfHJ48ePTp+8/Tx
9OM27y6m+OfJycmXAQ38+OKH7DX8mv0AZ2IH5yE7/BH/Psr+vWhQ+8pOZvf2
rfIXjxNDPH/54nl6hKIm4ELCmlYL0n2Om2JVNPBXcTxf13NQX2CVmuNmuzg+
rzYl/WfabotFuSoXdERnm6Wdxfmb14+dHuZ1vew5HOpmlS9gVjikfeQC+lrF
mlhvPqPpdJrlczh5+aIbjUIVOCtBw2QdcekU5s4pzG293uGAJ1mOmmiWr2FE
FTHpLJhR1tVZB6fx7W7eLuCIF0uQpJ37mdVY/2r/XPeU9foqq7dduSn/CjeD
LKDnFSv4rcTFCBStrF7BxV5FxbHPeKabcrlcw6zvZE9qkNp469su73btaDQG
Jp09JW0JNPJVtm0K0MC7SbZdF3gsm2JTw8S6C1iUFrgvzmterHBJtrv5Wjdv
HD7otd68XeNW3cXffoR/d7NLoBaaBX7Fyr9MDF4A38GTRr+Fe5cZLiBctyqK
5TxfvIeHLQpY42W23DWoROOPaEJkJ/dPspdP3z1+9fIZDJEMjAk/b6mzvYCt
WuwaIMgOlnRegAJ12ZQdHFzaRLhtvcLD3uVlBW9Yl+cXHShg8F9YkLqrF/Wa
dss9UGZGn3H4nz6JNLy+pgvl7wcn19eTjPkLDBlftM1hh4psYU0E2qsMJGKx
hh0bj99d4AUbuLRsab1hMDBUTysh5SjRVvVlVlbw7iflSk5f+6ypN38ARoAX
Xl/PxmN8Pp4MuKHdgdoHjCkrYFNgH/D+eUFrC+fiPSxEWa1hQfChuNpd8RFo
ruF34DOe0yPe0cUNzFwp9AJWDp63Bj66lvfQm+8gw0TeSeT/6c7C/3U9GuGs
wUzL0E5rs4MXv3v77mDC/5u9fEWf3zz9b797/ubpE/z89vuzH35wH0Zyxdvv
X/3uhyf+k7/z8asXL56+fMI3w7dZ8NXo4MXZH+AXXNmDV6/fPX/18uyHA565
pSRcLjjXc1wUOPdwXEBwAxGNloUecrgHFLr/53+fPIBl+pUodbA6/AdqdvDH
5UVR8dvqCkiS/4S1uxrl222R0yLD+c9A1yg74FnEbdqL+rLKYGkLJJM/4sr8
6TT7Zr7Ynjz4Vr7ACQdf6poFX9Ka9b/p3cyLmPgq8Rq3msH30UqH4z37Q/C3
rrv58pvviAKnJ19/9+1oNDqDJRkT5XdNUWQgwUHD27TjbNfyyoe7tarXayBq
pEnQreisjeg08sV8SkHPh5OB1AnCpamXO+Jyo9GnT5+lY8KmKg2wXDAKK50M
2LxBqTLJitn5bBLyjUVeKaHhO2DMwPqRB8OxumJOKsPJeDitfwypgPiQ7iIn
FrVpM+AnHUqJHO5dwvnsjTDPxipyz1jtBoO4E67/DBa6wN/GTkLpKt5ec6eF
fhfskT6rFSeVdzjh+Qh4sRW1cAgHBWvMjf1zzfrOEhzUMOhbyP/Li3Jx4XZp
s12TPKBFWRbAHpcsbupmkpUrJI6yKZYwqXVdnbewA/ukBizTGUyYWCkz0kli
vPjMcyRmWA0YFywLzADUhTUwkLagzW6Kv+zgvTiyFnmIewhznxJlGRwemjs8
i1YRdwXWlh+AhwcGm7O+wrq6LEG2AuninzjL4iHyWQvW1Ys6HHRO5xPkgEhn
v4wsGOH98xroXKUwDwJuBBUQtR584gb3x459cQEnFd5a4sZc5B9K3AGwsLJN
Xl3plGgcFYyDRWCXvy/i+dC74P6CbmiB/Cco/j4USAWyyt52aGcswpjnoBQV
fanNzkt5Bioy6CysvDZn1El8G2w3UTz9RtIwv2r5ELMOFmiYSxL0LY+bnmZ/
lvtgi4lUGtKe8FJkdney3/rBkEMVjtAHfiyOLdxJoMYMnbm0/8shbdjLQNq0
vvDEV61bVov7mq+9/2q/SgVPnRdVgYowqLrzYpEDDeNMiaDaniIsMrv4iAY8
P5/U1/YCl48oqNxs0CLskLfi+5yaDX+zMsbnbF2c52C5bmGbZTU2BVJc2W6A
/7Y7YAmwFG9fvnjNQ0aXDXKb7G29AerYNaRrGUpwXh6kd9a0zmFuDQx94/ak
pU1JbYHyITjnZDCA/gD/RSXBSZCVvIeePfYbPc4OVac/mZ0c4dGIV520bCMW
zR32emaoGdJ/g568CuULnTRjN5Q4icXOKPcNsBWc2+UFjDurisuA3X8QexWe
44kFVXlS4J0M4pNziaQObGIOy9ISLy/hf5UvAsU/zRtYl4i/wCYDQbTKFD5f
5Acy9IKOGqnVJJ13LbIB0a7lFSAbkZw2dXWziJEDTCwonnM5K0jQoxUM4whO
bChH8IrMsw6mfhyKN5Bhi5e7Fl+NHg1YkXK3ge18TpyDTgdqDHb5cAjIUvmg
1XCIwCSCG3nELZI6KchTukAsVFkbtWeWxYdyUURbAoYanWXdShjGC8O2zZhD
meDlCjN04jNw3mFr+NwWH0hA0mwa0KqXa1wFOCBkRIYPk+dMeTZkIpkn0X7k
/CSghCV6grZo58IY8S07OcrwDTweDV1HtMp0ljPrdTD7BfwedqqDQeTNksx+
2SwaJRzh+/dOHqk0a96DiM6X6CKAF7qXwIYgwbXACWH1nrC5fP/e/S+O4T8P
JmRswOGqlrht8C7iiG4X4GISc+T7QqkBN4c/GhUCCJ4GjK/1O89qCcjhGva3
dcov6p/lYodic1XkeGLaFG0ro3JiYQOyGd+EewBjwsXHDS+RQe/WHW4JWvNA
M0VDrLSnRwBj9i8XcyuYYCcW97r4SG5deYNzzWYVjTfpY4FzAtr+clmK9yax
AnDbhdghRKdwqtBTtoQHH7LGzmuadwulhntf3b++PuK5s4YDcy/6IzfKTsKn
gHSyBv5l7yYBU+domdO5IJmIKlqg8vUkaL0SxUlObYXE7X1Rq7y9UN2BpD9f
12aHXtAe0bIu1iUpo4fi0YHv4TR8j+6KiTp3mFDxdUqnZCo7ZnMpkdSuvszR
W8AmYYKBgn1Y8KnNs+06J6eco41g0vv1jWqx3i1pvZl303NZqYZ7HTk7fgHm
JsizAneYpFO9Wy/py9BUYNmFS6VS3mlywgP4+BBR5XhE+IVEPTgcJ0NiMiS1
PS3sSjRM+KjhVRtQYMFQM0ux2lUL3nrk2jINFKW7rfB43H94EdzlFx259gJ0
k5YnhWF7Guu27vB9SHAbYLMfCqcLim8z8JbC7w06Pjx37G9rdsgqj+N46szb
bdWfR/NoN/gkkkNglDJOQfdod07DgLUtPsKtS9HP25RiivT5atc5hQapb5I5
sAKxwPmuXC+ZJIWVoUqzgLuW6LQxuswvM1tFp2/5kBFnIKXKaFX26Pa3h82+
VgRk3pYgKuyhgN0Dlab4wKKnKdb5RzJmkAKFN+DMuwa0PCRGYUcS0JEh8OFn
QiAXskqVFt8DaxM/0o5ZTxMplGVL2wx/Aqs3Pp7A0oltYzHFBuifZn6Ogqcp
W/IkJEm0VZIMXMDu5MHAK7N96opp2bh6bIUJjPkFahRrFTUWSvKWjFgPzfl0
x/zqbrPPE18pTVmDGEJbaMRX5+vCqJXkA1iT+8htVMcsHem4ZXv2El5DnCYU
IqJ/0pkCIwCGb/wJYlSh89w8eiJ2A1NpviYDdrfF8Iuwuw/AV+RPlCIZRVZz
4Tho8MLG/3bHjvUtWR5opCGhOGLG4U+8GTm0CrEQ4xUhVzn6Pche2tZtW4Kq
Sa9TobXBiBO77Ku6moIa8AGpA0wsIJPBWAtZeBLIhEcAw2LF/qIom75ApbnL
QNf1OcZ7Mg2HTrKrQi13kt/r8n3BCmuXFs8LCkXRYsOeyHoPrK84nlfIMnHW
GzihsKgqzBdXzjBjc9YNC3hZwYsnK1ktYWFIAV4XcKBa1kxLYA9FvgTK2JRT
Q3Qg8Mm3D6tHY0Y+nGnYpUH2AIoC6HkVbjE5vWBRn8HXNSu0vLKT3gJYCxqX
fV4Eulu+aGCPsw0wkBIOkQgEuI/dP6KBoZ95gQL3iJfH8QRYdnIcLSWqQmbm
AjdlmcPCVWzsEV+q2/DN9AI0/XEZlTDEuIfHLmtcS34d7B99Lj5elHPYeATR
BJz10ycTbUaLb0BPE9nIGoec1ogEYF+QjhetLg2KSZ0MiYdghWBBKEhR4/zp
UAAvlRA4OUfcBn/6lIjDw1g/lGDaW8ebUAhsLygtWzq6KC5oncV/7M7iZQmj
owM5eJSIQYFmNi8r5zdkPZyUYIppEcXKiVggicHNSf4gpwNJbqKhrBYOZ5Gg
CxK/uMjiJ0JlHF/GO8GE1aL4aWm5gZSfPf+tpdejcHRgdRaX6LvhcdLzo9PJ
qpMxdZBh9mUOnmvchN1GmKeXkARepHOlwhwvcg6KPpNtxDke8f68besFesyQ
jy0ugKh8eBc3OAeNfsreN2RbtI9zEqfAM1i9YAUctCEyYeGkvKoK9GA1NSgh
YqCsCrSKyPmMOhbHwGEH0Cbit6ovVbUOXnd4PN3q1OR1OW/y5koFFOqLrfh2
zSAyQkuQGgcrsejEUQXsSPziFHmSxZIBsEq5Bc0GjT08K6I6RLN7d+EcG7pU
uLB2viQ3g4fDUWvUzNO5gSKLARwg8lV3ifYGM/wJT4vlBvPwfA6jEemhp0Jt
xnqBbndcH7dv5+t6joeBjTw/gkoGhZ4VMm/cQ3SmfKmuz448gL21RdgKrIMY
e+g9IDYFVHFRrLfA80gVZfuE3bCqOJt3OLpb8rhz61novW5i3M61M7stjfJp
JSWJQ2uJzaNHqWeF3EaC/piTkVDw7856a+p60JKmo85x/ldPXoFmiOsJNlYr
+hTYcDBAduDybqvOiXx4yuvufABsO6CMAerrOuIlZtyoelHsPQy6AcGB3kOR
GfS6giE2LdkhyYBvp+Uyo8KRkYNdBLvM7IDw3Ux6Bxw6p294iO6HKrByevFX
9VOezLJ3GhEyjgayp9ZlF/EKlFE1W3h0PJAzhBMnzQYX13NOE5hjoesDTyLT
Yc5oSZNzFQNjqrFzBIz299On77yXeAjFR+7w7+tLPLwTjuQnhohHCSQD/Kp0
6e3/fBNTYA1TJk5PrH5Oqwi0VcJOLQRKoNRhb2S9FCxttESIM5izJr5MUUOD
9xErWqA9LsbmwLuC7WXLS7gE+rpJI4W9Zq2E+J2oaEBQMIhT2ngURl4vaiko
mJKluVDF3TbbXly1pDOXBCIBEXkk7G9gaPreTd12zHO3DXIRu1HoRctZKIjQ
A4VkjTcEtp5YN9XdTnXuJcXJ0aShQHqlKrTnyPh24kIhs9MNoCnnS2SMfqEx
SrTbhu+2apSsCrmaC7Lj7j/ILupdgzobcbt2RwaIWA0bD6RTbbS9IA4s0wjV
OngiLKIwXz0oLdmr4qMVXW3mNtGL+9JquhgtYwdFbmcHKmJiDif30CcFZ0kc
hlsyKciFh1QMchnB78ZWsktsVtc5znhQIJZajjmj+Q/mVRj2i4jFrRndTAAy
oqmlF1+qct7uGE5E1sWRa1Ufo/fDNjsxvVKPIEn4GkgLbWLZgILYMYa52fkk
O3mZl51TjCpEbrkx0iZ7l2sYoy0l2EfOTBhdXlLYDKiiJNzFgT5mClOduqke
iAYCy1yen7OMBO4Bh6Ar2s9eKZbYFMl1vBDxA8DGkBuxnFRPBW3JM91r44Vk
wmJ1mklnGpEOx5Fx4ZyDgpfrsicBRWIuESH5oax3LZmFnqEwN2NF/A2pErCL
F+VWfOxoAMDDQN6xhfVcnZJP2Cn56Q59CO68jqS24m6unEbrHF4UEUerrRJX
LeoRg9iZGxGLaMSzTotnpYSlaLZ1Q1v5IW9w9uw1bYlUQXgQNaL1SxO8xBUX
nyzq9ORowB3ucvayob4mdE0ms0wwCL75yJB5P5IFLTcwijlMZiOhMNgq9meD
uVB2Eb6AoCihT1ves0OZ1zU7Ct/aE1EIprh1Pl9yHssRRnWa9BKceCN+meo9
k+3ifVVfArNja1XRIh6dwl5Iz9TMulEsgOkBbSMeATmaWbnQOAhSYAGL3LLT
32u/k+z3RTRGHhmOBH0ruIB2YoVd/dPsaQMH89/rEkjtDCzJ7DEYKhv8jCla
dfYvdfVXsIP/mr2GU9TVk+wp2NtN9rIEq7Wavrw6z/MGjtAZHPX3OVyUt6Ar
voNTDboxmF2/zdf5X9vsh6I6v0I8E74iJztB3hOkTU2y/wZC5vc7/N/dCphE
9iKXYX2/wz+fFagRmxSjSfa6LEBIIVQNSKZsRVnCCCxSOq0d//HgJNaI4TOo
AxugbmZ3f8eTVHb8QCa/9ZUirgZOhIsehmFtf1yQVmYp1Lqq1qy2GtCVkDri
4luMVAvYiJSNfwx+zRnZKYYBq+pBYwgtIkHI8VdCjXklVFYEISXOAbdgl3o0
f8Ho0NP3DIz0kpIM2v1QaaYdRoTcmGom70HiwgwsBqrK2AfNn1Qcg2EdpG6r
8sGuVhGvCvjEtwXa+rpcFYurxdpdGb728NOnH/SKIOqEQWbebbixZqJTt0ig
d+pUVSAGdtwtFwk3m53Kk8TsvXeZot6oRONIEsuYHINkv3n5RcdbnohSu48v
bOWomJv10eHyrZwTmqgu+FEVDVW2DiQZ4YAVLRQwRb4ZGKthUZguKNT6+Xlo
17GykBGLIcXdXEYWb7Ht+mY4vp2GEwmU0sVKW5VXwCxwk9mCCEbBq8PchnfB
IUArBKiVH0B8VCELdfdfeVHs1pKpyaz2ntexhakv7M18tQci9U4xdyD+3PqG
tw+Q++33Z0ihCRcVHoD58uHMUKuXeHXE9AYGKyBZPcc+csGuNbzmJv5mshcd
E70phfJaIpNDMyEzCrkWUCjjIjj2Lv64sQOEjK3cCzim0p6LoQuPcbcG77sN
jwomKrTQByHQajv8AUVPUK0pVCEjx3hLlsO8bNVr2ToAs9O23I61Ru0NIAmO
IPx6HOunY09dWFNgLAgjtg03LvpKars+j5z6jk6EAq6Sy6p7FuQj7SWThONL
PZsOQGhjlzbmz1hywZRQ9DUInVn+q7GD1MlR5Rzfhw7uCXpQrR4eBPNF/ZV8
pGiDX8ESU6zq051aPvb4qs9XCNXCBEylE0wqhjva2H+JqXu4dThxFtnel07e
AXJQenQXf0n+wRy3vS2qwJ38NvAsKgSFEF9JnEJ2SFRCiZoCbYbTOZahjI/U
M0QRfiQsQtgqmJoBUc4PJDqHBHgVkVs0ahaGuxk+mTRAvxFEgMFKoWaHSI32
dDSaoiVPGahGN3JY+tDdIu9H9bcqOb4WPFeheBJ8R8djvWsWHiQ/NVAiigWR
6lGu1QkBu1ATqo4EjxsOh5WdJ7c33F5sgUC2NEQCljTo8NiuyeEfoOqJjaEx
1Z5Vy2c8DuJZUyaJkjGoCDWUDWENpK/LBLrl3baXDcFOHPKssC9cQMzOe6Mj
dJAg6x20cQoawXSJyQcVIYCQHXIorGUvcTA/Zh18hF0O8Xjcm6OF4dAWC1Wr
Mvavb1+9pNc9/u2rN+FW1lWRaWjAiw1clXgj9Vj2lO1wQfNGj0h/t9wLrq//
K1WRsRibiCAF2eDHZFxeeWMdXnzA9Iw75j5x905CrJJ/0MwNYnkF5iDu5PAI
vA5JHjgvRCTNFv256tcvkg/0ED12BVLEf9UL5bSMCRIHCiqoOSJyFH+lAFJJ
WeL7S74GFqWSkymW7CZf0q3pfe4HD0Ou0SlE1r2VhU9R5RILDq/XE8H8w52K
xp7oKFQaM+/w/JHQ2BASmN4WMR44OsQmHW02PCKHQUBKVNC4n4O82q0D0epW
QrTw2I13M9uQdSxWxOOJJ2m3JeYvIZ5T5RDdRVPvzi8iHNnUJSi8ef2YeSfR
AzviGNuRJEjHKfBFPtGmzzgIHiPHA7jjE34YccfHUaSaBCnydEuDAtp1bkRL
MUOWdhj5GuRpw6Y3rm8BrJNckgvCFJGzr14HSUXM0l6ePX6RScYqOjKE3Cmf
xsZ6LLUTFgGljzxdTQ0DmPKMD365ktyJdX1JzJ9UH8zbkbSlaF6tDJ5m8vuL
cs3vD32tscfDutw8S8nPqxpBMhOrIbMTE56YrKyVvVZg5qGY3Eds12GZH86J
efP0LRcGEFA9pvrGC+fYaua5Ip/m8rwSXLSlx+cSD8vZNzHAzCeR3k1vI+af
N82VhpX3SBXKEUCUC/kjfdza6RUOltqfSJ9NOUiTWV6fLXyzYWdTOcmHkv3u
yWtNRXOTxPkRd4pOxjtvpgawhdRZ8ePDGLqAJJiqRR3Aue4brURmG1TLPcgE
v5pLLJTuZgdFnk2NwYYbWqIlwTWx4Adgq7xdoE7S+l1K0I2hO5RxyFUVaKCa
K1f0DXKLA/HCoY/N8CvtwP1si0kyt6jeLbNSfHLkjrIqBsP1lh7QGgEQUOB6
iRgw7Ym6EXhAfLLZOUYYWzEVxknzQsBOaoxTHYjQHBdbU3LsyF4XR4MZEGGJ
yCIL7sGvXcJhtErD/AZnR4nwwgUT5WU8DPvMJvaZR/5RioD9iSoGPPHpv2Az
ohwtqxrsiaue2Sg+fxW3clnPDYe1yNCD+ckzev/Hff/HUNL4uwubgcyCPcpv
Nk8jg2rsJj0+zc7UQ0hJbVS9BQNdtCSqnbWtFSCwC2dGZ96QMRxnuawozwK1
IzAO2OcK6gylipg4/mqdtxeKd1zXjqCJnh24s2V0Rr2K35xzsDWvBNnVMQ15
+kCyIVtg/JhykHC+VSb+EA5YI6SLp0hgKN0ezoAiwDaY7aiJon+AvRmKVzXg
CmXN8jJ7quCdTyxGQlxHdNBIUCvuifaqJK8rZ9rAWHJMd1MABgEiJCoTMBe6
QIW3Grl0NpjQaEF4Ew74xFO1zQMHVw6lLK4JsKpzXH4ZlncossXcJibqd4bI
yu/TRb2WTCpz9eeQLtH+afDGSPjSGyO0GKwKYVA+lHmknMpS9tPn1LWCZySh
nPbfIkZOoEVYlCtWO8L359kbIHJYzdeIOlsii3mM/sZDYOlH/EICUjOBMkyT
JJ8gOLsLViByh3lBuYWQgqJF6fWUj1rr3DTx7NgiwdNHNEVYFrbXxdO0w7gz
YsM5kghafdHixtFhRGf+R0GIlxVGslW1ppCAmYAdOwIwaMkIitbBCNnMUV2I
sD2G1shwFaS9SVnLW3ZqKQgdTMwt6EZkWrrXsiOKN4itfqvyLosuL9cWyW7v
5XiN8kIYxq6m1QDDhpi2FuZqlgXRHT+fHoP5hudNcU5EwBBYBtzCc2DF+m8R
o26MNeXy9U42B5NZmzIPNpjRxTD98xxpWeauGRWlWQ9+8kxq4rlLtnkrkB56
JS+iT7p1L80Jci5jfZkQ7TDY52YxXaycK8g43wHmhix4F2ke1hyXxaKIiFCI
bN9rtVgD3gzEt0XFUdN0eIr46LRrs2fY5rFZC696IyNlmmQnHaYSky2UG9sZ
Ma1F68/wMlx8QR/dxp9iHElzKsDjS4vIVHloLkWQB8cZs5n6RAgw1jKCtSrO
604w+GQ6opdCPXyMv5OIxZKrRyipOroQj7Kb7t97Ordn66jCRBoJiSRaA/zg
YhXD4j3h3/GcXGy3AFIVu21zSpmjynDoHidj5yr2kh/U8z9jKu7BLDFccc04
qQdCvNhompNLNhd/KZ76gik0HEkm8EPiiiEUwLyEUk9F6pBLh/L4cj7oW8lj
6N8dD3u/VCPpKPxKUrd6A2kTj8T9iGQ/z4zRfaTcoPEH7COvungn+IGvkgjB
6KnBaLnyhgZUNB/bebQlg97EVfyxTtGCAnuFPTn/999pNIH7EDRPOJKaRIyC
g3afBDsQivCGyCEYyg5Y22NkkO6iWwkTjal4cSYEzq/8nY3u0GybQgpFOkyy
Ze8DFBJlqOdVGDaiwckxUY/U1ZYOh1y35gM4fBoOHeRTfJG9C/G8UILFRPG8
pNGgbgyzP0KTQiCPqDe56Gh/oKhz0UtAVuacKaW1fyLv9vMnKddq6HeLXoCj
FObNMZge2woDbrfkWrIRB8GuCi3Stjqno7hJCjZVC69yheO0aSt+vPR0l0sy
PiUrPXS2qjTyL1wJeDyMvKiVFBWcCy3effDlUPCcWunqzy5obBh5zv2JzW3Q
oe3K7W6tqkzoPe2pNt73elm2Fw7hTzqESe+w0YXuot51mUNz40qov7Wt1+Wi
7HKvtbwNSEvVYt6+CvP4OCfC/SBqmfFSDgh3Jf2IaGK6nZbxBk8xdC67zLXL
JCL+d9zygPrRK3i2XFIpDjSSKJIfrAvFSFk96cVtP92JI6gYf8ZSa74+Yhyd
8smAPkQoMsLHsl2UWaJzdfygza7tXNDOQfz6I1TkpF8b5dOOX7Sp+xQkIdzd
ue+tst56bzEFrydOiXMBpC1V9kl699oEAUv0igZ62B6lkufutu5YHFKxF1l5
ci1I3GhuvWxU81OyqvMhDztiGu2uI3bzHTkGj8itlKBxGMgYTU8a+jSQ4ehN
xSc+1Z8HH43nyRfTJKCOW4CpQ4Ecy66MTYI7PJ5n/li/Mg825SQpBjk3Hu+l
w33cfIz7VQhDOiGhyhIjlnJx9UbvU2UX8oDu4GbP7PUPmD/bEkOidH6EQOUt
DJMeT0ppAk1xkVvPt6quPqFUawbwqZMBO7V/wmybdCaJT0RFSuCAgwbytkDU
Mo9QkBNjq6nq23qL5hhqO6DpyJ2o5fw+sKzNUVJpTQeVQnPqn+lrKq1HnQSa
qbwHzxG7v9sroKWPwuw0rx/ewzazKEwIU+nLUI6TTWBVeK5f8oL82N9A/m6M
FEzF6pFee2tUfESlsJUwWbwKyt/95BdUENElPPbnmgyIkxqHWmps6eGPnLvt
B8KnoS08b20k8EdVy/CNdUh9fQ6/QlvFlXjALOR6WyScCuiN9mKdajEruI0I
TsfALPfF2R9EV5NrHKE3Mgu5XEpgkLzg5+DtfAnH39xzC0wil83A0yozyt02
bsPVwW16ivc4dKLcHF9Ho+XUfXTH+ap0fr5BzoADamDUXs/K0LMZeq7khOAJ
kBNrYDMu+VPpoIfMwGGRfIK57rZUjb5gk1phTpRe5J6hyPDC5dsG+YpN0e0a
lEC0eb6aCh0xLFFBVhpBVRSpLygKLXH5cPaFryVGIRbOCGOmODblYkEPETaE
6of+7uwqE2ilBRMfNbFQLTrAfI9QbhZWSZuN+owshPBtxw8ZhNPZInRK2VLU
1id9O6mAeKogJ85XePC65sStw5ezkxO3ENhUB9lM8REDS1K4migCq1Vo9wIe
ArLpCY8np1m48a+LVTdFRbkmZWFONU1pUUB9p9R/T1SKlWFZ2OzWQg+8Bjsm
s1yPkwiuM/lb6kCjOrTwcofOpggvxtVqdo0Usrh7fBdNSnTAkRPt+co7YajI
YqumBV7Z+ToNtyghwDs+YYvzsuRSt1KSg6sWSKkDj3kUl7M+IbiONVHSuBbr
XH2vj3sCM6IgL0CcaiZ549u8pPohd3/64134z5/uZnNqCoAYAxoSLDDizux+
uiQcqu6JzvSJVTPqDaYPcoko1YwYzn4lwgDvowHCYv+bfquIqHBv0FLIs8PJ
EW8BF8zESBmV7XS7prooIhRmbsTyOpc3BE8c//QN/PDTt7/+6RsawU/fjif7
H93aZ+umUMneNjv89ZErjLUrQtsnb2npcCh33cvuapY5xlQXKhzloTCwu61b
mLe8QX/ZYbTJjObw7pGjgqJd5FvvL8Wk85YisYc//XQ009c38H44aVM8ZX4I
ePiKj70RyFRMdg32utK0ME+lcnSn5ugSWVP1o+ChiAxHQCywXcJ0UB25BWan
VAvKZ/TorqYT9KMrVMGrIQW6Cg2OYVEcYsGstx4TmqTUBjPtqf947D7+9EdM
ovv13aK7uAeELvdsT8vthy+Py+0YFoqp1SiMMKO78vtdL4wC4H251ZQF9d3z
GzL34tlnj7HBR8x+Gt92mK5WIj1OqaEi5CdB92ll6esDeLJ4kY5lOU+pvNYU
T/gUJdBPf1yVTdvhF7++u6rruyQcQCGlb5q787zhsQ2OBWs0lV7Xvxu9wDI7
9yrHBOCNPgXRvzjgxDiE269qcpxk/ZlLSPYObLFfWrPV4aI7uDW7mbTVET31
Lu7EXTpcaMVXGOptSu+aviVp8IJHOawbPSia3M4Hg3UXFKEHomMeZM50Zdnq
f/BmLiZr4sfWaJ5cYSzpIg9MwC3isPCWXUeckhUaBVza2n690kqkz2CMDDN5
C3UmBE8X2WLs6rkU8aKSPmjZ3crC/m2B5TqIU9k+JD4FsL8q5F5bq1/dfe+9
Wxy9ivFwTgETmiHTzebqEH6K1Mz/Bf8y/AufNOLrT4O8nulC22H9l+m0ucwS
botfcRMt/l1mIX21wm/HGXGZP7kf3e/EMew/Zt39Cw/5SUej4Gr88fQQ1ZT4
h7/pjaTD8L8r/Jx6gJhTg89Qcwv+fQOaBC7Ft9mnq+36VH65/i712I+pgbkZ
ffQjw404pb9PZvf4wfQXPBa7u0pu1jF+n/ZI0U+ErqBPHKAJXkzf8xpy7zMa
4fxq6uj7KH5V4MmV0t/m8e4xssn4pO/gG/8XUdno0ykc6PK8+vUBauUH3LTt
1wd39/jB7vqjcDDJ7gz4wbJrYjlPCsz5qUl7CBy74jikLFXSGckCWC6bQsAN
UmI+wpTeWFH1utddRcqPcNcF1ymCHMHsMOV6Mj23lMu5TztQJ0ENMQZ/OYhE
L0Yk5Qu9YcrRpbjEaxqJSaWbyNAR3iuDZBHpTPgEL1Z2Oi861Ip9xZo2WAsG
ozIOCGHm2NXYWqKpSo0gNdcUMjrnEB3ZtWskvsan//Ky+3KkktT4oS6XwQjg
Ih9u8RVwpKJhUKmRynDQewaq9jLqwWEUyZXChUi1b8awgD2ONYCFxgScPS97
V4kAcHRj1s+4mCwYAygdXS5acYihIN5ASGyfAtyXcorUCrLOGlgmriovCfhU
5tY6XgK5KciOygUPmCCd2zJOG+eiXmfZ68BT48Zz23lYz4fEpeNhDt0mA19g
3SntmEUHwiNUllw1/V3oxmo1+8FMkykXySNwlpn1HR7GjSzBpq7h49mRLbdQ
ftEFAltpt4CYFlQaZSytH4mPE7DOo+rEy4Wn3tevoxkHrx1zZh7dPEvuF5fd
40ODZC0FAFwdXTevsDZFciJ/9xFn2VOK9VM2mEBmMdns5N7k3r171nhgJXSi
BcI86W6CEsyCMeMeT3Itr4BcGkxd6g76Kes+IZk8hAEYdZ/KHOOoYZm/+dV0
Gq91SHMaRx8sY4ePq3A9kZGMtTmYVMQnn5UFUjBIwfjKlQOrPozVMShELXgI
TeEM5RTbGro3Q0Pjq7iCJpdBtZGHRfDu/jvDPfXAslYC9JzQ5L1qn2MNZ7/O
fhqDIYwCacoA17HzUntLawxS6WQMY1sGiFji//ZWLHe9chXZLnzTFVquP6Nj
RXiKLplW5O4/ZhI5tXFTtNCmfEtHwwW8+oEPFcQ0B5ZaTB7qpqbCeowaZljq
raSZWzpcFTAcYYMkzeVJzcUkuTtazYk1viyv6NbqV3ddb0CXfFL7DJqaM/Vt
CRCqgu0aQgiGlB8uktO0nWUW+914PJpOvwV7NCx4qH1GFkTArhauL95NRV9F
sUJUtuHnXvoVFQuzgXg4RQqCYQqP7gUunYYXVfIppTq+pI1yZ1l1dWH56Nqi
aheU3bDSAntGratAj6qrcwqle2RsKlTjC5EI7IldjFM8Cpe+IkPrCsq6quzC
UR0blJieHAGPTKe8vTwbo9D6DxzjGHM7zqnyvusmYlZNVob9q/31QRal1aE4
7capvoxxfkvgRMR2MLL4mvSRuERenOo7t32GXfjRRdMoUOm4ce4B3wkkZC/E
60NKAZomAdJGURnmlzqIOTde8MkWQT0hD4tzVRe0TrMXU2El4Nbgc00ZA4G2
9PGXZ1EWTAgcppR0SXjgJAdC/0/UR89ogdZ3qLSBc56EJM0GD6ZEMVMIpItx
NCGaRLyAhydH/QLBkidHdqFPIJD1Q95/eP8opbpR4FErRxUffYg+GKdEavLO
DQeXLMzi3SJ+TuKcvuwtN9Mp14y30RekYNkhuUSYQccUkE4q1FZzTdBCzz/w
HklWO/mTj/F/MXsw+9KEDyjE6PpTYaKQJnAhGhWd7NSuLMNeNYXz0bnH3Z99
5Usk+jqVQaETyldKqzJU+hqnwAuPx3HXzVwVCL8duFuUAO2/8sgrnxxLBQnE
spQI2S0ceogge74yGkewbzJy03Y8dkjGOLdgzzRjznJoenyn9Uarvh1OYmWu
qYKMAtVFAeN98Z5WHMcdJnlwF2cprKLRUZeQwWKU3CamIjM2GcUjFABOnRc6
QjRw4xRxvVy4TA6ChxbVX3bFLs7KcDpbr3yEi8ZrT5bsfAfGAmgfLDWLdUlm
O71tFk9Vm1272Upb+pwQPT0vV2R0Rdixt3yRTXdBiAueEqm0Hz7U78v+575z
10WPJiuDu5L52vVuq1zbHe6MR8kfvhwUFl2Sshep92teyxNzVfR2duwHyT1P
tbzfpzvPduu1/U2yya65qmGUpV4ZxigUr8Sr6AKNAt62kiL188u3gvbpW8oC
oGHNyzNnax6ChQyWR4fqq6j5Y43oT6vdBhNrSPdmAxFjjb57UwifUxYJysCO
MMKFxiev3ATTdn2YrN2bjKunSL4tQcVjanjR5VPjKxMRmXyHQaGojP5AUH+4
3l439gXCdMco7Zqq9ffrzZUtVSkwvRjHBCeAkz7OxFnuVU8NPfwZNOzRJ9Ak
DzTmYIdwqvM9OM0+kZv5wO8XfHeALf+mJ/fg/9/d+/r03r3Tew9n9+//94MJ
X6zbiZfKnkwbEBboTuYrog2GC7+4f/JIftTxu7ebYeICnEqzAv8zXrCEv0/u
nZxM/HdtBVb+Rc3113AwmsFxYC6KfR1D8zs5+e/2NsXnn2Z/NI7+T4HT/4A9
9VM0ffCxtzGBzTvoEbh1wUztgiSflbh63/XRDNIzcY9x29pd3IuG6mctq11i
tUVgF/j3KQl6YCOP202+WA7dykFB3ErMch64KJ6KsdLxtbvt0NPjG/MlMPzw
zsSN16mn3bw8J/+3LE/vuz+N9l1h//Kf9R7+Bv97PbreG8B66vXhRBXdzHcB
TXLyAw5esZryRtSUT3fob/mTwH7icIxsRofNV1iAtcfCOkMM3vO+eNeUM+zR
wMpp0UVBKnJHsqktWa8MPKubuMqbqeM2Yd9Ee1Ut4oCWKzhJRXIHPINJe98D
JQIHgB2VU4LEVSHyOWj8xB6CsHSOQ5d1YRaQidafxiFzpJL/Mp1O1QVBX0jA
GLsSfdej0ygxJrwBxz/dNiCXP7o7TSjcXRdIFLmyoFQemk54cSxZ8HoKNeOA
qSUDfhveoyUdsz8a2fEnvcZdZn7sD9VdhXtmFsLFzsNXqrfGLlmx2XZX++PH
PNK7wXYeSFHZipNYPhQGROuLGUZZKuxnRvMyIIRbISlY35JHaHV0zaGhQFK7
22Ch+L8qPm+ajcslwmoiZFDUTifiJtyVE48GA3gMvSSe5VCiYWc1TZSQrHV0
E/ttlAxW8hk3Xh93WFB9c0CBY2p7TnlDfF5brvypuZis6lOT9jblz9SmoFXn
7EjT80UDcpIAGtWJ5OQa5TP+Wh5mP4I0ZcOy3MRMhZqSEy/n/E7X+Dp6oas+
IC7jnJnqRTwd27cdRmLWOLFVnq25Xr3kkc3Jv4gzVz5LpWHVq8CeX1bSNeLI
ZmLg6Y0e6vnilPOQdFUIQtl7pnql9dyIXuyyzf3EJv2eVIZC+X16zMfsPJZY
t9R2Z4+vIyIOJKcoITtU1wYRWj4nlLdu1Hh8RAaJ+n+zt0UngSj3ktalvpDf
1FQaV1QoVe0h7EbUGoGpd+qaD9gjqvE6PN9VMNdwVpZe6OC4p4XNoGKQgcYM
zaoELAMb3i+4dHFToPf9gxAX7Yjz8vLGciEe9qmQp9V1VzE/M3Qw/5CXa9T6
yK3XYCwTMRZhlEG9xcB4FAgvJqlUG+mfe8XkcsW6SNjzrbE8N71mxJ+nTdIr
cZxLM0S/qFOXDZ6vuG1HIf4fOr70AG64JmUfXbTRHXbtWAMPybF3Dz+QSh8u
pP2Vy43zfRr5shnFms58kRFftV7TAdOmuos0B1IAA+1SItqlSFHnOt1dy88F
kEkJfHEBS+ZnvrBcWLozSrV0oQ9XsZQ5EBUWCepd+fMqzcnqXoDJMdfoftmA
fmf6XuMHA7YKQxa0d5T6JGk+nn87tVMTtqOBTkxCJXYE6zVD43BFquWZc1k2
nMfMYV6NrqRVXPahYggMPenUMg53sWynPmkKOIFr7uoEhW88mG3LbYGprykl
13EqbbDl8bY/U939eyBEg92KcKJheu0QWjScVR9yiXBP2dlfDeJB6QL3PXb3
LRnz3Q7dwlkDN6nQ8Ujc1v8q++Q+94CifgVAi5mqCxpfM69r4FrV/8EI0HA7
LejzVmp8RONDevzY0uz4M9R6rW/b1n2YtU2ZXrCpTez2ddA3j7GnAxJ74o+1
kx8mV7xXP8On6ZKQ9zgBBhD6QD2F9rStk+gCtn81dU5eC6Czc3KX+s45J70w
vLCwUK5t5pmp04sobo1OBZTPbqIqnThgB7pJT9Zr6I26pcNcppLI3IQIgh7+
gCQEAV58BfOW05MY60DXEaEImMEoJeyMlkqnNppiFEyt8YbaV3LjEMLgavKE
mcqoM+iaUdJhTpNg54qDL4aFerQUtLleDElQUHF0XaBW64h8mXbpdDDmn8ZZ
kB5PNKaV/OZFd4lLuTVFwbnefZWNDZcb/1elPR2lZDYroqouKyEVRxh0Vrwm
wlVfdUgaoA5ewnmP8beK4dDO38kq61yPorW13c0ztFaxqsx9uy8su4TNejEp
KKwVFkNhRNDye7QAoRZloul7elpfSY9HSklcYd6d1u6cSGBe5iSEh1QR9FL3
p8z2ok/2pXSZS1Ehkrbodtu4syuhLQ21o06MVp+8wJk69CbdfdC7MUETVuB1
eMATIXq2Q1RZ5xCwzlzaDDnlNrSNUUdOqsPMWl9V08fGGhfeat0CIXftwWwc
61F4nWSs6nbkpveHt6CVIdEfPQ9jhoUHE85ZMjLwqcT/YnigKSMWFVxxFcT6
w3/7/avf/fAkqJ6krEb7P0tRO2vTpo1FC0CsnSxQ5GXffRCrsWIP4nk4r/O1
lL2JlWY3BTX7RMAL0gJztzg32nud6wS+YcvZZU/7KHvnrKQdsimBZg6HHPZ0
UuVq4hWNCRuGuMfwv5QqeDTxYdGAPPn4sFXkW/ySlSwu9CblgT6Tz4EQWBAx
An/b5euQ1nQXBQDk7CZpn+DxXdRIAXl3aXo8J909/IV2So8nJXxIBokeCU2W
7WEBGQAZVyX0w9exuwob8lCbT1KGbdMDaBILcesXsPJ8Fk+WsybjyQbOKaYd
CxWuDPiVzhvf1WmVWAalemIRz6uURgmwsy5BcFN/CCqvLbTRtC52xosduf7M
S5L75gtQhPBTuI5AwzhcdJMr2PV//s//+eka/qPGrPjzWgcIdp2FXY4CVyTj
28sq2A2PIcLDbTJ8GGfIO4seNXI7OrkhP+DcEGs7StdkbMNyJqFGbfANkZIz
DoyksVNyVJeEgZBDx7cHVW+1ppVGBRwdq1ZG2iXLeiFCDuv1FSTZcRBY37f8
q4T01CDTOnI4ZnyIb0Kgzgrp3u1VrzuBYHvpmKtBrb6kg/PpzquKr3ocdEUA
S+m1T3KSxiRBoXBd5KFomw0hauUTUSmuHOgfIX5SUTaRc2B9Ub6JulYIf42V
oeeUNYGOzdZH4sTuob3FlXMFTpXoTTFGZbfaAh02Qio4ssdvWoPcpGTZXSVk
GtfL//qLB18gnApfR0kZSvqB9y+3fdapyARY4aSvtK4BPXBaOHq4DCjwzsFo
lgEi/d6bncCrzzHlj99FZBl1EyW8obpWg2XNI1eRw/yRV5Za5OZa2ziwYTxT
tB3oWU1yDrXtfmIRzxmlAKjSAu/hjREgqN/3hL5kzTPzLvRcrsuNtNvmeWqJ
Ol39nCoisikps2ND3j3cZSiAENRErSUIVBcWcQqrezia0ZjEsKa+HL5oBsd7
xAQxS6eD4SvlHKBNDSuCrbZzhFNynEBqj6/lWl/nREBgOpaE/SK1iETdY3Hq
PZXahQR0K8rd5yWBsX5fXxbUUKAnBk3XqJwaS8r4CZBYWnygBrrcqMyLKcao
iIBgO6KWULGblpJwJE0PzSm4nHqhmFPtDiu3fMozacODjQw4PIn17N2wrqQo
VmFg6BzTU8WdKhgrqlf1pBlldiDZGMjyxMcFfJWE6r3M081xjiD6ZnmZM8TU
nWe+7ALIqMEKpsieMBlNaznVla6m27e5ZresNZqjp1zPAMZa/Ggs6ln2cIPy
BvO8Gu+jDq1aPqMn9+6BUrVeqw/T9xyy3g1pP+SxNTTihnUYEsXzoISfT8Kq
pSg6AfHz5YecKiEsYV2LyuUiUxl4umALZvu2KdkHLhuuDZKvzIyX9WWleOBy
symWeAsGllDlIfbAK4X+ceBOi/diowTKm0mEI7xwqalAmFrMfnhmAtqiNccA
Wc6lJvDp6rkP2FH4Gt4aSpLTNgiuGzp3Tl10Nz5ySPS61F9bD/fdRVg1lkOc
l7yMVEX0BoFuPHLiBgzaC/XSrLl36439ux5zRxwkgLNq+TjoV9zTZEIlZZ8a
iHaJ9+P5Zmres6ZWtO2MpxWotUQGed7QGteO4WmvQNv30zhZ4krMilfVVf02
GgdSp8+roOqWuuqapTYvHMEqU5JyT5uyKjfUm2WdX00S3gFKI+GZDK8YNlCQ
93BVyRJT37HXS2d0DDbt0+5LXCYtHo5HbmipjO4nJCfJO1iGJmqNXnPtYOZJ
vCnU5S3Qy5GxUcNGxodxbnvy5RodbI36o5UUe/4B51VQYvA75J8uXkU/EYrR
9rpGRhOL6zRiHUaewaDjiUN//6hhK3sn/AlamUFrR85qAcrz9Qz14amalAnY
EXqOUyaDS96jmCTwO04V1qez40+CGOTsHUo366jUg3je+OE8J04TYbXPJNdQ
SzGpLO7tPHltf5yRn96Ob5M374ulr5u/vpKgtamfEJwLbnoiQ+EkS+5DeOES
wF1BwmAxZdzWHSYJRpdce123eXAaXPiMaouSTi5gEDrwMGiUinZqIIZ4dhNS
mHz61sk91xXvuVjxaFKfN/n2wvmNEQDC/qG2K8VVwMFsaaG70n6cLj+STPsz
XxeKISHbuIJDyc1VXYV5OvHDJ6dc/SOPjO/COFglupfFhIUNdu22SHjY2Sn9
mFqNFb43A3fvS9OjwfOGtb5Ru5DkSGsJhmKdkA1BQwoJN9ELE6AG9Vr0BWCI
eZJiKM6Fc5upOEct6uWCAOOKner9vcrai6DJS4R/pafb6he8oG9dtx5pOaDt
qbRr4iT7F7c+YOdQrVFGqJgExdzAkvE94pUyBVwei/eSXGTYrEot4sBR5qk+
aMZKSYDPuH3mjz/+aNq2V+EoUhlJIY8TxosVMF3BhKg9204DiEw6TztG6hsl
9RBNEeviUG0u+X5Ty/XHFz9k499/8Xj25unj6cfNenr/3r2vT07ufznOXP2T
/e1UR76dqpS31Y4L91yhsdE3dhyjLIM3Ve2vD3ZNdYrR91Ny87Wn8PVp1Z5K
rtdpkBF0Mrt38O3oGzIZ3oH59e39eydfYYrM/YeSInNygilA3xz7S0bfUM6S
iKL9LyVQB0MBNNnpAHHK35TLbzGr55tj+IB/e5SLpgkxnPkbb1wx7OK27zOJ
M98KYMM/61sH4fgGMTHfYtrLN8f00f9iEiy+3W2/sXUr3BOPo0eaL+iib45T
E/vm2Kwg/mn35NtbpUc4nLZjKzFg+xYHqRowduyZGiU5zT+PBO/fP/3ii9mD
BykS5KFPTarAz6fGrx+laJFFguwt34Slu9z+01/Adr8F8nGf9UcwvztDT/gn
/oz/C4Svf4YExyQgMQamOaEKdxlbad/uqbzyzbFc428i1fBbg1zqHSz37xec
sOFzdtNpS5w5dGYkT93A2et9bW745jhYAF59PbLhvgZHVvdfTmxAcL/w4KaP
Hp7c0Z3sjW8S/840i0ah+1QqgGPwwl32tDtbc+qT+wpztZurHnwhrlyTbJyj
Hh6CNUh87UpijyjCmUtgPujE9g+nir9Sn7xliLjaNmTeJiIkUea+mFuCExrQ
J6X7rCSsKwrKzax0HYQqr3IkMt+9x4nU0wYpjTtFJ7oa+IZ7DMbQYKofoqQA
95w7/KvbFhLft+zuJ9W4EchqxmRH2hQ+sGzaOHAZ59oUGEi+jpzK3Nu2S09A
eq5aGHM4kzuW5GhLTT/Yt8GmfbqTWo79O23BaFTsxF8XdDswk+8115ZIQ9jH
JWUEBa1wB9racsyF4HMOlGWOjThna1OwEX5eIgStWlxprRlHTNLTwcyKCM7D
EXwn9n5bbk/QetIksH2lzRPWsbGgp3PGdQSCBYhSCn2ipS+1EZ7fw0+fftCf
Aj2eu/+o5wTdU5QGo/soFo3iTW9TU0H5EWFmMFZs8kpy8jRSTpU9NdzbJWHt
NsWGwTLsntSUBeyfx8hJ/t6N94Zaw8nGQ+5m03po9vcrPpzs2+76rPjovmfd
VFqGynJWFBmrmbWbwNMzra24z3J3CWfmOPmMlcCSwVdoBN8Qq4yg/ED9vqPw
1z8CHu+2IoLG6/efUUTZ/RuqpuyEX+8fIczl1/59y3ax7We24j+gkO4Uf45u
mn5EX1kIRZeKzvbcTEWRn3JQ9SiAyf9NsOpOX5q6FuPLo+hCX7OZwuVe98Nh
lyuvexI8vXev/vvkr8Ou6eesSFwnhyUlhfcMKosG9aFZ+VVE5BmMJfskHqsW
f+69KX6EvPQ7v/jlVr+cVvX0r6AuJdbc0Telbx79n5tcsJfZmUyDzKumtq70
U4bJOmkXlM+K4EophUcx2VRUhiIzyuCQ5XtgUKCxlQnwYyzt6aluF8dO3oTQ
Ms/GtuKnUeyton2UvUm+fcTdsMAfAvM9ubiIsOLhPPOeuDrOPBbBxW1gpjns
wJW0oml9vxP0CXNrQ1VEnrx9/JoBpQ3LFqwKyLVB54x5wUYDBkhoYHmOZmk3
fAQag/O7hgtFkr7fXPmO3gg7Vz43Zm/9gooLwNqQGEs3C4+WytVdpFZxzuCR
bnFuvkbQWVKQnhRNjhE8TWlE4JDUJ3fiTDriYGGpiKsBAejj1H0oD/DeQd35
XjfGiQVbEqTe1dNlrNHz165eOi7hv795NotHArwqMYZ/LxtMk8ve1LtOK7KB
3L7MuWPxITzpyCWnG/Wf6tIZcd+qIxNuYLWmEm+kuzmF83p4/xEl8fiyuRpi
QfKHZ1Gc220PF1VCgE/Zupg5aXyWJY+zVUF4r94ayBqNdbH662EWkro10+qm
KQy3id7wnApYu0BIPq8/BCoT661dKmbB6RHKGpQQsACi1I/CkRwW3IBTRjOs
YuuQ3vVzMUkbVFZj7Bw91nwuvG2gTX26i13b0xiDbUxqjpgYQ7CpEgikW/um
dXi+P1K18I40S8P/3IKlEoc8WxtQ/Mx6a6UyIxUIKN5nkSLm8oC70kwloEaQ
rfHxXhnlPh2HMntMmPJtTNkE8xiyBMHuIawDN5WVo5B3qHq0nABOozMAIIb1
8DzaWyxOjRWvf/aMWKmPgyfaYY5bZZs1zQ4Vh+HiM0dKawN143ZLqTCGfEED
SWTNeFlMhIlt0CiXy+A5NF+EgFm/e/Kan5TNgzKW0YpdcHgqahThRD3h0qkZ
cc8tIZ6Mnk9ir4djr6emZy1JsVhXzNxWErQZAE5koANN4e/ihGEGuadBLp6y
qEJ7z7fl1JGe3hOWMRqNvudi5TgOs4iO/thFl5q/sqIAx2+GMgl8U8RTBG7A
IUphOfPYmYYlW9cE2HqSWnWBL0oDZ8osEJPrsKcsHLkmn3o9qkPZi7x5b27A
7/BadUf4fLFklcX9vYtlDDf0L47cZtlb2bW33N8DR00fYaiLC2TE3tHLl6gm
Hfry7PHypnccEpViHC5r0rgAXqRrFlMVfvIjWV9xj+h8+zekSVuPN1DFo6Pr
ivtkRiibNGCaL2cpjL1Lbiy9zgP7gYC4ttRsFetlmvjhx9MKVNs2o5KmhmXM
7gN/sXM/5x1i1rt40b0hkLADZDIVN1tNTiYQI8YW6hW6jXBWrQ5IGrHYMfX5
BJ1ETergIikCWndKfvFRgiC6fFTug+u3c9HjLrsqUP4tFlRXXOZ3Rm60nz23
SXK8bpt9csgyOyxXbtwksOKRs7uWBti2XDZUJ72cDCyiAIup01CvjFq0ne8u
XMa3w8sq7wziBr6A6ZKhQVIQIlm3bzbt/5slr/xb6rvhK41n+4Yrb/XMu4lx
3k1eaZ79P+CCN+YUhieQnUYv60HVC+4+8XXMg1OqLqe0M2DvuD4MTfEfuRXC
BG668lbP/Nlb8c7G8I4p8UwOES+m/93+JqcS7k+dy5m+4G/mdy3KsspLkvL7
xvbP3w5EKpLz/xZX3uKZ6e3Y515LqwTZE443GK8afS9fZ9dqRDKoniwNKecT
A4opMkKYAunXqjbMkuOkO5QUWs/A4Mc1HUEwhzbqyYBYd4W2zxIRARJ94Yhc
mW1wQ64pR5ylidXfZlQLnrCFQUzBJGCx+aKoOHgM1f7R3pk8ROuJy41zyZW7
CvUArQwf8qKEJpCsnUCK6WJNrbVAkA5E6kJNKRwSozvXOQfa8VHa5ztHL1aj
WeeaKoOuftM58+QhQuF3nfgfbOc1TgcYjoWLQYaGBU8abawQ3M5Vr3w08tMd
434Q+lOrzUWwWivEp/l5BacfNPpNgZtYthtbbWouCoszmTlJ0anjmKfF+ToO
URk4TTTRzSfdiRfDhFC5xpkY6qEiKmn3cj9bm2ISBI6PxDt12nvK2Jyqxh89
HY0Cowx7Nvs2eI2eb1EoHZyrN9rAuRyP1bg0nOfEv5tKW/LTtVueRiZ1gqLq
DLyAT4DWUTMeqHYi9OWYEROZyWN0v/QHF3IAZm7kyuIfyAqjRLcp/YauMNxm
jhRYv8H+QG3sPFGfki/aLjXOfM0vXxhtMEzA+rVWZ0CDvLd21pUWjHl83F61
i1OuGDS1uUZ+rGbUwQUm7KxQmBRhRBlMjfhu2+wQk940W5xQ0LQhY8RJm0L2
R9KTZOLMcFV7pYqwXwhOc1NfsPM0ak2IMMJrR0Uvpo6hsfvSXmaj4L9rtb7k
YhcYqkDKb54+fvXixdOXT54+oRO/I1DV4KEJaTo3nMsnIshrsL/9rtL7VISG
MoKDVN4WzskDBJoQ1q8um7raGCevpnTiIwSg4EcJUgILQPngi9XRonNP6TVU
F0DdJhEH3lXyoGIZTqO1Bfy0bw7n4EQjcTqhs6i1OE2hNSLCk6GSx9fjoWVk
529eMRTDDdMXkBVAJNzgEoO918guI1VtxbTbdT5HJ8SeTZYSMCoYNjsKsnjL
rVraPdyh8O9c2cQumhitR59TamursOOrpLRwdCakFV+XxtmibnzipjlI+6IO
fJrXJvcd0NOuwtvwdKEbXHTEkQy0tlK1KXBNBuYvSwHY0eXaVBSJVo7l8OB4
gJaFtkxRpb6CRUnEkd9LuZLXurjLJJ+P9fDMUn4tzRWUOz6iv4mzDslVltD6
yBMWzoZ5pb9yvivXWMaijgQvnT8XfeJkLQk/uoFJyzLSjytglurPfPP6sYPB
hf2tbOY7Cci4NFKyAtaeVlIaypGEuV9AdcZnm2fvC9ho7EMUsl/8eoCp0NUu
7s3KfaTuuAA+boFPOOVWnqlXznymzDLon0hqC/nSpLsjZxYnlGzQ2eEXhxJk
1sqp7YxB6/tqo/5T2e99deb5DkGC8MLvMs5C4x6nNqbkc4U5s8xXgPGXBTqk
YAyW5aKzxdpEFwokEMsC1ol6CVzYP9z62j/dITf7aBQrnRIIBuWsXWzHlG4n
doDDQBLmYAuGD8gXrQ1DXYhTYV4pQqjhbPHHhU5oGbS8kipVgcoLB1la1fqK
kPioJ3YcSzDMG+xz22aPMdj4Giv2ZYc4uSM3eAqW33/w1YPr62sRbr4WnISt
L4oc8zIpCeNKXo8X7m9PTCfylqcxzrHFs4nT0sIYtD8y5H7ZXwefYNiDK0kQ
l+27jdwQ4S8IFJyvqaHwFxC1oDdM6xUW4KMWwggHXueI/PLfBcQcwFRInNBG
4YQUC5vEcPfzDC2W3keOeGrprTj89CloJiJRprB75M8AzKqKpSlkVN+bMo43
uXgrpBWlK9nKqeEa/3J2s4Z9RdpFTvUIhW9Iq4m7haVQw28RkvT86btnSHlY
V3PZ+oixNwLeV1iIwlY5BUq3XWPhbWShYZ7hpIc0+erRw5Pra/j58W9fven/
/Oj+wwcKeeAvHj56CGeNdFmuzFBv0IyltuBcwdmZaGBtHtJo3z5/0h7BO358
8UNyBPeur6nqySb/WG7Kv0r1CtI/OT15kkzZx3U0VoZV3MhWpMxKHDnOzS/Z
jJzBGBzgvFegby4SkigVpc9zjzItp1lJ0N7PemXwLngV3elIJ1mRwGW1FxXC
xES+iGLubp1jv16th1pgRc7aUYar6tTy+5B+qZM5JS0LS8RUyTy836RHE25A
0lDllUeUf+thR3gnPsQNSTzYwZSFLNy+o07w6vW7569env2ANRAd4TL+euWB
2VGh4xlanmMcMT2LqaortcgVcCgqeaEBfoOFo5qicj06s4ww9udGmICOYC5Q
HMV6BW4S9NH93PebjkFqlfOJr/1FnAnjCiffwkpnG/xuAGyxF93Sfr/j2kvs
thzCz6ucSgYN55OcVUvBC1yHRffdmmI5THneBp/niz9KyceT2XDqyjRWzTSv
nGxDUDkW5VbL16stOr+KUab3ZwMolJ/zeLSTadVJwedKwAa8YMKTrsJM12NW
3MDRVTcJArOy57hCTgluBS9HkifAh9KyluRzIms+9Jf7xBQPo1MeZV6v0Bmr
dL+jKECDiRqYUS8VUYiVmuggZaOnMpyksATKsYnXBN4XV4GCyS4bNXA7LVJO
jh/U3TVOLL+GPiUqCOxSw5FjqaPW+8HJK7yrFnziKfdBUEHocBFdH+fUpRpL
TMSjbPwHLrTBx57fY6EdC9YWdZaoslqnlBI+FaHS85Vw+T/m4QV9LF57gBCe
QbzA/u5/vu6nGTmndQrooX5iUy96GPHd1+i42qEUBx076RCuJKkGxO5OCW9K
i8HlRJ2DeBIm3X/x4P71tYBTpaou+3NICfNNvAN8aNTKu29IY59n1ymE4qrS
BySVh0elHIDJPeO3IZ+cWqNdy/WPgy5v5DFL6rFS0F/rY/FSjDWXfDxxi+ct
CEVDKGxvUW+lCHvn8A9hwQwQOWXLT/athPY9mh9iK1Sx2KmoIso6LOjmqhaS
T2OJgo9owLt3LBjNpqZajL3baBcJIIjz93zQ28LzgWWhp4lVXgtYbdMYQRba
vvQXQt1yq1u4Y0xokFnULwZp3ntVdlX5FyzPt2jqttVkg5v4n+iVKRAFUP17
ipiCGsaF/NE4TmP92prPIUOLmNhJRA2gA9XGphQq6aZQrUD7l5JJZNuwKhnc
dpjsFH7Ea4CYgQmMQq8RL39o37TtjsqclIhRbjFdLQwgUThXcgp9JV9slpDc
QG874kxwOi5sgC4bNZOSa6BBL1eGz7hyFCqozanhQYFKQCjBqUBqT7Pfw1nO
OeVxg7tGOFiq3WhyP+YW1rcawq1+JxB43wogFc3mEnroFeXS7jTTA3jg9Kdv
fvzxx5++PdC8bqwvUbZcARppgq6k1ok9UbwkLxS18zo+VnFZcN+NeRFomqyi
bbidEsZ+7I+BqwHTM2+pDLhaqGGEU0pGJ+ODwe3BX2OTnK2wxUDA469OZ2EY
xM0DjHI/rQ/YZwk4BLUjTKwlS8n+jO2OPLuq6+AzA/3GqpmyFMZv4t0Yfjcm
t+nZchpC6VHnc5Q/xDDIuLwiX8Ese8vTwPJXZRdVvUIOVDdgkpJ5a4pISV+5
QdegxsfTHE70ymQ1hL3FrbQclM6Q3JONDE1DXCydUHlzsizyaAkJGf8a9ThD
T2ogExgA3HOkCvKcqi+rikKKtSBoU8UWemXa3pHAkxsYy4NlEcXPhv27uBZt
m+Ext5huGvtFka87rn8W1FcKvW7I1J5XxIYRHBq7vBUrz1f0m/c9dbWpo6Ru
p+USJ5K7uQ4WiN3GAOPJo61V9gtyL7KTKGjFp88IxEer6WSElvlzGNKjQP3E
BWiWO3HWDKUdIpnsR/pbxLHDd8kI4AgwaAozNPzC5g52myegS741oS40FXYP
M+GlrjFimz0z6KWO8WCol2GQVIijGZY+SfDzAA3Q8GURkLxNCmI659wDvD3z
UYiy2vy0IwEQ2GXEM53pmb8qOrsB+hwua48pbP0026i9ShCS1/g4KjHAQ0yN
ZWX0tKBwU6IRJ2xFU+/YPrK4MZKnIdg6veuurIJWY+jj/9uJ9zIPTbI3R1Vw
xZAYjGB4RZtTLKT6ce8YS02xbQ2q4pXQymsMFuRrnFwnpXSd3DMPZbm01fCQ
Lok4LGwVvZKB6+R8uAVZUBauWSXtbYkstr+Ktwk8kF7nVEGcmNNJ2uRhuKBW
SpXCakPnERMSzWbu+wT56s1SYjciNEParr42zqwSBsgczpV69MMdyoYiHMlw
GRfhWlrD1zf48M7KuECfb1lATDoYRVCTgy/WohwOZO9iGB3XWNVwtrArTQ5Q
rwhfFqpOTG7c/IJ8aGtXuZozcwJsCPsacVbuoXkzL2EsqJqxWHVdP03Z5WDD
fbL7JBArceEMQ5HcFp7zTRcaROh8MUl6Agq3GNWpuyKOCxh8kOeNXM35ZjRq
La16VNLgy0Wca024BBY6idje/2viKUnk9Wfjsuk6N3z97ht+7bf8FJnRTU/5
xWNJIsT3/7oXMv8/9oP998Ptb7tvt12NoetukfTwi9bvH7ZC/OsQLf9t8MfR
4JRCqku9jX4JshLMo/iDCMj+bfEDex96b9tLj+nF/mdRjZFAe6+7xfP252VI
KoYrcnC31cRMtqGs9D24ZnfGWeTpkMghWzmm2QHJBlHixmJh6O8mBVJ88xjJ
xwaKZAVr+Y966TqX5XgVawioVraU5DDFrqQ71UDfFkV2eP/IdTtmGUk/uA4b
RlveUH1qa9alOjsG2RISMXat60rTf8HU1qKGMU45QT0dLGRXAYscR4U0NWeH
bksVi++2IWZtQi2AcrRJH7/+HYUXFxzPZJud8/o+BuXeyAgkKdn3ONrW5Lt2
12xJl5NO7bp+XyTW7yV64qhxF5mTVDQ+1pi9uy/SmrU9Vs/oUMIRK44cCWIW
PMOeOFwQvFfleq4NwvpRx+zwwRG3DKjiO8s2SahhyXHKKjY5rqoYsxc3qOu2
z0ui5aLJaEv6Z2CKTqXzAQXVs1ZancxZfjf4ZN5xEQK5OHwYeeQ1nBr644Pr
6jAHKTUlLUgHtjicO2lOufeugVX3ezR0I/dSRQ7iEKnRvtFX9FlgbTCBcNFK
Lfe4Lv/qk/bHPkNr7Ojt+SrEEnrlUzVi22YrJGPRtA3ia7Dsj9BEOt0XS2rb
RF/XqUcCc/e+OuGq3M9928ewXiSbGDpPPVa8zdKddMCUvx3Mjo6yNRwp6ODb
GrqVP8xxnE8tL8s4pd6UM+yVHjQ1LPaeLq5pqPfHie8IwKPg8uHJ0S1L8ZFh
xU/DzUQRUvTGzpgh6nwIRgOyTvF5GQZyt3WeWWXWvs314kL7CPieV4OTvGvO
s8bEgu098GR8oDJ11ZsVlc1zeScH9OcBzZUqoBxNssPFUdQYon9l2BHi/uwh
/N++M+PLXSBvKT5QHkW5duD8/tijJp5SKTScsC2YeeD4yNnPX0FxqLuneehm
OViu5hapLijukfbksF8NO+mRNQNbIZpK0RKDngdICcUlUmr60X4LfKNf16zT
DVXeWlbtDvGv1HoNNY3Dpav+X/qex70ObuoMPgiZilnWW7GVz91F18RUN5LP
ru6ic7H0N5iY4OCCBas1yeawq5flsrtgtucWSGG4EphMPU0QZ2EhiIBzch89
9jyGy4fw6A0OGXYr/EW14duuK4iQI8kwEZQhd9WTZicrifmjAn7bpAfV5aTL
tJS4mV/5RI1Yfcaiy06NF8A6HR6X3euDR0AIL+jShQO+D0sBrMyhTUGDeFp2
9kvXjdRATe0QH3IsrSZBrNsilgboi3Fpgvcnyikuw8pib5VcjVjHoYy0uR53
dCuWLm5sFqvnyuvPKL/MpXcmhhGdR9qF7vr8AQnIh+YeYwA1iUyUH8KgPpxq
6hzZV8SDk2B0nthAsyuMcrX9xQpMohTwc6Lmv+woT0YJipaBUpOimEtTzOu6
I/uKulFRLbirqXhw1afbpjU8Az2WkBymq1vN0nLXXjNo1bZZQKGnnlNw1Pnt
UMK5U47CwEiizNzBAon7Ap51YIZvNU53GnZtXG1JNH+pPOC6RE3F887uVmoz
HdYn8aOFt7TjMaX6BHmWsQruFmkycLw2XEiAeDg2L6CyCr8ns41XYthZL221
8ADrNojgDZVA2u9cSHqADH2LVMwgD5utSqdKKkyKOIpDWGxmmbBftEpUD6FY
Hqlc3iv/P8MCt6lqIbqS+7zeKr7H8fK4TJhg75wjgxcrY10NeMIOx00BqAWR
/FLKgRGfv0oxE/dLzE3CC52K6D1EWuHVQ5x70mjM/pFxdlhWoHcVE6bMRo5R
borRI+Io8Ke4Xq58SCOXC6jSETqxHdNtYxOrG6sDwzVWhkG6kvCt+xkMBFbw
tC88XudkRS/qZhSN+PmEKO6DVjyI9sJh/2wLZUlb1fS2xzr10NtyU/QPRYPc
aTcvaAJ1TdVPCCEXl0Pb06Qi0UlDpuz6gEsDInHH8XbrdsolFeGkGd3Y0dkg
jaPvTlP4qUswmKQBqa3/Idh1oND1Un8iMIsk6mgJkoBPj6YGMUi3mpo00u5c
XKK3OLnKI0cjh3wLXWrIeYLMS4MTHUbsuQgjpRgztMrcmFYJrp3T1KTYk/ii
5WPnSYG6AQYRc6FVsUltMnLUFhEfFzompCAPPtC2fO3xg2T83lfk8brIHKy5
4oOmntCDeAtvIE08kORw1VI+nXR5xh+WQGmge30I4JJqTTLkNBFRpyOJGTUk
DFRT/HSHv7L1PJ/39USE+tRrnEjOTxhoiUPDrPsS2xTRUSVW78LawKnaWIpd
JiQerYWasHRSfNZ84LA6BB0krAOJjTY6dmPdUmrhQywFvuWLbDoiZiMmU7kj
cOt4HPh/x2PdiDfIouOt0C+jzQgeQZyHQvSYhBLZFxP23ojDInlwNRttXCoO
SqzOW2oFvuZCsnMJ6SyqEE84J5mUEhSW5LKgrMfqKiYJC556NZcKVXuKYsRO
Bap7haWl/Fnhap+sOXsdXXD0t55w7KbkY54GQTJ2lpafgVZBtpAbayrrIgt7
rjiavU3rF2dgj9FVOu4tqUfIzLlmWYQqieICZ4Gj2tc1oxatQnHLurprTL7Y
f91TAdJoNMdrBnOSo+qQwg6T1cWoP8Kl5kaKLvecsbEYKGP+q21uORIIC5Gv
VYfwBiwykfgoIh+JU4zUJasagL8/5qpU0RbHs1LLASuR1XFHGO30LlmhOlrZ
0CB9e+LonMC/jDgiWJIgxNLnxsGtcXkZOGfLxRsqV5CdWGSXNN1QnxVAjZR1
P+YyRkELRbQ7v4MT3ci0yWJh2C3xBfo7X1OaFRyLuC+FFl1jgmURN2U9l9Lx
tXjyFRd40CQSEOStKXRm+tirzebw4VpqRZFfq7y9KKUYBFKw0WV6RsegnjOQ
X2lyG4SAPPWqKzel0i7KZrHbcNcBoet3Mftwp9sizMgCoHz00KRP5P9kNlG+
X1LQMg5f1zqNMI3LDgaxcOY3zi1Knel3G3FSOY6reZIJRQZmdJbGx7txmnWm
UkmoV2PoN8IPo5n1Hnha9LVmjNKr3g2GgsLALikornyng4DJrrrWEW27K1iE
5wpzNXlOQclQjVXIZhtKqYsWma9U7HVL6WLy5Guuq/oGJKkqWHwwDTy1q3ED
gBCHcKo4/KCCMklUum0naX2zJJGasumBdltWTDQGrbEp8iqREWiTYThMNfdK
sGbZihrMOU46zSBhkJgHngtV87kV4Y1m57Wb15jezjXNGYxfvy+kHfZgj2/K
nog9AV7A9WTfUOweB/GM05l9SXpY1W0hykO5LzLNFCoSlHli2JbbrmdvB+RE
3Up5MlIENPfFe2axmErkO/d0LoWQi6KRCAORJinRqGXLR5jhRb5FoqjljmAl
qfFMLV5EcS4iF39uFdKQ6ZIKj6ngVIRwXbd9yyk7b/JFIeGXK3tMPkeDDJnF
vFgREEfKlxptuO0DBTz4BiHupCT285BNwxl2crmK5TCfsnG5HAtMjOeAbMlK
LGMtQGBy7x4ZmuUGhJi41W73NPdh5hkq7r7uMVFlJdwzCDapXa+OZd1T8VZF
m/ry1TvfzZ6qxGh+KflTVYQNcbioZUPoNloppOmW++9m6MKEcUDf77aYV+V5
VQssxDmr5SLgMbsO06LER5X02UvaLy+j7Ont/D7I25Peajs9lJy3sEtSHpF8
gVkG2iGRavC5TmJ82ieplpTTEosndMBF2qH0OAuD2VvPz2vOotq2Xb1N7DMm
aX2OqTgbUTmAIBfNFTPKgmpGoDwOlDmCJfOUobIVz2EYVgjR7RaNxmUsKe4V
TMenKu6J1FKwyF8pwQdzGiIvlctAJUd9nJy950VBan2vFKFEwkk5kgwy4e0F
xc42lL6iZzdIXxS9k4oYR2i3fiTCsQpEBwo+B7McyX9LjuxnO+y7BeZMx+FO
1n56NUKwPKJ0GMx90RrxwrqhBwet7ZrdAh+O3NtjmLgqWLnmMJ/wAQML5We6
oh/C5TWf8fYB+X05qvAUn6aKRtBBinEcABHf5CaTxg/RsKh40iDaM7D+XKxI
avfFQWEDwCJHITViwTeYE9Kv2thvSDe77UglVEKj1cxLJ6c4BVNMtLNeifDB
3H0fAORXzuQBfSHJti8tU+TfVTvBhz96qaWmBYz6UcrKla9t+yJiUKT5FM9U
dPA2ckZ4PMEZwmbdmihDKzCE4zBV7LlPArMMxI0ExSDPnLAOHUWB3x8R4UZ4
7OtMo4hW2Omls3x8HZMIAHgOyhpKhQC122uP3FclhpIlsVKM6UQ50CBZn/3L
GiWHbYYxJwB76obF8nSgmk+BrV6x/EycTRBJ8vDyfg/h4HL8ObzBBMmkl61p
NuyuMq1i/2Zv1r3SNrha70ub8tqLDyVKa37IpMEsVpuJvne34W/y9Cv8nLgd
pojrOvQE+Rm/+wY4DA762+yT9K7FX6RLb/jQj4lBZfrIj35UuKun9PfJ7B4/
lv7yD+VbwjClSZqRaUoRm1+ZX/4W/ui2dIGL3FJCRZu6PK8WF3UzRSzWdzpC
ejmcN/q293ZXLudX2Sf32c/ATr29qhZTpVZ8/Lyu10Ve7e0zkqLzQInLqGOv
9h25TklKz4piYelTdSJ5+SxoiZRCZalIFNMQrMLAtvFCbhDTY9i31yt6IhGz
1rX/6g52b/0ZETSfWLAknObnBZc0UZeELEmUoA6S0RDK1S3FDQoGIzNa36oh
DNl5z+Gg1A9HcJMO0BfhQfhlj4+H70/Lb7RYtuSJDfyMPsBxbGIb7OgKfbRM
G+i88o5jCauzrxSveE8Bn/87FI3e8FmtiKpriN/glFP6ppFnNnB0KyrMe2JD
C0e2LJWV7GK8UpwjeK6OmgcQ1uznytwCAEtFSDn6S6k9PtnbNewLp0IG0XC5
glmQX95TagYZoagx9RwNu0Ed5p+gu/gxDekjN+ghXs/Zq98w5cSqxq1Fj2FJ
e6WPwCjP2Awlj8FHoAxnhFIWfyccS4rUfDceZ+rNxkGOvXZpB2tEzuXF1eBZ
D7BA1NXFCRmpkUNubZVWwihxJ1dkZaNXDB4Nuoa2fL109itTRs3tTHcbrZDm
i3vZ2hY0Zdfj9iDpqTowHUOfmO8jcTxQGM51CvL9ECyAQQACpoa3Ta9p8dTA
XBRuFPke2TMppdOkzvbngADYOFSorhWVfTMo5/FPfRZgzwvTv4kLTbH5g54z
9VD1nN6pBfAFaELAf8nF+hD86QtVaZlDrIMqNOMXGbvqfI4blvhUwOFIijLA
kd9ns+4Clz3wlNeKIFG61bSIUD8hgJbbpAi/4GCGlhwwbkYkIfSgTneTZGKK
jUcAo3m+eE/tqAjZhuUJV+LFcVW0WBy0CiRMphDuqqZYlwyVXpFbltxPTgRI
VM0lYKFRO8RkxWpQ39QoUMWZZ8b8ch8zjB63nwnygY9uWR74MBTXizO8wgYU
pWwnobTe3aR3S30bXNJQ73aYJ9LGJPBCBd59kNinQHoCcVkFrPaK034wMVQE
J+9OiKOW6CG+E3SizTZD961Axim/MSKku636zDAVRjMwOoNU1aUcimywcmZc
n+GSBKkxGOwlCpPUIq60V6JzNgcxQPG/OD3zBmWjN8y/n5Kh+YsP9qgV/8kU
P1yT+9Mdb10EKId2n2jjRj/EgoyDfxVdhXHgECfSagV8WyQzr/oNgkM+azFH
YY9ErR3FfrOwsjq9Odgsrw5K27tAK8ykCjRWjSeEUqppnq1ZmwqyhkX1yzYk
Fl8vX72Epp2bZ+FcPkpudVXDVe5zDs3D+w8R9hx20wlq0bs+BLwRpk68Rv/+
SGiT7OTLPx1edN22PT0+PgfGsJvPgLKOm3M4lF1dHS+bfNXhutZz7CQijRuO
GapyfPLlEcXQw5hUx7EHrHo9hO+IijPvLYF9vSelmWct+HXucm6xl6nyewNV
rfsVo8N6xu9CMIF/nGuzZJsTWhDVQOXk2Z4zxuAdzPLhflRNDhpdg81HF61t
NCtEs2FvwUBdMcbO8OIMZSzZYqYTnwCDUYhCunxLX/cIkUiWAouUy4bS3VDB
Ys0hhXqOCvrvGxItAuEomeicQ32QWfhWrhZQK9w+JIBUcxeOrgU9wUzjFjbn
Mfqp7Vj25pF2pQcIhJMGQc7IqpWrNRh0kQ9XmHrOpqqPDvfQTRQbScUpvOsh
6GCVwIIxIMGr6+TgmGbJDsMEoaT4qMk18kPtq/WtlqqlJKXerbPgXVJtlDMm
bRvhoZ2gV9SKO8EkVa3guUigeQaQjaJ6Y/CHdB98OYj1yb5pEQLNlQfGUI+p
rX3Di8n4wId4b850T2mEROWJeVO/L5RECEEUHK2d70cVdhi1Rnq/FCj38hS/
PvdF9qRmw2Q3hcgQpoujV/jNIA9IwOtxLbhlatAVq6pTvuzwsPvQsS5Lz9zB
fJN+CprNX9bEDk4nML2wJXtQ8THccJrSL4l7vOpcYmZnEIIk6M+kJEZPAsEl
3I/XTNP3LEF3rEF2M7UJ+76aeO69D3RIrbbx1FnQw5wg/AUrD2GqU8zAgyTu
fEjZ3KdPEs9GcJ2elsRbbQWLyFfNipFXoKzSFTSlWgy2O2Z3t0E5Rtqfb6Iq
spQWdLPB6BOlAJI1vcoXnPlHy4kAyQ8ymoQyGdhRKZS/CeoTJqrolUlOMx80
19lQvUXmnLF8a6rHYrD5MWCEQbN15RqEBYWYfZo3NUF4+fTd41cvn3GRl7Mt
liAoP2ZnzuvmU3V/DskIYN6UgChE2PWW0dWK2sNu66BjfURerC1rj5I6dDL9
E7dwIIX5Wo7gEzzov3A9tQJaz3b7xTNNzvEzk0NlotmbQnJchqcKli2zzhvY
DkPMqGCEKfrbFuvVVBrLMNJs19WYfMBc1jm6+olULJD4aU1JLgzF9qOmZVoe
ofUUd48l5zpbmmTVqDWKPU8wi0U6iAvSlfK4OL53mh2WR4J3dx2getDyw9Jf
1GsppK5cN8Y2JQiN49jIE693VJyEwqHTViH4Cs3dNuWGuw7kiy5LlUUM2shi
L2OWrhJeBcV8tVuz2uyL2DWKWiZpJ+VjXDPXPQo6p/5huhNxs6ahfuoCFEJZ
Q8KHs45ymUqq4rZmSm0cS+ufkhuT2rl5woKpOnnCYp+X1nTmEIBdac4yiKer
mUxeyq2lCrKkmvr0qZs1VGfD9C5T9eEzD7c6NLUaxeclf0fzp9ND37TZoQmQ
yQw9mAtJPNKNPYUnkkpNxX/pUb2nFU87uDVWUf8Z25JOrHJuDaPkhmmdMAx0
UmnrFyqFWVAxsWAB4i7kPcX3n7i1ZykVPbStQz7WHzwufjgFrXy0jzK4SsVA
s8FPd+T7cMCj0ZPBljnc6cedyjlxy5IatPUK1lfFea0t9YTt+lPP+TVqAthW
qwSv9g7IdHcc44WUZn5l5yrhsJfFeCW1xt9YHibWyqrIO5OaZj2vAy7XwNdq
WmfqC4Iml+m7h3pdptZcu/WQV2xQBMTAZinxMs2Sj2yKwDHU5w61QlhoxfZ0
JSG0kUvXUKcWherieI4UfWvrKDYX1AZc1tx3oHBZq76rAvkesThVMicC9T7J
riVQFXncnAZhbO4YyiK9sLdr53zYO2HhABpH3YNoFTjNQMc951iPMEcp19xQ
L8t5vaucdtrfxX5BqrKTupTJ67lstNPjk2/tM04as9QkTx9UX2vRO2OFYLm3
DhUJYwEsTtjSdYb0VDWU3OoYSISYGtpFn/U6cD7YiHApRYlkZhklSSWLp+6p
EEomN4693p/GI7RkXdQmHzYnhLdxV0uWpiPQvbm/uH2/oEGXmpWuVqZpaeV6
T/T6WY3ICThM2mbNY1ya95MaWoH1qhi0sCK7dho0pO2bbFqcgH2TSms6rlA7
FfpNJBoPjD9tCieOjgt7EWCeIr4KDG0kQ4wDYtTvj9CN66LAzGHuh83Nz67E
CPtO+mFxVJOuZkQEOv2zMxBSggoo4Es6sGi/oJ3C9oFEGiOJ38L7ERzpOsQI
UBE92jPXwo8N94SKweXysxdcRTtKEAgKA/dKfKdXd5Y9RSHgOk7BcC5JAqL0
x4/z+qMDGJQbKkfPWKGq1uwaScEO5awkm1OQQk06CxEmXHC1XzpQng57DUSb
3xSNS/9jxmT0poA59+0cUs79MXdJXz1oDAPPGqoJn2GTYq6/T3lKErNb2lZu
y2JbqosA1Ew0OQccZFKpveD4DSXJaWeXrPdvpv8Sv50K8OI09ZvclvqNAIbR
9+kduOXNN32f6Hwym2aJ/0vM8m9ek0k9/2+Z+vWHft43urvJUQw1OAkfwMLn
uCcHfvna3LDpRHk3bPpNvTaUeQhTSHEZxIe8WrHwwYMWdrdy/ZniRtOkIr91
CVLZQZqyDjhEwf06EtA0/C4ssixS9SAh9LlwcW8nDlidRmnkmljGmuFZhL7z
vdNZPwp9OUE11IiVYBFrbJzuSjgHVVYRHVEmYoqm5jWKxB35mEPbdS523X60
YqgjDda9Vn+IHCmuclXESm3eyz7ExdKivE+DxvRpEfXpjrtKfpd0zr28nsRs
22PoyutJQ1E2mup9+Q9Hmuy1ZVT/oyOgoBO5Ras4KliwVS1sLWAerCCbkY0c
GDUEWRGYMqb06lODak74UDQ/1cfjtN0ZN3dPalRI7b5GbuALlXbtWrnUGzhD
LqWoeKUPz91Sa7vJs4+EQzNeILh8W5eouunkdRmDdxjQa9oed4OQS9CdZLpv
c0mW4b0Wz4uv3RoPz1eO5xz0VDkDwrfBlNvV1X7KcrUOyo7satQutQO4dIJm
xD1YggMV4lzpzKDCNeoPrbQC6qGwXecYTMJK0pAeTBcVLhZrjqiuArdU7Hn3
7ZZ2lXJI6ZatBcgU/bkpCldJxBsJN+iMMq6bgJ83mrP/adkmHwcUsuyT7EOQ
bTmFGVbbXZSvCt9+Rnasu+emBFl3YS9H1j/idmmy7vpEpuyeZFmb/Dm93Jcv
uz9lNnpO+1lZs/sSZ20CKTz4s3Jn3XDS6bP2il4GbfJ3t/OpJNrojlvn0dqb
bkiltWuFqzyUTRvP30Ei3T/9pk+x7WL7XWb/wSHtTvHrMJmq3nXmlGS3A1mL
Cj1wHpVVHGRe4bHy6w+wGoS6vu73bGfRwKruHi2ZeNXGu2vaPhrV98l5MPty
Jv4DKYz/RDq7o0Cg0iPY5EohK+LaweYmuNb4tqJp6ubGBL30eKcsSab0jCmW
5eMZENOjym7/JI460tNGbx1gpv3RjvTcZkgXn3mXu4+3KaRIocuID5qbmAVO
pa7fFHTrLmS/7oZnpKVlX5x+xi4kjc9gZ4LcgL0ZBj/d+rU/HcQZB86GMICU
lP0gtkK68qKCidg725FveVGsNZnlIwOgh/yImBmYh33P9nqKHVjRt1Hx1kmv
fhi7TZetR3+whpQKJ50a1yhJaqPD+XJVPrrWdyfdOPZOq7xSrTrngo61w9si
bLI40ENcDOM8FJ9Sk4udyBLW6WmiyZRPV00S9UICgKCkuGjqipG5pO3i4hpk
jaAXnXJ8YeEyMejZpaVooKGWJUwYu7H1wJtj9GYGcUo4Ay+jeIOjS8Vqt5qK
fcskw6h0+ECZh2tT8od2HM6ABo0IRXpZtq67mVCfy0jX1NeDXfW+QtduKG7o
7KriP7tV7ZnkGf1PVp4TY7qd5pzFmnNfX470gtSrjFJAfK4Y0giQE/5buV7f
yAgT0aaQ5JQV5kLfE4/vUELgasa9uNZEcUzlPGoJcGW6q6eY6cQzrF5HCWl0
wf4KPkw1V1BLop0GIq2OyNLzF2/WnkDX7dja/8/UPFP7J7KrWzCXwX3/T2Mt
vRHFjCXrM5bs5zCW/osMW0GmsY+pIHN4xqpk61Hcly7SiLjrckUlEtAHRZXQ
V1fUmYf1f+lGgEey4GoI2C6r4AwNjcvtKl8JLSZQNiqo/CM17h3ZIt14LDFy
JUFsZ3Zo1Jk6XbvOYVyYhC4YmTT3IBXBnEv/NHOxJYRRUOWXq6liAYG8xfxH
f7sdsWsAyXCFUdTAGb2vTvH0Pc8IpUpP9AUbXZbAiFliiweDOIGg4rNDj4jH
Ffrjm2ePv7z/4ORPR6hOvHn6lq4aHarR99XsRC/7+t6De386cvUq/UvdYqm3
jYzpYhTq74ptFBKw3J2OKkcuV/aojTTf9q7ks3qYMroNuVFCu1vLXsO6Y8us
AjuKI7EF9G0oj4dHmyXkFtJH2C51WVATQ2p/9u+UMSePIhkIFD6iCqO+yTXF
GigBVDRyRHb9L/dvNBQPdWeZ0bxx3C/R9h7+uZvSP8N96KmY7iofMAr/iWmI
p23LB3LkvSH2a2tpmv6qU1fcfZR6WPCuqp4iecYzG3jcKEuqWuZfKjz6c5cp
Nbabhm42dfROklj0oE3nOSoZJqMlr2I6c5XNsO74KJ/XWCAdn0Jem9QrD3qk
ul7vELbDhWhHnKP95YN7GE8SW/7kHmshHFisqWsYAn4UVO4YSlk5WjenouB6
su3Idupy0s4kDkSH1yXLg9C5QDHnvQGGdTAkS/z0AY83XnvWXkZBT5c+F+U0
+rrg4OkK8UJY3lY552g/50zxNa6LcjL7DF/IKUdc49a+JKmdQkrt3Q/Yk3OQ
bevtjqsYl6ssYkhUnwk1HJgSPYNzQtc5xsOKdVswuFd2xDMt/I+LY7J1Rrfv
dQVa+WgnwbUx2Kl0wfiwivvs1ZRxRYW7QuFoO7sB9d2HJUxwtf8Prl9iFrda
PF44esbnLt4XsyQu4Rar5laM3vvzVo1WjO7/Bav2ubAKt5hYRSR7U8+Bx1Wg
bIECRcWACC3O+OQAGPCCM6fIo3nH3kiXmntHoxhvZmqPUW28XHusLqUGnSDM
OuKH2JmBWJl+7/oi4FMloydIrRdzElTF8pxWiNjnawzM/4CBeeksL7hCqkTD
JRgcNJxsFl/uZrXOsZRSGq/s6vSZxNL9FXMmRHYKQcZB4rspV1lL+zKcRyND
tmMD19TxvfIqsC93AqnTvkatXV4xRIEZrYuAieOSaf4byYOioR8JRoDgaW0S
lYSour9aUpqlvhRPgwclKjSqG1kttcA8AQdFXzgBjPLqYI+ldKE2qcM6hewA
NY66YV8B12YXGCyWmdxbwoGObb98G78DdWWbxWPrrg02TnsevnqgWocx9smp
ECTYq0848fRnpjhNnOwYm25iI5pnB0n9g30iJf1V0x8vghwBzMsPK9Jc5q4F
IKwXUy6V6FjXbXtFGoskxoTDo65fYPCvqcKYplXq7pe88d8RZuUSrUMHb6bu
NfV77CHzvjAdHOYW/kJqDiNuyOy147YtQOnRUmpIZEWQ+plXQaNKfJTwh8CH
UlRg29ZbakEpSg2W8XkGU7BelKeso6LK2IcOEYcKUyHEJUI1+mr4CY7rQgFE
KDyoMqcW0ppWu80cOxRT6cNMC5QhP8D3UGsVV0cFe8DisJfTrp5q/fJsW24L
SnVvt3lFoUR3NvzRvcDdYvwTAkIWnOalAZF8ixVWm5LQhWVXnmung8Ld1eXv
CyVm0dpZGV+JGs0unefTJzPKOqo29XYqKbbTvKo3+fpqmjfAxvHtcIcENfwO
R0vCxuiuKuFbeCOikHuJdEFVRec69/sNs+pqYMToCaF6t7bpuP5oOiUKs/Il
9biCwbvHr/F8ff/u3WviVL7onsnKFV0dFqa+MuWhYsnJqy/9OuCwoR7dRYoC
K+AkY7WPtg6FqFgmmpXLsV91LgfFa190eKSmuyVsAdLm9XV2KGVGV+VHAz3D
vUW/ACw3i0UnzJWTO8N4PD4iIULWkfQJisoykoe5Vz2XE7g9bC0Cdg7mQ9jO
KJQIpQ712iNVB6NqDJlf5BKGw59ccUSY/o5xppzi2XPXtpJQ4ayl/R3b+CEJ
iCtCATIm7ufIA6v3qhCR9PvIKRs7FOLrHbYyF7ylFvxhEYvsGv1c74tii6PK
G8qTymHnOq0tXFYsvDgLBEGlUr87xvZqYU6pYe0bIJBWJdVeUfeefyh1XQmj
itu0rSlcEjS6R8mzZHsURAvmZPAY4KWUlp9ZiD8da9yUpvC1AntQuSHl8orX
Ae1wn9seBoWXboKa+y1Z5FjwE9TOK2kpqVdx5qvr2iKtZFgj4LzhS0TCTWKi
pWygsttxjihwkg0WdtMJSY+nYYP9wqotpM7ogLbFjc3/ULvTUKM0AQ2eSEJ5
NHpZX9rqNBbEkqx9mktGDkMofdlq47gE4b4qWbHbN0BUd1OtoGAvlqwBa4It
eUPO63qJ5lB3EYsXfMCHer3jxEFPq9xEQ1CMa4TCSfUe0GrghG5ZpcS7CUGP
1dTxYlz+gqu2Xog6S5l4pKzqBsCAmnxboppG7vXSF113uWDwIFiRjTyUtXsN
iNDBYrISC4Do6ZnmRxo2B+u93tHCDPmGqOgn1rIx1UvNtsnmmyoXNqREiagk
pq5I3FAAoezIe7mrCIGNCaXdTquk+m5eFF/QXSe+s3fL6V2H94+UwKNsKO+Z
8Jz7/2XvTdvbOK604e/8Ff3A1xUuA3DRZot2rKElOWEea4lIR87r8Ycm0CA7
AtCYbkAUI+u/P3XWOlVdDYCSnGTmDWauWAS6az116qz3aZbNPJUYYCpKAkPT
EH2JvWYsV/GmjfMh5y3mguZJnEwh24y7I896EOk9oOdIw8YvKG5Ov4/0PskY
a9zlXgq8SVRlgmYD4NSBhAlwRAScQRlMkm5g6lkyprYJJLu7f3S0f7Qfxqxx
Hh2HreUaXZC4UDUZcDkDYXty47XzyHOy/mjH2VkS3IsMEveJPTfU4xwlCxUB
OGfZ5xPIqPMMC1TINTrAm6dpVbsgRC6QmUDZRghyA3FcXNb5qPA6r5SFkEN1
sSwBP939C90zD+4+/AWcl42eNmSOJQNtgSzGZmh3uxb15CZwJ1nYNFk7EaT5
qKGnpYzSHbQiJ/hsyw3UTHQ0ET01qZe6FMldVpEUPU5PdmM0OZklH5Wohhxq
ZJdOSIAE0XKIFjKuxM5l4jiGrNusxJq0BkeAIR0TYpR7swyrfw/UZLSn3uRa
6wg3iaZEATNLgd6x1HJ2wBCQcoGZ9YDBzejGXQM7CF4N/tpD54RmJ92Qa4uL
uUotPC2D7aS9itiCPhsUvXoNG5U3nZuMb+iAx+ocUXgjxArVlwHq9DKvR3jY
3K67UYoxxg60XTJcltJWPsWOipFT7p+gCUEyl8hRDYKLAaN3+9R0Y11gje7z
JJm0jI5TJS6c7ZVjBY4PxKDGphKnB7+v0EI4MTZJeAdRrwSx2MDTyhKYIuwS
sFAw90ELCWMd2aEDyfTZNtcgSoxxcquloy6LMeR9LKeAtfT3gtmGqfjh+wNa
0IABxOMAibMEQZuqofM1yECMPA0SPgQQjR2wS6zawlJSPoWrH5ZPhRnEwAI9
Y1RBvrCvvUrvZKSNqyuMIkiiiiKkccfFIHFLl42UlECRQ54LSCXxjBOtwDsA
Aqmfq8gesrGTKtcgzMQmq/okpKprCEYj3kcSHoaOV6KJhslHTgrauyISZKBT
yDnEAcDzDFcW2GOvvYGLC3j4mVjlMBsAWBoNDASXGrLgUczA6ecYotSoDx/0
xv0tShqPBKc1nJegBZh9EDvKiX2wExOvdevF5JrPZBt5S/CLLDqqP99WvJIS
pW6s0W95StYzuYAMt49WMk7oZ5eAE6AK9xysKG8/eWo6ANIHOIJeC/TflrQI
VTmMxZqhlQsWPQWxh7wCu2VQa19VRTmqVgzQJWiLT66VHgLH9vpZr5zJP0EQ
dV3Syvf20VuOQgiAttG6QXEIXNYAnr+M4cSsxge1l72kr/ENrY3jdR6Xrjt5
AUcKZDLADgfcYU8q/gJKAUn5nj1wzVkTuYLF2gVZJqqYgKIaZsQEfRbvaBVu
268uCWYGt6p97WedTZs2ndJwgZIhCXN45i4qCNqlyE0QT+qKwCPgvgvtWMh2
yTyy2uLvN6UWGCzVz+IzokgSgHPh6GUpoZVMR9kO2GBBTXS0wBENX4Gh7uAg
OweTLVt6ZoyCxoFXNlu37+8e72+LrzeE6W1IC+5ix54FW8bM7NIDbqRawnos
dJSCk+qbNOHUotWgXVrwKfoeOBtMXyiogqSq6ffZ43yeD41zc5zXkcLCKZSx
QuVToEkdoS5FTZVfrznc38ADFZAF+ZrnVdVkH23jPF1oSQCRuFm5wLRNxv8h
2tR1F/cnKMBV7QPb2kxW5BlKZst2NE8MRiTOpd2+uBMhbU1NAV68k6xi93ox
4HNLTzdaAqgBQw3KSMY+ypDvAyfKSHcN9+aFEaQwvsD8dSVZgQLux8Y6b+tb
kH9JeAH7k+0yJbD/vLUfWK5eO9w4QQWM2kIkkjSeJTlJ+KS7UZfkdKnalU+o
wIf1zz62aGrvvzA/n8xG9kfO2J+R5xfMVmguju1D+QTq2d4ENxJs3Bxzi8VU
I7iCuCpTEGmq2jjgtCi2OLfIK1+CCB6xhbB+tkIjLEk3xfCqO0dHDz98cMLj
7HIJ3hg0xHNtcxjTku2MpuaMlCkPbd/k8LAuG7dk7/0fhAmQY+FuvAlN/e7l
bEj/dOcd0PfQsOnXpGyiRUFtkFP9UaCWeQLsTDUV0aMxT1FzfH7Npbe4qqvl
5ZVdF1zEH8oLjOY3dUKkQIVIlihrgWxuNsQETZOUbHH+ICzru+WCTsFF7UgU
jgE48+CCz0eVx/ttTbmkSjBU4k1GgO4jkp4DWL8gdttj2KHzyU3n4dHDB1Cp
pXJy+xuDGXgTBi+oDJLjrTYbOd2U4+TUIBZfPIT2aI/G1tZLH8fAdjFdsY1n
0Q8RyHUS/uSHZWs2a2Y9LuIu0yxV+2s6x8rWrO5B8Gaotzn4cWEKsKPCuLiZ
U73PyJ4Ac/XHi03q1oKQgxuAU5fw3sMNTIvxyD20eAfwbplGM7wqppzLKk7c
zl3itSHK7V4AR8DUFwZIt9IGaH2OO7vZ8kWGU79lrbrTwRN72c/6wy/0eLtS
tX4vWemDb7MDGOCkvDhGEpkQUzjQVw4UFyCoyDwAl0c8AN+vDnYHn2sKjjza
fWQf+ZWT5s0zFSf++ye0qeCpuB0b+psPp8f4sIBMD3wuZXuEN/PJMD9OGNm2
wrbt0yKlDAKrw0CFpkfRu/IP+7g8nexmh/rhCDDqbjfRKi4fPetEs3K6nA7C
d9qv/BpOJfmapisvnR56987KfnXSa3uOFrHjxb0VPdvXVWzsXnaliM5l34gE
Pm7zN9r2jTb8Vlv9iZt8y+39xI3deEtvt5jUml4jNt89+YDnYzeOi/mvJSDn
lyhjPt2IxvZk6dz+9rtObVnW7il99dHm72rKB4kzvLib1gVGgUEvv86Lj1Cf
8cKbJC48vhfZ5upLB0tQH5o5jRQc1pbjdMyfT6m43FefVFzuq10qFxI6gpw6
swAZ7Ixu+1O+Boh4trZwFZ6R2HLGyZjl3/nHc5YdU5p3E6DZg6qnxT8hkdrb
L4zuiENoKGKPYW69aqbJDPwU+kJUOrUJHHxBa9oibo65uffhD8IECaVJqQQY
Yr6VTVDPIhy99GVlZsFnBsgW8jxHMUZkR0O1gbUE8IUAaCbamkRR6HMC2dtS
ohRzrV8AJZQAD9SpOTvl2Ngi4nWL1L9dG9cwX9bzSnLfg+loUEDOIChZz64g
86DIc046Py5EE2++urOlBwgM43r1EswLEUg5DCeyt4CEa+C4uZgLOmCA+lBp
00gQsvWAkSLeRwyYAZ3WtEWjBRVmrMK5L3SjUVJSPFq6IRcd5kmq3BhWvY0d
SX7YvnBnbGYG2EgE7tZAHJbAGQKslEpjPERWeyrjgUCtlmolO9K+LOp5Xc4S
pUG45UQxHwEPD2EQkXM4XlG3jI745xOwBT1Dp9v7LwLpH6gGc2wTuPbIXN9/
IY8iZhT7+MzysZ2XotPhDUIl8lw5gZW/D6FUi4L3gl/QyEDxvDUG3z+sXhYV
LYJllociawr7C+aki3X6gCWXPKpiinGOroGJ27MF5rH5MZArijgPU6uNuV6t
O/GaQLBuPR82x/8GSvs3UNq/gdL+NYDSZMy/LeyK7+W3Q2DYClUNw2ZmyTsl
XLQyzKTuWCl9/BYsh006a/gNPdViNpE9aDWnYc20zWayDh5ju17BYLJu7mJb
uB1rybr4iu62a/JWTIVeSXMUbbHFToI1WM9L7OMbMxLtfQ0XsVNfyUISVO3D
wLoodQ2F+hOwkvI5ezVBhDSoZGbNP3dIRBJx022Iv5WdAK0NwNtbvtM3U0e4
meVzJyguBmAw5ycLxPklPTV4mHVj2sC1ZGQJHMy3xC0GMLJfWmzA/NgeasBZ
zELouQ27lFhou2SQXXjTWmRNfjW8fC1I53qDRyTmswkAMXNekDwNxoy0YC+a
QAoriAV80c2nnIflds5p4xyKj8r4g4cPj8C1Q5r53Xt37R/ml/t3HooHSH69
g0r86SIzFeapzTvy5k8vT87/CClWvZ+e/ZC9hC37gb2f2c5P8Pdu9hfKsMoc
9+vtcndfHt576Pu+c9//QWXD/B9Hwai+vH/vkLGzIh1ggyXgM1ZyDtDWzzzN
X7zjq9e8O9aMyB55CKmikrb21ZfQ2r66dtcujh2+1ERTnWMrsK7w7r/fYhTR
t7p0R1+DlOD4TDPPh26cy3p2DO8coweqOX43nRw7yQGPoG2rB+/R4Qdz3tcg
bNBSUZcgiQ3IQ/aecvnpWfj+a/xC58cHo+fmkcGSHmcEW29013NoCLv8EPUj
eXn5cBp2BD6UFR0BkR5nz7le6eMACP6EQpMec2gSHpdk57iWuq0DCCcIxtC8
WzWC+3fuH5s5nkk72VOhjvSUsdfE0sL3n3NpVcaK+hk1q9f1jl/XZ/nMnVh0
Ij9RO+KJyVjNdp4/e3Kyy/27/6nqy1wtmNjq6dPz7z2WVHLHdrPX7jtQGv5Q
V8s5toZO3CFJjr3Xf8heFxfHjp2zgRbm5nT54ZuixtzafdfvwfXlAZPTAbH7
7DXEGDSL4+ybaQ5G3GP+/T/lnW8Zx/ZkuXCCj+vgVXVRuAV8jSbfyPgtjdRk
EP7PIcgDYCP+FkdsBGIateXE6pPGnQvCDhq9EAYvpepCn7rOBQsNIgvk0HMI
i3/hZ9y4B/eOftEE3n2eF1jo3kCWIAYCbgPcx3af/ps9f4H/fvX0zz+evnr6
BP599seTH37Qf1AT/BhFFfh/+dcfv3j27OnzJ9SC+zYLvqJGtp+d/HWbGN62
lHTcTsTu1IVaDhdgXSsotI8aCdDzvnv8Mju6l+3A3CG+Zpf++dXRl/d2MfCM
esN8BvyT2qA4f4yfxQAZBFqblwvHstEfQLWmIGBUlvBxNb9xovfVItsZ7mZ3
Du/cz5Ckz2uIGpILwgnamEZool5k2DnSloYeAZIYIwZis2iYdDITZqfiC68K
J2k66eZiqZlkEDUDeTQYQkawFk40rrFK2LTh4pgV+5aDGr+atFUyzCbGqs+X
dbMkwAMu2ri8IPTvStfJEaLTFxpJfrKwhmTSfgU2dff3d2dP3DGjZxtW9mBg
4LnxOVz39oeyBH79tpvsh+Iyn2QvwSKOPFPWYJILxjE+/oRphH9XT80CmikK
zwV41Ahzs+vPgU/p1ninQEzwOXFARj+5T9TR9fX1fj0eDtzmODaIXUEXB+47
eHr3a8XhggbKBRTm1qUg++oEp0qJRM1+Dy9dcUwgZQ0Ovxoc3mV2HfMT4KWY
JDrRl/Z7HawcRnQcCZmeSR/swXN72fdPT85/fPX0DP86gF+kWKrkqHSOBBfU
l1YNAsvlZTWF4tmu1JcY5ZU3/nv2suz7oUoXPkTzo4bkX2c1OjYhyxjyulg5
DjEJ3HYU1hhOVwA35GOku/YSL/873eLOS/H67vAtu9uPLi73kVP4oD0lMkl8
yoRQoN9gJhvpAjL24OBd38UDd/7q4Ojhw4cH7oYZ4LAH8OfR0dGD3TZ1nz55
+vz89PxU6Rt+Yg8sCfsVQboB/wtRUAiukY6EaOApcyIhanWv3XcIQCANSJSX
5EqPEbTg+qqE8D9CtyGOJ0sgGaiMwZFn24kxbNsSM5iWLa9vt0yTwbOGunWI
Hah1/5hp5rNsOz2AtePuMBwN2JDykSMHOxlV74KyXcsZkj66BHWNPcKgTare
7hiPlvILvH+J+bQgOGkGgBC5co++7j7FRQhM4pPZp7ljKclKSyhJyJDndVkB
gMXfJTfee+Qx5wZqlhIUEYfrM5I028pgWJSKywg45Isr02SYQhP91CX4cRai
zXbMWWLuiwYQypVGcbKpsSqCaXKzVhNm51hftWqYqXsV0SklAWta5LPGJPWY
29QWl8+lFUW89HVQq5pSTQjnQPcqwHlpw7SvXInPt2ePKXPEnSxYyxsngb7T
2hXYmywEFyqR4HO04/BUcnmRuBihA9A3AHxB9r13rHdwKIJHVhbq10CZxMTT
cLSf+cxuhrwThaMRCAqyzUjiARVkpmCzU1RwLiixRBduMqmI40FiJ+RZuuWa
lE6FICaoebHmvHDgTYrP+QJuiSVMgumaBey8fL/+nGct6D04JnrgKBwcAqT8
QRNA6dxNY4aPY9Kjbez0CehZ7j8ZQ0lBDHljLkFNR9OgHsFYce9ICkoy/CF5
HxJM6udlSs9trtYFNkqJhtRbyJOI8mRlZZb2eYXHCvIwg1ULz6BmLiYFAIGH
QAcDqL+fPuFzg1SB2wvINiUVS1B8k/hUnSeYBoZjFXB0ZklERDQ9AA7NuyHi
VHniwhA0PHO8OjLN1CIo54XVHDBM0GdYhhV8CHPN+EL3tWYJbctQN9TvDKGL
hHmMIkmC8bbGVpBNbHxbkheZoSW327CegYYndOvY4wDg04j/NWZpMmBm2ehP
VFMDqN6zXQopa0Uu0aGRkYY8GChMGkg+77k0ldMwxE8I/vzyNsk3g+FFVW9D
thb+PLMrArFPy0YJdTu5RttElQ0Sj5zua8ZfQAB+lRZSta08aH72p7MXz9k+
d+f+w11TRDdYsbRAduHx9yW5zinAQ4D6+g6NYNLGCzJhvZJ8foaYefzdi1ds
HQT3EoZoMsTQqADgTqQfz4dv1DzbsQ2KYlC8m08gtxYFYJ2JrwMgZk0Cdq+k
YrU1/mpNbfmvwB9MwEK5nHuAA0RZbNjuC3Py7HWV5QAW/BjtwH9yjPYMd0dW
yjF0XiPYoF208bdNB6dgimXryfd4UuUZWdLjaENW7sQKcX9TPY1ycBnzhSrq
6ZFKNP+3JpQl5OFOhveU9ANsmUILkYDjMoc4/Yf3j1ZabuCBY3r/qUzTnXQf
0img27CvicG/m04+cexgdekY+uG6oR8S6aDF6mj/yAwbWhYzTmLYwHs+cdxI
46mBP7xz776auMTYTe/gQM9OnzSr5gXvH2+wG6xpSE+3oPEUFcKKDJpy1PyW
pNg36yDjhuVYuc//gPXQcpHY3/2H4jmVtIhF4cTBJ1pucEf2cXfllW/SNKM7
3zPhTpZyYi5EvH2UpZDwaiDPgvqkKtzlVMpntYqz5e2R5399+fTJ0+/xmqbh
ckwChafxSOE7jm3hbwCHf3bpHugd7e9P83e8lR86J0ZtqKVZchAZGtl1Zbmk
jCHiwdiECT7SsSTItnMkZ5wV3TCsqr4nmeyk11CFj7RGI8NrxVVttlwP7vFq
uW04YNzZsqG65SDzikWIJGy6a6vswT3IAajzIUCSUCzbh6x7ud2tXDux0Cnj
I6cY4ODaGITr5lSO7IwoRa2TK5gtDrMcNMs0tcXxoVi9x/r0xpu8CBCbtTBA
EZvX5ZCoxBTA0si4eb8sFJTkjuCGNQvwbDeE8o6pJMS84EX+wMYM8Cc3FHij
2bfrYaMhb7X4HFUJfsQSygo62b9Zshy4nJUEqXC4f3jEcD6pzQh1MejWjMCE
1+mmwHfWBCDfp8bI44yRIxmFmFD5EZsN4ztQrrZyX4j1pCfogx1J6CH8bMMA
Q78dyryGkwmKVzyOToI8lSx/pEdYzijHf91uMP7aJvvBgFXrV+G8hQ8LTPH6
qiLfc6C5c9LjojENCJKWxwfr2Bd3GSOC4UcMqVSvXjAK6du860fBJS8WYszx
6DEehB7LD9zYyehPClGYnsynTIXeBWxzQqOhOAestWJjePkDY7SJQkGpCP2c
tAillctFYDJoG0Fc5yZcuRQ6rUS8sHoI2FY+8lAGYttAD4uAfadwSzW11Yhr
8AlDyTMFRbj12WoU2W5JELHBjNq+2D+8evHjy9PnfzChBpcQ6oU5fs1wvsb9
7J9lobfJ/lydBZYjQC4qqGy88rKWZQ7hLY21qUEpjkh0Ul27JcE6A3rwAiEz
9oARUIjjYgiKwyuIiHhmRnLLSmKLrLNjOjlYjXuHPf9Vm7aRssW0HjjO7Ihu
MqxJadCUg33Xp9A2P+swszjZLJ83Swm7sQ0Y7LfYcil9JsZUGv7VOHHK1Anx
IKpIO4qPErFoIsQPAbWwk2l4VQGE2sZkA5nIjd4IBPvCQB6kSzBYue58VAxA
BsT9sjtN9pjwyKsaFI9lsXZDh5wUzq2EIERjD4uu7m4VbB1xGV1ByQsViK/1
u/RwVtzQTuBzV/ncR3FktuqKYzejYV4Tdm7xrp9VATcal+/g7s4nS5JIVTRz
tIGYnHTggCxBoGtxeo7Qj0Jr4FOOBxJ40jNZN72PnilShcfmUXGZ0dmpGJnQ
eXA9YO6BSaZHE5Tjo+7c7ZvxxPo19vpZAnjgEwbx2DVEyngXkUa8fPi7GSyR
js1C+lwL6+v9zDg4qHgHynVjlJQbyd6Q0bR3YPWyBzfzKb1gupGKvznC9gDv
w+o+XCkhNGXAR56iELCCyhRIvr86m01F+7JFJaZ39ZLQMIJR+Abty+JupK7R
Do1DDed5Hk4ygMAUx3glNYxw6SPBHkzJx0GTlSCPog/T5xIA9GNe5xKlR6yf
HqJI8ohIMYxK357nJXNWLQwlkG0Gyy1qglcbw2Hrvi23xdkHjcdSoNaiBlD5
FtHJDwbEQY9HEXoV+bOtT2+TCDY1COhh7nv44qlB4C0b6/X46dkPTHLSdPRq
uMIAG1DNtWTKNvtwKc6N6GU7agA7ZaRiQuwYcbGaRWJHV/S+j/PIZZ0pZIsn
D/Zje5fTZjPKYgQVv5KIYq4W7ZHtDa0H+yvIFMo2o5ZyUc7I6wdrDxlcybcE
/dADijQY+FFjALNGZtfxGrXeE9rikEf+2WKdRC0Izz46DOzuqUHy6SROwaRe
VxV/EbDEeCtjMQU+ybvoViGY8LllGKZ99VY+hDVX3tFhQkUJJUOBeqom5fDm
9goFSbbNhaplrFhReyKE+XIMkS4l126H0Fc25lXfKddsoCjDhmzOFItlZOcE
dK1K7XDo1ZXuJUXflxbf9HIBnVnIFvPhvKZKZ0uT655YKrDQhxvFlRp9YaZg
rzV2zcO+LAx2OAqWKhFEQIL8aTF3r9rK1W1mQmI02fDem3ZQHrJGwa/Nj10C
UdfCuKV5IgIeGwoZzYQga6gE/IUTCLG+MK9TdAigFI+kx/bXWBfp8yGcpUno
bk+1nZe72bSwIC1TDbzlrsvpXGCZ4MIfL4SKwTDgplbE10c19vRmJ4n07HGe
GWNo5rhi1ACfA7SEIEwR1hrOCNYey3XBfaKLXpp4LdlQqQhJkT1EDloNddus
3PZ+9GpQkYuQa8IXtFO4rTiqOL78qjn37KG93ZyXC5Jfcg88zeW6bHiITAGf
75sCbxR5izeylFCkfgAb+yb5umBHofUvZUJLkdeHFp+JEzTgYxUQ/d20lmRE
M9PU52RFibJwERsS7mMgqpj5pHC4UVUI6drwoDzJgcLDGQAitI8nwyOEZ5Kt
RsCDehud1tdabJYsHEKVbkW2x/mkKbb7hJWPgaTuNoPCGnkkxaR3hE6LVDPY
NoXEIjk1rKmkldHc8xycDMlRfr0ShsssqrQWrW0mCY0IEw/223Foo8jaBA7K
HCQHKufBKoi89+G7O+V+gbjb7vHtdnm07XCCu+HLpE4iXhruhSw+bOF2tkOx
s7StUrYr1v8tVto4HwLuIJWjEUKGkgghemDUQm4r+hEJzJwmCg6XPNy5sNRb
2IqUdGqVtKkXGMs2FstR9N76NaNyKlCNoiGjPY4vbGU5w6JNIfye47lVU3CZ
UFiD1vjCRmjGED3XPetuhtcWOgN/wJCSsztFT07edhSwQJVFYffZPCrSgPjW
3EmRgXRBnylXQY5iHOPiGo/95jK125osqcg3AxeOvJe7ZRA2mg2KvXg0L7Rs
cT6soeAaCL7hRDK1igWGochXQqjbrOezDiqAlrksXIfszG4TkhTw3CXCFvFC
HwZDKAUgzhQmU/u0X3yzdtEehOEJQYDC0eFhrNl07MKLORw+0A99jWolC/jL
B8cV0wsKMvZzqJyaAkOnBAgONWe7s6kAkDTBR4oPG+VWKjynoWWV85axxpYB
v78EG+FCJMWOXdMqF1g2kiq9SPVJM4PInscXdNSjeFJYzMP6rjAyf+JpJ/We
j+zsqWAJ+FCKQuMBnFMCuV7e7kED6b9ervHQCzhuU4eELKFcbI3bt0kFuPOJ
rj7IIV0C7wxcKsGm48+BXt0Oa3r18rEJaarnw04IRGzSyoR8/norIs/d7mOK
JnkigsqZUL0MgwiyHaw+5NhKeTFRIXdWXFZYUXc35iFAVKBFXc/wxp2MyfrF
1W3dRakXT+uuq4sp2rW1IpfywJFV9jwl+vFugw2yqYaENusLwPq7DMuoL8pJ
4n09CkFtxFOszclpTaBPYjRMKmtJSvBMCw7EV3EqLpblGjQhGNQ2itJgxrZV
YOKRofefgjpUXzrleA/CncXceMzjnE9u3HJsY+uYqL+dPTv5qyCH+rlfXpL4
7j0L4d1JkdhcVPWqvLzyMj1WRCqvKorTwb0tUE7VAmFUNlWe78w8DbJOMwLx
08OPByQhA4Quuyi2DimLwkpsGB18bu12MWHpUMq8SV/KUW3CDj5A/mkVdDJB
dn1v5xIEu7RFjHL00ZPRO6OmG10doalbqSWRWYCmrnQ7tqh7suOp+Lvtli92
3X5jdN+sTGY2hf5ya80KI4HkikTflsmdikGcjbASnEQ9rdAlHWZIy60AqgMF
s9IES/lGOG0aaqK3SAkyLRXgWQ48yXq+AcQ4Qq8unGuMbmmKmuu06T6NtMpV
x+W/3aQGbiu5kDqPow1UPnSEUU6ohCiYMbFIqoMqx457QOBvsBWaEUoi70U+
fKOuFWXrkegQJJzrEVkpN6zPDfXkvur4BKE5q3YQktF0F62o4DeUYjJJ0nN/
BWl+aeczCxG85gNYzhajQDl4PR8IBTZYZsy6oSqOs9FBVeO8ct0aOwc2CFzn
cVBdIiQ3SNZD2qO0YATEcTe92zMjHOOU8tDyHMFVizzayaVAPErC0n5+2Yi6
acWamfxeWCOT0Shbf8Hx8A3oWKZNAdn2WWMr+JtXA9HIEkK+0N0N2yl9Yttr
21XrLA6NVBoq8EdLocoyJYHTCkjWGD2yn/m44teOiExLj3TIbbmqb/zSKL9o
bQow/bpdpeOqdi/vuQ6EHHe5OXkFWCJfOQasozPDmd9VrpmWRNr6/zoLwEdJ
G9iD+GJSWX/ENHnpV56DBHDymlOAdZVYzRk4lnozcLS/+QGZsS5UhecjNQ3d
R84uEtMoBadwWWFWqYMKjLUJjjIZJD48rqHIjeh8JGuC9zOyO7ohNEX70Gg3
eC67Dk1fUtaTp+HfJP8PI/lAQF0985ZYutHjK4TRFcBBeCt2IAX5lYBrPSw5
E+h9QlstadOKlF1ip5HfiDBDue2fKlSaFWC1Sgb3yWLfGkQLT0EfQbYfKQu6
NbXCzTqKFgvQ8xfnp9+fPj4BWEcT4B2EGSfj5mlNDg44tjPMwCiC6maruXzQ
VavMeYftXKZ6RaU3ayHg0DGBRmOoScR+1SDQ2yjDq1ThW9na0dii0MGwYTla
mpKoH7In3XYI3qvuzfAWpX/UfrQIEBIlZAnaNvbf2LNh2Xs7U0mGl7T9/+vR
QYoZrWBFG6OCeF50izlETgCPpsbptpBUoGGrRu32qCutNICAsJLA/GsCv1ZT
poYixVQZ9MC5Aak0iLD5Bl3G0gZGZbD9QLfSA3dxeJ8HHgGu5JiPvK4wOQbY
tkyQrZioOXdqtNSldX2T44d/0iwMLwaem+gIYX0LTTUCo9aYoTMCLimvJ012
4rgttaGGXLAqB6Yuh9Alqy3rYiaOwD+JUfyD+EEseam19B/EAOCjOdRQXxyc
6EorwQGhFxtxA/wLsg4OhLgFr/ApDTZgjQO93DCWtQ5fH7WJ7RckYVH8QcQ6
TkmhBC+JtGGC0loO6kWK0yB3sfAE8i7Ht1DFBrCMYHWCi8Ib2aPQEdUrOTCm
GncHZaX4nh7RK3DyI5+SmDR0WgapX53neMMjtPHl2b7aR3X1NrJ7h/UWq1jm
s95+Uz0l5e1fOb4wZZ6jRrgtSbxiVo1wDVSoMgDnwXgZTjWoESsb5lIF0Rdk
5aKCf1onMUcAEalVHyNDpGYa1H8J55rKi+bU3Z4QYC9QfTrj1IDBhcHNQNXu
9iJTdETO6ZBX6tjX8KVnP8sA7AHgIcTqKXwE+y6nLGJ3uKbotwcjSEOOSq7K
ybHerTg3WW3ajijZhLf0bD4RtAqqyOkHN2Cz1rS5fLTRGtHzn32NyGOANqFw
ChJHSUkNEqRKISWYv6YSN41s1U5TxNfGY8flCiS+hZ9PaWLIiBkWic2h3GwC
L6Ew50idSZb3jHbRXW4QD99n5Ryj1mQ5ubjCBRkhxmXdRJHPoSLHizxLaVU8
FMzQD9vw6fqX+dIJnAuo2IrGkP9eYnwMhzulR7BD0y/HqR0n2+Fui3CxtrBm
LbCBXiBCihnAZ3jWh8scNqBUYaVoCkojeThqcr50FNXavAnRXsex4mtYiy/E
mf0UxUAlpVdsSmhJ4ikNr8pJB+S8TNAiBqyKue6+8srA7CPQF6l0bwlQ92Og
GKuu2y4u6xVeA92JBJ2yrA/NN2cQHFLUU6pCdTQsyDIWEUVGA6VOeqZO2Lrc
erdm2I5KbH4wdOGy1OR2y8nOSwwT9kumrFq4WEkKAs9GY5UxDA15npgU7LL7
zHcSETnnQRsfVjUZKam6t7i/EsMwITEIv00ROxTw4ltBZ4FbIBOjrSFiPiqJ
nH9xmLUPWjCSCIXlxWnqtlrbx/mBz6OLwWQAaX4FUS3HdI7YYWIPlmxmVas5
k9YXm4RMMMQeMCJUzPWNoJcInJHkdfyf9+un5PPAbklsn4XaPge5fQZ6+zSC
U4qzXPx7ysLx1xHLQUE0e7S1Gq050ClJBk1+IfoUDo6IpJV62RLRgpU0ycAR
eXXRlKEsPENSejASuiHLdT1jG0/yy7a8o/Ag2SS3F3tkF9O8rfgCkYYqtxJX
NoPGky3uPg9cFyO0m1yIlyY3Q9AYJ7xBwjjyItuOyjFG9iH2COH1n4cJLDlQ
0kzXnyMI2dXkFkmBgSTkA4Qz/zrIRG+d5GAvRnGAaCjBc655j5lxExbJYCGl
Xo9jUDcoxMj4Rwyj4dHKJIBV3r6RFLCWZKdt7CcH4WY2e8P5LALGAdHhdVmY
nIMZQN7MqKKsGQTlc++nDSaDiCJv4So4OLB+fVqQNcEtnbZaUDxHkYlkWE2Y
d6gJpRbhmkTTccwi4sDXQIiUVlrSnE0gw93oJne1hLSoPiJ26v0Kc+G8YAtE
rcYYjAAgHINcyExgpmHYKPCyjBvIzyb+vQU2fOKPhugj2/6AMQcx95S813n0
wKJQ5BRyy3lhLWuVNEIzKYDFe32SVuKigjADTJzyRzJxEv+VnC8ftj6k679S
igEickOpFXeX/Z7y97bML2Bc/n3PVujcB6n6i8N9KI8a1JBNVAaFWrFfaP6M
G+SZZRm+WKRUjiWPKPqe0aEO1WOLiRSPVdzqJrBT2Q4H1EJQQu39+/DHoC7t
B7a5MRCTI1goHGlLyuIpcgQCsXrYLB4VHBgeXZvqEmcOnZliVKnSblJyUDh9
PnKHd4HYDxrV5mjUHZOJB3ttRNGXQrj3sUTrdwVAn5eY/AxwRaMyv3RCisoK
vWBwPR/FwUX/GGgqqKdHg8bmKAFa2EUbfwS+8isdLLG3JJucD5vM4he73x5q
L1KF5MLAs2g3gN3kyZAlW8IWpsNlbI9TxLNFtZSvjRy2QCyTRX1Dxcz597TW
3P5tL/sZjtEvVnqnp2ahBKuVyVuuofar7TL37Y8pRR2828bq+LU1Z9NoXOs7
fmeHhOLd9kyw7rwvOx/8pq/7yvPwQciwjpYYZ2tVYwLWRR+tsk1l7PlHLgPf
bv/duqG+C8YaQFRRD/hXZ/sXNwPl3oluMumGY5bBJZZl5q/2ToZgH8ndEUnk
/0S/Rg/oTxZoousVgymwopB6PBKVcP5P9l7/3bFYsJU2DR264cTz9iqo7yZ1
0n5dcdhk3QffZgeJ036gDeu/DhKtcDl6BJ2UYxMXok897dhaOYzXOJMnklEE
jkUtZ4vEkskHt+LvRV0NsLgDPV/UD+7Fqwal4lPNtATn8LFgrhu9T8+22wA9
b0DJTkMnZyynF0WdbnHzKWGbVqYjEu1stZNmTXNyfgZekv8MrXpHx+cbbidN
6c9gdw87TNLTrVZe2zce+t+qC2Z3v1Xzqa3+jM0jjsDIPUYKljvgUP266zBv
SvaDd1ioeQGKf768RAEZ1d904DX+hPHK+K8EbBd+T5fO8RZ30r67gq5SgTKm
eW3G3GXAKM3NJhoKKxRhXoYPOD6Hu/0JSba97AurTvzVrRf+7NSFE6dOO9b5
tiyuxcIjGBaxyBj25MvgkJD7/r1/NFjGBmRVNBKOo5o9wfsb6CdONP3ii+6H
CHr0i0iFQTGG1aKGTZNQIpw0IsTUwBc5UxLmvH4Yz6tFwVEc/J6iRXIGbGar
64IlyIeFBdjspC3LQ1EyEiXxxBWoWlshClCkNS3QCGUhsf0YyOZbvJtTxXDM
GzOVkn4TJYBomDnur+G3oThiZRuM2bIfK6rbB0PZ2sqJgWCtP6SkaiNShw2E
8nS7DSNMr5akw2bfpQamMzIy9DoBulPN+jX12+rVtt+uUbPsq7dVs+y7lrdG
isRGalb0TooU0mrWr6nXO9WsVkspsvgENavVfps+PknNarWfULPCfd9IzbI7
mVKz4uUN1Sz9dXM1q/3KhmpWNJKVala0WGvVLPtkh5oVdZ84bJ+kZgXNr1Wz
Ek9bkTie/iZqVkQ7+FkjnNkORH8Km+lUs+yrgZq15n2rZtk2VqhZUYubT2ml
mpVotZNmN1ezPrLV9WrW7RvupKkN1azWsdho5W+lZn1iF+vUrE9sfp2a9YnN
r1SzWod5U7JXNUspwTDEyPgr3682/GbJT5fNVuFUWh/U9fjXhJ24Gc7TkovW
/uhSKFtt7QQUwZ6xAeUb78Z6LF7FiBI6zofyFJBtbPn0QgW6nQb6Dgy7HB/7
NtoGaLOR7/1zI0aCdaNsmRdxWPloBEj1KwaVRYN6W4/9KoJ7D/MVRIuBn1cY
MqkJ7vSRX/xyLl+6szb4u1NmEmuu6g3GOe/+g9V8GUm35v6bmQICZ6V1NKLk
qWUEX0LWww9Oc2M/IzgTQVFEW8AL0mPRD7lCyRb/4wpHISvbrIWCf92ptVhN
t8B627MhRqXMyJv14OHDI7AQiGvrLvwBOrH47B7KFzQm6AhxH9XDCgickAz/
/eNd8p85SilNnoXViY1L+P377x6/PLr34UO2g13dOTpyXXG3R1+6H3ZbA7F6
8VbCiytLBd5sHOlbhWQ/Aj+zx8rvLevZMbx6jAFSzfG76eR41hwjk000iW5q
TjBwNDKsMFaPFxafh3MyoNI45EyXigvue/JxJ0uHwvpD9V/MYPB+5nNoqEfJ
p3E/zDzifsYreoGNPc5OWo5soM1TaTB7hlXk4IQke+bqSQNNegj6n5Wr+nfb
d5zsXQq6nHKj6UnjZiYWF77/nIvLmx51Mp+s6OMn9zmODnhPs4ar+jIP0oJ6
p0/Pv8+4TE22k6xns5u9dt/BFfoHQEnF1tCyOCTG2Hv9h+x1cXHs9FmuLQC6
imO/wzdFvQ8TwSID15cHbsuAfg++pRG7935wAuFx9s00d2ysOubf/1Pe+ZZj
xk6WC6fPuQ5eVU4KX2Sv4em4MIM0Ul/jr/85BL1kf1hNv8URx4EhPcuW1EmO
CxfUb2qUYw5wQWFDqOfAckc5nMZNjzE7FO4goW8Q9gahW9cgV2XbAJyw3af/
Qs49/PvV0z//ePrq6RP499kfT374Qf9BTfBjlFXg/+Vff/zi2bOnz59QCwCg
HHxFjWw/O/nrNnGzbYmk2NaoBY0Wyak+D+IyuDPpyI+gGaiRIKbB8c7s6B7V
ZAfOyeXZgXHuYvibyXHFP6mNxZVbjXw+h9LoEKMIcfX5vFzkE6p4B5bZWQY5
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
DUrOnc3TwEbc+MnGTR5A2g3H5O+EK5VgF//TlikxhfVr5AZOg0it0d1wjZrZ
MYU5JpYpWhxdGNmDj1gcWRhs4iMWR25CeL2XGDglHrQCwKI129q6F65CgtGt
XgJZ4k9YApw+NvIJS5AYeGuuTkhlATUErd2KoDRZRFnOxFdigUVGJt3FdW44
5ORGLJYcgRiK4D5TF1NUPHJEf0swktELNJb0gDGPVZacVedROv90y8YvszTC
ufJdslbgy9yKPJ9geUuY1FiuIvc7oQagiXXLx6gECTWiCJcQBgkJIynZqJxt
iU5Myh1mHoEajEZZAUYxwpWKX15u6rL+yA2YzMHZWisxdV7da0SepKyx5qZP
S0lrrvWrupLyWIOm/HvB1/sX2VMC4wa8IPnnh60tiABByxNjdXPkbWWSRx2h
QQUHOM1DTe8GtXhaxanZ0kgrXESkSIqvETtp+C47uWJd3GmjOXIjs98b+8sQ
iJw91VhhJzVcavF797PlA7xI4JSU3HaK7LHOfEeI6EUasGiTNO3rqgDlkwNK
ijD/6ezFc7XPkYtRsZhEqaNnIcbSbQYY9LwV0ZqOigUbxMdlMYGAJLLPgK86
a+mb798/ghVcuI2NF489Qa5PN3VykKBlk53eF/7WpPFS3Bk8wfZHFgIXloYa
DOZyr6NfHFLfy8YvjDdtevrx9JIcq68MWF2AB4sIHoIzwIoPK6AOFNX4PfSs
3WfveZFKXXUFfGxkAyp6cS89QkfVosfFtWTGzdptq1GGgr0DepBw6YsbdMv2
8boRJH+xG8DQ4Hu4Hh3LbphZD92K0kX21CPtq8FpGXoJt7ZO+VBy//3Y91iS
4L13gEdKi6E3vsB6c6D/3LNhc5geOHazLjHIg274Js62RAuPe32GRl66hkQo
8Cgbi+vKgPPg93zVYZDkC8y2KyRBwO113Sz8pOXM4X3EEUyeEiAm0ps0VkzU
z7PZw2gwonWuRq37oyOXFuGiBGobuteGV+Vk5I1nEEqNz4CFckAWyj2KVWqb
9jiJom+AMDhABcNvZgU5S2EF2T64XIAnK4UCJY3pAKjg7ADGgQMoJiBHuONL
EEx+UsaOlifKzmIcn4CEYXw/lzIvIbWLbfkXaqBlPTHLL6q3xaMMwvEQ7hN4
4BYAnwZpe8ecBH7MmKi9cuT+fXR4dERVPnpmGd0PvY2ItsfvNrN87sZKxbvh
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

-->

</rfc>
