<?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 2.6.10) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-happy-happyeyeballs-v3-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.28.1 -->
  <front>
    <title abbrev="Happy Eyeballs v3">Happy Eyeballs Version 3: Better Connectivity Using Concurrency</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-happy-happyeyeballs-v3-00"/>
    <author fullname="Tommy Pauly">
      <organization>Apple Inc</organization>
      <address>
        <email>tpauly@apple.com</email>
      </address>
    </author>
    <author fullname="David Schinazi">
      <organization>Google LLC</organization>
      <address>
        <email>dschinazi.ietf@gmail.com</email>
      </address>
    </author>
    <author fullname="Nidhi Jaju">
      <organization>Google LLC</organization>
      <address>
        <email>nidhijaju@google.com</email>
      </address>
    </author>
    <author fullname="Kenichi Ishibashi">
      <organization>Google LLC</organization>
      <address>
        <email>bashi@google.com</email>
      </address>
    </author>
    <date year="2025" month="April" day="07"/>
    <area>WIT</area>
    <workgroup>HAPPY Working Group</workgroup>
    <keyword>ipv6</keyword>
    <keyword>ipv4</keyword>
    <keyword>racing</keyword>
    <keyword>tcp</keyword>
    <keyword>quic</keyword>
    <keyword>svcb</keyword>
    <keyword>ech</keyword>
    <abstract>
      <?line 53?>

<t>Many communication protocols operating over the modern Internet use
hostnames. These often resolve to multiple IP addresses, each of
which may have different performance and connectivity
characteristics. Since specific addresses or address families (IPv4
or IPv6) may be blocked, broken, or sub-optimal on a network, clients
that attempt multiple connections in parallel have a chance of
establishing a connection more quickly. This document specifies
requirements for algorithms that reduce this user-visible delay and
provides an example algorithm, referred to as "Happy Eyeballs". This
document updates the algorithm description in RFC 8305.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://ietf-wg-happy/draft-happy-eyeballs-v3/draft-ietf-happy-happyeyeballs-v3.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-happy-happyeyeballs-v3/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        HAPPY Working Group mailing list (<eref target="mailto:happy@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/happy/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/happy/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/ietf-wg-happy/draft-happy-eyeballs-v3"/>.</t>
    </note>
  </front>
  <middle>
    <?line 66?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Many communication protocols operating over the modern Internet use
hostnames. These often resolve to multiple IP addresses, each of
which may have different performance and connectivity
characteristics. Since specific addresses or address families (IPv4
or IPv6) may be blocked, broken, or sub-optimal on a network, clients
that attempt multiple connections in parallel have a chance of
establishing a connection more quickly. This document specifies
requirements for algorithms that reduce this user-visible delay and
provides an example algorithm.</t>
      <t>This document defines the algorithm for "Happy Eyeballs", a technique
for reducing user-visible delays on dual-stack hosts. This
definition updates the description in <xref target="HEV2"/>, which
itself obsoleted <xref target="RFC6555"/>.</t>
      <t>The Happy Eyeballs algorithm of racing connections to resolved
addresses has several stages to avoid delays to the user whenever
possible, while preferring the use of IPv6. This document discusses
how to handle DNS queries when starting a connection on a dual-stack
client, how to create an ordered list of destination addresses to
which to attempt connections, and how to race the connection
attempts.</t>
      <t>As compared to <xref target="HEV2"/>, this document adds support for incorporating
SVCB / HTTPS resource records (RRs)
<xref target="SVCB"/>. SVCB RRs provide alternative
endpoints and associated information about protocol support, Encrypted
ClientHello <xref target="ECH"/> keys, address hints, among
other relevant hints which may help speed up connection establishment
and improve user privacy. Discovering protocol support during
resolution, such as for HTTP/3 over QUIC <xref target="RFC9114"/>, allows
upgrading between protocols on the current connection attempts,
instead of waiting for subsequent attempts to use information from
other discovery mechanisms such as HTTP Alternative Services
<xref target="AltSvc"/>. These records can be queried along with A and
AAAA records, and the updated algorithm defines how to handle SVCB
responses to improve address and protocol selection.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</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?>

</section>
    <section anchor="overview">
      <name>Overview</name>
      <t>This document defines a method of connection establishment, named the
"Happy Eyeballs Connection Setup". This approach has several
distinct phases:</t>
      <ol spacing="normal" type="1"><li>
          <t>Initiation of asynchronous DNS queries (<xref target="query"/>)</t>
        </li>
        <li>
          <t>Sorting of resolved destination addresses (<xref target="sorting"/>)</t>
        </li>
        <li>
          <t>Initiation of asynchronous connection attempts (<xref target="connections"/>)</t>
        </li>
        <li>
          <t>Establishment of one connection, which cancels all other attempts
(<xref target="connections"/>)</t>
        </li>
      </ol>
      <t>Note that this document assumes that the preference policy for the
host destination address favors IPv6 over IPv4. IPv6 has many
desirable properties designed to be improvements over IPv4
<xref target="IPV6"/>.</t>
      <t>This document also assumes that the preference policy favors QUIC over
TCP. QUIC only requires one packet to establish a secure connection,
making it quicker compared to TCP <xref target="QUIC"/>.</t>
      <t>If the host is configured to have different preferences, the
recommendations in this document can be easily adapted.</t>
    </section>
    <section anchor="query">
      <name>Hostname Resolution Query Handling</name>
      <t>When a client has both IPv4 and IPv6 connectivity and is trying to
establish a connection with a named host, it needs to send out both
AAAA and A DNS queries. Both queries <bcp14>SHOULD</bcp14> be made as soon after
one another as possible, with the AAAA query made first and
immediately followed by the A query.</t>
      <t>Additionally, if the client also wants to receive SVCB / HTTPS
resource records (RRs) <xref target="SVCB"/>, it <bcp14>SHOULD</bcp14> issue the SVCB query
immediately before the AAAA and A queries (prioritizing the SVCB query
since it can also include address hints). If the client has only one
of IPv4 or IPv6 connectivity, it still issues the SVCB query prior to
whichever AAAA or A query is appropriate. Note that upon
receiving a SVCB answer, the client might need to issue futher
AAAA and/or A queries to resolve the service name included in
the RR.</t>
      <t>Implementations <bcp14>SHOULD NOT</bcp14> wait for all answers to
return before attempting connection establishment. If one query
fails to return or takes significantly longer to return, waiting for
the other answers can significantly delay the connection
establishment of the first one. Therefore, the client <bcp14>SHOULD</bcp14> treat
DNS resolution as asynchronous. Note that if the platform does not
offer an asynchronous DNS API, this behavior can be simulated by
making separate synchronous queries, each on a different thread.</t>
      <t>The algorithm for acting upon received answers depends on whether the
client sent out queries for SVCB RRs.</t>
      <t>If the client did not request SVCB RRs:</t>
      <ul spacing="normal">
        <li>
          <t>If a positive AAAA response (a response containing at least one
valid AAAA RR) is received first, the first IPv6 connection
attempt is immediately started.</t>
        </li>
        <li>
          <t>If a positive A response is received first (which might be due
to reordering), the client <bcp14>SHOULD</bcp14> wait a short time for the
AAAA response to ensure that preference is given to IPv6, since
it is common for the AAAA response to follow the A response by
a few milliseconds. This delay is referred to as
the "Resolution Delay". If a negative AAAA response (no error, no
data) is received within the Resolution Delay period or the AAAA
response has not been received by the end of the Resolution Delay
period, the client <bcp14>SHOULD</bcp14> proceed to sorting addresses (see
<xref target="sorting"/>) and staggered connection attempts (see <xref target="connections"/>) using
any IPv4 addresses received so far.</t>
        </li>
      </ul>
      <t>If the client did request SVCB RRs:</t>
      <ul spacing="normal">
        <li>
          <t>If the client receives any positive response back (containing a valid
AAAA, A, or SVCB ServiceMode RR), it starts the Resolution Delay timer, which
is run until both the AAAA and SVCB ServiceMode responses are received,
or a SVCB response is received that also includes at least one
address in the <tt>ipv6hint</tt> parameter.
Once a SVCB response and at least one IPv6 address have been received,
or the timer expires, the client proceeds with the process of sorting
addresses and staggered connection attempts.</t>
        </li>
      </ul>
      <t>For both variations of the algorithm, the <bcp14>RECOMMENDED</bcp14> value for
the Resolution Delay is 50 milliseconds.</t>
      <t>If new positive responses arrive while connection attempts are in progress,
but before any connection has been established, then the newly
received addresses are incorporated into the list of available candidate
addresses (see <xref target="changes"/>) and the process of connection attempts will
continue with the new addresses added, until one connection is
established.</t>
      <section anchor="handling-multiple-dns-server-addresses">
        <name>Handling Multiple DNS Server Addresses</name>
        <t>If multiple DNS server addresses are configured for the current
network, the client may have the option of sending its DNS queries
over IPv4 or IPv6. In keeping with the Happy Eyeballs approach,
queries <bcp14>SHOULD</bcp14> be sent over IPv6 first (note that this is not
referring to the sending of AAAA or A queries, but rather the address
of the DNS server itself and IP version used to transport DNS
messages). If DNS queries sent to the IPv6 address do not receive
responses, that address may be marked as penalized and queries can be
sent to other DNS server addresses.</t>
        <t>As native IPv6 deployments become more prevalent and IPv4 addresses
are exhausted, it is expected that IPv6 connectivity will have
preferential treatment within networks. If a DNS server is
configured to be accessible over IPv6, IPv6 should be assumed to be
the preferred address family.</t>
        <t>Client systems <bcp14>SHOULD NOT</bcp14> have an explicit limit to the number of DNS
servers that can be configured, either manually or by the network.
If such a limit is required by hardware limitations, the client
<bcp14>SHOULD</bcp14> use at least one address from each address family from the
available list.</t>
      </section>
    </section>
    <section anchor="sorting">
      <name>Sorting Addresses</name>
      <t>Before attempting to connect to any of the resolved destination
addresses, the client should define the order in which to start the
attempts. Once the order has been defined, the client can use a
simple algorithm for racing each option after a short delay (see
<xref target="connections"/>). It is important that the ordered list involve all
addresses from both families and all protocols that have been received
by this point, as this allows the client to get the racing effect of
Happy Eyeballs for the entire list, not just the first IPv4 and first
IPv6 addresses.</t>
      <t>Note that the following sorting steps are an incremental sort, meaning
that the client <bcp14>SHOULD</bcp14> sort within each sorted group for each
incremental step.</t>
      <t>If any of the answers were from SVCB RRs, they <bcp14>SHOULD</bcp14> be sorted ahead
