Topic: RFC: class namespace ("final" draft)


Author: Matthew Woehlke <mwoehlke.floss@gmail.com>
Date: Fri, 29 Jan 2016 11:39:51 -0500
Raw View
This is a multi-part message in MIME format.
--------------020805000103030209010508
Content-Type: text/plain; charset=UTF-8

Please see the updated version of my "class namespace" proposal.

Abstract: this proposal revives N1420, adding the ability to declare a
"class namespace" (or struct, or union) in much the manner of a regular
namespace:

  struct Foo {
    Foo();
    int bar();
  };

  namespace class Foo {
    Foo() { ... }
    int bar() { ... }
  }

(Reminder: this *just* "hoists" the class name to a scope; new members
may *not* be added.)

I'm hoping that this will be the final version prior to publication.

Online copy:
https://github.com/mwoehlke/cpp-proposals/blob/master/dxxxx-class-namespace.rst

--
Matthew

--

---
You received this message because you are subscribed to the Google Groups "ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an email to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
Visit this group at https://groups.google.com/a/isocpp.org/group/std-proposals/.

--------------020805000103030209010508
Content-Type: text/prs.fallenstein.rst;
 name="dxxxx-class-namespace.rst"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
 filename="dxxxx-class-namespace.rst"

=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
  Class Namespace
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D

:Document:  DXXXX (TBD)
:Date:      2016-01-26
:Project:   ISO/IEC JTC1 SC22 WG21 Programming Language C++
:Audience:  Evolution Working Group
:Author:    Matthew Woehlke (mwoehlke.floss@gmail.com)

=2E. raw:: html

  <style>
    html { color: black; background: white; }
    table.docinfo { margin: 2em 0; }
  </style>

=2E. role:: cpp(code)
   :language: c++

Abstract
=3D=3D=3D=3D=3D=3D=3D=3D

This proposal provides a new language feature, "class namespace", as a sh=
ortcut for providing a series of definitions belonging to a class scope, =
similar to the manner in which a traditional namespace can provide a seri=
es of definitions belonging to a namespace scope.

This proposal is effectively a continuation / resurrection of N1420_ whic=
h was tagged for further consideration without being either accepted or r=
ejected. However, much of the text of this proposal was written prior to =
the author's discovery of the same.

In contrast to N1420, we avoid use of the term "reopen", which implies th=
e ability to add to a class. Class definitions are currently closed; memb=
ers may only be added to a class during the initial definition thereof (t=
emplate specialization notwithstanding). Although many have asked for the=
 ability to add members to classes after the definition, such proposals a=
re generally not well received. Although it is not the intent of this pro=
posal to categorically forbid any such future direction, we also recogniz=
e these concerns and specifically do not wish to suggest any movement in =
that direction.

=2E. contents::


Rationale
=3D=3D=3D=3D=3D=3D=3D=3D=3D

`Don't Repeat Yourself <https://en.wikipedia.org/wiki/Don't_repeat_yourse=
lf>`_ (DRY) is a well known principle of software design. However, there =
are certain instances when providing definitions of class members that ca=
n fall prey to repetition, to the detriment of readability and maintainab=
ility.

We will present, as a particularly egregious example, a complicated templ=
ate class:

=2E. code:: c++

  template <typename CharType, typename Traits, typename Allocator>
  class MyString { ... };

There are strong reasons why method definitions should not be inline. For=
 starters, they inhibit readability; it is difficult to quickly parse the=
 interface |--| especially the public interface |--| as declarations and =
definitions are necessarily interleaved. Additionally, they are *inline*,=
 which results in all manner of compile time and cross-version compatibil=
ity issues. Even for template classes, it is sometimes preferred to keep =
definitions in a separate TU (e.g. extern templates with only specific, e=
xported explicit instantiations).

The problem that arises is the necessity to repeat a long prefix for all =
definitions provided outside of the class definition. For example:

=2E. code:: c++

  template <typename CharType, typename Traits, typename Allocator>
  MyString<CharType, Traits, Allocator>::MyString
  { ... }

This repetition increases the space over which accidental errors may be i=
ntroduced, and increases the work required for refactoring. The problem i=
s compounded for templates within templates.

This is a real, extant problem. Presumably as a result of this overhead, =
some authors will use only inline definitions of methods, which can make =
it difficult to separate implementation details |--| which are often unne=
cessary noise for a user trying to understand a class |--| from a class's=
 interface. Other authors may resort to separating return types, template=
 parameters, class names, and method names, placing each on separate line=
s, resulting in method headers that are four lines long even before the a=
rgument list is considered. In the latter case, the need to repeat the cl=
ass prefix is frustrating and, in the author's opinion, unnecessary.

(See https://groups.google.com/a/isocpp.org/forum/#!topic/std-proposals/e=
0_ceXFQX-A for additional discussion.)

It is also worth noting that this situation is inconsistent with namespac=
es. Given a function declared in a namespace:

=2E. code:: c++

  namespace Foo
  {
    void foo();
  }

=2E..there are currently two ways to provide the definition:

=2E. code:: c++

  // Method 1: fully qualified
  void Foo::foo() { ... }

  // Method 2: namespace scope
  namespace Foo
  {
    void foo() { ... }
  }

There is currently no equivalent to the second form for class members. Th=
is proposal would remove this inconsistency.


Proposal
=3D=3D=3D=3D=3D=3D=3D=3D

This proposal is to eliminate the redundancy by introducing a new "class =
scope" syntax, as follows:

=2E. code:: c++

  template <...> // optional; only used for template classes
  namespace class Name
  {
    // definitions of class members
  }

The effect of this scope is to treat each member definition (variable or =
method) as if it were prefixed by the class template specification and na=
me. Specifically, these two codes would be exactly equivalent:

=2E. code:: c++

  // Declarations
  class A { ... };

  template <typename T> class B { ... };

  // Existing syntax
  A::A(...) { ... }
  A::Enum A::foo(...) { ... }
  int A::value =3D ...;

  template <typename T> B<T>::B(...) { ... }
  template <typename T> B<T>& B<T>::operator=3D(B<T> const& other) { ... =
}
  template <typename T> void B<T>::bar(...) { ... }

  // Proposed syntax
  namespace class A {
    A(...) { ... }
    Enum foo() { ... }
    int value =3D ...;
  }

  template <typename T>
  namespace class B {
    B(...) { ... }
    B& operator=3D(B const& other) { ... }
    void bar(...) { ... }
  }

Following the introduction of the scope (i.e. the keywords :cpp:`namespac=
e class`), the template parameters shall be implicitly applied to the cla=
ss name and any subsequent mention of the class name that does not have a=
n explicit argument list. It shall be an error to provide an argument lis=
t for the introducing class name except in the case of specialization. Ty=
pe name look-up within the scope shall additionally consider the class sc=
ope first (note in the above example the use of :cpp:`Enum` without the :=
cpp:`B::` qualifier). (These rules should be applied in the same manner a=
s for a class definition. Note that this only affects non-trailing return=
 types, as other types already use the class scope for type resolution.)

Some consequences of the scope acting simply as a name transformation sho=
uld be noted. First, such a scope can be "opened" on the same class name =
any number of times. Second, definitions in a class name scope may be mix=
ed with traditional, fully qualified definitions (provided that no defini=
tions are duplicated, as always). Third, an empty scope is permissible as=
 long as the named class is recognized. Last, but perhaps most important,=
 the scope does not permit the addition of members not present in the cla=
ss definition, nor in general does it allow the user to accomplish anythi=
ng that could not be accomplished otherwise.

Additionally:

- While :cpp:`namespace class` is being used for illustrative purposes, :=
cpp:`namespace struct` and :cpp:`namespace union` shall also be permitted=
, and shall provide equivalent function. (In general, the use of "class" =
throughout should be understood to mean any class-type.)
- Use of a class name scope requires that the named class has been define=
d. Forward declaration is not sufficient.
- Nested class name scopes are permitted.
- Any members that may legally be defined using their qualified name may =
be defined within a class name scope. This includes member types, member =
functions, and static member variables.
- As with traditional namespaces, a :cpp:`;` is not required following th=
e closing :cpp:`}`.
- Access modifiers are not allowed in a class name scope. The :cpp:`virtu=
al` and :cpp:`static` modifiers are not allowed in a class name scope. (N=
one of these are allowed outside of a class definition, and the class nam=
e scope is not a class definition.)
- A class name scope may not add class members to a class definition.
- This proposal does not affect :cpp:`using` directives. (A :cpp:`using` =
directive on a class name scope remains illegal.)


Specification
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D

The most straight forward way in which to describe this feature is with a=
 syntax transformation. Specifically, the syntax:

=2E. parsed-literal::

  *[<template_specification>]* **namespace class** *<name>* **{**
    *[<type>]* *<member_name><...>*
  **}**

=2E..shall be equivalent to:

=2E. parsed-literal::

  *[<template_specification>]* *[<type>]* *<name>*\ **::**\ *<member_name=
><...>*

=2E..for each *<member_name>* in the scope. Rules for interpretation of m=
embers within a class name scope, and for what sorts of code is permitted=
 or ill-formed, may all be derived directly from this transformation. Typ=
e resolution for the return type (where applicable) shall proceed accordi=
ng to the same rules that would apply within the class definition.


Interactions
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D

The token sequences :cpp:`namespace class`, :cpp:`namespace struct` and :=
cpp:`namespace union` are currently ill-formed, so no existing code would=
 be affected by this proposal. This proposal does make any changes to oth=
er existing language or library features (although implementations would =
be free to make use of it in their standard library implementations, shou=
ld they desire to do so).


Additional Examples
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D

This feature is particularly useful for template members of template clas=
ses, including nested template types:

=2E. code:: c++

  template <typename T> class Foo
  {
    template <typename U> void foo(U);
    template <typename U> class Bar { Bar() };
  };

  template <typename T> namespace class Foo
  {
    template <typename U> void foo(U) { ... }

    template <typename U> class Bar
    {
      Bar() { ... }
    }
  }

  // Compare to the old syntax:
  template <typename T>
  template <typename U>
  void Foo<T>::foo<U>(U) { ... }

  template <typename T>
  template <typename U>
  void Foo<T>::Bar<U>::Bar() { ... }

Per the transformation rule, it works with specializations, as one would =
expect:

=2E. code:: c++

  template <> namespace class Foo<int>
  {
    ...
  }

(Note that this is allowed with or without a specialization of :cpp:`Foo<=
int>`, just as it is currently permitted to specialize class members with=
out specializing the entire class definition. Naturally, if the class def=
inition *is* specialized, then definitions in the corresponding class nam=
e scope must match members declared in said specialization.)


Discussion
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D

Syntax
------

The proposed syntax for introducing the scope is open for debate. Alterna=
tive suggestions include:

#. :cpp:`class namespace <name>`
#. :cpp:`namespace <classname>`
#. Introduction of a new contextual keyword, e.g. :cpp:`class <name> impl=
ementation`.
#. Introduction of a new (global) keyword, e.g. :cpp:`implement class <na=
me>`.

The author considers #1 to be very nearly as good as the suggested syntax=
=2E #2 is okay, but risks confusion, as the reader must know a priori if =
the named scope is a class (the #2 syntax would only introduce a class na=
me scope if the identifier following the :cpp:`namespace` keyword is an a=
lready declared class-type). #3 is of similar quality to #2; it lacks the=
 ambiguity problem, but the indication that "something is different" occu=
rs later, and it does require a new (albeit contextual) keyword. #4 has t=
he advantage of maximum possible clarity, but introducing new keywords wi=
thout breaking existing code is always tricky.

We additionally feel that the proposed syntax is the most consistent with=
 the current state of the language. It maintains the traditional order of=
 tokens, e.g. compared to use of traditional namespaces. It uses tokens i=
n an order than makes sense according to English grammar rules, i.e. *<ve=
rb> <adjective> <noun>* (with :cpp:`namespace` here acting as a verb, ind=
icating that a scope block is starting) with :cpp:`namespace class Foo` c=
omparable to e.g. "open blue ball".

Inline
------

Should :cpp:`inline namespace class <name>` be permitted? The "inline nam=
espace" concept does not make sense in this context. If it is permitted, =
it should be equivalent to including :cpp:`inline` as part of every conta=
ined definition. The author's inclination is to forbid use of :cpp:`inlin=
e` with :cpp:`namespace class`.


Acknowledgments
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D

This proposal is a continuation of N1420_ by Carl Daniel. It was original=
ly written prior to the author's discovery of N1420. The original feature=
 request that spawned this new proposal comes from John Yates. Miro Knejp=
 and P=C3=A9ter Radics contributed valuable suggestions. Other contempora=
ry participants include Larry Evans, Russell Greene, Bjorn Reese, Evan Te=
ran and Andrew Tomazos. (The author also acknowledges prior discussion of=
 a very similar feature: see https://groups.google.com/a/isocpp.org/d/msg=
/std-proposals/xukd1mgd21I/uHjx6YR_EnQJ and https://groups.google.com/a/i=
socpp.org/d/msg/std-proposals/xukd1mgd21I/gh5W0KS856oJ.)


References
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D

=2E. _N1420: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n142=
0.pdf

* N1420_ Class Namespaces

  http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1420.pdf

=2E. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..=
 .. ..

=2E. |--| unicode:: U+02014 .. em dash

=2E. kate: hl reStructuredText

--------------020805000103030209010508
Content-Type: text/html; charset=UTF-8;
 name="dxxxx-class-namespace.html"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="dxxxx-class-namespace.html"

PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjwhRE9DVFlQRSBodG1s
IFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRw
Oi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4K
PGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJl
biIgbGFuZz0iZW4iPgo8aGVhZD4KPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBj
b250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIC8+CjxtZXRhIG5hbWU9ImdlbmVy
YXRvciIgY29udGVudD0iRG9jdXRpbHMgMC4xMTogaHR0cDovL2RvY3V0aWxzLnNvdXJjZWZv
cmdlLm5ldC8iIC8+Cjx0aXRsZT5DbGFzcyBOYW1lc3BhY2U8L3RpdGxlPgo8bWV0YSBuYW1l
PSJkYXRlIiBjb250ZW50PSIyMDE2LTAxLTI2IiAvPgo8bWV0YSBuYW1lPSJhdXRob3IiIGNv
bnRlbnQ9Ik1hdHRoZXcgV29laGxrZSAobXdvZWhsa2UuZmxvc3MmIzY0O2dtYWlsLmNvbSki
IC8+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CgovKgo6QXV0aG9yOiBEYXZpZCBHb29kZ2Vy
IChnb29kZ2VyQHB5dGhvbi5vcmcpCjpJZDogJElkOiBodG1sNGNzczEuY3NzIDc2MTQgMjAx
My0wMi0yMSAxNTo1NTo1MVogbWlsZGUgJAo6Q29weXJpZ2h0OiBUaGlzIHN0eWxlc2hlZXQg
aGFzIGJlZW4gcGxhY2VkIGluIHRoZSBwdWJsaWMgZG9tYWluLgoKRGVmYXVsdCBjYXNjYWRp
bmcgc3R5bGUgc2hlZXQgZm9yIHRoZSBIVE1MIG91dHB1dCBvZiBEb2N1dGlscy4KClNlZSBo
dHRwOi8vZG9jdXRpbHMuc2YubmV0L2RvY3MvaG93dG8vaHRtbC1zdHlsZXNoZWV0cy5odG1s
IGZvciBob3cgdG8KY3VzdG9taXplIHRoaXMgc3R5bGUgc2hlZXQuCiovCgovKiB1c2VkIHRv
IHJlbW92ZSBib3JkZXJzIGZyb20gdGFibGVzIGFuZCBpbWFnZXMgKi8KLmJvcmRlcmxlc3Ms
IHRhYmxlLmJvcmRlcmxlc3MgdGQsIHRhYmxlLmJvcmRlcmxlc3MgdGggewogIGJvcmRlcjog
MCB9Cgp0YWJsZS5ib3JkZXJsZXNzIHRkLCB0YWJsZS5ib3JkZXJsZXNzIHRoIHsKICAvKiBP
dmVycmlkZSBwYWRkaW5nIGZvciAidGFibGUuZG9jdXRpbHMgdGQiIHdpdGggIiEgaW1wb3J0
YW50Ii4KICAgICBUaGUgcmlnaHQgcGFkZGluZyBzZXBhcmF0ZXMgdGhlIHRhYmxlIGNlbGxz
LiAqLwogIHBhZGRpbmc6IDAgMC41ZW0gMCAwICEgaW1wb3J0YW50IH0KCi5maXJzdCB7CiAg
LyogT3ZlcnJpZGUgbW9yZSBzcGVjaWZpYyBtYXJnaW4gc3R5bGVzIHdpdGggIiEgaW1wb3J0
YW50Ii4gKi8KICBtYXJnaW4tdG9wOiAwICEgaW1wb3J0YW50IH0KCi5sYXN0LCAud2l0aC1z
dWJ0aXRsZSB7CiAgbWFyZ2luLWJvdHRvbTogMCAhIGltcG9ydGFudCB9CgouaGlkZGVuIHsK
ICBkaXNwbGF5OiBub25lIH0KCmEudG9jLWJhY2tyZWYgewogIHRleHQtZGVjb3JhdGlvbjog
bm9uZSA7CiAgY29sb3I6IGJsYWNrIH0KCmJsb2NrcXVvdGUuZXBpZ3JhcGggewogIG1hcmdp
bjogMmVtIDVlbSA7IH0KCmRsLmRvY3V0aWxzIGRkIHsKICBtYXJnaW4tYm90dG9tOiAwLjVl
bSB9CgpvYmplY3RbdHlwZT0iaW1hZ2Uvc3ZnK3htbCJdLCBvYmplY3RbdHlwZT0iYXBwbGlj
YXRpb24veC1zaG9ja3dhdmUtZmxhc2giXSB7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLyog
VW5jb21tZW50IChhbmQgcmVtb3ZlIHRoaXMgdGV4dCEpIHRvIGdldCBib2xkLWZhY2VkIGRl
ZmluaXRpb24gbGlzdCB0ZXJtcwpkbC5kb2N1dGlscyBkdCB7CiAgZm9udC13ZWlnaHQ6IGJv
bGQgfQoqLwoKZGl2LmFic3RyYWN0IHsKICBtYXJnaW46IDJlbSA1ZW0gfQoKZGl2LmFic3Ry
YWN0IHAudG9waWMtdGl0bGUgewogIGZvbnQtd2VpZ2h0OiBib2xkIDsKICB0ZXh0LWFsaWdu
OiBjZW50ZXIgfQoKZGl2LmFkbW9uaXRpb24sIGRpdi5hdHRlbnRpb24sIGRpdi5jYXV0aW9u
LCBkaXYuZGFuZ2VyLCBkaXYuZXJyb3IsCmRpdi5oaW50LCBkaXYuaW1wb3J0YW50LCBkaXYu
bm90ZSwgZGl2LnRpcCwgZGl2Lndhcm5pbmcgewogIG1hcmdpbjogMmVtIDsKICBib3JkZXI6
IG1lZGl1bSBvdXRzZXQgOwogIHBhZGRpbmc6IDFlbSB9CgpkaXYuYWRtb25pdGlvbiBwLmFk
bW9uaXRpb24tdGl0bGUsIGRpdi5oaW50IHAuYWRtb25pdGlvbi10aXRsZSwKZGl2LmltcG9y
dGFudCBwLmFkbW9uaXRpb24tdGl0bGUsIGRpdi5ub3RlIHAuYWRtb25pdGlvbi10aXRsZSwK
ZGl2LnRpcCBwLmFkbW9uaXRpb24tdGl0bGUgewogIGZvbnQtd2VpZ2h0OiBib2xkIDsKICBm
b250LWZhbWlseTogc2Fucy1zZXJpZiB9CgpkaXYuYXR0ZW50aW9uIHAuYWRtb25pdGlvbi10
aXRsZSwgZGl2LmNhdXRpb24gcC5hZG1vbml0aW9uLXRpdGxlLApkaXYuZGFuZ2VyIHAuYWRt
b25pdGlvbi10aXRsZSwgZGl2LmVycm9yIHAuYWRtb25pdGlvbi10aXRsZSwKZGl2Lndhcm5p
bmcgcC5hZG1vbml0aW9uLXRpdGxlLCAuY29kZSAuZXJyb3IgewogIGNvbG9yOiByZWQgOwog
IGZvbnQtd2VpZ2h0OiBib2xkIDsKICBmb250LWZhbWlseTogc2Fucy1zZXJpZiB9CgovKiBV
bmNvbW1lbnQgKGFuZCByZW1vdmUgdGhpcyB0ZXh0ISkgdG8gZ2V0IHJlZHVjZWQgdmVydGlj
YWwgc3BhY2UgaW4KICAgY29tcG91bmQgcGFyYWdyYXBocy4KZGl2LmNvbXBvdW5kIC5jb21w
b3VuZC1maXJzdCwgZGl2LmNvbXBvdW5kIC5jb21wb3VuZC1taWRkbGUgewogIG1hcmdpbi1i
b3R0b206IDAuNWVtIH0KCmRpdi5jb21wb3VuZCAuY29tcG91bmQtbGFzdCwgZGl2LmNvbXBv
dW5kIC5jb21wb3VuZC1taWRkbGUgewogIG1hcmdpbi10b3A6IDAuNWVtIH0KKi8KCmRpdi5k
ZWRpY2F0aW9uIHsKICBtYXJnaW46IDJlbSA1ZW0gOwogIHRleHQtYWxpZ246IGNlbnRlciA7
CiAgZm9udC1zdHlsZTogaXRhbGljIH0KCmRpdi5kZWRpY2F0aW9uIHAudG9waWMtdGl0bGUg
ewogIGZvbnQtd2VpZ2h0OiBib2xkIDsKICBmb250LXN0eWxlOiBub3JtYWwgfQoKZGl2LmZp
Z3VyZSB7CiAgbWFyZ2luLWxlZnQ6IDJlbSA7CiAgbWFyZ2luLXJpZ2h0OiAyZW0gfQoKZGl2
LmZvb3RlciwgZGl2LmhlYWRlciB7CiAgY2xlYXI6IGJvdGg7CiAgZm9udC1zaXplOiBzbWFs
bGVyIH0KCmRpdi5saW5lLWJsb2NrIHsKICBkaXNwbGF5OiBibG9jayA7CiAgbWFyZ2luLXRv
cDogMWVtIDsKICBtYXJnaW4tYm90dG9tOiAxZW0gfQoKZGl2LmxpbmUtYmxvY2sgZGl2Lmxp
bmUtYmxvY2sgewogIG1hcmdpbi10b3A6IDAgOwogIG1hcmdpbi1ib3R0b206IDAgOwogIG1h
cmdpbi1sZWZ0OiAxLjVlbSB9CgpkaXYuc2lkZWJhciB7CiAgbWFyZ2luOiAwIDAgMC41ZW0g
MWVtIDsKICBib3JkZXI6IG1lZGl1bSBvdXRzZXQgOwogIHBhZGRpbmc6IDFlbSA7CiAgYmFj
a2dyb3VuZC1jb2xvcjogI2ZmZmZlZSA7CiAgd2lkdGg6IDQwJSA7CiAgZmxvYXQ6IHJpZ2h0
IDsKICBjbGVhcjogcmlnaHQgfQoKZGl2LnNpZGViYXIgcC5ydWJyaWMgewogIGZvbnQtZmFt
aWx5OiBzYW5zLXNlcmlmIDsKICBmb250LXNpemU6IG1lZGl1bSB9CgpkaXYuc3lzdGVtLW1l
c3NhZ2VzIHsKICBtYXJnaW46IDVlbSB9CgpkaXYuc3lzdGVtLW1lc3NhZ2VzIGgxIHsKICBj
b2xvcjogcmVkIH0KCmRpdi5zeXN0ZW0tbWVzc2FnZSB7CiAgYm9yZGVyOiBtZWRpdW0gb3V0
c2V0IDsKICBwYWRkaW5nOiAxZW0gfQoKZGl2LnN5c3RlbS1tZXNzYWdlIHAuc3lzdGVtLW1l
c3NhZ2UtdGl0bGUgewogIGNvbG9yOiByZWQgOwogIGZvbnQtd2VpZ2h0OiBib2xkIH0KCmRp
di50b3BpYyB7CiAgbWFyZ2luOiAyZW0gfQoKaDEuc2VjdGlvbi1zdWJ0aXRsZSwgaDIuc2Vj
dGlvbi1zdWJ0aXRsZSwgaDMuc2VjdGlvbi1zdWJ0aXRsZSwKaDQuc2VjdGlvbi1zdWJ0aXRs
ZSwgaDUuc2VjdGlvbi1zdWJ0aXRsZSwgaDYuc2VjdGlvbi1zdWJ0aXRsZSB7CiAgbWFyZ2lu
LXRvcDogMC40ZW0gfQoKaDEudGl0bGUgewogIHRleHQtYWxpZ246IGNlbnRlciB9CgpoMi5z
dWJ0aXRsZSB7CiAgdGV4dC1hbGlnbjogY2VudGVyIH0KCmhyLmRvY3V0aWxzIHsKICB3aWR0
aDogNzUlIH0KCmltZy5hbGlnbi1sZWZ0LCAuZmlndXJlLmFsaWduLWxlZnQsIG9iamVjdC5h
bGlnbi1sZWZ0IHsKICBjbGVhcjogbGVmdCA7CiAgZmxvYXQ6IGxlZnQgOwogIG1hcmdpbi1y
aWdodDogMWVtIH0KCmltZy5hbGlnbi1yaWdodCwgLmZpZ3VyZS5hbGlnbi1yaWdodCwgb2Jq
ZWN0LmFsaWduLXJpZ2h0IHsKICBjbGVhcjogcmlnaHQgOwogIGZsb2F0OiByaWdodCA7CiAg
bWFyZ2luLWxlZnQ6IDFlbSB9CgppbWcuYWxpZ24tY2VudGVyLCAuZmlndXJlLmFsaWduLWNl
bnRlciwgb2JqZWN0LmFsaWduLWNlbnRlciB7CiAgZGlzcGxheTogYmxvY2s7CiAgbWFyZ2lu
LWxlZnQ6IGF1dG87CiAgbWFyZ2luLXJpZ2h0OiBhdXRvOwp9CgouYWxpZ24tbGVmdCB7CiAg
dGV4dC1hbGlnbjogbGVmdCB9CgouYWxpZ24tY2VudGVyIHsKICBjbGVhcjogYm90aCA7CiAg
dGV4dC1hbGlnbjogY2VudGVyIH0KCi5hbGlnbi1yaWdodCB7CiAgdGV4dC1hbGlnbjogcmln
aHQgfQoKLyogcmVzZXQgaW5uZXIgYWxpZ25tZW50IGluIGZpZ3VyZXMgKi8KZGl2LmFsaWdu
LXJpZ2h0IHsKICB0ZXh0LWFsaWduOiBpbmhlcml0IH0KCi8qIGRpdi5hbGlnbi1jZW50ZXIg
KiB7ICovCi8qICAgdGV4dC1hbGlnbjogbGVmdCB9ICovCgpvbC5zaW1wbGUsIHVsLnNpbXBs
ZSB7CiAgbWFyZ2luLWJvdHRvbTogMWVtIH0KCm9sLmFyYWJpYyB7CiAgbGlzdC1zdHlsZTog
ZGVjaW1hbCB9CgpvbC5sb3dlcmFscGhhIHsKICBsaXN0LXN0eWxlOiBsb3dlci1hbHBoYSB9
CgpvbC51cHBlcmFscGhhIHsKICBsaXN0LXN0eWxlOiB1cHBlci1hbHBoYSB9CgpvbC5sb3dl
cnJvbWFuIHsKICBsaXN0LXN0eWxlOiBsb3dlci1yb21hbiB9CgpvbC51cHBlcnJvbWFuIHsK
ICBsaXN0LXN0eWxlOiB1cHBlci1yb21hbiB9CgpwLmF0dHJpYnV0aW9uIHsKICB0ZXh0LWFs
aWduOiByaWdodCA7CiAgbWFyZ2luLWxlZnQ6IDUwJSB9CgpwLmNhcHRpb24gewogIGZvbnQt
c3R5bGU6IGl0YWxpYyB9CgpwLmNyZWRpdHMgewogIGZvbnQtc3R5bGU6IGl0YWxpYyA7CiAg
Zm9udC1zaXplOiBzbWFsbGVyIH0KCnAubGFiZWwgewogIHdoaXRlLXNwYWNlOiBub3dyYXAg
fQoKcC5ydWJyaWMgewogIGZvbnQtd2VpZ2h0OiBib2xkIDsKICBmb250LXNpemU6IGxhcmdl
ciA7CiAgY29sb3I6IG1hcm9vbiA7CiAgdGV4dC1hbGlnbjogY2VudGVyIH0KCnAuc2lkZWJh
ci10aXRsZSB7CiAgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWYgOwogIGZvbnQtd2VpZ2h0OiBi
b2xkIDsKICBmb250LXNpemU6IGxhcmdlciB9CgpwLnNpZGViYXItc3VidGl0bGUgewogIGZv
bnQtZmFtaWx5OiBzYW5zLXNlcmlmIDsKICBmb250LXdlaWdodDogYm9sZCB9CgpwLnRvcGlj
LXRpdGxlIHsKICBmb250LXdlaWdodDogYm9sZCB9CgpwcmUuYWRkcmVzcyB7CiAgbWFyZ2lu
LWJvdHRvbTogMCA7CiAgbWFyZ2luLXRvcDogMCA7CiAgZm9udDogaW5oZXJpdCB9CgpwcmUu
bGl0ZXJhbC1ibG9jaywgcHJlLmRvY3Rlc3QtYmxvY2ssIHByZS5tYXRoLCBwcmUuY29kZSB7
CiAgbWFyZ2luLWxlZnQ6IDJlbSA7CiAgbWFyZ2luLXJpZ2h0OiAyZW0gfQoKcHJlLmNvZGUg
LmxuIHsgY29sb3I6IGdyZXk7IH0gLyogbGluZSBudW1iZXJzICovCnByZS5jb2RlLCBjb2Rl
IHsgYmFja2dyb3VuZC1jb2xvcjogI2VlZWVlZSB9CnByZS5jb2RlIC5jb21tZW50LCBjb2Rl
IC5jb21tZW50IHsgY29sb3I6ICM1QzY1NzYgfQpwcmUuY29kZSAua2V5d29yZCwgY29kZSAu
a2V5d29yZCB7IGNvbG9yOiAjM0IwRDA2OyBmb250LXdlaWdodDogYm9sZCB9CnByZS5jb2Rl
IC5saXRlcmFsLnN0cmluZywgY29kZSAubGl0ZXJhbC5zdHJpbmcgeyBjb2xvcjogIzBDNTQw
NCB9CnByZS5jb2RlIC5uYW1lLmJ1aWx0aW4sIGNvZGUgLm5hbWUuYnVpbHRpbiB7IGNvbG9y
OiAjMzUyQjg0IH0KcHJlLmNvZGUgLmRlbGV0ZWQsIGNvZGUgLmRlbGV0ZWQgeyBiYWNrZ3Jv
dW5kLWNvbG9yOiAjREVCMEExfQpwcmUuY29kZSAuaW5zZXJ0ZWQsIGNvZGUgLmluc2VydGVk
IHsgYmFja2dyb3VuZC1jb2xvcjogI0EzRDI4OX0KCnNwYW4uY2xhc3NpZmllciB7CiAgZm9u
dC1mYW1pbHk6IHNhbnMtc2VyaWYgOwogIGZvbnQtc3R5bGU6IG9ibGlxdWUgfQoKc3Bhbi5j
bGFzc2lmaWVyLWRlbGltaXRlciB7CiAgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWYgOwogIGZv
bnQtd2VpZ2h0OiBib2xkIH0KCnNwYW4uaW50ZXJwcmV0ZWQgewogIGZvbnQtZmFtaWx5OiBz
YW5zLXNlcmlmIH0KCnNwYW4ub3B0aW9uIHsKICB3aGl0ZS1zcGFjZTogbm93cmFwIH0KCnNw
YW4ucHJlIHsKICB3aGl0ZS1zcGFjZTogcHJlIH0KCnNwYW4ucHJvYmxlbWF0aWMgewogIGNv
bG9yOiByZWQgfQoKc3Bhbi5zZWN0aW9uLXN1YnRpdGxlIHsKICAvKiBmb250LXNpemUgcmVs
YXRpdmUgdG8gcGFyZW50IChoMS4uaDYgZWxlbWVudCkgKi8KICBmb250LXNpemU6IDgwJSB9
Cgp0YWJsZS5jaXRhdGlvbiB7CiAgYm9yZGVyLWxlZnQ6IHNvbGlkIDFweCBncmF5OwogIG1h
cmdpbi1sZWZ0OiAxcHggfQoKdGFibGUuZG9jaW5mbyB7CiAgbWFyZ2luOiAyZW0gNGVtIH0K
CnRhYmxlLmRvY3V0aWxzIHsKICBtYXJnaW4tdG9wOiAwLjVlbSA7CiAgbWFyZ2luLWJvdHRv
bTogMC41ZW0gfQoKdGFibGUuZm9vdG5vdGUgewogIGJvcmRlci1sZWZ0OiBzb2xpZCAxcHgg
YmxhY2s7CiAgbWFyZ2luLWxlZnQ6IDFweCB9Cgp0YWJsZS5kb2N1dGlscyB0ZCwgdGFibGUu
ZG9jdXRpbHMgdGgsCnRhYmxlLmRvY2luZm8gdGQsIHRhYmxlLmRvY2luZm8gdGggewogIHBh
ZGRpbmctbGVmdDogMC41ZW0gOwogIHBhZGRpbmctcmlnaHQ6IDAuNWVtIDsKICB2ZXJ0aWNh
bC1hbGlnbjogdG9wIH0KCnRhYmxlLmRvY3V0aWxzIHRoLmZpZWxkLW5hbWUsIHRhYmxlLmRv
Y2luZm8gdGguZG9jaW5mby1uYW1lIHsKICBmb250LXdlaWdodDogYm9sZCA7CiAgdGV4dC1h
bGlnbjogbGVmdCA7CiAgd2hpdGUtc3BhY2U6IG5vd3JhcCA7CiAgcGFkZGluZy1sZWZ0OiAw
IH0KCi8qICJib29rdGFicyIgc3R5bGUgKG5vIHZlcnRpY2FsIGxpbmVzKSAqLwp0YWJsZS5k
b2N1dGlscy5ib29rdGFicyB7CiAgYm9yZGVyOiAwcHg7CiAgYm9yZGVyLXRvcDogMnB4IHNv
bGlkOwogIGJvcmRlci1ib3R0b206IDJweCBzb2xpZDsKICBib3JkZXItY29sbGFwc2U6IGNv
bGxhcHNlOwp9CnRhYmxlLmRvY3V0aWxzLmJvb2t0YWJzICogewogIGJvcmRlcjogMHB4Owp9
CnRhYmxlLmRvY3V0aWxzLmJvb2t0YWJzIHRoIHsKICBib3JkZXItYm90dG9tOiB0aGluIHNv
bGlkOwogIHRleHQtYWxpZ246IGxlZnQ7Cn0KCmgxIHR0LmRvY3V0aWxzLCBoMiB0dC5kb2N1
dGlscywgaDMgdHQuZG9jdXRpbHMsCmg0IHR0LmRvY3V0aWxzLCBoNSB0dC5kb2N1dGlscywg
aDYgdHQuZG9jdXRpbHMgewogIGZvbnQtc2l6ZTogMTAwJSB9Cgp1bC5hdXRvLXRvYyB7CiAg
bGlzdC1zdHlsZS10eXBlOiBub25lIH0KCjwvc3R5bGU+CjwvaGVhZD4KPGJvZHk+CjxkaXYg
Y2xhc3M9ImRvY3VtZW50IiBpZD0iY2xhc3MtbmFtZXNwYWNlIj4KPGgxIGNsYXNzPSJ0aXRs
ZSI+Q2xhc3MgTmFtZXNwYWNlPC9oMT4KPHRhYmxlIGNsYXNzPSJkb2NpbmZvIiBmcmFtZT0i
dm9pZCIgcnVsZXM9Im5vbmUiPgo8Y29sIGNsYXNzPSJkb2NpbmZvLW5hbWUiIC8+Cjxjb2wg
Y2xhc3M9ImRvY2luZm8tY29udGVudCIgLz4KPHRib2R5IHZhbGlnbj0idG9wIj4KPHRyIGNs
YXNzPSJmaWVsZCI+PHRoIGNsYXNzPSJkb2NpbmZvLW5hbWUiPkRvY3VtZW50OjwvdGg+PHRk
IGNsYXNzPSJmaWVsZC1ib2R5Ij5EWFhYWCAoVEJEKTwvdGQ+CjwvdHI+Cjx0cj48dGggY2xh
c3M9ImRvY2luZm8tbmFtZSI+RGF0ZTo8L3RoPgo8dGQ+MjAxNi0wMS0yNjwvdGQ+PC90cj4K
PHRyIGNsYXNzPSJmaWVsZCI+PHRoIGNsYXNzPSJkb2NpbmZvLW5hbWUiPlByb2plY3Q6PC90
aD48dGQgY2xhc3M9ImZpZWxkLWJvZHkiPklTTy9JRUMgSlRDMSBTQzIyIFdHMjEgUHJvZ3Jh
bW1pbmcgTGFuZ3VhZ2UgQysrPC90ZD4KPC90cj4KPHRyIGNsYXNzPSJmaWVsZCI+PHRoIGNs
YXNzPSJkb2NpbmZvLW5hbWUiPkF1ZGllbmNlOjwvdGg+PHRkIGNsYXNzPSJmaWVsZC1ib2R5
Ij5Fdm9sdXRpb24gV29ya2luZyBHcm91cDwvdGQ+CjwvdHI+Cjx0cj48dGggY2xhc3M9ImRv
Y2luZm8tbmFtZSI+QXV0aG9yOjwvdGg+Cjx0ZD5NYXR0aGV3IFdvZWhsa2UgKDxhIGNsYXNz
PSJyZWZlcmVuY2UgZXh0ZXJuYWwiIGhyZWY9Im1haWx0bzptd29laGxrZS5mbG9zcyYjNjQ7
Z21haWwuY29tIj5td29laGxrZS5mbG9zcyYjNjQ7Z21haWwuY29tPC9hPik8L3RkPjwvdHI+
CjwvdGJvZHk+CjwvdGFibGU+CjxzdHlsZT4KICBodG1sIHsgY29sb3I6IGJsYWNrOyBiYWNr
Z3JvdW5kOiB3aGl0ZTsgfQogIHRhYmxlLmRvY2luZm8geyBtYXJnaW46IDJlbSAwOyB9Cjwv
c3R5bGU+PGRpdiBjbGFzcz0ic2VjdGlvbiIgaWQ9ImFic3RyYWN0Ij4KPGgxPjxhIGNsYXNz
PSJ0b2MtYmFja3JlZiIgaHJlZj0iI2lkMSI+QWJzdHJhY3Q8L2E+PC9oMT4KPHA+VGhpcyBw
cm9wb3NhbCBwcm92aWRlcyBhIG5ldyBsYW5ndWFnZSBmZWF0dXJlLCAmcXVvdDtjbGFzcyBu
YW1lc3BhY2UmcXVvdDssIGFzIGEgc2hvcnRjdXQgZm9yIHByb3ZpZGluZyBhIHNlcmllcyBv
ZiBkZWZpbml0aW9ucyBiZWxvbmdpbmcgdG8gYSBjbGFzcyBzY29wZSwgc2ltaWxhciB0byB0
aGUgbWFubmVyIGluIHdoaWNoIGEgdHJhZGl0aW9uYWwgbmFtZXNwYWNlIGNhbiBwcm92aWRl
IGEgc2VyaWVzIG9mIGRlZmluaXRpb25zIGJlbG9uZ2luZyB0byBhIG5hbWVzcGFjZSBzY29w
ZS48L3A+CjxwPlRoaXMgcHJvcG9zYWwgaXMgZWZmZWN0aXZlbHkgYSBjb250aW51YXRpb24g
LyByZXN1cnJlY3Rpb24gb2YgPGEgY2xhc3M9InJlZmVyZW5jZSBleHRlcm5hbCIgaHJlZj0i
aHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9wYXBlcnMvMjAw
My9uMTQyMC5wZGYiPk4xNDIwPC9hPiB3aGljaCB3YXMgdGFnZ2VkIGZvciBmdXJ0aGVyIGNv
bnNpZGVyYXRpb24gd2l0aG91dCBiZWluZyBlaXRoZXIgYWNjZXB0ZWQgb3IgcmVqZWN0ZWQu
IEhvd2V2ZXIsIG11Y2ggb2YgdGhlIHRleHQgb2YgdGhpcyBwcm9wb3NhbCB3YXMgd3JpdHRl
biBwcmlvciB0byB0aGUgYXV0aG9yJ3MgZGlzY292ZXJ5IG9mIHRoZSBzYW1lLjwvcD4KPHA+
SW4gY29udHJhc3QgdG8gTjE0MjAsIHdlIGF2b2lkIHVzZSBvZiB0aGUgdGVybSAmcXVvdDty
ZW9wZW4mcXVvdDssIHdoaWNoIGltcGxpZXMgdGhlIGFiaWxpdHkgdG8gYWRkIHRvIGEgY2xh
c3MuIENsYXNzIGRlZmluaXRpb25zIGFyZSBjdXJyZW50bHkgY2xvc2VkOyBtZW1iZXJzIG1h
eSBvbmx5IGJlIGFkZGVkIHRvIGEgY2xhc3MgZHVyaW5nIHRoZSBpbml0aWFsIGRlZmluaXRp
b24gdGhlcmVvZiAodGVtcGxhdGUgc3BlY2lhbGl6YXRpb24gbm90d2l0aHN0YW5kaW5nKS4g
QWx0aG91Z2ggbWFueSBoYXZlIGFza2VkIGZvciB0aGUgYWJpbGl0eSB0byBhZGQgbWVtYmVy
cyB0byBjbGFzc2VzIGFmdGVyIHRoZSBkZWZpbml0aW9uLCBzdWNoIHByb3Bvc2FscyBhcmUg
Z2VuZXJhbGx5IG5vdCB3ZWxsIHJlY2VpdmVkLiBBbHRob3VnaCBpdCBpcyBub3QgdGhlIGlu
dGVudCBvZiB0aGlzIHByb3Bvc2FsIHRvIGNhdGVnb3JpY2FsbHkgZm9yYmlkIGFueSBzdWNo
IGZ1dHVyZSBkaXJlY3Rpb24sIHdlIGFsc28gcmVjb2duaXplIHRoZXNlIGNvbmNlcm5zIGFu
ZCBzcGVjaWZpY2FsbHkgZG8gbm90IHdpc2ggdG8gc3VnZ2VzdCBhbnkgbW92ZW1lbnQgaW4g
dGhhdCBkaXJlY3Rpb24uPC9wPgo8ZGl2IGNsYXNzPSJjb250ZW50cyB0b3BpYyIgaWQ9ImNv
bnRlbnRzIj4KPHAgY2xhc3M9InRvcGljLXRpdGxlIGZpcnN0Ij5Db250ZW50czwvcD4KPHVs
IGNsYXNzPSJzaW1wbGUiPgo8bGk+PGEgY2xhc3M9InJlZmVyZW5jZSBpbnRlcm5hbCIgaHJl
Zj0iI2Fic3RyYWN0IiBpZD0iaWQxIj5BYnN0cmFjdDwvYT48L2xpPgo8bGk+PGEgY2xhc3M9
InJlZmVyZW5jZSBpbnRlcm5hbCIgaHJlZj0iI3JhdGlvbmFsZSIgaWQ9ImlkMiI+UmF0aW9u
YWxlPC9hPjwvbGk+CjxsaT48YSBjbGFzcz0icmVmZXJlbmNlIGludGVybmFsIiBocmVmPSIj
cHJvcG9zYWwiIGlkPSJpZDMiPlByb3Bvc2FsPC9hPjwvbGk+CjxsaT48YSBjbGFzcz0icmVm
ZXJlbmNlIGludGVybmFsIiBocmVmPSIjc3BlY2lmaWNhdGlvbiIgaWQ9ImlkNCI+U3BlY2lm
aWNhdGlvbjwvYT48L2xpPgo8bGk+PGEgY2xhc3M9InJlZmVyZW5jZSBpbnRlcm5hbCIgaHJl
Zj0iI2ludGVyYWN0aW9ucyIgaWQ9ImlkNSI+SW50ZXJhY3Rpb25zPC9hPjwvbGk+CjxsaT48
YSBjbGFzcz0icmVmZXJlbmNlIGludGVybmFsIiBocmVmPSIjYWRkaXRpb25hbC1leGFtcGxl
cyIgaWQ9ImlkNiI+QWRkaXRpb25hbCBFeGFtcGxlczwvYT48L2xpPgo8bGk+PGEgY2xhc3M9
InJlZmVyZW5jZSBpbnRlcm5hbCIgaHJlZj0iI2Rpc2N1c3Npb24iIGlkPSJpZDciPkRpc2N1
c3Npb248L2E+PHVsPgo8bGk+PGEgY2xhc3M9InJlZmVyZW5jZSBpbnRlcm5hbCIgaHJlZj0i
I3N5bnRheCIgaWQ9ImlkOCI+U3ludGF4PC9hPjwvbGk+CjxsaT48YSBjbGFzcz0icmVmZXJl
bmNlIGludGVybmFsIiBocmVmPSIjaW5saW5lIiBpZD0iaWQ5Ij5JbmxpbmU8L2E+PC9saT4K
PC91bD4KPC9saT4KPGxpPjxhIGNsYXNzPSJyZWZlcmVuY2UgaW50ZXJuYWwiIGhyZWY9IiNh
Y2tub3dsZWRnbWVudHMiIGlkPSJpZDEwIj5BY2tub3dsZWRnbWVudHM8L2E+PC9saT4KPGxp
PjxhIGNsYXNzPSJyZWZlcmVuY2UgaW50ZXJuYWwiIGhyZWY9IiNyZWZlcmVuY2VzIiBpZD0i
aWQxMSI+UmVmZXJlbmNlczwvYT48L2xpPgo8L3VsPgo8L2Rpdj4KPC9kaXY+CjxkaXYgY2xh
c3M9InNlY3Rpb24iIGlkPSJyYXRpb25hbGUiPgo8aDE+PGEgY2xhc3M9InRvYy1iYWNrcmVm
IiBocmVmPSIjaWQyIj5SYXRpb25hbGU8L2E+PC9oMT4KPHA+PGEgY2xhc3M9InJlZmVyZW5j
ZSBleHRlcm5hbCIgaHJlZj0iaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRG9uJ3Rf
cmVwZWF0X3lvdXJzZWxmIj5Eb24ndCBSZXBlYXQgWW91cnNlbGY8L2E+IChEUlkpIGlzIGEg
d2VsbCBrbm93biBwcmluY2lwbGUgb2Ygc29mdHdhcmUgZGVzaWduLiBIb3dldmVyLCB0aGVy
ZSBhcmUgY2VydGFpbiBpbnN0YW5jZXMgd2hlbiBwcm92aWRpbmcgZGVmaW5pdGlvbnMgb2Yg
Y2xhc3MgbWVtYmVycyB0aGF0IGNhbiBmYWxsIHByZXkgdG8gcmVwZXRpdGlvbiwgdG8gdGhl
IGRldHJpbWVudCBvZiByZWFkYWJpbGl0eSBhbmQgbWFpbnRhaW5hYmlsaXR5LjwvcD4KPHA+
V2Ugd2lsbCBwcmVzZW50LCBhcyBhIHBhcnRpY3VsYXJseSBlZ3JlZ2lvdXMgZXhhbXBsZSwg
YSBjb21wbGljYXRlZCB0ZW1wbGF0ZSBjbGFzczo8L3A+CjxwcmUgY2xhc3M9ImNvZGUgYysr
IGxpdGVyYWwtYmxvY2siPgo8c3BhbiBjbGFzcz0ia2V5d29yZCI+dGVtcGxhdGU8L3NwYW4+
IDxzcGFuIGNsYXNzPSJvcGVyYXRvciI+Jmx0Ozwvc3Bhbj48c3BhbiBjbGFzcz0ia2V5d29y
ZCI+dHlwZW5hbWU8L3NwYW4+IDxzcGFuIGNsYXNzPSJuYW1lIj5DaGFyVHlwZTwvc3Bhbj48
c3BhbiBjbGFzcz0icHVuY3R1YXRpb24iPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3Jk
Ij50eXBlbmFtZTwvc3Bhbj4gPHNwYW4gY2xhc3M9Im5hbWUiPlRyYWl0czwvc3Bhbj48c3Bh
biBjbGFzcz0icHVuY3R1YXRpb24iPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50
eXBlbmFtZTwvc3Bhbj4gPHNwYW4gY2xhc3M9Im5hbWUiPkFsbG9jYXRvcjwvc3Bhbj48c3Bh
biBjbGFzcz0ib3BlcmF0b3IiPiZndDs8L3NwYW4+CjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5j
bGFzczwvc3Bhbj4gPHNwYW4gY2xhc3M9Im5hbWUgY2xhc3MiPk15U3RyaW5nPC9zcGFuPiA8
c3BhbiBjbGFzcz0icHVuY3R1YXRpb24iPns8L3NwYW4+IDxzcGFuIGNsYXNzPSJwdW5jdHVh
dGlvbiI+Li4uPC9zcGFuPiA8c3BhbiBjbGFzcz0icHVuY3R1YXRpb24iPn07PC9zcGFuPgo8
L3ByZT4KPHA+VGhlcmUgYXJlIHN0cm9uZyByZWFzb25zIHdoeSBtZXRob2QgZGVmaW5pdGlv
bnMgc2hvdWxkIG5vdCBiZSBpbmxpbmUuIEZvciBzdGFydGVycywgdGhleSBpbmhpYml0IHJl
YWRhYmlsaXR5OyBpdCBpcyBkaWZmaWN1bHQgdG8gcXVpY2tseSBwYXJzZSB0aGUgaW50ZXJm
YWNlIOKAlCBlc3BlY2lhbGx5IHRoZSBwdWJsaWMgaW50ZXJmYWNlIOKAlCBhcyBkZWNsYXJh
dGlvbnMgYW5kIGRlZmluaXRpb25zIGFyZSBuZWNlc3NhcmlseSBpbnRlcmxlYXZlZC4gQWRk
aXRpb25hbGx5LCB0aGV5IGFyZSA8ZW0+aW5saW5lPC9lbT4sIHdoaWNoIHJlc3VsdHMgaW4g
YWxsIG1hbm5lciBvZiBjb21waWxlIHRpbWUgYW5kIGNyb3NzLXZlcnNpb24gY29tcGF0aWJp
bGl0eSBpc3N1ZXMuIEV2ZW4gZm9yIHRlbXBsYXRlIGNsYXNzZXMsIGl0IGlzIHNvbWV0aW1l
cyBwcmVmZXJyZWQgdG8ga2VlcCBkZWZpbml0aW9ucyBpbiBhIHNlcGFyYXRlIFRVIChlLmcu
IGV4dGVybiB0ZW1wbGF0ZXMgd2l0aCBvbmx5IHNwZWNpZmljLCBleHBvcnRlZCBleHBsaWNp
dCBpbnN0YW50aWF0aW9ucykuPC9wPgo8cD5UaGUgcHJvYmxlbSB0aGF0IGFyaXNlcyBpcyB0
aGUgbmVjZXNzaXR5IHRvIHJlcGVhdCBhIGxvbmcgcHJlZml4IGZvciBhbGwgZGVmaW5pdGlv
bnMgcHJvdmlkZWQgb3V0c2lkZSBvZiB0aGUgY2xhc3MgZGVmaW5pdGlvbi4gRm9yIGV4YW1w
bGU6PC9wPgo8cHJlIGNsYXNzPSJjb2RlIGMrKyBsaXRlcmFsLWJsb2NrIj4KPHNwYW4gY2xh
c3M9ImtleXdvcmQiPnRlbXBsYXRlPC9zcGFuPiA8c3BhbiBjbGFzcz0ib3BlcmF0b3IiPiZs
dDs8L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVuYW1lPC9zcGFuPiA8c3BhbiBj
bGFzcz0ibmFtZSI+Q2hhclR5cGU8L3NwYW4+PHNwYW4gY2xhc3M9InB1bmN0dWF0aW9uIj4s
PC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZW5hbWU8L3NwYW4+IDxzcGFuIGNs
YXNzPSJuYW1lIj5UcmFpdHM8L3NwYW4+PHNwYW4gY2xhc3M9InB1bmN0dWF0aW9uIj4sPC9z
cGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZW5hbWU8L3NwYW4+IDxzcGFuIGNsYXNz
PSJuYW1lIj5BbGxvY2F0b3I8L3NwYW4+PHNwYW4gY2xhc3M9Im9wZXJhdG9yIj4mZ3Q7PC9z
cGFuPgo8c3BhbiBjbGFzcz0ibmFtZSI+TXlTdHJpbmc8L3NwYW4+PHNwYW4gY2xhc3M9Im9w
ZXJhdG9yIj4mbHQ7PC9zcGFuPjxzcGFuIGNsYXNzPSJuYW1lIj5DaGFyVHlwZTwvc3Bhbj48
c3BhbiBjbGFzcz0icHVuY3R1YXRpb24iPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJuYW1lIj5U
cmFpdHM8L3NwYW4+PHNwYW4gY2xhc3M9InB1bmN0dWF0aW9uIj4sPC9zcGFuPiA8c3BhbiBj
bGFzcz0ibmFtZSI+QWxsb2NhdG9yPC9zcGFuPjxzcGFuIGNsYXNzPSJvcGVyYXRvciI+Jmd0
Ozo6PC9zcGFuPjxzcGFuIGNsYXNzPSJuYW1lIj5NeVN0cmluZzwvc3Bhbj4KPHNwYW4gY2xh
c3M9InB1bmN0dWF0aW9uIj57PC9zcGFuPiA8c3BhbiBjbGFzcz0icHVuY3R1YXRpb24iPi4u
Ljwvc3Bhbj4gPHNwYW4gY2xhc3M9InB1bmN0dWF0aW9uIj59PC9zcGFuPgo8L3ByZT4KPHA+
VGhpcyByZXBldGl0aW9uIGluY3JlYXNlcyB0aGUgc3BhY2Ugb3ZlciB3aGljaCBhY2NpZGVu
dGFsIGVycm9ycyBtYXkgYmUgaW50cm9kdWNlZCwgYW5kIGluY3JlYXNlcyB0aGUgd29yayBy
ZXF1aXJlZCBmb3IgcmVmYWN0b3JpbmcuIFRoZSBwcm9ibGVtIGlzIGNvbXBvdW5kZWQgZm9y
IHRlbXBsYXRlcyB3aXRoaW4gdGVtcGxhdGVzLjwvcD4KPHA+VGhpcyBpcyBhIHJlYWwsIGV4
dGFudCBwcm9ibGVtLiBQcmVzdW1hYmx5IGFzIGEgcmVzdWx0IG9mIHRoaXMgb3ZlcmhlYWQs
IHNvbWUgYXV0aG9ycyB3aWxsIHVzZSBvbmx5IGlubGluZSBkZWZpbml0aW9ucyBvZiBtZXRo
b2RzLCB3aGljaCBjYW4gbWFrZSBpdCBkaWZmaWN1bHQgdG8gc2VwYXJhdGUgaW1wbGVtZW50
YXRpb24gZGV0YWlscyDigJQgd2hpY2ggYXJlIG9mdGVuIHVubmVjZXNzYXJ5IG5vaXNlIGZv
ciBhIHVzZXIgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgYSBjbGFzcyDigJQgZnJvbSBhIGNsYXNz
J3MgaW50ZXJmYWNlLiBPdGhlciBhdXRob3JzIG1heSByZXNvcnQgdG8gc2VwYXJhdGluZyBy
ZXR1cm4gdHlwZXMsIHRlbXBsYXRlIHBhcmFtZXRlcnMsIGNsYXNzIG5hbWVzLCBhbmQgbWV0
aG9kIG5hbWVzLCBwbGFjaW5nIGVhY2ggb24gc2VwYXJhdGUgbGluZXMsIHJlc3VsdGluZyBp
biBtZXRob2QgaGVhZGVycyB0aGF0IGFyZSBmb3VyIGxpbmVzIGxvbmcgZXZlbiBiZWZvcmUg
dGhlIGFyZ3VtZW50IGxpc3QgaXMgY29uc2lkZXJlZC4gSW4gdGhlIGxhdHRlciBjYXNlLCB0
aGUgbmVlZCB0byByZXBlYXQgdGhlIGNsYXNzIHByZWZpeCBpcyBmcnVzdHJhdGluZyBhbmQs
IGluIHRoZSBhdXRob3IncyBvcGluaW9uLCB1bm5lY2Vzc2FyeS48L3A+CjxwPihTZWUgPGEg
Y2xhc3M9InJlZmVyZW5jZSBleHRlcm5hbCIgaHJlZj0iaHR0cHM6Ly9ncm91cHMuZ29vZ2xl
LmNvbS9hL2lzb2NwcC5vcmcvZm9ydW0vIyF0b3BpYy9zdGQtcHJvcG9zYWxzL2UwX2NlWEZR
WC1BIj5odHRwczovL2dyb3Vwcy5nb29nbGUuY29tL2EvaXNvY3BwLm9yZy9mb3J1bS8jIXRv
cGljL3N0ZC1wcm9wb3NhbHMvZTBfY2VYRlFYLUE8L2E+IGZvciBhZGRpdGlvbmFsIGRpc2N1
c3Npb24uKTwvcD4KPHA+SXQgaXMgYWxzbyB3b3J0aCBub3RpbmcgdGhhdCB0aGlzIHNpdHVh
dGlvbiBpcyBpbmNvbnNpc3RlbnQgd2l0aCBuYW1lc3BhY2VzLiBHaXZlbiBhIGZ1bmN0aW9u
IGRlY2xhcmVkIGluIGEgbmFtZXNwYWNlOjwvcD4KPHByZSBjbGFzcz0iY29kZSBjKysgbGl0
ZXJhbC1ibG9jayI+CjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5uYW1lc3BhY2U8L3NwYW4+IDxz
cGFuIGNsYXNzPSJuYW1lIj5Gb288L3NwYW4+CjxzcGFuIGNsYXNzPSJwdW5jdHVhdGlvbiI+
ezwvc3Bhbj4KICA8c3BhbiBjbGFzcz0ia2V5d29yZCB0eXBlIj52b2lkPC9zcGFuPiA8c3Bh
biBjbGFzcz0ibmFtZSI+Zm9vPC9zcGFuPjxzcGFuIGNsYXNzPSJwdW5jdHVhdGlvbiI+KCk7
PC9zcGFuPgo8c3BhbiBjbGFzcz0icHVuY3R1YXRpb24iPn08L3NwYW4+CjwvcHJlPgo8cD4u
Li50aGVyZSBhcmUgY3VycmVudGx5IHR3byB3YXlzIHRvIHByb3ZpZGUgdGhlIGRlZmluaXRp
b246PC9wPgo8cHJlIGNsYXNzPSJjb2RlIGMrKyBsaXRlcmFsLWJsb2NrIj4KPHNwYW4gY2xh
c3M9ImNvbW1lbnQgc2luZ2xlIj4vLyBNZXRob2QgMTogZnVsbHkgcXVhbGlmaWVkCjwvc3Bh
bj48c3BhbiBjbGFzcz0ia2V5d29yZCB0eXBlIj52b2lkPC9zcGFuPiA8c3BhbiBjbGFzcz0i
bmFtZSI+Rm9vPC9zcGFuPjxzcGFuIGNsYXNzPSJvcGVyYXRvciI+Ojo8L3NwYW4+PHNwYW4g
Y2xhc3M9Im5hbWUiPmZvbzwvc3Bhbj48c3BhbiBjbGFzcz0icHVuY3R1YXRpb24iPigpPC9z
cGFuPiA8c3BhbiBjbGFzcz0icHVuY3R1YXRpb24iPns8L3NwYW4+IDxzcGFuIGNsYXNzPSJw
dW5jdHVhdGlvbiI+Li4uPC9zcGFuPiA8c3BhbiBjbGFzcz0icHVuY3R1YXRpb24iPn08L3Nw
YW4+Cgo8c3BhbiBjbGFzcz0iY29tbWVudCBzaW5nbGUiPi8vIE1ldGhvZCAyOiBuYW1lc3Bh
Y2Ugc2NvcGUKPC9zcGFuPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5uYW1lc3BhY2U8L3NwYW4+
IDxzcGFuIGNsYXNzPSJuYW1lIj5Gb288L3NwYW4+CjxzcGFuIGNsYXNzPSJwdW5jdHVhdGlv
biI+ezwvc3Bhbj4KICA8c3BhbiBjbGFzcz0ia2V5d29yZCB0eXBlIj52b2lkPC9zcGFuPiA8
c3BhbiBjbGFzcz0ibmFtZSI+Zm9vPC9zcGFuPjxzcGFuIGNsYXNzPSJwdW5jdHVhdGlvbiI+
KCk8L3NwYW4+IDxzcGFuIGNsYXNzPSJwdW5jdHVhdGlvbiI+ezwvc3Bhbj4gPHNwYW4gY2xh
c3M9InB1bmN0dWF0aW9uIj4uLi48L3NwYW4+IDxzcGFuIGNsYXNzPSJwdW5jdHVhdGlvbiI+
fTwvc3Bhbj4KPHNwYW4gY2xhc3M9InB1bmN0dWF0aW9uIj59PC9zcGFuPgo8L3ByZT4KPHA+
VGhlcmUgaXMgY3VycmVudGx5IG5vIGVxdWl2YWxlbnQgdG8gdGhlIHNlY29uZCBmb3JtIGZv
ciBjbGFzcyBtZW1iZXJzLiBUaGlzIHByb3Bvc2FsIHdvdWxkIHJlbW92ZSB0aGlzIGluY29u
c2lzdGVuY3kuPC9wPgo8L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiIgaWQ9InByb3Bvc2Fs
Ij4KPGgxPjxhIGNsYXNzPSJ0b2MtYmFja3JlZiIgaHJlZj0iI2lkMyI+UHJvcG9zYWw8L2E+
PC9oMT4KPHA+VGhpcyBwcm9wb3NhbCBpcyB0byBlbGltaW5hdGUgdGhlIHJlZHVuZGFuY3kg
YnkgaW50cm9kdWNpbmcgYSBuZXcgJnF1b3Q7Y2xhc3Mgc2NvcGUmcXVvdDsgc3ludGF4LCBh
cyBmb2xsb3dzOjwvcD4KPHByZSBjbGFzcz0iY29kZSBjKysgbGl0ZXJhbC1ibG9jayI+Cjxz
cGFuIGNsYXNzPSJrZXl3b3JkIj50ZW1wbGF0ZTwvc3Bhbj4gPHNwYW4gY2xhc3M9Im9wZXJh
dG9yIj4mbHQ7PC9zcGFuPjxzcGFuIGNsYXNzPSJwdW5jdHVhdGlvbiI+Li4uPC9zcGFuPjxz
cGFuIGNsYXNzPSJvcGVyYXRvciI+Jmd0Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNvbW1lbnQg
c2luZ2xlIj4vLyBvcHRpb25hbDsgb25seSB1c2VkIGZvciB0ZW1wbGF0ZSBjbGFzc2VzCjwv
c3Bhbj48c3BhbiBjbGFzcz0ia2V5d29yZCI+bmFtZXNwYWNlPC9zcGFuPiA8c3BhbiBjbGFz
cz0ia2V5d29yZCI+Y2xhc3M8L3NwYW4+IDxzcGFuIGNsYXNzPSJuYW1lIGNsYXNzIj5OYW1l
PC9zcGFuPgo8c3BhbiBjbGFzcz0icHVuY3R1YXRpb24iPns8L3NwYW4+CiAgPHNwYW4gY2xh
c3M9ImNvbW1lbnQgc2luZ2xlIj4vLyBkZWZpbml0aW9ucyBvZiBjbGFzcyBtZW1iZXJzCjwv
c3Bhbj48c3BhbiBjbGFzcz0icHVuY3R1YXRpb24iPn08L3NwYW4+CjwvcHJlPgo8cD5UaGUg
ZWZmZWN0IG9mIHRoaXMgc2NvcGUgaXMgdG8gdHJlYXQgZWFjaCBtZW1iZXIgZGVmaW5pdGlv
biAodmFyaWFibGUgb3IgbWV0aG9kKSBhcyBpZiBpdCB3ZXJlIHByZWZpeGVkIGJ5IHRoZSBj
bGFzcyB0ZW1wbGF0ZSBzcGVjaWZpY2F0aW9uIGFuZCBuYW1lLiBTcGVjaWZpY2FsbHksIHRo
ZXNlIHR3byBjb2RlcyB3b3VsZCBiZSBleGFjdGx5IGVxdWl2YWxlbnQ6PC9wPgo8cHJlIGNs
YXNzPSJjb2RlIGMrKyBsaXRlcmFsLWJsb2NrIj4KPHNwYW4gY2xhc3M9ImNvbW1lbnQgc2lu
Z2xlIj4vLyBEZWNsYXJhdGlvbnMKPC9zcGFuPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jbGFz
czwvc3Bhbj4gPHNwYW4gY2xhc3M9Im5hbWUgY2xhc3MiPkE8L3NwYW4+IDxzcGFuIGNsYXNz
PSJwdW5jdHVhdGlvbiI+ezwvc3Bhbj4gPHNwYW4gY2xhc3M9InB1bmN0dWF0aW9uIj4uLi48
L3NwYW4+IDxzcGFuIGNsYXNzPSJwdW5jdHVhdGlvbiI+fTs8L3NwYW4+Cgo8c3BhbiBjbGFz
cz0ia2V5d29yZCI+dGVtcGxhdGU8L3NwYW4+IDxzcGFuIGNsYXNzPSJvcGVyYXRvciI+Jmx0
Ozwvc3Bhbj48c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZW5hbWU8L3NwYW4+IDxzcGFuIGNs
YXNzPSJuYW1lIj5UPC9zcGFuPjxzcGFuIGNsYXNzPSJvcGVyYXRvciI+Jmd0Ozwvc3Bhbj4g
PHNwYW4gY2xhc3M9ImtleXdvcmQiPmNsYXNzPC9zcGFuPiA8c3BhbiBjbGFzcz0ibmFtZSBj
bGFzcyI+Qjwvc3Bhbj4gPHNwYW4gY2xhc3M9InB1bmN0dWF0aW9uIj57PC9zcGFuPiA8c3Bh
biBjbGFzcz0icHVuY3R1YXRpb24iPi4uLjwvc3Bhbj4gPHNwYW4gY2xhc3M9InB1bmN0dWF0
aW9uIj59Ozwvc3Bhbj4KCjxzcGFuIGNsYXNzPSJjb21tZW50IHNpbmdsZSI+Ly8gRXhpc3Rp
bmcgc3ludGF4Cjwvc3Bhbj48c3BhbiBjbGFzcz0ibmFtZSI+QTwvc3Bhbj48c3BhbiBjbGFz
cz0ib3BlcmF0b3IiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJuYW1lIj5BPC9zcGFuPjxzcGFu
IGNsYXNzPSJwdW5jdHVhdGlvbiI+KC4uLik8L3NwYW4+IDxzcGFuIGNsYXNzPSJwdW5jdHVh
dGlvbiI+ezwvc3Bhbj4gPHNwYW4gY2xhc3M9InB1bmN0dWF0aW9uIj4uLi48L3NwYW4+IDxz
cGFuIGNsYXNzPSJwdW5jdHVhdGlvbiI+fTwvc3Bhbj4KPHNwYW4gY2xhc3M9Im5hbWUiPkE8
L3NwYW4+PHNwYW4gY2xhc3M9Im9wZXJhdG9yIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0ibmFt
ZSI+RW51bTwvc3Bhbj4gPHNwYW4gY2xhc3M9Im5hbWUiPkE8L3NwYW4+PHNwYW4gY2xhc3M9
Im9wZXJhdG9yIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0ibmFtZSI+Zm9vPC9zcGFuPjxzcGFu
IGNsYXNzPSJwdW5jdHVhdGlvbiI+KC4uLik8L3NwYW4+IDxzcGFuIGNsYXNzPSJwdW5jdHVh
dGlvbiI+ezwvc3Bhbj4gPHNwYW4gY2xhc3M9InB1bmN0dWF0aW9uIj4uLi48L3NwYW4+IDxz
cGFuIGNsYXNzPSJwdW5jdHVhdGlvbiI+fTwvc3Bhbj4KPHNwYW4gY2xhc3M9ImtleXdvcmQg
dHlwZSI+aW50PC9zcGFuPiA8c3BhbiBjbGFzcz0ibmFtZSI+QTwvc3Bhbj48c3BhbiBjbGFz
cz0ib3BlcmF0b3IiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJuYW1lIj52YWx1ZTwvc3Bhbj4g
PHNwYW4gY2xhc3M9Im9wZXJhdG9yIj49PC9zcGFuPiA8c3BhbiBjbGFzcz0icHVuY3R1YXRp
b24iPi4uLjs8L3NwYW4+Cgo8c3BhbiBjbGFzcz0ia2V5d29yZCI+dGVtcGxhdGU8L3NwYW4+
IDxzcGFuIGNsYXNzPSJvcGVyYXRvciI+Jmx0Ozwvc3Bhbj48c3BhbiBjbGFzcz0ia2V5d29y
ZCI+dHlwZW5hbWU8L3NwYW4+IDxzcGFuIGNsYXNzPSJuYW1lIj5UPC9zcGFuPjxzcGFuIGNs
YXNzPSJvcGVyYXRvciI+Jmd0Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9Im5hbWUiPkI8L3NwYW4+
PHNwYW4gY2xhc3M9Im9wZXJhdG9yIj4mbHQ7PC9zcGFuPjxzcGFuIGNsYXNzPSJuYW1lIj5U
PC9zcGFuPjxzcGFuIGNsYXNzPSJvcGVyYXRvciI+Jmd0Ozo6PC9zcGFuPjxzcGFuIGNsYXNz
PSJuYW1lIj5CPC9zcGFuPjxzcGFuIGNsYXNzPSJwdW5jdHVhdGlvbiI+KC4uLik8L3NwYW4+
IDxzcGFuIGNsYXNzPSJwdW5jdHVhdGlvbiI+ezwvc3Bhbj4gPHNwYW4gY2xhc3M9InB1bmN0
dWF0aW9uIj4uLi48L3NwYW4+IDxzcGFuIGNsYXNzPSJwdW5jdHVhdGlvbiI+fTwvc3Bhbj4K
PHNwYW4gY2xhc3M9ImtleXdvcmQiPnRlbXBsYXRlPC9zcGFuPiA8c3BhbiBjbGFzcz0ib3Bl
cmF0b3IiPiZsdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVuYW1lPC9zcGFu
PiA8c3BhbiBjbGFzcz0ibmFtZSI+VDwvc3Bhbj48c3BhbiBjbGFzcz0ib3BlcmF0b3IiPiZn
dDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJuYW1lIj5CPC9zcGFuPjxzcGFuIGNsYXNzPSJvcGVy
YXRvciI+Jmx0Ozwvc3Bhbj48c3BhbiBjbGFzcz0ibmFtZSI+VDwvc3Bhbj48c3BhbiBjbGFz
cz0ib3BlcmF0b3IiPiZndDsmYW1wOzwvc3Bhbj4gPHNwYW4gY2xhc3M9Im5hbWUiPkI8L3Nw
YW4+PHNwYW4gY2xhc3M9Im9wZXJhdG9yIj4mbHQ7PC9zcGFuPjxzcGFuIGNsYXNzPSJuYW1l
Ij5UPC9zcGFuPjxzcGFuIGNsYXNzPSJvcGVyYXRvciI+Jmd0Ozo6PC9zcGFuPjxzcGFuIGNs
YXNzPSJrZXl3b3JkIj5vcGVyYXRvcjwvc3Bhbj48c3BhbiBjbGFzcz0ib3BlcmF0b3IiPj08
L3NwYW4+PHNwYW4gY2xhc3M9InB1bmN0dWF0aW9uIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJu
YW1lIj5CPC9zcGFuPjxzcGFuIGNsYXNzPSJvcGVyYXRvciI+Jmx0Ozwvc3Bhbj48c3BhbiBj
bGFzcz0ibmFtZSI+VDwvc3Bhbj48c3BhbiBjbGFzcz0ib3BlcmF0b3IiPiZndDs8L3NwYW4+
IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jb25zdDwvc3Bhbj48c3BhbiBjbGFzcz0ib3BlcmF0
b3IiPiZhbXA7PC9zcGFuPiA8c3BhbiBjbGFzcz0ibmFtZSI+b3RoZXI8L3NwYW4+PHNwYW4g
Y2xhc3M9InB1bmN0dWF0aW9uIj4pPC9zcGFuPiA8c3BhbiBjbGFzcz0icHVuY3R1YXRpb24i
Pns8L3NwYW4+IDxzcGFuIGNsYXNzPSJwdW5jdHVhdGlvbiI+Li4uPC9zcGFuPiA8c3BhbiBj
bGFzcz0icHVuY3R1YXRpb24iPn08L3NwYW4+CjxzcGFuIGNsYXNzPSJrZXl3b3JkIj50ZW1w
bGF0ZTwvc3Bhbj4gPHNwYW4gY2xhc3M9Im9wZXJhdG9yIj4mbHQ7PC9zcGFuPjxzcGFuIGNs
YXNzPSJrZXl3b3JkIj50eXBlbmFtZTwvc3Bhbj4gPHNwYW4gY2xhc3M9Im5hbWUiPlQ8L3Nw
YW4+PHNwYW4gY2xhc3M9Im9wZXJhdG9yIj4mZ3Q7PC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5
d29yZCB0eXBlIj52b2lkPC9zcGFuPiA8c3BhbiBjbGFzcz0ibmFtZSI+Qjwvc3Bhbj48c3Bh
biBjbGFzcz0ib3BlcmF0b3IiPiZsdDs8L3NwYW4+PHNwYW4gY2xhc3M9Im5hbWUiPlQ8L3Nw
YW4+PHNwYW4gY2xhc3M9Im9wZXJhdG9yIj4mZ3Q7Ojo8L3NwYW4+PHNwYW4gY2xhc3M9Im5h
bWUiPmJhcjwvc3Bhbj48c3BhbiBjbGFzcz0icHVuY3R1YXRpb24iPiguLi4pPC9zcGFuPiA8
c3BhbiBjbGFzcz0icHVuY3R1YXRpb24iPns8L3NwYW4+IDxzcGFuIGNsYXNzPSJwdW5jdHVh
dGlvbiI+Li4uPC9zcGFuPiA8c3BhbiBjbGFzcz0icHVuY3R1YXRpb24iPn08L3NwYW4+Cgo8
c3BhbiBjbGFzcz0iY29tbWVudCBzaW5nbGUiPi8vIFByb3Bvc2VkIHN5bnRheAo8L3NwYW4+
PHNwYW4gY2xhc3M9ImtleXdvcmQiPm5hbWVzcGFjZTwvc3Bhbj4gPHNwYW4gY2xhc3M9Imtl
eXdvcmQiPmNsYXNzPC9zcGFuPiA8c3BhbiBjbGFzcz0ibmFtZSBjbGFzcyI+QTwvc3Bhbj4g
PHNwYW4gY2xhc3M9InB1bmN0dWF0aW9uIj57PC9zcGFuPgogIDxzcGFuIGNsYXNzPSJuYW1l
Ij5BPC9zcGFuPjxzcGFuIGNsYXNzPSJwdW5jdHVhdGlvbiI+KC4uLik8L3NwYW4+IDxzcGFu
IGNsYXNzPSJwdW5jdHVhdGlvbiI+ezwvc3Bhbj4gPHNwYW4gY2xhc3M9InB1bmN0dWF0aW9u
Ij4uLi48L3NwYW4+IDxzcGFuIGNsYXNzPSJwdW5jdHVhdGlvbiI+fTwvc3Bhbj4KICA8c3Bh
biBjbGFzcz0ibmFtZSI+RW51bTwvc3Bhbj4gPHNwYW4gY2xhc3M9Im5hbWUiPmZvbzwvc3Bh
bj48c3BhbiBjbGFzcz0icHVuY3R1YXRpb24iPigpPC9zcGFuPiA8c3BhbiBjbGFzcz0icHVu
Y3R1YXRpb24iPns8L3NwYW4+IDxzcGFuIGNsYXNzPSJwdW5jdHVhdGlvbiI+Li4uPC9zcGFu
PiA8c3BhbiBjbGFzcz0icHVuY3R1YXRpb24iPn08L3NwYW4+CiAgPHNwYW4gY2xhc3M9Imtl
eXdvcmQgdHlwZSI+aW50PC9zcGFuPiA8c3BhbiBjbGFzcz0ibmFtZSI+dmFsdWU8L3NwYW4+
IDxzcGFuIGNsYXNzPSJvcGVyYXRvciI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9InB1bmN0dWF0
aW9uIj4uLi47PC9zcGFuPgo8c3BhbiBjbGFzcz0icHVuY3R1YXRpb24iPn08L3NwYW4+Cgo8
c3BhbiBjbGFzcz0ia2V5d29yZCI+dGVtcGxhdGU8L3NwYW4+IDxzcGFuIGNsYXNzPSJvcGVy
YXRvciI+Jmx0Ozwvc3Bhbj48c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZW5hbWU8L3NwYW4+
IDxzcGFuIGNsYXNzPSJuYW1lIj5UPC9zcGFuPjxzcGFuIGNsYXNzPSJvcGVyYXRvciI+Jmd0
Ozwvc3Bhbj4KPHNwYW4gY2xhc3M9ImtleXdvcmQiPm5hbWVzcGFjZTwvc3Bhbj4gPHNwYW4g
Y2xhc3M9ImtleXdvcmQiPmNsYXNzPC9zcGFuPiA8c3BhbiBjbGFzcz0ibmFtZSBjbGFzcyI+
Qjwvc3Bhbj4gPHNwYW4gY2xhc3M9InB1bmN0dWF0aW9uIj57PC9zcGFuPgogIDxzcGFuIGNs
YXNzPSJuYW1lIj5CPC9zcGFuPjxzcGFuIGNsYXNzPSJwdW5jdHVhdGlvbiI+KC4uLik8L3Nw
YW4+IDxzcGFuIGNsYXNzPSJwdW5jdHVhdGlvbiI+ezwvc3Bhbj4gPHNwYW4gY2xhc3M9InB1
bmN0dWF0aW9uIj4uLi48L3NwYW4+IDxzcGFuIGNsYXNzPSJwdW5jdHVhdGlvbiI+fTwvc3Bh
bj4KICA8c3BhbiBjbGFzcz0ibmFtZSI+Qjwvc3Bhbj48c3BhbiBjbGFzcz0ib3BlcmF0b3Ii
PiZhbXA7PC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+b3BlcmF0b3I8L3NwYW4+PHNw
YW4gY2xhc3M9Im9wZXJhdG9yIj49PC9zcGFuPjxzcGFuIGNsYXNzPSJwdW5jdHVhdGlvbiI+
KDwvc3Bhbj48c3BhbiBjbGFzcz0ibmFtZSI+Qjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdv
cmQiPmNvbnN0PC9zcGFuPjxzcGFuIGNsYXNzPSJvcGVyYXRvciI+JmFtcDs8L3NwYW4+IDxz
cGFuIGNsYXNzPSJuYW1lIj5vdGhlcjwvc3Bhbj48c3BhbiBjbGFzcz0icHVuY3R1YXRpb24i
Pik8L3NwYW4+IDxzcGFuIGNsYXNzPSJwdW5jdHVhdGlvbiI+ezwvc3Bhbj4gPHNwYW4gY2xh
c3M9InB1bmN0dWF0aW9uIj4uLi48L3NwYW4+IDxzcGFuIGNsYXNzPSJwdW5jdHVhdGlvbiI+
fTwvc3Bhbj4KICA8c3BhbiBjbGFzcz0ia2V5d29yZCB0eXBlIj52b2lkPC9zcGFuPiA8c3Bh
biBjbGFzcz0ibmFtZSI+YmFyPC9zcGFuPjxzcGFuIGNsYXNzPSJwdW5jdHVhdGlvbiI+KC4u
Lik8L3NwYW4+IDxzcGFuIGNsYXNzPSJwdW5jdHVhdGlvbiI+ezwvc3Bhbj4gPHNwYW4gY2xh
c3M9InB1bmN0dWF0aW9uIj4uLi48L3NwYW4+IDxzcGFuIGNsYXNzPSJwdW5jdHVhdGlvbiI+
fTwvc3Bhbj4KPHNwYW4gY2xhc3M9InB1bmN0dWF0aW9uIj59PC9zcGFuPgo8L3ByZT4KPHA+
Rm9sbG93aW5nIHRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhlIHNjb3BlIChpLmUuIHRoZSBrZXl3
b3JkcyA8Y29kZSBjbGFzcz0iY3BwIGMrKyI+PHNwYW4gY2xhc3M9ImtleXdvcmQiPm5hbWVz
cGFjZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNsYXNzPC9zcGFuPjwvY29kZT4p
LCB0aGUgdGVtcGxhdGUgcGFyYW1ldGVycyBzaGFsbCBiZSBpbXBsaWNpdGx5IGFwcGxpZWQg
dG8gdGhlIGNsYXNzIG5hbWUgYW5kIGFueSBzdWJzZXF1ZW50IG1lbnRpb24gb2YgdGhlIGNs
YXNzIG5hbWUgdGhhdCBkb2VzIG5vdCBoYXZlIGFuIGV4cGxpY2l0IGFyZ3VtZW50IGxpc3Qu
IEl0IHNoYWxsIGJlIGFuIGVycm9yIHRvIHByb3ZpZGUgYW4gYXJndW1lbnQgbGlzdCBmb3Ig
dGhlIGludHJvZHVjaW5nIGNsYXNzIG5hbWUgZXhjZXB0IGluIHRoZSBjYXNlIG9mIHNwZWNp
YWxpemF0aW9uLiBUeXBlIG5hbWUgbG9vay11cCB3aXRoaW4gdGhlIHNjb3BlIHNoYWxsIGFk
ZGl0aW9uYWxseSBjb25zaWRlciB0aGUgY2xhc3Mgc2NvcGUgZmlyc3QgKG5vdGUgaW4gdGhl
IGFib3ZlIGV4YW1wbGUgdGhlIHVzZSBvZiA8Y29kZSBjbGFzcz0iY3BwIGMrKyI+PHNwYW4g
Y2xhc3M9Im5hbWUiPkVudW08L3NwYW4+PC9jb2RlPiB3aXRob3V0IHRoZSA8Y29kZSBjbGFz
cz0iY3BwIGMrKyI+PHNwYW4gY2xhc3M9Im5hbWUiPkI8L3NwYW4+PHNwYW4gY2xhc3M9Im9w
ZXJhdG9yIj46Ojwvc3Bhbj48L2NvZGU+IHF1YWxpZmllcikuIChUaGVzZSBydWxlcyBzaG91
bGQgYmUgYXBwbGllZCBpbiB0aGUgc2FtZSBtYW5uZXIgYXMgZm9yIGEgY2xhc3MgZGVmaW5p
dGlvbi4gTm90ZSB0aGF0IHRoaXMgb25seSBhZmZlY3RzIG5vbi10cmFpbGluZyByZXR1cm4g
dHlwZXMsIGFzIG90aGVyIHR5cGVzIGFscmVhZHkgdXNlIHRoZSBjbGFzcyBzY29wZSBmb3Ig
dHlwZSByZXNvbHV0aW9uLik8L3A+CjxwPlNvbWUgY29uc2VxdWVuY2VzIG9mIHRoZSBzY29w
ZSBhY3Rpbmcgc2ltcGx5IGFzIGEgbmFtZSB0cmFuc2Zvcm1hdGlvbiBzaG91bGQgYmUgbm90
ZWQuIEZpcnN0LCBzdWNoIGEgc2NvcGUgY2FuIGJlICZxdW90O29wZW5lZCZxdW90OyBvbiB0
aGUgc2FtZSBjbGFzcyBuYW1lIGFueSBudW1iZXIgb2YgdGltZXMuIFNlY29uZCwgZGVmaW5p
dGlvbnMgaW4gYSBjbGFzcyBuYW1lIHNjb3BlIG1heSBiZSBtaXhlZCB3aXRoIHRyYWRpdGlv
bmFsLCBmdWxseSBxdWFsaWZpZWQgZGVmaW5pdGlvbnMgKHByb3ZpZGVkIHRoYXQgbm8gZGVm
aW5pdGlvbnMgYXJlIGR1cGxpY2F0ZWQsIGFzIGFsd2F5cykuIFRoaXJkLCBhbiBlbXB0eSBz
Y29wZSBpcyBwZXJtaXNzaWJsZSBhcyBsb25nIGFzIHRoZSBuYW1lZCBjbGFzcyBpcyByZWNv
Z25pemVkLiBMYXN0LCBidXQgcGVyaGFwcyBtb3N0IGltcG9ydGFudCwgdGhlIHNjb3BlIGRv
ZXMgbm90IHBlcm1pdCB0aGUgYWRkaXRpb24gb2YgbWVtYmVycyBub3QgcHJlc2VudCBpbiB0
aGUgY2xhc3MgZGVmaW5pdGlvbiwgbm9yIGluIGdlbmVyYWwgZG9lcyBpdCBhbGxvdyB0aGUg
dXNlciB0byBhY2NvbXBsaXNoIGFueXRoaW5nIHRoYXQgY291bGQgbm90IGJlIGFjY29tcGxp
c2hlZCBvdGhlcndpc2UuPC9wPgo8cD5BZGRpdGlvbmFsbHk6PC9wPgo8dWwgY2xhc3M9InNp
bXBsZSI+CjxsaT5XaGlsZSA8Y29kZSBjbGFzcz0iY3BwIGMrKyI+PHNwYW4gY2xhc3M9Imtl
eXdvcmQiPm5hbWVzcGFjZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNsYXNzPC9z
cGFuPjwvY29kZT4gaXMgYmVpbmcgdXNlZCBmb3IgaWxsdXN0cmF0aXZlIHB1cnBvc2VzLCA8
Y29kZSBjbGFzcz0iY3BwIGMrKyI+PHNwYW4gY2xhc3M9ImtleXdvcmQiPm5hbWVzcGFjZTwv
c3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnN0cnVjdDwvc3Bhbj48L2NvZGU+IGFuZCA8
Y29kZSBjbGFzcz0iY3BwIGMrKyI+PHNwYW4gY2xhc3M9ImtleXdvcmQiPm5hbWVzcGFjZTwv
c3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnVuaW9uPC9zcGFuPjwvY29kZT4gc2hhbGwg
YWxzbyBiZSBwZXJtaXR0ZWQsIGFuZCBzaGFsbCBwcm92aWRlIGVxdWl2YWxlbnQgZnVuY3Rp
b24uIChJbiBnZW5lcmFsLCB0aGUgdXNlIG9mICZxdW90O2NsYXNzJnF1b3Q7IHRocm91Z2hv
dXQgc2hvdWxkIGJlIHVuZGVyc3Rvb2QgdG8gbWVhbiBhbnkgY2xhc3MtdHlwZS4pPC9saT4K
PGxpPlVzZSBvZiBhIGNsYXNzIG5hbWUgc2NvcGUgcmVxdWlyZXMgdGhhdCB0aGUgbmFtZWQg
Y2xhc3MgaGFzIGJlZW4gZGVmaW5lZC4gRm9yd2FyZCBkZWNsYXJhdGlvbiBpcyBub3Qgc3Vm
ZmljaWVudC48L2xpPgo8bGk+TmVzdGVkIGNsYXNzIG5hbWUgc2NvcGVzIGFyZSBwZXJtaXR0
ZWQuPC9saT4KPGxpPkFueSBtZW1iZXJzIHRoYXQgbWF5IGxlZ2FsbHkgYmUgZGVmaW5lZCB1
c2luZyB0aGVpciBxdWFsaWZpZWQgbmFtZSBtYXkgYmUgZGVmaW5lZCB3aXRoaW4gYSBjbGFz
cyBuYW1lIHNjb3BlLiBUaGlzIGluY2x1ZGVzIG1lbWJlciB0eXBlcywgbWVtYmVyIGZ1bmN0
aW9ucywgYW5kIHN0YXRpYyBtZW1iZXIgdmFyaWFibGVzLjwvbGk+CjxsaT5BcyB3aXRoIHRy
YWRpdGlvbmFsIG5hbWVzcGFjZXMsIGEgPGNvZGUgY2xhc3M9ImNwcCBjKysiPjxzcGFuIGNs
YXNzPSJwdW5jdHVhdGlvbiI+Ozwvc3Bhbj48L2NvZGU+IGlzIG5vdCByZXF1aXJlZCBmb2xs
b3dpbmcgdGhlIGNsb3NpbmcgPGNvZGUgY2xhc3M9ImNwcCBjKysiPjxzcGFuIGNsYXNzPSJw
dW5jdHVhdGlvbiI+fTwvc3Bhbj48L2NvZGU+LjwvbGk+CjxsaT5BY2Nlc3MgbW9kaWZpZXJz
IGFyZSBub3QgYWxsb3dlZCBpbiBhIGNsYXNzIG5hbWUgc2NvcGUuIFRoZSA8Y29kZSBjbGFz
cz0iY3BwIGMrKyI+PHNwYW4gY2xhc3M9ImtleXdvcmQiPnZpcnR1YWw8L3NwYW4+PC9jb2Rl
PiBhbmQgPGNvZGUgY2xhc3M9ImNwcCBjKysiPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5zdGF0
aWM8L3NwYW4+PC9jb2RlPiBtb2RpZmllcnMgYXJlIG5vdCBhbGxvd2VkIGluIGEgY2xhc3Mg
bmFtZSBzY29wZS4gKE5vbmUgb2YgdGhlc2UgYXJlIGFsbG93ZWQgb3V0c2lkZSBvZiBhIGNs
YXNzIGRlZmluaXRpb24sIGFuZCB0aGUgY2xhc3MgbmFtZSBzY29wZSBpcyBub3QgYSBjbGFz
cyBkZWZpbml0aW9uLik8L2xpPgo8bGk+QSBjbGFzcyBuYW1lIHNjb3BlIG1heSBub3QgYWRk
IGNsYXNzIG1lbWJlcnMgdG8gYSBjbGFzcyBkZWZpbml0aW9uLjwvbGk+CjxsaT5UaGlzIHBy
b3Bvc2FsIGRvZXMgbm90IGFmZmVjdCA8Y29kZSBjbGFzcz0iY3BwIGMrKyI+PHNwYW4gY2xh
c3M9ImtleXdvcmQiPnVzaW5nPC9zcGFuPjwvY29kZT4gZGlyZWN0aXZlcy4gKEEgPGNvZGUg
Y2xhc3M9ImNwcCBjKysiPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj51c2luZzwvc3Bhbj48L2Nv
ZGU+IGRpcmVjdGl2ZSBvbiBhIGNsYXNzIG5hbWUgc2NvcGUgcmVtYWlucyBpbGxlZ2FsLik8
L2xpPgo8L3VsPgo8L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiIgaWQ9InNwZWNpZmljYXRp
b24iPgo8aDE+PGEgY2xhc3M9InRvYy1iYWNrcmVmIiBocmVmPSIjaWQ0Ij5TcGVjaWZpY2F0
aW9uPC9hPjwvaDE+CjxwPlRoZSBtb3N0IHN0cmFpZ2h0IGZvcndhcmQgd2F5IGluIHdoaWNo
IHRvIGRlc2NyaWJlIHRoaXMgZmVhdHVyZSBpcyB3aXRoIGEgc3ludGF4IHRyYW5zZm9ybWF0
aW9uLiBTcGVjaWZpY2FsbHksIHRoZSBzeW50YXg6PC9wPgo8cHJlIGNsYXNzPSJsaXRlcmFs
LWJsb2NrIj4KPGVtPlsmbHQ7dGVtcGxhdGVfc3BlY2lmaWNhdGlvbiZndDtdPC9lbT4gPHN0
cm9uZz5uYW1lc3BhY2UgY2xhc3M8L3N0cm9uZz4gPGVtPiZsdDtuYW1lJmd0OzwvZW0+IDxz
dHJvbmc+ezwvc3Ryb25nPgogIDxlbT5bJmx0O3R5cGUmZ3Q7XTwvZW0+IDxlbT4mbHQ7bWVt
YmVyX25hbWUmZ3Q7Jmx0Oy4uLiZndDs8L2VtPgo8c3Ryb25nPn08L3N0cm9uZz4KPC9wcmU+
CjxwPi4uLnNoYWxsIGJlIGVxdWl2YWxlbnQgdG86PC9wPgo8cHJlIGNsYXNzPSJsaXRlcmFs
LWJsb2NrIj4KPGVtPlsmbHQ7dGVtcGxhdGVfc3BlY2lmaWNhdGlvbiZndDtdPC9lbT4gPGVt
PlsmbHQ7dHlwZSZndDtdPC9lbT4gPGVtPiZsdDtuYW1lJmd0OzwvZW0+PHN0cm9uZz46Ojwv
c3Ryb25nPjxlbT4mbHQ7bWVtYmVyX25hbWUmZ3Q7Jmx0Oy4uLiZndDs8L2VtPgo8L3ByZT4K
PHA+Li4uZm9yIGVhY2ggPGVtPiZsdDttZW1iZXJfbmFtZSZndDs8L2VtPiBpbiB0aGUgc2Nv
cGUuIFJ1bGVzIGZvciBpbnRlcnByZXRhdGlvbiBvZiBtZW1iZXJzIHdpdGhpbiBhIGNsYXNz
IG5hbWUgc2NvcGUsIGFuZCBmb3Igd2hhdCBzb3J0cyBvZiBjb2RlIGlzIHBlcm1pdHRlZCBv
ciBpbGwtZm9ybWVkLCBtYXkgYWxsIGJlIGRlcml2ZWQgZGlyZWN0bHkgZnJvbSB0aGlzIHRy
YW5zZm9ybWF0aW9uLiBUeXBlIHJlc29sdXRpb24gZm9yIHRoZSByZXR1cm4gdHlwZSAod2hl
cmUgYXBwbGljYWJsZSkgc2hhbGwgcHJvY2VlZCBhY2NvcmRpbmcgdG8gdGhlIHNhbWUgcnVs
ZXMgdGhhdCB3b3VsZCBhcHBseSB3aXRoaW4gdGhlIGNsYXNzIGRlZmluaXRpb24uPC9wPgo8
L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiIgaWQ9ImludGVyYWN0aW9ucyI+CjxoMT48YSBj
bGFzcz0idG9jLWJhY2tyZWYiIGhyZWY9IiNpZDUiPkludGVyYWN0aW9uczwvYT48L2gxPgo8
cD5UaGUgdG9rZW4gc2VxdWVuY2VzIDxjb2RlIGNsYXNzPSJjcHAgYysrIj48c3BhbiBjbGFz
cz0ia2V5d29yZCI+bmFtZXNwYWNlPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y2xh
c3M8L3NwYW4+PC9jb2RlPiwgPGNvZGUgY2xhc3M9ImNwcCBjKysiPjxzcGFuIGNsYXNzPSJr
ZXl3b3JkIj5uYW1lc3BhY2U8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5zdHJ1Y3Q8
L3NwYW4+PC9jb2RlPiBhbmQgPGNvZGUgY2xhc3M9ImNwcCBjKysiPjxzcGFuIGNsYXNzPSJr
ZXl3b3JkIj5uYW1lc3BhY2U8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj51bmlvbjwv
c3Bhbj48L2NvZGU+IGFyZSBjdXJyZW50bHkgaWxsLWZvcm1lZCwgc28gbm8gZXhpc3Rpbmcg
Y29kZSB3b3VsZCBiZSBhZmZlY3RlZCBieSB0aGlzIHByb3Bvc2FsLiBUaGlzIHByb3Bvc2Fs
IGRvZXMgbWFrZSBhbnkgY2hhbmdlcyB0byBvdGhlciBleGlzdGluZyBsYW5ndWFnZSBvciBs
aWJyYXJ5IGZlYXR1cmVzIChhbHRob3VnaCBpbXBsZW1lbnRhdGlvbnMgd291bGQgYmUgZnJl
ZSB0byBtYWtlIHVzZSBvZiBpdCBpbiB0aGVpciBzdGFuZGFyZCBsaWJyYXJ5IGltcGxlbWVu
dGF0aW9ucywgc2hvdWxkIHRoZXkgZGVzaXJlIHRvIGRvIHNvKS48L3A+CjwvZGl2Pgo8ZGl2
IGNsYXNzPSJzZWN0aW9uIiBpZD0iYWRkaXRpb25hbC1leGFtcGxlcyI+CjxoMT48YSBjbGFz
cz0idG9jLWJhY2tyZWYiIGhyZWY9IiNpZDYiPkFkZGl0aW9uYWwgRXhhbXBsZXM8L2E+PC9o
MT4KPHA+VGhpcyBmZWF0dXJlIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIHRlbXBsYXRl
IG1lbWJlcnMgb2YgdGVtcGxhdGUgY2xhc3NlcywgaW5jbHVkaW5nIG5lc3RlZCB0ZW1wbGF0
ZSB0eXBlczo8L3A+CjxwcmUgY2xhc3M9ImNvZGUgYysrIGxpdGVyYWwtYmxvY2siPgo8c3Bh
biBjbGFzcz0ia2V5d29yZCI+dGVtcGxhdGU8L3NwYW4+IDxzcGFuIGNsYXNzPSJvcGVyYXRv
ciI+Jmx0Ozwvc3Bhbj48c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZW5hbWU8L3NwYW4+IDxz
cGFuIGNsYXNzPSJuYW1lIj5UPC9zcGFuPjxzcGFuIGNsYXNzPSJvcGVyYXRvciI+Jmd0Ozwv
c3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNsYXNzPC9zcGFuPiA8c3BhbiBjbGFzcz0i
bmFtZSBjbGFzcyI+Rm9vPC9zcGFuPgo8c3BhbiBjbGFzcz0icHVuY3R1YXRpb24iPns8L3Nw
YW4+CiAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnRlbXBsYXRlPC9zcGFuPiA8c3BhbiBjbGFz
cz0ib3BlcmF0b3IiPiZsdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVuYW1l
PC9zcGFuPiA8c3BhbiBjbGFzcz0ibmFtZSI+VTwvc3Bhbj48c3BhbiBjbGFzcz0ib3BlcmF0
b3IiPiZndDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIHR5cGUiPnZvaWQ8L3NwYW4+
IDxzcGFuIGNsYXNzPSJuYW1lIj5mb288L3NwYW4+PHNwYW4gY2xhc3M9InB1bmN0dWF0aW9u
Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJuYW1lIj5VPC9zcGFuPjxzcGFuIGNsYXNzPSJwdW5j
dHVhdGlvbiI+KTs8L3NwYW4+CiAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnRlbXBsYXRlPC9z
cGFuPiA8c3BhbiBjbGFzcz0ib3BlcmF0b3IiPiZsdDs8L3NwYW4+PHNwYW4gY2xhc3M9Imtl
eXdvcmQiPnR5cGVuYW1lPC9zcGFuPiA8c3BhbiBjbGFzcz0ibmFtZSI+VTwvc3Bhbj48c3Bh
biBjbGFzcz0ib3BlcmF0b3IiPiZndDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5j
bGFzczwvc3Bhbj4gPHNwYW4gY2xhc3M9Im5hbWUgY2xhc3MiPkJhcjwvc3Bhbj4gPHNwYW4g
Y2xhc3M9InB1bmN0dWF0aW9uIj57PC9zcGFuPiA8c3BhbiBjbGFzcz0ibmFtZSI+QmFyPC9z
cGFuPjxzcGFuIGNsYXNzPSJwdW5jdHVhdGlvbiI+KCk8L3NwYW4+IDxzcGFuIGNsYXNzPSJw
dW5jdHVhdGlvbiI+fTs8L3NwYW4+CjxzcGFuIGNsYXNzPSJwdW5jdHVhdGlvbiI+fTs8L3Nw
YW4+Cgo8c3BhbiBjbGFzcz0ia2V5d29yZCI+dGVtcGxhdGU8L3NwYW4+IDxzcGFuIGNsYXNz
PSJvcGVyYXRvciI+Jmx0Ozwvc3Bhbj48c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZW5hbWU8
L3NwYW4+IDxzcGFuIGNsYXNzPSJuYW1lIj5UPC9zcGFuPjxzcGFuIGNsYXNzPSJvcGVyYXRv
ciI+Jmd0Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPm5hbWVzcGFjZTwvc3Bhbj4g
PHNwYW4gY2xhc3M9ImtleXdvcmQiPmNsYXNzPC9zcGFuPiA8c3BhbiBjbGFzcz0ibmFtZSBj
bGFzcyI+Rm9vPC9zcGFuPgo8c3BhbiBjbGFzcz0icHVuY3R1YXRpb24iPns8L3NwYW4+CiAg
PHNwYW4gY2xhc3M9ImtleXdvcmQiPnRlbXBsYXRlPC9zcGFuPiA8c3BhbiBjbGFzcz0ib3Bl
cmF0b3IiPiZsdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVuYW1lPC9zcGFu
PiA8c3BhbiBjbGFzcz0ibmFtZSI+VTwvc3Bhbj48c3BhbiBjbGFzcz0ib3BlcmF0b3IiPiZn
dDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIHR5cGUiPnZvaWQ8L3NwYW4+IDxzcGFu
IGNsYXNzPSJuYW1lIj5mb288L3NwYW4+PHNwYW4gY2xhc3M9InB1bmN0dWF0aW9uIj4oPC9z
cGFuPjxzcGFuIGNsYXNzPSJuYW1lIj5VPC9zcGFuPjxzcGFuIGNsYXNzPSJwdW5jdHVhdGlv
biI+KTwvc3Bhbj4gPHNwYW4gY2xhc3M9InB1bmN0dWF0aW9uIj57PC9zcGFuPiA8c3BhbiBj
bGFzcz0icHVuY3R1YXRpb24iPi4uLjwvc3Bhbj4gPHNwYW4gY2xhc3M9InB1bmN0dWF0aW9u
Ij59PC9zcGFuPgoKICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dGVtcGxhdGU8L3NwYW4+IDxz
cGFuIGNsYXNzPSJvcGVyYXRvciI+Jmx0Ozwvc3Bhbj48c3BhbiBjbGFzcz0ia2V5d29yZCI+
dHlwZW5hbWU8L3NwYW4+IDxzcGFuIGNsYXNzPSJuYW1lIj5VPC9zcGFuPjxzcGFuIGNsYXNz
PSJvcGVyYXRvciI+Jmd0Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNsYXNzPC9z
cGFuPiA8c3BhbiBjbGFzcz0ibmFtZSBjbGFzcyI+QmFyPC9zcGFuPgogIDxzcGFuIGNsYXNz
PSJwdW5jdHVhdGlvbiI+ezwvc3Bhbj4KICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5CYXI8L3Nw
YW4+PHNwYW4gY2xhc3M9InB1bmN0dWF0aW9uIj4oKTwvc3Bhbj4gPHNwYW4gY2xhc3M9InB1
bmN0dWF0aW9uIj57PC9zcGFuPiA8c3BhbiBjbGFzcz0icHVuY3R1YXRpb24iPi4uLjwvc3Bh
bj4gPHNwYW4gY2xhc3M9InB1bmN0dWF0aW9uIj59PC9zcGFuPgogIDxzcGFuIGNsYXNzPSJw
dW5jdHVhdGlvbiI+fTwvc3Bhbj4KPHNwYW4gY2xhc3M9InB1bmN0dWF0aW9uIj59PC9zcGFu
PgoKPHNwYW4gY2xhc3M9ImNvbW1lbnQgc2luZ2xlIj4vLyBDb21wYXJlIHRvIHRoZSBvbGQg
c3ludGF4Ogo8L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPnRlbXBsYXRlPC9zcGFuPiA8
c3BhbiBjbGFzcz0ib3BlcmF0b3IiPiZsdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQi
PnR5cGVuYW1lPC9zcGFuPiA8c3BhbiBjbGFzcz0ibmFtZSI+VDwvc3Bhbj48c3BhbiBjbGFz
cz0ib3BlcmF0b3IiPiZndDs8L3NwYW4+CjxzcGFuIGNsYXNzPSJrZXl3b3JkIj50ZW1wbGF0
ZTwvc3Bhbj4gPHNwYW4gY2xhc3M9Im9wZXJhdG9yIj4mbHQ7PC9zcGFuPjxzcGFuIGNsYXNz
PSJrZXl3b3JkIj50eXBlbmFtZTwvc3Bhbj4gPHNwYW4gY2xhc3M9Im5hbWUiPlU8L3NwYW4+
PHNwYW4gY2xhc3M9Im9wZXJhdG9yIj4mZ3Q7PC9zcGFuPgo8c3BhbiBjbGFzcz0ia2V5d29y
ZCB0eXBlIj52b2lkPC9zcGFuPiA8c3BhbiBjbGFzcz0ibmFtZSI+Rm9vPC9zcGFuPjxzcGFu
IGNsYXNzPSJvcGVyYXRvciI+Jmx0Ozwvc3Bhbj48c3BhbiBjbGFzcz0ibmFtZSI+VDwvc3Bh
bj48c3BhbiBjbGFzcz0ib3BlcmF0b3IiPiZndDs6Ojwvc3Bhbj48c3BhbiBjbGFzcz0ibmFt
ZSI+Zm9vPC9zcGFuPjxzcGFuIGNsYXNzPSJvcGVyYXRvciI+Jmx0Ozwvc3Bhbj48c3BhbiBj
bGFzcz0ibmFtZSI+VTwvc3Bhbj48c3BhbiBjbGFzcz0ib3BlcmF0b3IiPiZndDs8L3NwYW4+
PHNwYW4gY2xhc3M9InB1bmN0dWF0aW9uIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJuYW1lIj5V
PC9zcGFuPjxzcGFuIGNsYXNzPSJwdW5jdHVhdGlvbiI+KTwvc3Bhbj4gPHNwYW4gY2xhc3M9
InB1bmN0dWF0aW9uIj57PC9zcGFuPiA8c3BhbiBjbGFzcz0icHVuY3R1YXRpb24iPi4uLjwv
c3Bhbj4gPHNwYW4gY2xhc3M9InB1bmN0dWF0aW9uIj59PC9zcGFuPgoKPHNwYW4gY2xhc3M9
ImtleXdvcmQiPnRlbXBsYXRlPC9zcGFuPiA8c3BhbiBjbGFzcz0ib3BlcmF0b3IiPiZsdDs8
L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVuYW1lPC9zcGFuPiA8c3BhbiBjbGFz
cz0ibmFtZSI+VDwvc3Bhbj48c3BhbiBjbGFzcz0ib3BlcmF0b3IiPiZndDs8L3NwYW4+Cjxz
cGFuIGNsYXNzPSJrZXl3b3JkIj50ZW1wbGF0ZTwvc3Bhbj4gPHNwYW4gY2xhc3M9Im9wZXJh
dG9yIj4mbHQ7PC9zcGFuPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlbmFtZTwvc3Bhbj4g
PHNwYW4gY2xhc3M9Im5hbWUiPlU8L3NwYW4+PHNwYW4gY2xhc3M9Im9wZXJhdG9yIj4mZ3Q7
PC9zcGFuPgo8c3BhbiBjbGFzcz0ia2V5d29yZCB0eXBlIj52b2lkPC9zcGFuPiA8c3BhbiBj
bGFzcz0ibmFtZSI+Rm9vPC9zcGFuPjxzcGFuIGNsYXNzPSJvcGVyYXRvciI+Jmx0Ozwvc3Bh
bj48c3BhbiBjbGFzcz0ibmFtZSI+VDwvc3Bhbj48c3BhbiBjbGFzcz0ib3BlcmF0b3IiPiZn
dDs6Ojwvc3Bhbj48c3BhbiBjbGFzcz0ibmFtZSI+QmFyPC9zcGFuPjxzcGFuIGNsYXNzPSJv
cGVyYXRvciI+Jmx0Ozwvc3Bhbj48c3BhbiBjbGFzcz0ibmFtZSI+VTwvc3Bhbj48c3BhbiBj
bGFzcz0ib3BlcmF0b3IiPiZndDs6Ojwvc3Bhbj48c3BhbiBjbGFzcz0ibmFtZSI+QmFyPC9z
cGFuPjxzcGFuIGNsYXNzPSJwdW5jdHVhdGlvbiI+KCk8L3NwYW4+IDxzcGFuIGNsYXNzPSJw
dW5jdHVhdGlvbiI+ezwvc3Bhbj4gPHNwYW4gY2xhc3M9InB1bmN0dWF0aW9uIj4uLi48L3Nw
YW4+IDxzcGFuIGNsYXNzPSJwdW5jdHVhdGlvbiI+fTwvc3Bhbj4KPC9wcmU+CjxwPlBlciB0
aGUgdHJhbnNmb3JtYXRpb24gcnVsZSwgaXQgd29ya3Mgd2l0aCBzcGVjaWFsaXphdGlvbnMs
IGFzIG9uZSB3b3VsZCBleHBlY3Q6PC9wPgo8cHJlIGNsYXNzPSJjb2RlIGMrKyBsaXRlcmFs
LWJsb2NrIj4KPHNwYW4gY2xhc3M9ImtleXdvcmQiPnRlbXBsYXRlPC9zcGFuPiA8c3BhbiBj
bGFzcz0ib3BlcmF0b3IiPiZsdDsmZ3Q7PC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+
bmFtZXNwYWNlPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y2xhc3M8L3NwYW4+IDxz
cGFuIGNsYXNzPSJuYW1lIGNsYXNzIj5Gb288L3NwYW4+PHNwYW4gY2xhc3M9Im9wZXJhdG9y
Ij4mbHQ7PC9zcGFuPjxzcGFuIGNsYXNzPSJrZXl3b3JkIHR5cGUiPmludDwvc3Bhbj48c3Bh
biBjbGFzcz0ib3BlcmF0b3IiPiZndDs8L3NwYW4+CjxzcGFuIGNsYXNzPSJwdW5jdHVhdGlv
biI+ezwvc3Bhbj4KICA8c3BhbiBjbGFzcz0icHVuY3R1YXRpb24iPi4uLjwvc3Bhbj4KPHNw
YW4gY2xhc3M9InB1bmN0dWF0aW9uIj59PC9zcGFuPgo8L3ByZT4KPHA+KE5vdGUgdGhhdCB0
aGlzIGlzIGFsbG93ZWQgd2l0aCBvciB3aXRob3V0IGEgc3BlY2lhbGl6YXRpb24gb2YgPGNv
ZGUgY2xhc3M9ImNwcCBjKysiPjxzcGFuIGNsYXNzPSJuYW1lIj5Gb288L3NwYW4+PHNwYW4g
Y2xhc3M9Im9wZXJhdG9yIj4mbHQ7PC9zcGFuPjxzcGFuIGNsYXNzPSJrZXl3b3JkIHR5cGUi
PmludDwvc3Bhbj48c3BhbiBjbGFzcz0ib3BlcmF0b3IiPiZndDs8L3NwYW4+PC9jb2RlPiwg
anVzdCBhcyBpdCBpcyBjdXJyZW50bHkgcGVybWl0dGVkIHRvIHNwZWNpYWxpemUgY2xhc3Mg
bWVtYmVycyB3aXRob3V0IHNwZWNpYWxpemluZyB0aGUgZW50aXJlIGNsYXNzIGRlZmluaXRp
b24uIE5hdHVyYWxseSwgaWYgdGhlIGNsYXNzIGRlZmluaXRpb24gPGVtPmlzPC9lbT4gc3Bl
Y2lhbGl6ZWQsIHRoZW4gZGVmaW5pdGlvbnMgaW4gdGhlIGNvcnJlc3BvbmRpbmcgY2xhc3Mg
bmFtZSBzY29wZSBtdXN0IG1hdGNoIG1lbWJlcnMgZGVjbGFyZWQgaW4gc2FpZCBzcGVjaWFs
aXphdGlvbi4pPC9wPgo8L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiIgaWQ9ImRpc2N1c3Np
b24iPgo8aDE+PGEgY2xhc3M9InRvYy1iYWNrcmVmIiBocmVmPSIjaWQ3Ij5EaXNjdXNzaW9u
PC9hPjwvaDE+CjxkaXYgY2xhc3M9InNlY3Rpb24iIGlkPSJzeW50YXgiPgo8aDI+PGEgY2xh
c3M9InRvYy1iYWNrcmVmIiBocmVmPSIjaWQ4Ij5TeW50YXg8L2E+PC9oMj4KPHA+VGhlIHBy
b3Bvc2VkIHN5bnRheCBmb3IgaW50cm9kdWNpbmcgdGhlIHNjb3BlIGlzIG9wZW4gZm9yIGRl
YmF0ZS4gQWx0ZXJuYXRpdmUgc3VnZ2VzdGlvbnMgaW5jbHVkZTo8L3A+CjxvbCBjbGFzcz0i
YXJhYmljIHNpbXBsZSI+CjxsaT48Y29kZSBjbGFzcz0iY3BwIGMrKyI+PHNwYW4gY2xhc3M9
ImtleXdvcmQiPmNsYXNzPC9zcGFuPiA8c3BhbiBjbGFzcz0ibmFtZSBjbGFzcyI+bmFtZXNw
YWNlPC9zcGFuPiA8c3BhbiBjbGFzcz0ib3BlcmF0b3IiPiZsdDs8L3NwYW4+PHNwYW4gY2xh
c3M9Im5hbWUiPm5hbWU8L3NwYW4+PHNwYW4gY2xhc3M9Im9wZXJhdG9yIj4mZ3Q7PC9zcGFu
PjwvY29kZT48L2xpPgo8bGk+PGNvZGUgY2xhc3M9ImNwcCBjKysiPjxzcGFuIGNsYXNzPSJr
ZXl3b3JkIj5uYW1lc3BhY2U8L3NwYW4+IDxzcGFuIGNsYXNzPSJvcGVyYXRvciI+Jmx0Ozwv
c3Bhbj48c3BhbiBjbGFzcz0ibmFtZSI+Y2xhc3NuYW1lPC9zcGFuPjxzcGFuIGNsYXNzPSJv
cGVyYXRvciI+Jmd0Ozwvc3Bhbj48L2NvZGU+PC9saT4KPGxpPkludHJvZHVjdGlvbiBvZiBh
IG5ldyBjb250ZXh0dWFsIGtleXdvcmQsIGUuZy4gPGNvZGUgY2xhc3M9ImNwcCBjKysiPjxz
cGFuIGNsYXNzPSJrZXl3b3JkIj5jbGFzczwvc3Bhbj4gPHNwYW4gY2xhc3M9ImVycm9yIj4m
bHQ7PC9zcGFuPjxzcGFuIGNsYXNzPSJuYW1lIGNsYXNzIj5uYW1lPC9zcGFuPjxzcGFuIGNs
YXNzPSJvcGVyYXRvciI+Jmd0Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9Im5hbWUiPmltcGxlbWVu
dGF0aW9uPC9zcGFuPjwvY29kZT4uPC9saT4KPGxpPkludHJvZHVjdGlvbiBvZiBhIG5ldyAo
Z2xvYmFsKSBrZXl3b3JkLCBlLmcuIDxjb2RlIGNsYXNzPSJjcHAgYysrIj48c3BhbiBjbGFz
cz0ibmFtZSI+aW1wbGVtZW50PC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y2xhc3M8
L3NwYW4+IDxzcGFuIGNsYXNzPSJlcnJvciI+Jmx0Ozwvc3Bhbj48c3BhbiBjbGFzcz0ibmFt
ZSBjbGFzcyI+bmFtZTwvc3Bhbj48c3BhbiBjbGFzcz0ib3BlcmF0b3IiPiZndDs8L3NwYW4+
PC9jb2RlPi48L2xpPgo8L29sPgo8cD5UaGUgYXV0aG9yIGNvbnNpZGVycyAjMSB0byBiZSB2
ZXJ5IG5lYXJseSBhcyBnb29kIGFzIHRoZSBzdWdnZXN0ZWQgc3ludGF4LiAjMiBpcyBva2F5
LCBidXQgcmlza3MgY29uZnVzaW9uLCBhcyB0aGUgcmVhZGVyIG11c3Qga25vdyBhIHByaW9y
aSBpZiB0aGUgbmFtZWQgc2NvcGUgaXMgYSBjbGFzcyAodGhlICMyIHN5bnRheCB3b3VsZCBv
bmx5IGludHJvZHVjZSBhIGNsYXNzIG5hbWUgc2NvcGUgaWYgdGhlIGlkZW50aWZpZXIgZm9s
bG93aW5nIHRoZSA8Y29kZSBjbGFzcz0iY3BwIGMrKyI+PHNwYW4gY2xhc3M9ImtleXdvcmQi
Pm5hbWVzcGFjZTwvc3Bhbj48L2NvZGU+IGtleXdvcmQgaXMgYW4gYWxyZWFkeSBkZWNsYXJl
ZCBjbGFzcy10eXBlKS4gIzMgaXMgb2Ygc2ltaWxhciBxdWFsaXR5IHRvICMyOyBpdCBsYWNr
cyB0aGUgYW1iaWd1aXR5IHByb2JsZW0sIGJ1dCB0aGUgaW5kaWNhdGlvbiB0aGF0ICZxdW90
O3NvbWV0aGluZyBpcyBkaWZmZXJlbnQmcXVvdDsgb2NjdXJzIGxhdGVyLCBhbmQgaXQgZG9l
cyByZXF1aXJlIGEgbmV3IChhbGJlaXQgY29udGV4dHVhbCkga2V5d29yZC4gIzQgaGFzIHRo
ZSBhZHZhbnRhZ2Ugb2YgbWF4aW11bSBwb3NzaWJsZSBjbGFyaXR5LCBidXQgaW50cm9kdWNp
bmcgbmV3IGtleXdvcmRzIHdpdGhvdXQgYnJlYWtpbmcgZXhpc3RpbmcgY29kZSBpcyBhbHdh
eXMgdHJpY2t5LjwvcD4KPHA+V2UgYWRkaXRpb25hbGx5IGZlZWwgdGhhdCB0aGUgcHJvcG9z
ZWQgc3ludGF4IGlzIHRoZSBtb3N0IGNvbnNpc3RlbnQgd2l0aCB0aGUgY3VycmVudCBzdGF0
ZSBvZiB0aGUgbGFuZ3VhZ2UuIEl0IG1haW50YWlucyB0aGUgdHJhZGl0aW9uYWwgb3JkZXIg
b2YgdG9rZW5zLCBlLmcuIGNvbXBhcmVkIHRvIHVzZSBvZiB0cmFkaXRpb25hbCBuYW1lc3Bh
Y2VzLiBJdCB1c2VzIHRva2VucyBpbiBhbiBvcmRlciB0aGFuIG1ha2VzIHNlbnNlIGFjY29y
ZGluZyB0byBFbmdsaXNoIGdyYW1tYXIgcnVsZXMsIGkuZS4gPGVtPiZsdDt2ZXJiJmd0OyAm
bHQ7YWRqZWN0aXZlJmd0OyAmbHQ7bm91biZndDs8L2VtPiAod2l0aCA8Y29kZSBjbGFzcz0i
Y3BwIGMrKyI+PHNwYW4gY2xhc3M9ImtleXdvcmQiPm5hbWVzcGFjZTwvc3Bhbj48L2NvZGU+
IGhlcmUgYWN0aW5nIGFzIGEgdmVyYiwgaW5kaWNhdGluZyB0aGF0IGEgc2NvcGUgYmxvY2sg
aXMgc3RhcnRpbmcpIHdpdGggPGNvZGUgY2xhc3M9ImNwcCBjKysiPjxzcGFuIGNsYXNzPSJr
ZXl3b3JkIj5uYW1lc3BhY2U8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jbGFzczwv
c3Bhbj4gPHNwYW4gY2xhc3M9Im5hbWUgY2xhc3MiPkZvbzwvc3Bhbj48L2NvZGU+IGNvbXBh
cmFibGUgdG8gZS5nLiAmcXVvdDtvcGVuIGJsdWUgYmFsbCZxdW90Oy48L3A+CjwvZGl2Pgo8
ZGl2IGNsYXNzPSJzZWN0aW9uIiBpZD0iaW5saW5lIj4KPGgyPjxhIGNsYXNzPSJ0b2MtYmFj
a3JlZiIgaHJlZj0iI2lkOSI+SW5saW5lPC9hPjwvaDI+CjxwPlNob3VsZCA8Y29kZSBjbGFz
cz0iY3BwIGMrKyI+PHNwYW4gY2xhc3M9ImtleXdvcmQgcmVzZXJ2ZWQiPmlubGluZTwvc3Bh
bj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPm5hbWVzcGFjZTwvc3Bhbj4gPHNwYW4gY2xhc3M9
ImtleXdvcmQiPmNsYXNzPC9zcGFuPiA8c3BhbiBjbGFzcz0iZXJyb3IiPiZsdDs8L3NwYW4+
PHNwYW4gY2xhc3M9Im5hbWUgY2xhc3MiPm5hbWU8L3NwYW4+PHNwYW4gY2xhc3M9Im9wZXJh
dG9yIj4mZ3Q7PC9zcGFuPjwvY29kZT4gYmUgcGVybWl0dGVkPyBUaGUgJnF1b3Q7aW5saW5l
IG5hbWVzcGFjZSZxdW90OyBjb25jZXB0IGRvZXMgbm90IG1ha2Ugc2Vuc2UgaW4gdGhpcyBj
b250ZXh0LiBJZiBpdCBpcyBwZXJtaXR0ZWQsIGl0IHNob3VsZCBiZSBlcXVpdmFsZW50IHRv
IGluY2x1ZGluZyA8Y29kZSBjbGFzcz0iY3BwIGMrKyI+PHNwYW4gY2xhc3M9ImtleXdvcmQg
cmVzZXJ2ZWQiPmlubGluZTwvc3Bhbj48L2NvZGU+IGFzIHBhcnQgb2YgZXZlcnkgY29udGFp
bmVkIGRlZmluaXRpb24uIFRoZSBhdXRob3IncyBpbmNsaW5hdGlvbiBpcyB0byBmb3JiaWQg
dXNlIG9mIDxjb2RlIGNsYXNzPSJjcHAgYysrIj48c3BhbiBjbGFzcz0ia2V5d29yZCByZXNl
cnZlZCI+aW5saW5lPC9zcGFuPjwvY29kZT4gd2l0aCA8Y29kZSBjbGFzcz0iY3BwIGMrKyI+
PHNwYW4gY2xhc3M9ImtleXdvcmQiPm5hbWVzcGFjZTwvc3Bhbj4gPHNwYW4gY2xhc3M9Imtl
eXdvcmQiPmNsYXNzPC9zcGFuPjwvY29kZT4uPC9wPgo8L2Rpdj4KPC9kaXY+CjxkaXYgY2xh
c3M9InNlY3Rpb24iIGlkPSJhY2tub3dsZWRnbWVudHMiPgo8aDE+PGEgY2xhc3M9InRvYy1i
YWNrcmVmIiBocmVmPSIjaWQxMCI+QWNrbm93bGVkZ21lbnRzPC9hPjwvaDE+CjxwPlRoaXMg
cHJvcG9zYWwgaXMgYSBjb250aW51YXRpb24gb2YgPGEgY2xhc3M9InJlZmVyZW5jZSBleHRl
cm5hbCIgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9j
cy9wYXBlcnMvMjAwMy9uMTQyMC5wZGYiPk4xNDIwPC9hPiBieSBDYXJsIERhbmllbC4gSXQg
d2FzIG9yaWdpbmFsbHkgd3JpdHRlbiBwcmlvciB0byB0aGUgYXV0aG9yJ3MgZGlzY292ZXJ5
IG9mIE4xNDIwLiBUaGUgb3JpZ2luYWwgZmVhdHVyZSByZXF1ZXN0IHRoYXQgc3Bhd25lZCB0
aGlzIG5ldyBwcm9wb3NhbCBjb21lcyBmcm9tIEpvaG4gWWF0ZXMuIE1pcm8gS25lanAgYW5k
IFDDqXRlciBSYWRpY3MgY29udHJpYnV0ZWQgdmFsdWFibGUgc3VnZ2VzdGlvbnMuIE90aGVy
IGNvbnRlbXBvcmFyeSBwYXJ0aWNpcGFudHMgaW5jbHVkZSBMYXJyeSBFdmFucywgUnVzc2Vs
bCBHcmVlbmUsIEJqb3JuIFJlZXNlLCBFdmFuIFRlcmFuIGFuZCBBbmRyZXcgVG9tYXpvcy4g
KFRoZSBhdXRob3IgYWxzbyBhY2tub3dsZWRnZXMgcHJpb3IgZGlzY3Vzc2lvbiBvZiBhIHZl
cnkgc2ltaWxhciBmZWF0dXJlOiBzZWUgPGEgY2xhc3M9InJlZmVyZW5jZSBleHRlcm5hbCIg
aHJlZj0iaHR0cHM6Ly9ncm91cHMuZ29vZ2xlLmNvbS9hL2lzb2NwcC5vcmcvZC9tc2cvc3Rk
LXByb3Bvc2Fscy94dWtkMW1nZDIxSS91SGp4NllSX0VuUUoiPmh0dHBzOi8vZ3JvdXBzLmdv
b2dsZS5jb20vYS9pc29jcHAub3JnL2QvbXNnL3N0ZC1wcm9wb3NhbHMveHVrZDFtZ2QyMUkv
dUhqeDZZUl9FblFKPC9hPiBhbmQgPGEgY2xhc3M9InJlZmVyZW5jZSBleHRlcm5hbCIgaHJl
Zj0iaHR0cHM6Ly9ncm91cHMuZ29vZ2xlLmNvbS9hL2lzb2NwcC5vcmcvZC9tc2cvc3RkLXBy
b3Bvc2Fscy94dWtkMW1nZDIxSS9naDVXMEtTODU2b0oiPmh0dHBzOi8vZ3JvdXBzLmdvb2ds
ZS5jb20vYS9pc29jcHAub3JnL2QvbXNnL3N0ZC1wcm9wb3NhbHMveHVrZDFtZ2QyMUkvZ2g1
VzBLUzg1Nm9KPC9hPi4pPC9wPgo8L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiIgaWQ9InJl
ZmVyZW5jZXMiPgo8aDE+PGEgY2xhc3M9InRvYy1iYWNrcmVmIiBocmVmPSIjaWQxMSI+UmVm
ZXJlbmNlczwvYT48L2gxPgo8dWw+CjxsaT48cCBjbGFzcz0iZmlyc3QiPjxhIGNsYXNzPSJy
ZWZlcmVuY2UgZXh0ZXJuYWwiIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEv
c2MyMi93ZzIxL2RvY3MvcGFwZXJzLzIwMDMvbjE0MjAucGRmIj5OMTQyMDwvYT4gQ2xhc3Mg
TmFtZXNwYWNlczwvcD4KPHA+PGEgY2xhc3M9InJlZmVyZW5jZSBleHRlcm5hbCIgaHJlZj0i
aHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9wYXBlcnMvMjAw
My9uMTQyMC5wZGYiPmh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2Rv
Y3MvcGFwZXJzLzIwMDMvbjE0MjAucGRmPC9hPjwvcD4KPC9saT4KPC91bD4KPCEtLSAuLiAu
LiAuLiAuLiAuLiAuLiAuLiAuLiAuLiAuLiAuLiAuLiAuLiAuLiAuLiAuLiAuLiAuLiAuLiAu
LiAuLiAuLiAuLiAuLiAuLiAtLT4KPCEtLSBrYXRlOiBobCByZVN0cnVjdHVyZWRUZXh0IC0t
Pgo8L2Rpdj4KPC9kaXY+CjwvYm9keT4KPC9odG1sPgo=
--------------020805000103030209010508--


.


Author: Nicol Bolas <jmckesson@gmail.com>
Date: Fri, 29 Jan 2016 19:34:43 -0800 (PST)
Raw View
------=_Part_2216_1611733774.1454124883318
Content-Type: multipart/alternative;
 boundary="----=_Part_2217_556088685.1454124883319"

------=_Part_2217_556088685.1454124883319
Content-Type: text/plain; charset=UTF-8

If you're going to have the syntax be `namespace class`... maybe you
shouldn't name the proposal and feature "class namespace" ;)

--

---
You received this message because you are subscribed to the Google Groups "ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an email to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
Visit this group at https://groups.google.com/a/isocpp.org/group/std-proposals/.

------=_Part_2217_556088685.1454124883319
Content-Type: text/html; charset=UTF-8

<div dir="ltr">If you&#39;re going to have the syntax be `namespace class`... maybe you shouldn&#39;t name the proposal and feature &quot;class namespace&quot; ;)<br></div>

<p></p>

-- <br />
<br />
--- <br />
You received this message because you are subscribed to the Google Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br />
To unsubscribe from this group and stop receiving emails from it, send an email to <a href="mailto:std-proposals+unsubscribe@isocpp.org">std-proposals+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href="mailto:std-proposals@isocpp.org">std-proposals@isocpp.org</a>.<br />
Visit this group at <a href="https://groups.google.com/a/isocpp.org/group/std-proposals/">https://groups.google.com/a/isocpp.org/group/std-proposals/</a>.<br />

------=_Part_2217_556088685.1454124883319--
------=_Part_2216_1611733774.1454124883318--

.


Author: "'Matt Calabrese' via ISO C++ Standard - Future Proposals" <std-proposals@isocpp.org>
Date: Fri, 29 Jan 2016 20:17:04 -0800
Raw View
--001a113d739a9bc881052a856cd8
Content-Type: text/plain; charset=UTF-8

On Fri, Jan 29, 2016 at 8:39 AM, Matthew Woehlke <mwoehlke.floss@gmail.com>
wrote:

> Please see the updated version of my "class namespace" proposal.


I've only skimmed it so far, but a minor suggestion -- in your example of
current definitions, you have:

A::Enum A::foo(...) { ... }

This is a good example, but it's even more clear why this feature is useful
if "A" were a template, since in that case, "A::Enum" would be even more
verbose as "typename A::Enum" (and not misleading because this kind of
thing is very common). To make things more grounded, you might want an
example that many iterator or container implementors are very familiar with:

template <class ValueType, class Alloc>
typename vector<ValueType, Alloc>::const_reference vector<ValueType,
Alloc>::operator [](size_type i) const {/*...*/}

Examples that are less abstract than "A" and "Foo" and "Enum" make things
immediately clear. I think most people are familiar enough with the
motivation that it might not matter, but any bit helps.

--

---
You received this message because you are subscribed to the Google Groups "ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an email to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
Visit this group at https://groups.google.com/a/isocpp.org/group/std-proposals/.

--001a113d739a9bc881052a856cd8
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div class=3D"gmail_extra"><div class=3D"gmail_quote">On F=
ri, Jan 29, 2016 at 8:39 AM, Matthew Woehlke <span dir=3D"ltr">&lt;<a href=
=3D"mailto:mwoehlke.floss@gmail.com" target=3D"_blank">mwoehlke.floss@gmail=
..com</a>&gt;</span> wrote:<br><blockquote class=3D"gmail_quote" style=3D"ma=
rgin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,=
204);border-left-style:solid;padding-left:1ex">Please see the updated versi=
on of my &quot;class namespace&quot; proposal.</blockquote><div><br></div><=
div>I&#39;ve only skimmed it so far, but a minor suggestion -- in your exam=
ple of current definitions, you have:<br></div><div><br></div><div>A::Enum =
A::foo(...) { ... }</div><div><br></div><div>This is a good example, but it=
&#39;s even more clear why this feature is useful if &quot;A&quot; were a t=
emplate, since in that case, &quot;A::Enum&quot; would be even more verbose=
 as &quot;typename A::Enum&quot; (and not misleading because this kind of t=
hing is very common). To make things more grounded, you might want an examp=
le that many iterator or container implementors are very familiar with:</di=
v><div><div><br></div><div>template &lt;class ValueType, class Alloc&gt;</d=
iv><div>typename vector&lt;ValueType, Alloc&gt;::const_reference vector&lt;=
ValueType, Alloc&gt;::operator [](size_type i) const {/*...*/}</div></div><=
div><br></div><div>Examples that are less abstract than &quot;A&quot; and &=
quot;Foo&quot; and &quot;Enum&quot; make things immediately clear. I think =
most people are familiar enough with the motivation that it might not matte=
r, but any bit helps.</div></div></div></div>

<p></p>

-- <br />
<br />
--- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br />
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
Visit this group at <a href=3D"https://groups.google.com/a/isocpp.org/group=
/std-proposals/">https://groups.google.com/a/isocpp.org/group/std-proposals=
/</a>.<br />

--001a113d739a9bc881052a856cd8--

.


Author: =?UTF-8?Q?P=C3=A9ter_Radics?= <mitchnull@gmail.com>
Date: Sun, 31 Jan 2016 01:38:44 -0800 (PST)
Raw View
------=_Part_1709_1535270668.1454233124692
Content-Type: multipart/alternative;
 boundary="----=_Part_1710_1626022719.1454233124692"

------=_Part_1710_1626022719.1454233124692
Content-Type: text/plain; charset=UTF-8

On Saturday, January 30, 2016 at 4:34:43 AM UTC+1, Nicol Bolas wrote:
>
> If you're going to have the syntax be `namespace class`... maybe you
> shouldn't name the proposal and feature "class namespace" ;)
>

Most folks named the feature "class namespace" during previous discussions,
yet the "namespace class" syntax fits better with the current language /
implementation (I started implementing this proposal in clang, and while I
started out with the "class namespace" syntax, later I switched to
"namespace class" as that felt more natural both regarding the current
clang parsing code and for me as a "user"). Still, I'd keep the feature
called "class namespace" as that better conveys the meaning / intention
than "namespace class".

(just for the record: I'd rather see the feature called as "namespace
class" or implemented with "class namespace" syntax rather than not see it
at all due to mismatching name and syntax ;)


--

---
You received this message because you are subscribed to the Google Groups "ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an email to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
Visit this group at https://groups.google.com/a/isocpp.org/group/std-proposals/.

------=_Part_1710_1626022719.1454233124692
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">On Saturday, January 30, 2016 at 4:34:43 AM UTC+1, Nicol B=
olas wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-left=
: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr">If=
 you&#39;re going to have the syntax be `namespace class`... maybe you shou=
ldn&#39;t name the proposal and feature &quot;class namespace&quot; ;)<br><=
/div></blockquote><div><br></div><div>Most folks named the feature &quot;cl=
ass namespace&quot; during previous discussions, yet the &quot;namespace cl=
ass&quot; syntax fits better with the current language / implementation (I =
started implementing this proposal in clang, and while I started out with t=
he &quot;class namespace&quot; syntax, later I switched to &quot;namespace =
class&quot; as that felt more natural both regarding the current clang pars=
ing code and for me as a &quot;user&quot;). Still, I&#39;d keep the feature=
 called &quot;class namespace&quot; as that better conveys the meaning / in=
tention than &quot;namespace class&quot;. =C2=A0</div><div><br></div><div>(=
just for the record: I&#39;d rather see the feature called as &quot;namespa=
ce class&quot; or implemented with &quot;class namespace&quot; syntax rathe=
r than not see it at all due to mismatching name and syntax ;)</div><div>=
=C2=A0<br></div></div>

<p></p>

-- <br />
<br />
--- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br />
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
Visit this group at <a href=3D"https://groups.google.com/a/isocpp.org/group=
/std-proposals/">https://groups.google.com/a/isocpp.org/group/std-proposals=
/</a>.<br />

------=_Part_1710_1626022719.1454233124692--
------=_Part_1709_1535270668.1454233124692--

.


Author: Bo Persson <bop@gmb.dk>
Date: Sun, 31 Jan 2016 13:28:28 +0100
Raw View
On 2016-01-31 10:38, P=C3=A9ter Radics wrote:
> On Saturday, January 30, 2016 at 4:34:43 AM UTC+1, Nicol Bolas wrote:
>
>     If you're going to have the syntax be `namespace class`... maybe you
>     shouldn't name the proposal and feature "class namespace" ;)
>
>
> Most folks named the feature "class namespace" during previous
> discussions, yet the "namespace class" syntax fits better with the
> current language / implementation (I started implementing this proposal
> in clang, and while I started out with the "class namespace" syntax,
> later I switched to "namespace class" as that felt more natural both
> regarding the current clang parsing code and for me as a "user"). Still,
> I'd keep the feature called "class namespace" as that better conveys the
> meaning / intention than "namespace class".
>
> (just for the record: I'd rather see the feature called as "namespace
> class" or implemented with "class namespace" syntax rather than not see
> it at all due to mismatching name and syntax ;)
>

I can see some problems for newbies to learn the subtle differences between

namespace class

and

namespace { class

not to mention

namespace { namespace class


Makes me feel that the choice of syntax isn't perfect yet.  :-)



    Bo Persson


--=20

---=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
Visit this group at https://groups.google.com/a/isocpp.org/group/std-propos=
als/.

.


Author: "Vicente J. Botet Escriba" <vicente.botet@wanadoo.fr>
Date: Sun, 31 Jan 2016 19:07:18 +0100
Raw View
Le 31/01/2016 13:28, Bo Persson a =C3=A9crit :
> On 2016-01-31 10:38, P=C3=A9ter Radics wrote:
>> On Saturday, January 30, 2016 at 4:34:43 AM UTC+1, Nicol Bolas wrote:
>>
>>     If you're going to have the syntax be `namespace class`... maybe you
>>     shouldn't name the proposal and feature "class namespace" ;)
>>
>>
>> Most folks named the feature "class namespace" during previous
>> discussions, yet the "namespace class" syntax fits better with the
>> current language / implementation (I started implementing this proposal
>> in clang, and while I started out with the "class namespace" syntax,
>> later I switched to "namespace class" as that felt more natural both
>> regarding the current clang parsing code and for me as a "user"). Still,
>> I'd keep the feature called "class namespace" as that better conveys the
>> meaning / intention than "namespace class".
>>
>> (just for the record: I'd rather see the feature called as "namespace
>> class" or implemented with "class namespace" syntax rather than not see
>> it at all due to mismatching name and syntax ;)
>>
>
> I can see some problems for newbies to learn the subtle differences=20
> between
>
> namespace class
>
> and
>
> namespace { class
>
> not to mention
>
> namespace { namespace class
>
>
> Makes me feel that the choice of syntax isn't perfect yet.  :-)
>
What would be wrong if we don't use the keyword namespace at all.

We can forward declare a class, declare it completely and with this=20
feature we could define some of its members.


   struct Foo;

   struct Foo {
     Foo();
     int bar();
   };

   class Foo { // this is not a re-declaration but a definition of some mem=
bers
     Foo() { ... }
     int bar() { ... }
   };

Vicente

--=20

---=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
Visit this group at https://groups.google.com/a/isocpp.org/group/std-propos=
als/.

.


Author: =?UTF-8?Q?P=C3=A9ter_Radics?= <mitchnull@gmail.com>
Date: Sun, 31 Jan 2016 10:21:46 -0800 (PST)
Raw View
------=_Part_3530_1146519474.1454264506567
Content-Type: multipart/alternative;
 boundary="----=_Part_3531_947861686.1454264506567"

------=_Part_3531_947861686.1454264506567
Content-Type: text/plain; charset=UTF-8

On Sunday, January 31, 2016 at 7:07:21 PM UTC+1, Vicente J. Botet Escriba
wrote:
>
> [snip]
> What would be wrong if we don't use the keyword namespace at all.
>
> We can forward declare a class, declare it completely and with this
> feature we could define some of its members.
>
>
>    struct Foo;
>
>    struct Foo {
>      Foo();
>      int bar();
>    };
>
>    class Foo { // this is not a re-declaration but a definition of some
> members
>      Foo() { ... }
>      int bar() { ... }
>    };
>
> Vicente
>

I feel it would be too fragile, and we'd have issues with templates at
least the use-case where the "class namespace" specializes only some of the
members, not the whole class template.  I strongly prefer some way of
making this different looking from the normal class declaration. (be it
"namespace class" or something else).

--

---
You received this message because you are subscribed to the Google Groups "ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an email to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
Visit this group at https://groups.google.com/a/isocpp.org/group/std-proposals/.

------=_Part_3531_947861686.1454264506567
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">On Sunday, January 31, 2016 at 7:07:21 PM UTC+1, Vicente J=
.. Botet Escriba wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;=
margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;">[snip]<b=
r>What would be wrong if we don&#39;t use the keyword namespace at all.
<br>
<br>We can forward declare a class, declare it completely and with this=20
<br>feature we could define some of its members.
<br>
<br>
<br>=C2=A0 =C2=A0struct Foo;
<br>
<br>=C2=A0 =C2=A0struct Foo {
<br>=C2=A0 =C2=A0 =C2=A0Foo();
<br>=C2=A0 =C2=A0 =C2=A0int bar();
<br>=C2=A0 =C2=A0};
<br>
<br>=C2=A0 =C2=A0class Foo { // this is not a re-declaration but a definiti=
on of some members
<br>=C2=A0 =C2=A0 =C2=A0Foo() { ... }
<br>=C2=A0 =C2=A0 =C2=A0int bar() { ... }
<br>=C2=A0 =C2=A0};
<br>
<br>Vicente
<br></blockquote><div><br></div><div>I feel it would be too fragile, and we=
&#39;d have issues with templates at least the use-case where the &quot;cla=
ss namespace&quot; specializes only some of the members, not the whole clas=
s template. =C2=A0I strongly prefer some way of making this different looki=
ng from the normal class declaration. (be it &quot;namespace class&quot; or=
 something else).</div><div><br></div></div>

<p></p>

-- <br />
<br />
--- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br />
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
Visit this group at <a href=3D"https://groups.google.com/a/isocpp.org/group=
/std-proposals/">https://groups.google.com/a/isocpp.org/group/std-proposals=
/</a>.<br />

------=_Part_3531_947861686.1454264506567--
------=_Part_3530_1146519474.1454264506567--

.


Author: Nicol Bolas <jmckesson@gmail.com>
Date: Sun, 31 Jan 2016 11:44:04 -0800 (PST)
Raw View
------=_Part_729_1442927266.1454269444296
Content-Type: multipart/alternative;
 boundary="----=_Part_730_1491370174.1454269444296"

------=_Part_730_1491370174.1454269444296
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

On Sunday, January 31, 2016 at 1:21:47 PM UTC-5, P=C3=A9ter Radics wrote:
>
> On Sunday, January 31, 2016 at 7:07:21 PM UTC+1, Vicente J. Botet Escriba=
=20
> wrote:
>>
>> [snip]
>> What would be wrong if we don't use the keyword namespace at all.=20
>>
>> We can forward declare a class, declare it completely and with this=20
>> feature we could define some of its members.=20
>>
>>
>>    struct Foo;=20
>>
>>    struct Foo {=20
>>      Foo();=20
>>      int bar();=20
>>    };=20
>>
>>    class Foo { // this is not a re-declaration but a definition of some=
=20
>> members=20
>>      Foo() { ... }=20
>>      int bar() { ... }=20
>>    };=20
>>
>> Vicente=20
>>
>
> I feel it would be too fragile, and we'd have issues with templates at=20
> least the use-case where the "class namespace" specializes only some of t=
he=20
> members, not the whole class template.  I strongly prefer some way of=20
> making this different looking from the normal class declaration. (be it=
=20
> "namespace class" or something else).
>

I agree. Whatever syntax gets choosen, I think it's important to maintain a=
=20
distinction between "the one place where a class is defined" and "one of=20
many places where members of that class can be defined."

`class` and `struct` definitions are "the one place". Whereas `namespace`=
=20
is associated with "one of many places".

--=20

---=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
Visit this group at https://groups.google.com/a/isocpp.org/group/std-propos=
als/.

------=_Part_730_1491370174.1454269444296
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">On Sunday, January 31, 2016 at 1:21:47 PM UTC-5, P=C3=A9te=
r Radics wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-=
left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr=
">On Sunday, January 31, 2016 at 7:07:21 PM UTC+1, Vicente J. Botet Escriba=
 wrote:<blockquote class=3D"gmail_quote" style=3D"margin:0;margin-left:0.8e=
x;border-left:1px #ccc solid;padding-left:1ex">[snip]<br>What would be wron=
g if we don&#39;t use the keyword namespace at all.
<br>
<br>We can forward declare a class, declare it completely and with this=20
<br>feature we could define some of its members.
<br>
<br>
<br>=C2=A0 =C2=A0struct Foo;
<br>
<br>=C2=A0 =C2=A0struct Foo {
<br>=C2=A0 =C2=A0 =C2=A0Foo();
<br>=C2=A0 =C2=A0 =C2=A0int bar();
<br>=C2=A0 =C2=A0};
<br>
<br>=C2=A0 =C2=A0class Foo { // this is not a re-declaration but a definiti=
on of some members
<br>=C2=A0 =C2=A0 =C2=A0Foo() { ... }
<br>=C2=A0 =C2=A0 =C2=A0int bar() { ... }
<br>=C2=A0 =C2=A0};
<br>
<br>Vicente
<br></blockquote><div><br></div><div>I feel it would be too fragile, and we=
&#39;d have issues with templates at least the use-case where the &quot;cla=
ss namespace&quot; specializes only some of the members, not the whole clas=
s template. =C2=A0I strongly prefer some way of making this different looki=
ng from the normal class declaration. (be it &quot;namespace class&quot; or=
 something else).</div></div></blockquote><div><br>I agree. Whatever syntax=
 gets choosen, I think it&#39;s important to maintain a distinction between=
 &quot;the one place where a class is defined&quot; and &quot;one of many p=
laces where members of that class can be defined.&quot;<br><br>`class` and =
`struct` definitions are &quot;the one place&quot;. Whereas `namespace` is =
associated with &quot;one of many places&quot;.<br></div></div>

<p></p>

-- <br />
<br />
--- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br />
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
Visit this group at <a href=3D"https://groups.google.com/a/isocpp.org/group=
/std-proposals/">https://groups.google.com/a/isocpp.org/group/std-proposals=
/</a>.<br />

------=_Part_730_1491370174.1454269444296--
------=_Part_729_1442927266.1454269444296--

.


Author: Matthew Woehlke <mwoehlke.floss@gmail.com>
Date: Thu, 04 Feb 2016 14:49:51 -0500
Raw View
On 2016-01-29 22:34, Nicol Bolas wrote:
> If you're going to have the syntax be `namespace class`... maybe you=20
> shouldn't name the proposal and feature "class namespace" ;)

Eh... I blame English :-). The correct order here is adjective, noun. A
"namespace class" implies a special type of class that relates to
namespaces.

C++ has its own grammar rules, under which the "best"=C2=B9 grammar is
"namespace <entity>", with <entity> =E2=86=92 "class <class-name>". (Althou=
gh
I'd be happy to see the feature accepted with the syntax "class
namespace <class-name>"...)

(=C2=B9 "Best" is of course subjective, but there seems to be a fair degree
of consensus here.)

IOW, I don't think it's worth changing, even though I concede that there
is some reason to your point :-). It's my understanding that the paper
title is intended to describe the feature, and is not required reiterate
the syntax.

--=20
Matthew

--=20

---=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
Visit this group at https://groups.google.com/a/isocpp.org/group/std-propos=
als/.

.