of any answers that were not associated with a SVCB record.</t>
      <t>If the client supports TLS Encrypted Client Hello (ECH) discovery through
SVCB records <xref target="SVCB-ECH"/>, depending on the
client's preference to handle ECH, the client <bcp14>SHOULD</bcp14> sort addresses with
ECH keys taking priority to maintain privacy when attempting connection
establishment.</t>
      <t>The client then sorts the addresses received up to this point, within
each group, by service priority if the set of addresses contain any
answers from SVCB records. See <xref target="priority"/> for details.</t>
      <t>The client <bcp14>SHOULD</bcp14> also sort the addresses in protocol order, such that
QUIC is prioritized over TCP, as it connects faster and generally
results in a better experience once connected. For example, QUIC
provides improved delivery and congestion control, supports connection
migration, and provides other benefits <xref target="QUIC"/>.</t>
      <t>Then, within each group at equal priority, the client <bcp14>MUST</bcp14> sort the
addresses using Destination Address Selection (<xref section="6" sectionFormat="comma" target="RFC6724"/>).</t>
      <t>If the client is stateful and has a history of expected round-trip
times (RTTs) for the routes to access each address, it <bcp14>SHOULD</bcp14> add a
Destination Address Selection rule between rules 8 and 9 that prefers
addresses with lower RTTs. If the client keeps track of which
addresses it used in the past, it <bcp14>SHOULD</bcp14> add another Destination
Address Selection rule between the RTT rule and rule 9, which prefers
used addresses over unused ones. This helps servers that use the
client's IP address during authentication, as is the case for TCP
Fast Open <xref target="RFC7413"/> and some Hypertext Transport Protocol (HTTP)
cookies. This historical data <bcp14>MUST NOT</bcp14> be used across different
network interfaces and <bcp14>SHOULD</bcp14> be flushed whenever a device changes
the network to which it is attached.</t>
      <t>Next, the client <bcp14>SHOULD</bcp14> modify the ordered list to interleave
protocols and address families. Whichever combination of protocol
and address family is first in the list should be followed by an
endpoint of the other protocol type and same address family, then an
endpoint from the same protocol and other address family, and then an
endpoint from the other protocol and other address family. For example,
if the first address in the sorted list is a QUIC IPv6 address, then
the first TCP IPv6 address should be moved up in the list to be second
in the list, then the first QUIC IPv4 address should be moved up to be
third in the list, and then the first TCP IPv4 address should be moved
up to be fourth in the list. An implementation <bcp14>MAY</bcp14> choose to favor one
protocol or address family more by allowing multiple addresses of that
protocol or family to be attempted before trying the other combinations.
The number of contiguous addresses of the first combination of
properties will be referred to as the "Preferred Protocol Combination
Count" and can be a configurable value. This avoids waiting through a
long list of addresses from a given address family using a given
protocol if connectivity over a protocol or an address family is
impaired.</t>
      <t>Note that the address selection described in this section only
applies to destination addresses; Source Address Selection
(<xref section="5" sectionFormat="comma" target="RFC6724"/>) is performed once per destination address and
is out of scope of this document.</t>
      <section anchor="priority">
        <name>Sorting Based on Priority</name>
        <t>SVCB <xref target="SVCB"/> RRs indicate a priority for each ServiceMode response.
This priority applies to any IPv4 or IPv6 address hints in the RR
itself, as well as any addresses received on A or AAAA queries for the
name in the ServiceMode RR. The priority in a ServiceMode SVCB RR is
always greater than 0.</t>
        <t>SVCB answers with the lowest numerical value (such as 1) are sorted
first, and answers with higher numerical values are sorted later.</t>
        <t>Note that a SVCB RR with the TargetName "." applies to the owner
name in the RR, and the priority of that SVCB RR applies to
any A or AAAA RRs for the same owner name. These answers are
sorted according to that SVCB RR's priority.</t>
      </section>
    </section>
    <section anchor="connections">
      <name>Connection Attempts</name>
      <t>Once the list of addresses received up to this point has been
constructed, the client will attempt to make connections. In order to
avoid unreasonable network load, connection attempts <bcp14>SHOULD NOT</bcp14> be
made simultaneously. Instead, one connection attempt to a single
address is started first, followed by the others in the list, one at a
time. Starting a new connection attempt does not affect previous
attempts, as multiple connection attempts may occur in parallel.  Once
one of the connection attempts succeeds (<xref target="success"/>), all other
connections attempts that have not yet succeeded <bcp14>SHOULD</bcp14> be canceled.
Any address that was not yet attempted as a connection <bcp14>SHOULD</bcp14> be
ignored.  At that time, the asynchronous DNS query <bcp14>MAY</bcp14> be canceled as
new addresses will not be used for this connection. However, the DNS
client resolver <bcp14>SHOULD</bcp14> still process DNS replies from the network for
a short period of time (recommended to be 1 second), as they will
populate the DNS cache and can be used for subsequent connections.</t>
      <t>A simple implementation can have a fixed delay for how long to wait
before starting the next connection attempt. This delay is referred to
as the "Connection Attempt Delay". One recommended value for a default
delay is 250 milliseconds. A more nuanced implementation's delay
should correspond to the time when the previous attempt is retrying
its handshake (such as sending a second TCP SYN or a second QUIC
Initial), based on the retransmission timer (<xref target="RFC6298"/>,
<xref target="RFC9002"/>). If the client has historical RTT data gathered from
other connections to the same host or prefix, it can use this
information to influence its delay. Note that this algorithm should
only try to approximate the time of the first handshake packet
retransmission, and not any further retransmissions that may be
influenced by exponential timer back off.</t>
      <t>The Connection Attempt Delay <bcp14>MUST</bcp14> have a lower bound, especially if it
is computed using historical data. More specifically, a subsequent
connection <bcp14>MUST NOT</bcp14> be started within 10 milliseconds of the previous
attempt. The recommended minimum value is 100 milliseconds, which is
referred to as the "Minimum Connection Attempt Delay". This minimum
value is required to avoid congestion collapse in the presence of high
packet-loss rates. The Connection Attempt Delay <bcp14>SHOULD</bcp14> have an upper
bound, referred to as the "Maximum Connection Attempt Delay". The
current recommended value is 2 seconds.</t>
      <section anchor="success">
        <name>Determining successful connection establishment</name>
        <t>The determination of when a connection attempt has successfully
completed (and other attempts can be cancelled) depends on the
protocols being used to establish a connection. This can involve one
or more protocol handshakes.</t>
        <t>Client connections that use TCP only (without TLS or another protocol
on top, such as for unencrypted HTTP connections) will determine
successful establishment based on completing the TCP handshake
only. When TLS is used on top of of TCP (such as for encrypted HTTP
connections), clients <bcp14>MAY</bcp14> choose to wait for the TLS handshake to
successfully complete before cancelling other connection
attempts. This is particularly useful for networks in which a
TCP-terminating proxy might be causing TCP handshakes to succeed
quickly, even though end-to-end connectivity with the TLS-terminating
server will fail. QUIC connections inherently include a secure
handshake in their main handshakes, and thus only need to wait for a
single handshake to complete.</t>
        <t>While transport layer handshakes generally do not have restrictions on
attempts to establish a connection, some cryptographic handshakes may
be dependent on ServiceMode SVCB RRs and could impose limitations on
establishing a connection.  For instance, ECH-capable clients may
become SVCB-reliant clients (<xref section="3" sectionFormat="of" target="SVCB"/>) when SVCB RRs
contain the "ech" SvcParamKey <xref target="SVCB-ECH"/>. If the
client is either an SVCB-reliant client or a SVCB-optional client that
might switch to SVCB-reliant connection establishment during the
process, the client <bcp14>MUST</bcp14> wait for SVCB RRs before proceeding with the
cryptographic handshake.</t>
      </section>
      <section anchor="handling-application-layer-protocol-negotiation-alpn">
        <name>Handling Application Layer Protocol Negotiation (ALPN)</name>
        <t>The <tt>alpn</tt> and <tt>no-default-alpn</tt> SvcParamKeys in SVCB RRs indicate the
"SVCB ALPN set," which specifies the underlying transport protocols
supported by the associated service endpoint. When the client requests
SVCB RRs, it <bcp14>SHOULD</bcp14> perform the procedure specified in <xref section="7.1.2" sectionFormat="of" target="SVCB"/> to determine the underlying transport protocols that both
the client and the service endpoint support. The client <bcp14>SHOULD NOT</bcp14>
attempt to make a connection to a service endpoint whose SVCB ALPN set
does not contain any protocols that the client supports. For example,
suppose the client is an HTTP client that only supports TCP-based
versions such as HTTP/1.1 and HTTP/2, and it receives the following
HTTPS RR:</t>
        <artwork><![CDATA[
 example.com. 60 IN HTTPS 1 svc1.example.com. (
     alpn="h3" no-default-alpn ipv6hint=2001:db8::2 )
]]></artwork>
        <t>In this case, attempting a connection to 2001:db8::2 or any other
address resolved for <tt>svc1.example.com</tt> would be incorrect because the
RR indicates that <tt>svc1.example.com</tt> only supports HTTP/3, based on
the ALPN value of "h3".</t>
        <t>If the client is an HTTP client that supports both Alt-Svc
<xref target="AltSvc"/> and SVCB (HTTPS) RRs, the client <bcp14>SHOULD</bcp14> ensure
that connection attempts are consistent with both the Alt-Svc
parameters and the SVCB ALPN set, as specified in <xref section="9.3" sectionFormat="of" target="SVCB"/>.</t>
      </section>
    </section>
    <section anchor="changes">
      <name>DNS Answer Changes During Happy Eyeballs Connection Setup</name>
      <t>If, during the course of connection establishment, the DNS answers
change by either adding resolved addresses (for example due to DNS
push notifications <xref target="RFC8765"/>) or removing previously resolved
addresses (for example, due to expiry of the TTL on that DNS record),
the client should react based on its current progress. Additionally,
once A and AAAA records are received, addresses received via SVCB
hints that are not included in the A and AAAA records for the
corresponding address family <bcp14>SHOULD</bcp14> be removed from the list, as
specified in <xref section="7.3" sectionFormat="of" target="SVCB"/>.</t>
      <t>If an address is removed from the list that already had a connection
attempt started, the connection attempt <bcp14>SHOULD NOT</bcp14> be canceled, but
rather be allowed to continue. If the removed address had not yet
had a connection attempt started, it <bcp14>SHOULD</bcp14> be removed from the list
of addresses to try.</t>
      <t>If an address is added to the list, it should be sorted into the list
of addresses not yet attempted according to the rules above (see
<xref target="sorting"/>).</t>
    </section>
    <section anchor="supporting-ipv6-only-networks-with-nat64-and-dns64">
      <name>Supporting IPv6-Only Networks with NAT64 and DNS64</name>
      <t>While many IPv6 transition protocols have been standardized and
deployed, most are transparent to client devices. The combined use
of NAT64 <xref target="RFC6146"/> and DNS64 <xref target="RFC6147"/> is a popular solution that is
being deployed and requires changes in client devices. One possible
way to handle these networks is for the client device networking
stack to implement 464XLAT <xref target="RFC6877"/>. 464XLAT has the advantage of
not requiring changes to user space software; however, it requires
per-packet translation if the application is using IPv4 literals and
does not encourage client application software to support native
IPv6. On platforms that do not support 464XLAT, the Happy Eyeballs
engine <bcp14>SHOULD</bcp14> follow the recommendations in this section to properly
support IPv6-only networks with NAT64 and DNS64.</t>
      <t>The features described in this section <bcp14>SHOULD</bcp14> only be enabled when
the host detects one of these networks. A simple heuristic to
achieve that is to check if the network offers routable IPv6
addressing, does not offer routable IPv4 addressing, and offers a DNS
resolver address.</t>
      <section anchor="literals">
        <name>IPv4 Address Literals</name>
        <t>If client applications or users wish to connect to IPv4 address
literals, the Happy Eyeballs engine will need to perform NAT64
address synthesis for them. The solution is similar to "Bump-in-the-
Host" <xref target="RFC6535"/> but is implemented inside the Happy Eyeballs library.</t>
        <t>Note that some IPv4 prefixes are scoped to a given host or network, such as
0.0.0.0/8, 127.0.0.0/8, 169.254.0.0/16, and 255.255.255.255/32, and
therefore do not require NAT64 address synthesis.</t>
        <t>When an IPv4 address is passed into the library instead of a
hostname, the device <bcp14>SHOULD</bcp14> use PREF64s received from Router
Advertisements <xref target="RFC8781"/>. If the network does not provide PREF64s,
the device <bcp14>SHOULD</bcp14> query the network for the NAT64 prefix using
"Discovery of the IPv6 Prefix Used for IPv6 Address Synthesis"
<xref target="RFC7050"/>. It then synthesizes an appropriate IPv6 address (or
several) using the encoding described in "IPv6 Addressing of IPv4/
IPv6 Translators" <xref target="RFC6052"/>. The synthesized addresses are then
inserted into the list of addresses as if they were results from DNS
queries; connection attempts follow the algorithm described above
(see <xref target="connections"/>).</t>
        <t>Such translation also applies to any IPv4 address hints received
in SVCB RRs.</t>
      </section>
      <section anchor="broken">
        <name>Hostnames with Broken AAAA Records</name>
        <t>At the time of writing, there exist a small but non-negligible number
of hostnames that resolve to valid A records and broken AAAA records,
which we define as AAAA records that contain seemingly valid IPv6
addresses but those addresses never reply when contacted on the usual
ports. These can be, for example, caused by:</t>
        <ul spacing="normal">
          <li>
            <t>Mistyping of the IPv6 address in the DNS zone configuration</t>
          </li>
          <li>
            <t>Routing black holes</t>
          </li>
          <li>
            <t>Service outages</t>
          </li>
        </ul>
        <t>While an algorithm complying with the other sections of this document
would correctly handle such hostnames on a dual-stack network, they
will not necessarily function correctly on IPv6-only networks with
NAT64 and DNS64. Since DNS64 recursive resolvers rely on the
authoritative name servers sending negative ("no error no answer")
responses for AAAA records in order to synthesize, they will not
synthesize records for these particular hostnames and will instead
pass through the broken AAAA record.</t>
        <t>In order to support these scenarios, the client device needs to query
the DNS for the A record and then perform local synthesis. Since
these types of hostnames are rare and, in order to minimize load on
DNS servers, this A query should only be performed when the client
has given up on the AAAA records it initially received. This can be
achieved by using a longer timeout, referred to as the "Last Resort
Local Synthesis Delay"; the delay is recommended to be 2 seconds.
The timer is started when the last connection attempt is fired. If
no connection attempt has succeeded when this timer fires, the device
queries the DNS for the IPv4 address and, on reception of a valid A
record, treats it as if it were provided by the application (see
<xref target="literals"/>).</t>
      </section>
      <section anchor="virtual-private-networks">
        <name>Virtual Private Networks</name>
        <t>Some Virtual Private Networks (VPNs) may be configured to handle DNS
queries from the device. The configuration could encompass all
queries or a subset such as "*.internal.example.com". These VPNs can
also be configured to only route part of the IPv4 address space, such
as 192.0.2.0/24. However, if an internal hostname resolves to an
external IPv4 address, these can cause issues if the underlying
network is IPv6-only. As an example, let's assume that
"www.internal.example.com" has exactly one A record, 198.51.100.42,
and no AAAA records. The client will send the DNS query to the
company's recursive resolver and that resolver will reply with these
records. The device now only has an IPv4 address to connect to and
no route to that address. Since the company's resolver does not know
the NAT64 prefix of the underlying network, it cannot synthesize the
address. Similarly, the underlying network's DNS64 recursive
resolver does not know the company's internal addresses, so it cannot
resolve the hostname. Because of this, the client device needs to
resolve the A record using the company's resolver and then locally
synthesize an IPv6 address, as if the resolved IPv4 address were
provided by the application (<xref target="literals"/>).</t>
      </section>
    </section>
    <section anchor="summary-of-configurable-values">
      <name>Summary of Configurable Values</name>
      <t>The values that may be configured as defaults on a client for use in
Happy Eyeballs are as follows:</t>
      <ul spacing="normal">
        <li>
          <t>Resolution Delay (<xref target="query"/>): The time to wait for a AAAA response
after receiving an A response. Recommended to be 50 milliseconds.</t>
        </li>
        <li>
          <t>Preferred Protocol Combination Count (<xref target="sorting"/>): The number of
addresses belonging to the preferred address family (such as IPv6) using
the preferred protocol (such as QUIC) that should be attempted before
attempting the next combination of address family and protocol.
Recommended to be 1; 2 may be used to more aggressively favor a
particular combination of address family and protocol.</t>
        </li>
        <li>
          <t>Connection Attempt Delay (<xref target="connections"/>): The time to wait between
connection attempts in the absence of RTT data. Recommended to be
250 milliseconds.</t>
        </li>
        <li>
          <t>Minimum Connection Attempt Delay (<xref target="connections"/>): The minimum time to
wait between connection attempts. Recommended to be 100
milliseconds. <bcp14>MUST NOT</bcp14> be less than 10 milliseconds.</t>
        </li>
        <li>
          <t>Maximum Connection Attempt Delay (<xref target="connections"/>): The maximum time to
wait between connection attempts. Recommended to be 2 seconds.</t>
        </li>
        <li>
          <t>Last Resort Local Synthesis Delay (<xref target="broken"/>): The time to wait
after starting the last IPv6 attempt and before sending the A
query. Recommended to be 2 seconds.</t>
        </li>
      </ul>
      <t>The delay values described in this section were determined
empirically by measuring the timing of connections on a very wide set
of production devices. They were picked to reduce wait times noticed
by users while minimizing load on the network. As time passes, it is
expected that the properties of networks will evolve. For that
reason, it is expected that these values will change over time.
Implementors should feel welcome to use different values without
changing this specification. Since IPv6 issues are expected to be
less common, the delays <bcp14>SHOULD</bcp14> be increased with time as client
software is updated.</t>
    </section>
    <section anchor="limitations">
      <name>Limitations</name>
      <t>Happy Eyeballs will handle initial connection failures at the transport
layer (such as TCP or QUIC); however, other failures or performance
issues may still affect the chosen connection.</t>
      <section anchor="path-maximum-transmission-unit-discovery">
        <name>Path Maximum Transmission Unit Discovery</name>
        <t>For TCP connections, since Happy Eyeballs is only active during the
initial handshake and TCP does not pass the initial handshake, issues
related to MTU can be masked and go unnoticed during Happy Eyeballs.
For QUIC connections, a minimum MTU of at least 1200 bytes
<xref section="8.1-5" sectionFormat="comma" target="RFC9000"/> is guaranteed, but there is a chance that
larger values may not be available. Solving this issue is out of scope
of this document. One solution is to use "Packetization Layer Path MTU
Discovery" <xref target="RFC4821"/>.</t>
      </section>
      <section anchor="application-layer">
        <name>Application Layer</name>
        <t>If the DNS returns multiple addresses for different application
servers, the application itself may not be operational and functional
on all of them. Common examples include Transport Layer Security
(TLS) and HTTP.</t>
      </section>
      <section anchor="hiding-operational-issues">
        <name>Hiding Operational Issues</name>
        <t>It has been observed in practice that Happy Eyeballs can hide issues
in networks. For example, if a misconfiguration causes IPv6 to
consistently fail on a given network while IPv4 is still functional,
Happy Eyeballs may impair the operator's ability to notice the issue.
It is recommended that network operators deploy external means of
monitoring to ensure functionality of all address families.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>Note that applications should not rely upon a stable hostname-to-
address mapping to ensure any security properties, since DNS results
may change between queries. Happy Eyeballs may make it more likely
that subsequent connections to a single hostname use different IP
addresses.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document does not require any IANA actions.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="SVCB">
          <front>
            <title>Service Binding and Parameter Specification via the DNS (SVCB and HTTPS Resource Records)</title>
            <author fullname="B. Schwartz" initials="B." surname="Schwartz"/>
            <author fullname="M. Bishop" initials="M." surname="Bishop"/>
            <author fullname="E. Nygren" initials="E." surname="Nygren"/>
            <date month="November" year="2023"/>
            <abstract>
              <t>This document specifies the "SVCB" ("Service Binding") and "HTTPS" DNS resource record (RR) types to facilitate the lookup of information needed to make connections to network services, such as for HTTP origins. SVCB records allow a service to be provided from multiple alternative endpoints, each with associated parameters (such as transport protocol configuration), and are extensible to support future uses (such as keys for encrypting the TLS ClientHello). They also enable aliasing of apex domains, which is not possible with CNAME. The HTTPS RR is a variation of SVCB for use with HTTP (see RFC 9110, "HTTP Semantics"). By providing more information to the client before it attempts to establish a connection, these records offer potential benefits to both performance and privacy.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9460"/>
          <seriesInfo name="DOI" value="10.17487/RFC9460"/>
        </reference>
        <reference anchor="ECH">
          <front>
            <title>TLS Encrypted Client Hello</title>
            <author fullname="Eric Rescorla" initials="E." surname="Rescorla">
              <organization>Independent</organization>
            </author>
            <author fullname="Kazuho Oku" initials="K." surname="Oku">
              <organization>Fastly</organization>
            </author>
            <author fullname="Nick Sullivan" initials="N." surname="Sullivan">
              <organization>Cryptography Consulting LLC</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="20" month="March" year="2025"/>
            <abstract>
              <t>   This document describes a mechanism in Transport Layer Security (TLS)
   for encrypting a ClientHello message under a server public key.

Discussion Venues

   This note is to be removed before publishing as an RFC.

   Source for this draft and an issue tracker can be found at
   https://github.com/tlswg/draft-ietf-tls-esni
   (https://github.com/tlswg/draft-ietf-tls-esni).

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-tls-esni-24"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="SVCB-ECH">
          <front>
            <title>Bootstrapping TLS Encrypted ClientHello with DNS Service Bindings</title>
            <author fullname="Benjamin M. Schwartz" initials="B. M." surname="Schwartz">
              <organization>Meta Platforms, Inc.</organization>
            </author>
            <author fullname="Mike Bishop" initials="M." surname="Bishop">
              <organization>Akamai Technologies</organization>
            </author>
            <author fullname="Erik Nygren" initials="E." surname="Nygren">
              <organization>Akamai Technologies</organization>
            </author>
            <date day="12" month="February" year="2025"/>
            <abstract>
              <t>   To use TLS Encrypted ClientHello (ECH) the client needs to learn the
   ECH configuration for a server before it attempts a connection to the
   server.  This specification provides a mechanism for conveying the
   ECH configuration information via DNS, using a SVCB or HTTPS record.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-tls-svcb-ech-07"/>
        </reference>
        <reference anchor="RFC6724">
          <front>
            <title>Default Address Selection for Internet Protocol Version 6 (IPv6)</title>
            <author fullname="D. Thaler" initials="D." role="editor" surname="Thaler"/>
            <author fullname="R. Draves" initials="R." surname="Draves"/>
            <author fullname="A. Matsumoto" initials="A." surname="Matsumoto"/>
            <author fullname="T. Chown" initials="T." surname="Chown"/>
            <date month="September" year="2012"/>
            <abstract>
              <t>This document describes two algorithms, one for source address selection and one for destination address selection. The algorithms specify default behavior for all Internet Protocol version 6 (IPv6) implementations. They do not override choices made by applications or upper-layer protocols, nor do they preclude the development of more advanced mechanisms for address selection. The two algorithms share a common context, including an optional mechanism for allowing administrators to provide policy that can override the default behavior. In dual-stack implementations, the destination address selection algorithm can consider both IPv4 and IPv6 addresses -- depending on the available source addresses, the algorithm might prefer IPv6 addresses over IPv4 addresses, or vice versa.</t>
              <t>Default address selection as defined in this specification applies to all IPv6 nodes, including both hosts and routers. This document obsoletes RFC 3484. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6724"/>
          <seriesInfo name="DOI" value="10.17487/RFC6724"/>
        </reference>
        <reference anchor="RFC6298">
          <front>
            <title>Computing TCP's Retransmission Timer</title>
            <author fullname="V. Paxson" initials="V." surname="Paxson"/>
            <author fullname="M. Allman" initials="M." surname="Allman"/>
            <author fullname="J. Chu" initials="J." surname="Chu"/>
            <author fullname="M. Sargent" initials="M." surname="Sargent"/>
            <date month="June" year="2011"/>
            <abstract>
              <t>This document defines the standard algorithm that Transmission Control Protocol (TCP) senders are required to use to compute and manage their retransmission timer. It expands on the discussion in Section 4.2.3.1 of RFC 1122 and upgrades the requirement of supporting the algorithm from a SHOULD to a MUST. This document obsoletes RFC 2988. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6298"/>
          <seriesInfo name="DOI" value="10.17487/RFC6298"/>
        </reference>
        <reference anchor="RFC6146">
          <front>
            <title>Stateful NAT64: Network Address and Protocol Translation from IPv6 Clients to IPv4 Servers</title>
            <author fullname="M. Bagnulo" initials="M." surname="Bagnulo"/>
            <author fullname="P. Matthews" initials="P." surname="Matthews"/>
            <author fullname="I. van Beijnum" initials="I." surname="van Beijnum"/>
            <date month="April" year="2011"/>
            <abstract>
              <t>This document describes stateful NAT64 translation, which allows IPv6-only clients to contact IPv4 servers using unicast UDP, TCP, or ICMP. One or more public IPv4 addresses assigned to a NAT64 translator are shared among several IPv6-only clients. When stateful NAT64 is used in conjunction with DNS64, no changes are usually required in the IPv6 client or the IPv4 server.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6146"/>
          <seriesInfo name="DOI" value="10.17487/RFC6146"/>
        </reference>
        <reference anchor="RFC6147">
          <front>
            <title>DNS64: DNS Extensions for Network Address Translation from IPv6 Clients to IPv4 Servers</title>
            <author fullname="M. Bagnulo" initials="M." surname="Bagnulo"/>
            <author fullname="A. Sullivan" initials="A." surname="Sullivan"/>
            <author fullname="P. Matthews" initials="P." surname="Matthews"/>
            <author fullname="I. van Beijnum" initials="I." surname="van Beijnum"/>
            <date month="April" year="2011"/>
            <abstract>
              <t>DNS64 is a mechanism for synthesizing AAAA records from A records. DNS64 is used with an IPv6/IPv4 translator to enable client-server communication between an IPv6-only client and an IPv4-only server, without requiring any changes to either the IPv6 or the IPv4 node, for the class of applications that work through NATs. This document specifies DNS64, and provides suggestions on how it should be deployed in conjunction with IPv6/IPv4 translators. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6147"/>
          <seriesInfo name="DOI" value="10.17487/RFC6147"/>
        </reference>
        <reference anchor="RFC6535">
          <front>
            <title>Dual-Stack Hosts Using "Bump-in-the-Host" (BIH)</title>
            <author fullname="B. Huang" initials="B." surname="Huang"/>
            <author fullname="H. Deng" initials="H." surname="Deng"/>
            <author fullname="T. Savolainen" initials="T." surname="Savolainen"/>
            <date month="February" year="2012"/>
            <abstract>
              <t>Bump-in-the-Host (BIH) is a host-based IPv4 to IPv6 protocol translation mechanism that allows a class of IPv4-only applications that work through NATs to communicate with IPv6-only peers. The host on which applications are running may be connected to IPv6-only or dual-stack access networks. BIH hides IPv6 and makes the IPv4-only applications think they are talking with IPv4 peers by local synthesis of IPv4 addresses. This document obsoletes RFC 2767 and RFC 3338. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6535"/>
          <seriesInfo name="DOI" value="10.17487/RFC6535"/>
        </reference>
        <reference anchor="RFC8781">
          <front>
            <title>Discovering PREF64 in Router Advertisements</title>
            <author fullname="L. Colitti" initials="L." surname="Colitti"/>
            <author fullname="J. Linkova" initials="J." surname="Linkova"/>
            <date month="April" year="2020"/>
            <abstract>
              <t>This document specifies a Neighbor Discovery option to be used in Router Advertisements (RAs) to communicate prefixes of Network Address and Protocol Translation from IPv6 clients to IPv4 servers (NAT64) to hosts.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8781"/>
          <seriesInfo name="DOI" value="10.17487/RFC8781"/>
        </reference>
        <reference anchor="RFC7050">
          <front>
            <title>Discovery of the IPv6 Prefix Used for IPv6 Address Synthesis</title>
            <author fullname="T. Savolainen" initials="T." surname="Savolainen"/>
            <author fullname="J. Korhonen" initials="J." surname="Korhonen"/>
            <author fullname="D. Wing" initials="D." surname="Wing"/>
            <date month="November" year="2013"/>
            <abstract>
              <t>This document describes a method for detecting the presence of DNS64 and for learning the IPv6 prefix used for protocol translation on an access network. The method depends on the existence of a well-known IPv4-only fully qualified domain name "ipv4only.arpa.". The information learned enables nodes to perform local IPv6 address synthesis and to potentially avoid NAT64 on dual-stack and multi-interface deployments.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7050"/>
          <seriesInfo name="DOI" value="10.17487/RFC7050"/>
        </reference>
        <reference anchor="RFC6052">
          <front>
            <title>IPv6 Addressing of IPv4/IPv6 Translators</title>
            <author fullname="C. Bao" initials="C." surname="Bao"/>
            <author fullname="C. Huitema" initials="C." surname="Huitema"/>
            <author fullname="M. Bagnulo" initials="M." surname="Bagnulo"/>
            <author fullname="M. Boucadair" initials="M." surname="Boucadair"/>
            <author fullname="X. Li" initials="X." surname="Li"/>
            <date month="October" year="2010"/>
            <abstract>
              <t>This document discusses the algorithmic translation of an IPv6 address to a corresponding IPv4 address, and vice versa, using only statically configured information. It defines a well-known prefix for use in algorithmic translations, while allowing organizations to also use network-specific prefixes when appropriate. Algorithmic translation is used in IPv4/IPv6 translators, as well as other types of proxies and gateways (e.g., for DNS) used in IPv4/IPv6 scenarios. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6052"/>
          <seriesInfo name="DOI" value="10.17487/RFC6052"/>
        </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="RFC4821">
          <front>
            <title>Packetization Layer Path MTU Discovery</title>
            <author fullname="M. Mathis" initials="M." surname="Mathis"/>
            <author fullname="J. Heffner" initials="J." surname="Heffner"/>
            <date month="March" year="2007"/>
            <abstract>
              <t>This document describes a robust method for Path MTU Discovery (PMTUD) that relies on TCP or some other Packetization Layer to probe an Internet path with progressively larger packets. This method is described as an extension to RFC 1191 and RFC 1981, which specify ICMP-based Path MTU Discovery for IP versions 4 and 6, respectively. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4821"/>
          <seriesInfo name="DOI" value="10.17487/RFC4821"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="HEV2">
          <front>
            <title>Happy Eyeballs Version 2: Better Connectivity Using Concurrency</title>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
            <author fullname="T. Pauly" initials="T." surname="Pauly"/>
            <date month="December" year="2017"/>
            <abstract>
              <t>Many communication protocols operating over the modern Internet use hostnames. These often resolve to multiple IP addresses, each of which may have different performance and connectivity characteristics. Since specific addresses or address families (IPv4 or IPv6) may be blocked, broken, or sub-optimal on a network, clients that attempt multiple connections in parallel have a chance of establishing a connection more quickly. This document specifies requirements for algorithms that reduce this user-visible delay and provides an example algorithm, referred to as "Happy Eyeballs". This document obsoletes the original algorithm description in RFC 6555.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8305"/>
          <seriesInfo name="DOI" value="10.17487/RFC8305"/>
        </reference>
        <reference anchor="RFC6555">
          <front>
            <title>Happy Eyeballs: Success with Dual-Stack Hosts</title>
            <author fullname="D. Wing" initials="D." surname="Wing"/>
            <author fullname="A. Yourtchenko" initials="A." surname="Yourtchenko"/>
            <date month="April" year="2012"/>
            <abstract>
              <t>When a server's IPv4 path and protocol are working, but the server's IPv6 path and protocol are not working, a dual-stack client application experiences significant connection delay compared to an IPv4-only client. This is undesirable because it causes the dual- stack client to have a worse user experience. This document specifies requirements for algorithms that reduce this user-visible delay and provides an algorithm. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6555"/>
          <seriesInfo name="DOI" value="10.17487/RFC6555"/>
        </reference>
        <reference anchor="RFC9114">
          <front>
            <title>HTTP/3</title>
            <author fullname="M. Bishop" initials="M." role="editor" surname="Bishop"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The QUIC transport protocol has several features that are desirable in a transport for HTTP, such as stream multiplexing, per-stream flow control, and low-latency connection establishment. This document describes a mapping of HTTP semantics over QUIC. This document also identifies HTTP/2 features that are subsumed by QUIC and describes how HTTP/2 extensions can be ported to HTTP/3.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9114"/>
          <seriesInfo name="DOI" value="10.17487/RFC9114"/>
        </reference>
        <reference anchor="AltSvc">
          <front>
            <title>HTTP Alternative Services</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="P. McManus" initials="P." surname="McManus"/>
            <author fullname="J. Reschke" initials="J." surname="Reschke"/>
            <date month="April" year="2016"/>
            <abstract>
              <t>This document specifies "Alternative Services" for HTTP, which allow an origin's resources to be authoritatively available at a separate network location, possibly accessed with a different protocol configuration.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7838"/>
          <seriesInfo name="DOI" value="10.17487/RFC7838"/>
        </reference>
        <reference anchor="IPV6">
          <front>
            <title>Internet Protocol, Version 6 (IPv6) Specification</title>
            <author fullname="S. Deering" initials="S." surname="Deering"/>
            <author fullname="R. Hinden" initials="R." surname="Hinden"/>
            <date month="July" year="2017"/>
            <abstract>
              <t>This document specifies version 6 of the Internet Protocol (IPv6). It obsoletes RFC 2460.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="86"/>
          <seriesInfo name="RFC" value="8200"/>
          <seriesInfo name="DOI" value="10.17487/RFC8200"/>
        </reference>
        <reference anchor="QUIC">
          <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="RFC7413">
          <front>
            <title>TCP Fast Open</title>
            <author fullname="Y. Cheng" initials="Y." surname="Cheng"/>
            <author fullname="J. Chu" initials="J." surname="Chu"/>
            <author fullname="S. Radhakrishnan" initials="S." surname="Radhakrishnan"/>
            <author fullname="A. Jain" initials="A." surname="Jain"/>
            <date month="December" year="2014"/>
            <abstract>
              <t>This document describes an experimental TCP mechanism called TCP Fast Open (TFO). TFO allows data to be carried in the SYN and SYN-ACK packets and consumed by the receiving end during the initial connection handshake, and saves up to one full round-trip time (RTT) compared to the standard TCP, which requires a three-way handshake (3WHS) to complete before data can be exchanged. However, TFO deviates from the standard TCP semantics, since the data in the SYN could be replayed to an application in some rare circumstances. Applications should not use TFO unless they can tolerate this issue, as detailed in the Applicability section.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7413"/>
          <seriesInfo name="DOI" value="10.17487/RFC7413"/>
        </reference>
        <reference anchor="RFC9002">
          <front>
            <title>QUIC Loss Detection and Congestion Control</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="I. Swett" initials="I." role="editor" surname="Swett"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document describes loss detection and congestion control mechanisms for QUIC.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9002"/>
          <seriesInfo name="DOI" value="10.17487/RFC9002"/>
        </reference>
        <reference anchor="RFC8765">
          <front>
            <title>DNS Push Notifications</title>
            <author fullname="T. Pusateri" initials="T." surname="Pusateri"/>
            <author fullname="S. Cheshire" initials="S." surname="Cheshire"/>
            <date month="June" year="2020"/>
            <abstract>
              <t>The Domain Name System (DNS) was designed to return matching records efficiently for queries for data that are relatively static. When those records change frequently, DNS is still efficient at returning the updated results when polled, as long as the polling rate is not too high. But, there exists no mechanism for a client to be asynchronously notified when these changes occur. This document defines a mechanism for a client to be notified of such changes to DNS records, called DNS Push Notifications.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8765"/>
          <seriesInfo name="DOI" value="10.17487/RFC8765"/>
        </reference>
        <reference anchor="RFC6877">
          <front>
            <title>464XLAT: Combination of Stateful and Stateless Translation</title>
            <author fullname="M. Mawatari" initials="M." surname="Mawatari"/>
            <author fullname="M. Kawashima" initials="M." surname="Kawashima"/>
            <author fullname="C. Byrne" initials="C." surname="Byrne"/>
            <date month="April" year="2013"/>
            <abstract>
              <t>This document describes an architecture (464XLAT) for providing limited IPv4 connectivity across an IPv6-only network by combining existing and well-known stateful protocol translation (as described in RFC 6146) in the core and stateless protocol translation (as described in RFC 6145) at the edge. 464XLAT is a simple and scalable technique to quickly deploy limited IPv4 access service to IPv6-only edge networks without encapsulation.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6877"/>
          <seriesInfo name="DOI" value="10.17487/RFC6877"/>
        </reference>
      </references>
    </references>
    <?line 659?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The authors thank Dan Wing, Andrew Yourtchenko, and everyone else who
worked on the original Happy Eyeballs design <xref target="RFC6555"/>, Josh
Graessley, Stuart Cheshire, and the rest of team at Apple that helped
implement and instrument this algorithm, and Jason Fesler and Paul
Saab who helped measure and refine this algorithm. The authors would
also like to thank Fred Baker, Nick Chettle, Lorenzo Colitti, Igor
Gashinsky, Geoff Huston, Jen Linkova, Paul Hoffman, Philip Homburg,
Warren Kumari, Erik Nygren, Jordi Palet Martinez, Rui Paulo, Stephen
Strowes, Jinmei Tatuya, Dave Thaler, Joe Touch, and James Woodyatt
for their input and contributions.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAKCN9GcAA+1923IbSZLle3xFNPXQ5BgIkdSdNTXdFKUqsZuSOCSrasvW
1qwCQADIViITkxdSKJn6W/Zb9svWj7tHZGQCVPXavs6MdYkEM+Pi4Zfjt8Dh
4aFpsib3p3bvnVuvN/btxk9cntf2Z1/VWVnYJ6f2tW8aX9nzsij8tMnusmZj
f6qzYoGPpm1V+WK62TNuMqn83fZId0/2zNQ1flFWm1NbNzNjZuW0cCuadVa5
eXOY+WZ+uMRb8l+vrx7ePTk8OjJ1O1llNVbTbNb00sXb2x9M0a4mvjo1Mxr5
1EzLovZF3dantqlab2gZT4yrvDu1v1zcmvuy+rSoynZ9at+dXV39an+hD7CB
H/Gh+eQ39MTs1NhDm63vnuu/T/Fv5ab0IH5qpmv8819tNsW/9d10gn/9dGnu
fNHSKqxNJ6FfZb39yaxduSw/tbzTv2Lr47KiCayrpkv6uGnW9enjx3gIn2R3
fhweeowPHk+q8r72j/n9x5gza5bt5NQyFe8XQsLHQlkhakJPej4nitUNnVOY
6l968fEfHtV42azyPWNc2yzLCsSkyaydt3kuh31brlYbe+XafMN/oR25Ivvd
NXSyp/Zsvc69vSim/DcvRNpr1nj8rw5/HE/L1d72sG/cXTazN0Sqwv2ehZFP
7Y9luaARLy/PeyPOan2SyfrXBT5+YOQP2WyZ2b+5f7R/OGqBR/9BT/51wQ88
MOLffZHR9PaiXmYTR//ZQYgHZuDHe6OboqxW9NIdsZ7Jinnymzk8PLRuUjfE
vo0x712xsfTOqqXpeRq7rsqmnJYkn+XaV/QZMWh5R2LeLL1dlTNfFXQYJPeF
b2xbe7Ms6wabqMf2dulrb8t54wtb+brM77xtSrtq8ybjQ7yybjajv9S+Hlnv
pkt62NwvaevE/BtifXphls3nnlRHY2l+Xnsx9dYVM1pop2jMdOmwB19ldZNN
afKbDM/Vaz/N5tm0m4ioGH6xc7fK8ow+27+4IjGmv9C/zw948om3k7ycfvKz
kSVR+uSLEV4lJXNYrpts5XJL5HGW9g21MbJTGqloatMsXWMdqcLVuun2GhZL
CshmRFZabZ77XPboLC0fy6Xtk8y5SZ7RIRKlXfIeUbvyrFY+5RsQN6stKch2
BdroPn1tKk+PVB6f0gax2Zw0Ksn+qra8tMrPWpqqwft0YNXhXVZnE1rizOe0
b6KsoUMnWSG6uML6z26FDcRhRjQCnQgNg8N09VCR78naTFxbu4byrZlj4ig0
Wz2tsjXvjAhy/cO5ffnk6NlYeHKVzWa5N+YRmKsqacV48L859L859F/gUOKh
/twzP8+KLQ7E1EPeHdGGGjLVRfZfBA/wBC8GO91eSQ36zlqXHxJFpp8sGKsO
3I8pM6ZKyv8Drv/y5S/v3v588j1xP5j/69eRZeYyWVP7fG7LCfGkb0jU6El6
6PmzZ/QQ78/bAX7qNlbOFY70zpT4Wll8ZjpeW5IA157EhbiFdrHw/KC7K8lW
6ibpdywd+6fV+QJPm3VZMyV4wUSQtSgFTKoPYxlg1iEjzLJ62mJuEsR7DE6M
RbJu33y4Id4h8aAlYBosp2q2eIxZuiO6EaYeWR1sSmCugfSRKJDoE+WIUxus
hUhPo4nO6PbflCrO2LWKREK1Ecuxjk1E9by77gGj79R0Jmc1NBPJjWjGL19w
tDjSprd/mptI3q7XZdUwD5IaKCv6jVWXufn5/LV9bN/d3l7d8IG1Fc1aeXqG
3tu/vq4PzJcvf8JjYJtXT58fEUdYfo3+aFUyiB2g8tjQG1/M1mUGccNuXF2X
08yBqyIaAE0mZdtEbRpWOLJvi2m1WdPT5pxJ/c7nOXb3p7fn776/OHzD+Oiw
IWzn6yL7+tUSTAbdVIMtMS/9uippcyVRDyKV+ztHpOC/2USd+nwNRUEra9fp
oUeVAwoabCJbYaPKlesqu3NTUjlviLeg+8E1w50Q0+Bzw0LQYtgR/YlmdqKF
QPHHT8R0/OdPF+cqcq+Oj5/iEEnGCE+bdr2o3AzjT0itet+zP4VwB7s6KRsF
zqpHhL/qxrsZGPLeZczec1HaNalF5g99FjwEMUrPaF6VKyXiTLe6sSsP3ZzV
qzruB3uxZx0H2Btf3WVTkjnaFH1+czcF87x4+eQlmEfMYOCxKQnPxKssErvk
dHL2njSLPWPde0b/Fx4W+WCJZy0361l40bp9MQej4gzWcMV4k+EoA8dgxO7w
iFeYhmOAAXiS5ESJQsNzb6KarUUpEvPZe97G3vufbm5JofO/9sNH/vn6LR3t
9ds3+Pnm3dnlZfzB6BM37z7+dPmm+6l78/zj+/dvP7yRl+lT2/vI7L0/+3VP
6LH38er24uOHs8s9KPmB+FcMMSY4WDof0ptMNVgMmIYJS6V9fX71f/738VOI
GZ3TyfHxKxIs+eXl8QtiSFaRMltZ5Bv9lQ5iY8gseAe1Ap6l01xnjctxUsQf
dBYFiVnliZz/9j9Bmf91av99Ml0fP/0P/QAb7n0YaNb7kGm2/cnWy0LEHR/t
mCZSs/f5gNL99Z792vs90D358N//khMX2sPjl3/5D3J4iIk+3kEY/P1DKMGR
RJFryjL6kA4aWSBI5nwzDGScd+/c+KZdKyC29FRVAkImNtfMgAaLKSle+tTX
5JMdjwmuEkuLxNMaXL0ppsuqLMq27lnJ/S9f8OPm69cDfu2mFHsJ+6+W/gGr
R2/W8nB49xtT7tBjGCCxkmGQtymJME5ZpMZSwQ0UzNQzYiGEysosjGt2jPuh
bLzgwoEg1TX9UIc/BQjigVLXZZ5NN6xZcUIAZrsoQfD6rqxqhimi+IGyx/I7
Tomg/AaCmVVuwiAHLkYD2uPDRSGWHrIsOkwwbRwJ2vbi6ufnjO9Ojo4UuvV2
kdflv7QVWSkbJoxvbs+vxvor5F9Bdc0kXxMwImeHlhaZlri69mSZeudhVo4j
TlkjqJ2WnSIYmgJGEJMw1DjSHVzMeZFM1Yz5Y54tWn1p6BLFndSsngwMx4q2
PnPR1eifq5of7+qM9uVmDtiDtf87ddzsdTTh9j8hAASFybZgJ18eiUQY8wsg
pFOfhw9zQrzGx8Jak884ddD4U1pIU20YxZYmJV4iBGwKnSoAEGEEAhaEWtic
1R46maAU5hNjiZHPUtEd29dYTBBk1Yi065UDdCP1UIJLyS+tDA7UFSonhO86
4I114CB4Dt63vD/PKjoZmOqMKD0D1MshDEAwtOTJRt6SVwBcZzM2oSSPG9qL
nK4Sjvnz3hWNOhBTz3AiAalmN0glzsFTgE5EHd1hRowuEJpH4AX0Fjnxc/iQ
cVdCuajwCOgBXGS/Bz8jGaZmdzoTBuJl0wd5O/N9KHpA4t3bIViDRYgIbcRn
eWrV0e4xCG+EdAhpLd5HPViB5dVFjwIKXjZBH4bzCWaAHqUNj22n3FoCREbo
Kz4PD+yK+t5Xo3S9q2yxFHZj8MQUnbdgj8hsj+OMmU8dPx6mFijI/BtIBMxh
8Mfra8g33GnIoopoZ7AZs6rPnuvi2IciFNNWRTg+Ved9D7RvQPkUwNpyeHOX
5bpSHgh0dJ9o8dCyCI8QB9IRAYoishOeG6UgmjegcqIrAyv0R5AQwsCJ80O7
hb+LFNESGR9XvLPeQShZGnicBsLdeRYQ1NSGpget8rXOXQNgT4qPtknyTbw3
56VvG/yzqwv1Iiee9Cu4TLVkna3anHH3ZBO0ee0Ru6Hp0mGUGUIQi53oqKSb
Je1hpmGFfoDETZm84M4g/bNI3plfk7Jjx4fwJ1MeKl7pUzMx2yYyIsYLfmpn
RvTpWTYDFdiQ0XnEBwkRHYJXHDRfxs6MOiDiQth91/1MZ9o4cgggQI3NyYbw
CRpr71xOE/Cb19cHkMO4Gz7oUXLmPckn9rAxMkCvpdqKIxQwTlsr7Ja0NZPd
V4eX5ZjOcNZigczTHLOg1R/sYjSWPQcMT85sk5H0BnxjBySB4S/qtlKOS9AE
rWZBSynwCLZJLjDUJo2QqS1freBnysDbw4oRUfsR/zBBosbZub+nXeUkSGQI
iC9C5IdFjumQxo2xZxpmLzHmb/Dk3liIWfiF23XcBW2uqkpSikVJYxCOcP3z
hF3MxBUfjo0IbQZk322PhohjwxSAByfeJ9yu9pLN+nznsDSGDLzr2EjbT1VZ
K+ZOgXjtQfwUjrPNQyhuweGrneib3rJDpGzbmjOQFiFygTlxmrgXsopzV+0U
vocEL3lMh6l5isjsHRsgCLqfyqCInfLnyJ5xgJon0IDE+3IGo3OgtpXEqd59
cOD3KkRHLZ93W9i2IHMswK4HGbam6AIO8L8DOUbGcrBdnt8pshIrT9BEPdQs
AV0oy/2GzDCQxm8cQidX0hO9rf3ISYHBTByOS4YT1RPxCqB0jxd1wZiHCWL9
5zVQf4/vlOHqDiDyJzQgsa/yWbduX/8xwxG//EDTMp3vXJUpLlBpSDJDfHSd
r47jb320zVuHSoR+dtRXGcyZBSmSLfbC0VX4QALOu+QCZ5txRG6BrY3MBDBc
MQknjuI77BCAtNH2e5FeOUVaQb4xncHraMVThIAtAyeNj4c4s7tDSh7uItlo
Eix6yvQFHqK7dIRk6iDug0Patbd7ohLqF+j0iKTxaEGqZHWzGbYhYtF3vonY
JtkrHKpHnd/0PmSBADcgOMCuYVg+k1X6RC1P9MmS+IHBfmgo1MQUVIpjQ/6M
Yds6hB7gPolP2gt2mOhUB2yOmIX95P06C+HJZkdSRGMuI7Ptawk+0WGfB+Nc
9MMNmWCzJLtRKoqWZdKK+xifQRb4jthDAVGgk1GBSSioeR5xSO2dFtO0tdiL
piKkxbFresWsaAgkaMSDSQNBvBNdWE+DzErFVMzHXdh1pHpNH9Ns4spVnzgW
SdaMnMHsd4Z6sziNYE4TZhOovYsdJBmioWdeECHFvNxIeGSCCICXZCFBE9IR
7GiKT55YLRTmkIJburZuwNWCUEjjEUMHzbztxUNOmK9MgD1N5nJB6QzvFR4o
S9aKNtIzqU0/pEGkcVPIJqf+IseMZHbCY20+44c4jKOvmC6OU3UaRBK6cLrP
FSRvaHOrno8lCVfkNdd5NqVd59kqi+crBU3gO/CELFkjR+oTdIsntJ/xIa1c
0cK7B5sqnNH9jyHbkjbQedj6cTCJoc/SVbN7nAT/1WlWrJNjoytHqqJnyuKO
q3IlXkefBvIHwNdOY0KHcqgnhDKjDrJfHgWIZMzrLTcTmT/hAgaXpOtV1nYF
Qk2S008Ukh6khIFFKwGOw6LEFCFDFFl0sI1i2bvHo2WRgfqYEEfElDLkufWS
1qwzNW0rPpqoRA4CRdgvWJpR4xD/ESOrgwKN4dit03BiLxWaFXccCyB+SOwS
HwYb+FhywOCEhKlLcPGA26jEMEtliE1lCI27Wn6VlFm6faLgwsuawlbJB53C
bpqB5g4mBPJbCWeMWJn9g9RB31mTgB7/alL1x4ooDR979V/YS1YOI/Fbi/1y
SMlPpTAB2XDOfq68A5Q1cYQ+uMdDQaPwqeEDojQX+PEe8KnpjUsTCsxJ2DR4
1PQfL2cRYLgkdVKzJTO4JbnssCgYJUZisEoeA5RKEr0as1T0iTDdlg+gadLa
3l7edElfq3pKsr77b8/fHSSpx2ZJ+1wsTTJubTU7fbiVH0Yp5KGfLhETlNAB
W9AiCRr8uU691S5rSGPt8q2Y/B0TY5eGHuUUNAJIkgfmmOGGC3vIMYFzEjLG
UmiwM1zVDwppbCSwMZcnlMFZ2eFn0eGzvu6EQpjEMJMwd4ygXUMwLi5So0O1
FywZR1avCqdtwml3fKKkHxN0A7oMo339yiw48w3Ca/09KAXZtWEy9neSdYlt
UR+aLAeHGU47YGshHEs7ZrN4e37F4p/F7De0fc0ajER04QskvRhZ14QneRqH
THojvgxwBlcZ4T86AmFVC+9Dy3xGnPToCoA088LVKhkzpVZeLaDwiblAuarM
Rx2DJ4e8yhaVk9yUpp1lVME2E1rvHED0yxdMGipvilFP5EXWSfDIaro8HmWP
XzmxGsicqF322ckb6lJTavHoJDXxjVwb8r7PX5w8HdHH8uFzaPyhCNORENM2
ft7mUreCMKQlJmzKilVNBE+05GJ22FTZ2sCRRMz+9rY+iFqX/t5oKRAjn54B
TyP69BEZs29voGpzH8sl8EttX/L6XqXxqdr0BdkiW1FZrGsYsgfqR6IG8QYU
UnBQIOHdRhC0euRrpymadMmaUEkWbv5g4ezB3t7Kh1g9//AqJDXDJnjmpJYP
YtEW/CmhohATQ6VLbXvoDbCgpwi74kMtXbEomYY9nAaWZf+ECeNqCQeSBJof
AME+kn7VEpYXT4+fkCpgNx/I+90GWUz/ubG30cG4CsK+j6TOASHg8lPWLZdZ
iObNOd5mQ50A7JFseFqVWGcIKQePT4oc5m6qeKIzY/O8hR8aK8oQkPasC9U3
NglKBSMKmQWgksYmfmQv9gPtY5dpWJW0mM02/EHOBGsioMo+QsA2jHYGVZdj
+0vM5JDPMgksTjwXXjRb73FYQ7CJMiDP27kJaSLOFbE4K0ABYcyofNEbIEeH
fE1/Jg1YpIMEUC2Px1G4TkRSI4MRNPzwwCiDxTw0TF9DmyzNoAziYwpfBIpC
PbExSWGb7Mp0IyAP3XNrO1quSrW2KanFZZOIkkn+kMR3ZOAw9dNvjRy8uaya
2d5gkXJbK31wPBPGIyZoK9JxyYBje1bYrJd6s+/PfiVxKEsNvqMGgKOOiWke
Mh+71eCsAHRj4CZRSnOx4+kw+rq6u4KIwKOakNWkeGSJRBwIWNz2HFOOUi1a
pJ0GcwY69YXJJHUV7L5P/LDGnDMFV/HDqK3Ou4HMOdm0Zk/Mv3jCLvrC7F1y
NDIU46DCtY7pQwWyZMq42i3G8vr+kdPkyYDkYsT1jx1Rs3k/MlGKluud3dZY
WW2IBxy87y3nJTJVNFC9mjFGm3Usk825EizXDPDOOqDvyM/mzP2W6TM7Qccz
xCuB+6TOnU0awCvKEXdU13AFQs0pQAT2pnTIwgZJuYfEIYO7/9qJnaQDVjz8
5VEEs0bcjFBXwNWuGfkQUy747SB08Lp2JgDGUn8TH05IFPMmIfnfqxsIonp9
rcXZbH7vPfLgkhDZ4QYADnFoMFRohDQoDL0m4HnUfjqEM86JTwCQnD6hviGY
xeX3qNFecNkzxiWWOhorqaJXGaKjsDvE2SSqXqy5BOj3Q93o8QF7wqKjjSZG
2cKlIy2zBVTAYJQ6eZWbx6oeA7u46riaW1ctfPMBZNgb76VHwXrmnpyFHpGu
r7ty00gc1WVx9G4Ug0PpyA92CfCWjSNPwGUQoQI27JI2YoKbPYVnFQO/3UR/
7piII1ZJ1d9ZiNl/eZSGaIyJkaJt/fKg5xjjSdy82FTttBnElFhlhgw1O7mf
et0cHCiX2BSIwqX9bUEMU5cF68UAsvLS0ci7kg9JdJJsIRcZceVB4wpPah4A
4EIKm0fDtEOyMIdk8yKP/o/6K0xn5bVhkRIbm7pvdzm4SAzFngu5vF2bAJIh
O6YOFRbWSbAJQeeMlh1jeCzKOxphOgIgQl5Op22VtsaMJavHFVpq3na9S8Il
+ThUXbbsTpEeHXXljyZt0+jKv2OwDUvf+CYM5FMYLbWUMBZnnQrSOJBms/Fq
Z9DZJUyWGYcy2aIoYXYsMbAaHSKwsNrOGtQN45NkEcjq9xNSzJuSUhdHQSQw
S53wsX1HR34XypwQ1o75Zg7eVjHcw8VXIVEmJTci7RGwBl5GzjEETUPSfy5V
E/uxBDGG948VLR5o8NJLHsGsyzWX18S0zRRuRwox4qaSCv5U9ow5sxrqHWA7
DKC9VfPss9d2Gx4LFfOMQ+D2EEIxisJiR4zs9POuHoNvFF2YAKS2dVUsvfhY
SB1foE/M4LJ/NnckJCaOfTLM3pK6ZfxZtOCI2WDLf9ZlGUXFpFnFLM+Czufz
uQ+YOshpWn5TeYGiMMIcHKyXUHfRgoW8nNMTZUh+8+sHyfPrZxxBkornnI58
ElCHJAw466ad5JpmD2jo5NXLr19HRjtDjo5OJO6+VU+Y+MsIGbDPvOB8ILil
a+IY9GdF08SltWXFQYXs8yhUNUqIABAx6Qlhh5a8aanvaZTGacWZBuNDokGo
b7jmsakY8nOa9HO2CqzO59BD7B2ppbjY9Okkhpl1LKmhOXwbbvRJn1G1JMlG
E9fMut5/JjYIqTom+USCO3ONWj7EshKKUDmSiNEEsa2R9dxxyFkvQuIkRFLe
tG6hBQWyD8IaY/uepUw7MqUc1iWSnSjqXggkGDGNCh73pSIQcmh2BOWlwrbK
CrKqKxU6Wu/xUX+oEGzKarPLQXqv739Dvlk56DwmzhMTfrH3rxdAzXO3riMM
o33UEqWdMxQ0whGHOSJAKIqQxtqHj0y1echztmtS0EZPbee23Oc/3pY3oe9q
W31BVdmuwoQcjjcoy1lJlZLaZARNH6pWRfZRLbew40zfj/Ggey0330Yf3O0R
pyCvDEwoTZ37STwlmP2QxGWTSjb1IK2yhNvQhawmXvtSZ8NS/9S48olPObkl
iT+uc65C/l2d0SjfdZeb7mmnEKKEPmXVsQ9uh2+HfBH7sv1gkWHdtO432bUk
5CGzxE1qyRwHghYCaQmCdwfTP42osJWUwSRibXEjrOAQwaODwRKlmVj0fLnm
7pQ5v7GfLrC/vBSZHcQG6kFYJtZE8xJopk5Xks1Njz6s14ewip4yp8EGBiFJ
MN9qIcoa1n9KgKTioAOH+TFvKGXoMtUO7SGHkUWlG/Lzpqs5nTrRgD2KSfuC
gEyjbdykR7lcdMnhEY+kQXnoB73tiUt3eZNOq/UJcrCo8daWlX6v+ZJDxtDT
oWBfe1VMR0nRPVnFKbxkycEjbLWIP9TFd4XqRpyO3qnEgxijUQTlZF2pDSkU
zuJHosSsVSinYcVFSrAh06GVcN1xPSyKI4m+M3+Vi8qt6ajSecgwGpQDs7hz
bVKxy+uvNcEFBIVcf90rzbBp5nLYPE3Q/gduOKYHiPFGSKseTt1aqtWUuWUZ
XKLDadzK5xmqCcLfCQuFeNATiJBEYw5EA4Y1mpCvZAXup8s9e3M3vUJB5N8J
XEsMBxlitJ8KfjJdEkurVlyxawVdxeahlEiQ9Y55WdcY4fGaWFJKNvpDPKTg
NcOiCnYawtC9/F3kqXgSKsZacZkWopkHjnlQd4fbbMJFFpfMeDG0+cEvytCS
t392efXhQEzPby5fF78xE/xWlIcKyg/l04TIrA7iSmOgDGvb448xJhLNoz3V
GvGKBt45mWNPioapEoUjGh+j2dTOVU+qDUJWO+QTVAsn9NRi49p0ZQ5dgk7D
iwo2iLSztoNlEuvsePDF+Hh8YiIfSqxTLci/sA8xbNyqlSwvRJmGGwk5ZAE4
/YQTYUEzjML0AIFEQIYj3i8hwb0DMTFgkWT9h0veUbkxyMLwx7UfJIhJqMTw
diIjmrOr/yDTwRbWaD1iv6/88fH4mAnEv5yIAs6S4vBenY2Riwyur0+N+ec/
/2nC8nA10dg+P7IXH/Sug2NclXU87v19n682suDt7/eWT/bsgOFtKLb+/uTo
6Ph0Nnl5enpiD3gmcvA00kB7GaVFHsNTSd9lILPRuEwIp8QiMgj/b8Nl/mbv
Q5KHK4MrxJhIg7qQ0UWkVsVPD2/HGP0zkMsIOteUmZP5QxAt8TvosasCYNcB
x3G5wuuMqEeKYtddAF31POeBbw5iCdKA26W/RMqiHirFRsCSPKxQdJnU6esC
YoF8HSWur5nYo98t96/GsD5GpJ4jsNwpxRFcey4pZPtGtPofNGgjTqv12KDn
KDEGsLOV3GXycCt4CA5p+NjIYOzWZiFZivEiGyXl4PNOYtEIBHZEAGzdEngg
DcB+qBh2CTq8fPGcszB8M82qvBNsJ44ltwFv3fCSTjEKc3DfQKw+u729FO/C
NRpVQ9D7YJSqRI3ZVN5NEwCOeEPwu0LZ/dj2GkoN54i0lTO5OqLfibErFH6X
iZ03koCRNILWtiWNi8JS2+OHPEsXZkp6b0K+rYukMjk1PJNmecnUPWR5EvwT
KvpsEtveOaJuI0fHHaprZz11FC2IhhRGD0SV+xH5GIDlynOjlecTL0lgAcSh
dSCGq8Lqum6TWQgXm+Gy7NayOmv9EOlML7/B1eybXVTinoUQ/RKaZ2m5hCZi
en0W/bF3BLn7WRuvVUdugntGtHq267iSimNRkXgHyb/Dj9DHH4Jnxfrrw9nt
c6k1JSF5/jS4DitNHD4XfCGXPnXWuquXBeqeOVqXFtYbqYoHOVcI+PHVIAxR
XKXVsqE/iytjNK4iyXMOYnHDsixLI5THT5+rFuc1dh+/oI+53kJi2pWNvTjS
lVobCSeENUmJU7hVQPUjBGC4JESMQ1O6uXebpGqz4axa5552CbjeIOEJdhj5
Ji25FUZCx/bp86f/4/LsNlyB9fLFCzgN4dOlC0WYuFLILfiKstBImrEeD4uX
C3Vo52tc5FSX8waF7d8h3C7ph6yJOzYEQg/DPQo4k1yQuJa2uAS3Z6GMj5PH
edbAW5TsdwRyvoAhweoCwkwGCCsR91suK9Kbm6TR5WMR24VVDaonGp5WYoi2
6Fs744sFoLBKa9LA+dBNDHWHjKQwI98EtC+ioY72N0RDg7Zz75q2ktsyHqhT
0GXxkLj1gTOSUhXG1kev7mi4lLRLtCVshaSDZliWvpXb9TjZMV1m/i40XfPp
T5eemEuPMGSKuO265opH9oOxxWA+6VRHXfpQGrTTB2OhDz/I0TwZjRtKTMxf
6VPi/PF7oeLiMrDLl0eBcxiE7OATvhgQDAya18tBz0O6GhOG2sUQVhlCUnMa
LgkuF59jxL31pgCtO7ldiQaKqgMHma1wAy0G2XvdrtaHWXFITx4a3NaxF/TP
syeEWrgtSjoURLSZH2rcVrZjmXk2qRybjC6TwQEU3qlkRkLRAUpLJGSsFToh
gRIbz9SDMUdj/v/HL0f2+ORF8svzV+OTZ0/51+PncpYnz56Nk/89fiLOjmnC
dQBdfxUrjSAFQ+qNw20kRb84jEN6dd03brxpm1wT5uKFlXKaqjOTtpur67c/
PH+a9pnDDl+jhLcyZ7M7lFbVejeN3iH14uVxF3mJohA5PVwipyMLEOxPLAng
QcqVfxcqyAFpU/Lem9gyoJCT7eWVPPNTyKHyh7EWKZBvz8iiXxw946vuLkIB
vj7wu1wDmdyr0S/f2S8ro9ctaZM0rwAqeSYWL1FOe+katMEPh/ZYOktu1RSU
VR15++jZiV6ilixp2DOKFePyN78NZvqFIKjpnWsK2jNClkp5PlMoFS0j+m6n
25Wo9+FVq9ggAyCzs30cNUNc4J8YO7mcaEeFVL8yKvYBJQEnjXOFq1bFSrzm
W0q1HCd0izySu0tJ6501veTjfcW1ecz13AkIWjlbr1A4AVVSlMVh4Rd5tuDG
PClABCKKN7xavU803uyq10B0PgiJ+SRZVbjWTi+FvPehHYyOpedcBMeXwzNE
zxWCzBsdPzUhtAisteEwT4JZuagY5QvahMJjcW2+JqLbunWoQKiaeFGt5IZG
tufRcZwBUThu2H9PRNqslXGjoA1qcOHj/a51OlIeyb4HvQ6lwZcb5nKhaY7u
38MQhkYpHzpQA/Lli3YCl3FIfdNrxpWcRh0i/cPaP3PflQFMEf9X2Mi6ujvD
wY2fNm0m3phYYUK8jAbZilsL22Kqucswdlk8BF7MELzozbwCoCtkImptRGdr
DoaXAeFdyjXmHH6/00t1Qll/qEWIN1ns74XLK2jFGi7YO0huQ5yHYrXAZllX
uZUol1FXosLdyd1fhs5v7ZOsUUJTbJZfV0NjYIhsqILF2W1LxZhDat1yFBLK
LPWUoFuVlf1gUcT3ejeWXPYTWDDeMqITdBXVAY7kJXLznSGVkzEyJSrjmamS
bUFhSi8ffNRktZzyBoFQ5IaAWtfwW+vdOuGOJnU9AyTtil3v+0FsA9dD4Ea7
DlLbPz3EKbjKhEMzoiWTjOzEB5TKUfRQRxxuOSI9SAK3Oyd+iR4PXKhQNeaS
qRTtpSbFv1O0EOuAhkVPSUr8dhkulEhK8uJ2c1fvCvJpnwN2dAGX65vJby5b
0xEBxnmyeXd3hXBK7NIfskjP6vDh6n1E8d4AF3S7EeqPpOWbD0FsaqatkQpu
usRF4oppbCBCcQkOPLI/Z1WD5q4r9A0SwAiBATKagKQP/dnu/3z1oY7XdQ9v
ygv3HsdtxwCKkCP4+4mS1sQfwMuKZRZtvOF1qXFCuUoTQ/Z7/zbmfpfC5WnA
eS/YFCwQzGjY2G8tUi4XBJRkRZJYlQTowp8WiI0Ss+NXJwSj6X+PT54mtX3Z
XDpsZS1RaINaVYBh/Gd9IJ1ipFoGQiNxdb2BTX25LsfTNR7Vnb4nFzG9KXxk
c48GK+nXl6zh3v39/W5CMQ/TB2pFOnVFTsOrl+Nnx+Pjo6Px05ORkRKongro
JYpY4fL1gIG9FUSXGqekEy02f6532BxVjS6pieTRFECowa296c0b1C8hQj5H
7gccOCHDzvkZJFkOPFQ8B+9V7aJEJLu16nqi8/CJ5jNbjkA5PKnOjkt1G8cz
OkPWdH2SmJidTO142jHIn+uhuTa7FzZYfWTH5EoA3PUTVmSq5Oa8wLJj+1qz
O4povmXzeiNES9e5ITsoGc0gmz9EXzqyyPElvVLRX+jSC73zhcoz31R5W+rO
3rSrlRNf7TxtoPmZ6/wltqM1/0lJX6o5XB2qRRW/KXHmEsLAdYPDm1oqLzU4
fGkAY9mt+4KSC29PbbBZ/WqP/m1hRm5PSK5VLJJ7y8bshPSN4vZ9RIf2231H
lvuO+lfqyupiR1TqC3hY9yQy/dAVIV1ZknzjgzjS/Tdi9VZ8FtU1Bxor6e4l
GXRzmSQX2nSVxL3+xsFi0ju5x2abbMffEZxQNggFaVxg5hacEyKBzPUSW+tM
Akn/X6alo3iwpnDr4uAdDKKdvGaX46yekZvE0sZQuLuDS8xW4bO4Xt+uvnxo
jaHqU9dq0rXuvI1rB9uSCTL9Suy0PjXXnoCt0lRZ9x+UVz64bn3v/2fdaVnm
oU1Ard0JarEUDRfsOmEV916ZPINXUZm6Kfb5taBePTTWzUbuw/2DVd5GUK0a
8OHYNqPNWIwyMzR7VkldMRTxyru6SzTTPtRrT4vjWHdy3Owe8TgUh0jzsX4j
Ti8zpBGjNW5ynsmFkvxFKnww0uaPlPJUbmzRSLKksMQ7wgLUP0ojewyfmM4c
rqz1KibTv4pJVFNs5CznqZdNUMVz9anUqDDkkg6k3fc6CdxTCvPrmlSXb/ZB
4093TS0uxlZtN/c+R1Mel6/pFyh095zG8bhwVfL0Qv+s7sq+pVJOsA4zjmJN
uY4qrJL1AAuW3JkZ3Bj+ypQuNco3v3C2XEAaqEh6Wj3ImPlBDkm+QIEN8GVX
0GeGhlIvuGLfQb3LVNpQZck5Fz2SWPNkpLAxmgou5JWvujhIcmASs4mjoAmh
+1Yjo6SAppdmHG2pYiSDEFcq+eI6XTnad9Axt2lvxU+0+viVHRu5YxCrSgRA
7ycd5gYyrfbE7bS4brwr3gsU6ao9nTaBdMFtCXV01IvPjvSoiTXlUl065fe3
P4Wa7JWrP2lidEGsVagwhen7axzzdobVrugnCPoeI8PkhUuzjk+OjkgvNPwt
HX/SC9e75tuX4+PDZ5LEXbSO6Nh4TfhrgJSzu/o1TSxgOforq8D1ODPtxIoX
buE7A/K7KAJymfSgZddstexyyjfNAamg7V1xvlS/oS7UM/Lx3/5k4kGHwPnT
lyfHUrrzaLsOMhY2ST0KLnuud7Wy8/02UcATXGuS4M4gXyt37iX00C8O41JS
vkpKw4eOi9i5T2+u6a9zuSBXHcQ6lix3N2nItm/gh+Brv/ZvL28OYr2chsUz
tjofk2kvhPHMRdfwiW9/wh5mchkPeF1PdigO3EoG+6Ds27vernd3DpxwYsB6
EFOAM6Nfg0CGvKvbYsyW6feISagr+NdiONjV4JgRV3hHuo2GWgvUlsZ2iQzz
1ssKXvgky/V6JhEokU3sZGwumq3YFfYfc7c6TK1lCzZGD3BvF4yQodPK0OQj
iFuvRe4Wqi3EfJ358PYPdoX0HIGOkKmsglZOOpvTFK3aIckKokx/zbSrJWUc
PEgU0ccs64oG6C8PeZY6TNzZ1KAM9a5xOFcGdA31Zgq94ncM7DgCrkolrcvY
PM8+0RKNVgjual9Mu3a7iE3fqF5cde4Nk+zi7MPZFrkGX7USdHHInHJmCe+5
2DfJ3wOILjCMeTaF85772YLTmObLqThXfvb93pw8V7+njTkSjhe0+8m+IcH4
hXNIZwUt8d7+ims3puRbfyolxwujt0FUx9MgKMblL4HtsjDEOQQRiKEGxJTv
/+h9LdvI/q2sl+bHyhEtcr8h1d20iJmdE5hZZrg9PlQ5onmAdYp3KxgA+VJT
6fj1+RqptFj+wuW13Pm9knrOtJlPhvwbgJT9wdOsEj3Al6eaG+cm2JEOqXhT
7y4Klxymg0nQKFCQkzMSFQSjaDSIiPoDXM/XxEiEFj4Q1sT+mgba5ZK4qvi9
pMMnuWqykb2gkc2P+EbSov5EBPnRl/O5fdfWDQDT34hZLzM6ijs34iXbd/Rn
Ahr0G2mXbE2/ryZttRiZXxxqDO3f25WraNy3VfbJftiQa4lhUOpF7+e+IZwB
5O9/H9nrNuMxSxyDXyP9etNUuP+A3siKlc/srWvaDU39BhVat0saoMJo9HNJ
GCmQFrD5l7Kcbch/MBqPztBEsW6bcNdYQw5Aq4z7fwFFdUrgLXkAAA==

-->

</rfc>
