<!DOCTYPE html><html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body>
    <div class="markdown-here-wrapper" data-md-url="" style="">
      <p style="margin: 0px 0px 1.2em !important;">On 10/06/2024 17:32,
        Archie Cobbs wrote:</p>
      <p style="margin: 0px 0px 1.2em !important;"></p>
      <div class="markdown-here-exclude">
        <p></p>
        <blockquote type="cite" cite="mid:CANSoFxvtfeNtzdJZeBB_E__QEeff2irZXbFNyQoCSbpaHt3w4Q@mail.gmail.com">
          
          <div dir="ltr">
            <div dir="ltr">On Mon, Jun 10, 2024 at 4:24 AM Maurizio
              Cimadamore <<a href="mailto:maurizio.cimadamore@oracle.com" moz-do-not-send="true" class="moz-txt-link-freetext">maurizio.cimadamore@oracle.com</a>>
              wrote:</div>
            <div class="gmail_quote">
              <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
                <div>We basically have classes which have no enclosing
                  instances, but where enclosing members can be accessed
                  (via other means). </div>
              </blockquote>
              <div><br>
              </div>
              <div>Hah, you've already got me in a screeching halt on
                the first sentence here, because I'm inferring a
                different meaning of "enclosing instance" than what I
                knew (and you also throw in "enclosing members", phew :)<br>
              </div>
              <div><br>
              </div>
              <div>Just so we're on the same page - with respect to the
                anonymous Runnable class below, how would you describe
                "ClassA.this" and "ClassB.this"?<br>
              </div>
            </div>
          </div>
        </blockquote>
        <p></p>
      </div>
      <p style="margin: 0px 0px 1.2em !important;"></p>
      <p style="margin: 0px 0px 1.2em !important;">The anon Runnable has
        two enclosing instances. One of type ClassB, one of type ClassA.
        The former cannot be accessed, the latter can.</p>
      <p style="margin: 0px 0px 1.2em !important;"></p>
      <div class="markdown-here-exclude">
        <p></p>
        <blockquote type="cite" cite="mid:CANSoFxvtfeNtzdJZeBB_E__QEeff2irZXbFNyQoCSbpaHt3w4Q@mail.gmail.com">
          <div dir="ltr">
            <div class="gmail_quote">
              <div><br>
              </div>
              <div style="margin-left:40px"><span style="font-family:monospace">class ClassA {<br>
                      class ClassB {<br>
                          ClassB() {<br>
                              this(new Runnable() {<br>
                                  public void run() {<br>
                                      ClassA.this.hashCode();<br>
                                  }<br>
                              });<br>
                          }<br>
                          ClassB(Runnable r) {<br>
                          }<br>
                      }<br>
                  }</span><br>
              </div>
              <div><br>
              </div>
              <div><br>
              </div>
              <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
                <div>Historically, the JLS used to treat this/super
                  calls as a static context (8.8.7.1).</div>
              </blockquote>
              <div><br>
              </div>
              <div>That's what the JLS said, but of course that's not
                what the compiler ever implemented (JDK-8301649).</div>
            </div>
          </div>
        </blockquote>
        <p></p>
      </div>
      <p style="margin: 0px 0px 1.2em !important;"></p>
      <p style="margin: 0px 0px 1.2em !important;">Sure. What about ecj?
        What did that compiler implement? (This is more a question for
        Stephan).</p>
      <p style="margin: 0px 0px 1.2em !important;">What I’m trying to
        say is that “because javac does it” is not always a good reason
        for doing something.</p>
      <p style="margin: 0px 0px 1.2em !important;">In this particular
        case, the contrived nature of the examples involved, and the
        complexity of the resulting translation scheme make me question
        as to what the right choice should be.</p>
      <p style="margin: 0px 0px 1.2em !important;"></p>
      <div class="markdown-here-exclude">
        <p></p>
        <blockquote type="cite" cite="mid:CANSoFxvtfeNtzdJZeBB_E__QEeff2irZXbFNyQoCSbpaHt3w4Q@mail.gmail.com">
          <div dir="ltr">
            <div class="gmail_quote">
              <div> </div>
              <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
                <div>And then JLS also used to say that inner classes
                  defined in a static context had no enclosing instance
                  (8.1.3).
                  <p>So, for this particular JEP, I think there's a
                    choice in front of us:</p>
                  <p>* do we keep JLS as is (and fix javac to do what
                    the spec has always said the behavior was) ?<br>
                    * or, do we keep javac as is and then tweak the JLS
                    to model what the implemented behavior is?</p>
                  <p>The latter path seems to have been chosen. Do we
                    have a feeling that local classes in
                    pre-construction context will be radically more
                    common than they are today? Or are there other
                    reasons behind this decision?<br>
                  </p>
                </div>
              </blockquote>
              <div>Here is my own understanding of the reasoning behind
                choosing option #2 (others may differ).</div>
              <div><br>
              </div>
              <div>First of all, the question of how to treat classes in
                early construction contexts is not new - it's just
                become a lot more obvious because of the new flexibility
                offered in the JEP. <br>
                The "early construction context" already exists in
                constructor parameters, although of course more
                shoe-horning required doing it the old way.</div>
              <div><br>
              </div>
              <div>For example this code compiles fine in JDK 17:<br>
              </div>
              <div><br>
              </div>
              <div style="margin-left:40px"><span style="font-family:monospace">class EarlyLocal {<br>
                      int x;<br>
                      class Inner {<br>
                          Inner(int x) {<br>
                              this(switch (x) {<br>
                                  default -> {<br>
                                      class Local { {
                  EarlyLocal.this.hashCode(); } }<br>
                                      yield 0.0;<br>
                                  }<br>
                              });<br>
                          }<br>
                          Inner(double x) {<br>
                          }<br>
                      }<br>
                  }</span></div>
              <div><br>
              </div>
            </div>
            <div class="gmail_quote">So that means there is some amount
              of code out there (unknown how much) which is, for
              example, referencing 2nd outer instances from anonymous
              classes that are created inside constructor parameters (a
              more likely example of that is the one given earlier in
              this email thread (May 30th, "class Outer")).</div>
          </div>
        </blockquote>
        <p></p>
      </div>
      <p style="margin: 0px 0px 1.2em !important;"></p>
      <p style="margin: 0px 0px 1.2em !important;">This means “there
        might be” some amont of code. Some initial analysis against
        Maven found in fact <em>no uses</em>. But I will need to double
        check the results, and also include lambda expressions in the
        mix.</p>
      <p style="margin: 0px 0px 1.2em !important;">My beef with this
        thread is that we keep using the fact that it “works in javac”
        as a proof that the feature has to be designed this way.</p>
      <p style="margin: 0px 0px 1.2em !important;">Here’s a recently
        discovered counter-example:</p>
      <pre style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;font-size: 1em; line-height: 1.2em;margin: 1.2em 0px;"><code class="hljs language-java" style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap; border: 1px solid rgb(234, 234, 234); background-color: rgb(248, 248, 248); border-radius: 3px; display: inline;white-space: pre; overflow: auto; border-radius: 3px; border: 1px solid rgb(204, 204, 204); padding: 0.5em 0.7em; display: block !important;display: block; overflow-x: auto; padding: 0.5em; color: rgb(51, 51, 51); background: rgb(248, 248, 248); -moz-text-size-adjust: none;"><span class="hljs-class"><span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: bold;">class</span> <span class="hljs-title" style="color: rgb(153, 0, 0); font-weight: bold;color: rgb(68, 85, 136); font-weight: bold;">Outer</span> </span>{
    <span class="hljs-class"><span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: bold;">interface</span> <span class="hljs-title" style="color: rgb(153, 0, 0); font-weight: bold;color: rgb(68, 85, 136); font-weight: bold;">A</span> </span>{ }
    <span class="hljs-class"><span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: bold;">interface</span> <span class="hljs-title" style="color: rgb(153, 0, 0); font-weight: bold;color: rgb(68, 85, 136); font-weight: bold;">B</span> </span>{ }

    <span class="hljs-class"><span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: bold;">class</span> <span class="hljs-title" style="color: rgb(153, 0, 0); font-weight: bold;color: rgb(68, 85, 136); font-weight: bold;">Inner1</span> </span>{
        Inner1() {
            <span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: bold;">this</span>(<span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: bold;">new</span> A() {
                <span class="hljs-class"><span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: bold;">class</span> <span class="hljs-title" style="color: rgb(153, 0, 0); font-weight: bold;color: rgb(68, 85, 136); font-weight: bold;">Inner2</span> </span>{
                    Inner2() {
                        <span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: bold;">this</span>(<span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: bold;">new</span> B() { { m(); g(); } });
                    }

                    Inner2(Object o) { }
                }

                <span class="hljs-function"><span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: bold;">void</span> <span class="hljs-title" style="color: rgb(153, 0, 0); font-weight: bold;">m</span><span class="hljs-params">()</span> </span>{ }
            });
        }

        Inner1(Object o) { }
    }
    <span class="hljs-function"><span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: bold;">void</span> <span class="hljs-title" style="color: rgb(153, 0, 0); font-weight: bold;">g</span><span class="hljs-params">()</span> </span>{ }
}
</code></pre>
      <p style="margin: 0px 0px 1.2em !important;">This does NOT work
        with javac, in fact it never did (I went back as far back as
        Java 7, but I have no reason to believe it ever worked). This
        example defeats the very assumption javac relies upon when
        translating local classes - that there is a chain of enclosing
        instances, reachable using some hidden field. In this case
        there’s <em>two</em> enclosing instances, and one is not
        reachable by the other.</p>
      <p style="margin: 0px 0px 1.2em !important;">We can fix this by
        making the implementation even more complex. Or we can step
        back, and ask ourselves: how many developers, when seeing the
        above code, will immediately grasp what that code means? My bet
        is that nobody <em>really</em> wants to write code that looks
        like this. Surely nobody wants to read it (I don’t!).</p>
      <p style="margin: 0px 0px 1.2em !important;"></p>
      <div class="markdown-here-exclude">
        <p></p>
        <blockquote type="cite" cite="mid:CANSoFxvtfeNtzdJZeBB_E__QEeff2irZXbFNyQoCSbpaHt3w4Q@mail.gmail.com">
          <div dir="ltr">
            <div class="gmail_quote"><br>
            </div>
            <div class="gmail_quote">A second reason is that access to
              2nd & further outer instances is something developers
              understand and expect, and denying it to them for no
              particularly good reason (my opinion) in one place (early
              construction) but not anywhere else will strike them as
              arbitrarily inconsistent and annoying. Putting this
              another way, developers already have an intuitive
              understanding that you can't access 'this' prior to
              superclass construction, so that exception is already
              baked into their lives. If we make early construction
              contexts truly static (option #1), then we're creating yet
              another exception they will have to learn and work around.
              Contrast with option #2 which just extends everything they
              already know and expect in a natural way.<br>
            </div>
          </div>
        </blockquote>
        <p></p>
      </div>
      <p style="margin: 0px 0px 1.2em !important;"></p>
      <p style="margin: 0px 0px 1.2em !important;">The example above has
        nothing intuitive about it IMHO.</p>
      <p style="margin: 0px 0px 1.2em !important;">The problem is that
        we’re saying, <em>simultaneously</em> that:</p>
      <ul style="margin: 1.2em 0px;padding-left: 2em;">
        <li style="margin: 0.5em 0px;">it is an error to use <code style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap; border: 1px solid rgb(234, 234, 234); background-color: rgb(248, 248, 248); border-radius: 3px; display: inline;">this</code>
          in a pre-construction context</li>
        <li style="margin: 0.5em 0px;">it is ok for a local class in a
          pre-construction context to use enclosing instances other than
          “problematic ones”</li>
      </ul>
      <p style="margin: 0px 0px 1.2em !important;">This is IMHO what
        leads to non-intuitiveness. I claim that the mental model
        developers have about encloising instances is that either there
        is an innermost enclosing instance, or there’s none. And if
        there is one, all outer enclosing instances are reachable,
        somehow, via the innermost instance. The model we’re proposing
        in #2 is different, and amounts at saying that a class can have
        N enclosing instances, all potentially unrelated from each
        other.</p>
      <p style="margin: 0px 0px 1.2em !important;">So, if A contains B,
        and B contains C, we can end up with cases where C can access
        the enclosing instance for A, whereas B cannot. This seems to
        violate a natural, intuitive, and compositional behavior (e.g.
        if both C and B have enclosing instances, then “surely” A must
        be the type an enclosing instance with respect to both).</p>
      <p style="margin: 0px 0px 1.2em !important;"></p>
      <div class="markdown-here-exclude">
        <p></p>
        <blockquote type="cite" cite="mid:CANSoFxvtfeNtzdJZeBB_E__QEeff2irZXbFNyQoCSbpaHt3w4Q@mail.gmail.com">
          <div dir="ltr">
            <div class="gmail_quote">
              <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
                <div>
                  <p> </p>
                  <p>Perhaps the tacit understanding was that "javac got
                    this right", but looking at the increasing numbers
                    of bugs filed recently in this area, and after
                    looking more at how the code works, it seems that
                    javac doesn't have a very principled way to get
                    there, and it is in fact rather easy to come up with
                    examples which defeats javac's translation strategy.</p>
                </div>
              </blockquote>
              <div>I agree that the increasing number of bugs is
                alarming. But I attribute this to poor internal
                documentation and years of early construction fixes. If
                you look back at Jira historically you'll see a lot of
                bugs that relate specifically to early construction
                context issues (in constructor parameters, obviously).
                The NOOUTERTHIS flag is an example of how these got
                fixed with (arguably) a quick hack rather than a more
                principled refactoring. IMHO, saying that these are
                reasons to downgrade the spec is the tail wagging the
                dog.</div>
            </div>
          </div>
        </blockquote>
        <p></p>
      </div>
      <p style="margin: 0px 0px 1.2em !important;"></p>
      <p style="margin: 0px 0px 1.2em !important;">I’m not saying we
        shouldn’t do it because it’s hard to implement.</p>
      <p style="margin: 0px 0px 1.2em !important;">I’m saying that the
        model put forward by the spec is (a) not very intuitive (despite
        what you seem to claim) and (b) not a very useful
        generalization.</p>
      <p style="margin: 0px 0px 1.2em !important;">My point here is that
        I dare to find a developer that in 2 seconds will be able to
        determine whether the code I wrote above should compile or not.</p>
      <p style="margin: 0px 0px 1.2em !important;">And if developers
        should spend 10 minutes chasing down the spec to understand what
        the program is supposed to mean, are we sure we want them to
        write code like this in the first place?</p>
      <p style="margin: 0px 0px 1.2em !important;">So, while we can
        spend resources in chasing down every single issue in this area,
        this feels, I admit, not a great use of our collective time
        (which I’m sure is limited).</p>
      <p style="margin: 0px 0px 1.2em !important;">Maurizio</p>
      <p style="margin: 0px 0px 1.2em !important;"></p>
      <div class="markdown-here-exclude">
        <p></p>
        <blockquote type="cite" cite="mid:CANSoFxvtfeNtzdJZeBB_E__QEeff2irZXbFNyQoCSbpaHt3w4Q@mail.gmail.com">
          <div dir="ltr">
            <div class="gmail_quote"><br>
            </div>
            <div><br>
            </div>
            <div>-Archie<br>
            </div>
            <div><br>
            </div>
            <span class="gmail_signature_prefix">-- </span><br>
            <div dir="ltr" class="gmail_signature">Archie L. Cobbs<br>
            </div>
          </div>
        </blockquote>
        <p></p>
      </div>
      <p style="margin: 0px 0px 1.2em !important;"></p>
      <div title="MDH:PHA+PGJyPjwvcD48ZGl2IGNsYXNzPSJtb3otY2l0ZS1wcmVmaXgiPk9uIDEwLzA2LzIwMjQgMTc6
MzIsIEFyY2hpZSBDb2JicyB3cm90ZTo8YnI+PC9kaXY+PGJsb2NrcXVvdGUgdHlwZT0iY2l0ZSIg
Y2l0ZT0ibWlkOkNBTlNvRnh2dGZlTnR6ZEpaZUJCX0VfX1FFZWZmMmlyWlhiRk55UW9DU2JwYUh0
M3c0UUBtYWlsLmdtYWlsLmNvbSI+PG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250
ZW50PSJ0ZXh0L2h0bWw7ICI+PGRpdiBkaXI9Imx0ciI+PGRpdiBkaXI9Imx0ciI+T24gTW9uLCBK
dW4gMTAsIDIwMjQgYXQgNDoyNOKAr0FNIE1hdXJpemlvIENpbWFkYW1vcmUgJmx0OzxhIGhyZWY9
Im1haWx0bzptYXVyaXppby5jaW1hZGFtb3JlQG9yYWNsZS5jb20iIG1vei1kby1ub3Qtc2VuZD0i
dHJ1ZSIgY2xhc3M9Im1vei10eHQtbGluay1mcmVldGV4dCI+bWF1cml6aW8uY2ltYWRhbW9yZUBv
cmFjbGUuY29tPC9hPiZndDsgd3JvdGU6PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfcXVvdGUiPjxi
bG9ja3F1b3RlIGNsYXNzPSJnbWFpbF9xdW90ZSIgc3R5bGU9Im1hcmdpbjowcHggMHB4IDBweCAw
LjhleDtib3JkZXItbGVmdDoxcHggc29saWQgcmdiKDIwNCwyMDQsMjA0KTtwYWRkaW5nLWxlZnQ6
MWV4Ij4KCiAgCiAgPGRpdj5XZSBiYXNpY2FsbHkgaGF2ZSBjbGFzc2VzIHdoaWNoIGhhdmUgbm8g
ZW5jbG9zaW5nIGluc3RhbmNlcywgYnV0CiAgICAgIHdoZXJlIGVuY2xvc2luZyBtZW1iZXJzIGNh
biBiZSBhY2Nlc3NlZCAodmlhIG90aGVyIG1lYW5zKS4KICAgIDwvZGl2PjwvYmxvY2txdW90ZT48
ZGl2Pjxicj48L2Rpdj48ZGl2PkhhaCwgeW91J3ZlIGFscmVhZHkgZ290IG1lIGluIGEgc2NyZWVj
aGluZyBoYWx0IG9uIHRoZSBmaXJzdCBzZW50ZW5jZSBoZXJlLCBiZWNhdXNlIEknbSBpbmZlcnJp
bmcgYSBkaWZmZXJlbnQgbWVhbmluZyBvZiAiZW5jbG9zaW5nIGluc3RhbmNlIiB0aGFuIHdoYXQg
SSBrbmV3IChhbmQgeW91IGFsc28gdGhyb3cgaW4gImVuY2xvc2luZyBtZW1iZXJzIiwgcGhldyA6
KTxicj48L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2Pkp1c3Qgc28gd2UncmUgb24gdGhlIHNhbWUg
cGFnZSAtIHdpdGggcmVzcGVjdCB0byB0aGUgYW5vbnltb3VzIFJ1bm5hYmxlIGNsYXNzIGJlbG93
LCBob3cgd291bGQgeW91IGRlc2NyaWJlICJDbGFzc0EudGhpcyIgYW5kICJDbGFzc0IudGhpcyI/
PGJyPjwvZGl2PjwvZGl2PjwvZGl2PjwvYmxvY2txdW90ZT5UaGUgYW5vbiBSdW5uYWJsZSBoYXMg
dHdvIGVuY2xvc2luZyBpbnN0YW5jZXMuIE9uZSBvZiB0eXBlIENsYXNzQiwgb25lIG9mIHR5cGUg
Q2xhc3NBLiBUaGUgZm9ybWVyIGNhbm5vdCBiZSBhY2Nlc3NlZCwgdGhlIGxhdHRlciBjYW4uPGJy
PjxibG9ja3F1b3RlIHR5cGU9ImNpdGUiIGNpdGU9Im1pZDpDQU5Tb0Z4dnRmZU50emRKWmVCQl9F
X19RRWVmZjJpclpYYkZOeVFvQ1NicGFIdDN3NFFAbWFpbC5nbWFpbC5jb20iPjxkaXYgZGlyPSJs
dHIiPjxkaXYgY2xhc3M9ImdtYWlsX3F1b3RlIj48ZGl2Pjxicj48L2Rpdj48ZGl2IHN0eWxlPSJt
YXJnaW4tbGVmdDo0MHB4Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6bW9ub3NwYWNlIj5jbGFz
cyBDbGFzc0Egezxicj4mbmJzcDsgJm5ic3A7IGNsYXNzIENsYXNzQiB7PGJyPiZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyBDbGFzc0IoKSB7PGJyPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7IHRoaXMobmV3IFJ1bm5hYmxlKCkgezxicj4mbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IHB1YmxpYyB2b2lkIHJ1bigp
IHs8YnI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7IENsYXNzQS50aGlzLmhhc2hDb2RlKCk7PGJyPiZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgfTxicj4mbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyB9KTs8YnI+Jm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7IH08YnI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IENsYXNzQihSdW5u
YWJsZSByKSB7PGJyPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyB9PGJyPiZuYnNwOyAmbmJz
cDsgfTxicj59PC9zcGFuPjxicj48L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2Pjxicj48L2Rpdj48
YmxvY2txdW90ZSBjbGFzcz0iZ21haWxfcXVvdGUiIHN0eWxlPSJtYXJnaW46MHB4IDBweCAwcHgg
MC44ZXg7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkIHJnYigyMDQsMjA0LDIwNCk7cGFkZGluZy1sZWZ0
OjFleCI+PGRpdj5IaXN0b3JpY2FsbHksIHRoZSBKTFMgdXNlZCB0byB0cmVhdCB0aGlzL3N1cGVy
IGNhbGxzIGFzIGEgc3RhdGljCiAgICAgIGNvbnRleHQgKDguOC43LjEpLjwvZGl2PjwvYmxvY2tx
dW90ZT48ZGl2Pjxicj48L2Rpdj48ZGl2PlRoYXQncyB3aGF0IHRoZSBKTFMgc2FpZCwgYnV0IG9m
IGNvdXJzZSB0aGF0J3Mgbm90IHdoYXQgdGhlIGNvbXBpbGVyIGV2ZXIgaW1wbGVtZW50ZWQgKEpE
Sy04MzAxNjQ5KS48L2Rpdj48L2Rpdj48L2Rpdj48L2Jsb2NrcXVvdGU+PHA+U3VyZS4gV2hhdCBh
Ym91dCBlY2o/IFdoYXQgZGlkIHRoYXQgY29tcGlsZXIgaW1wbGVtZW50PyAoVGhpcyBpcyBtb3Jl
IGEgcXVlc3Rpb24gZm9yIFN0ZXBoYW4pLjwvcD48cD5XaGF0IEknbSB0cnlpbmcgdG8gc2F5IGlz
IHRoYXQgImJlY2F1c2UgamF2YWMgZG9lcyBpdCIgaXMgbm90IGFsd2F5cyBhIGdvb2QgcmVhc29u
IGZvciBkb2luZyBzb21ldGhpbmcuPC9wPjxwPkluIHRoaXMgcGFydGljdWxhciBjYXNlLCB0aGUg
Y29udHJpdmVkIG5hdHVyZSBvZiB0aGUgZXhhbXBsZXMgaW52b2x2ZWQsIGFuZCB0aGUgY29tcGxl
eGl0eSBvZiB0aGUgcmVzdWx0aW5nIHRyYW5zbGF0aW9uIHNjaGVtZSBtYWtlIG1lIHF1ZXN0aW9u
IGFzIHRvIHdoYXQgdGhlIHJpZ2h0IGNob2ljZSBzaG91bGQgYmUuPGJyPjwvcD48YmxvY2txdW90
ZSB0eXBlPSJjaXRlIiBjaXRlPSJtaWQ6Q0FOU29GeHZ0ZmVOdHpkSlplQkJfRV9fUUVlZmYyaXJa
WGJGTnlRb0NTYnBhSHQzdzRRQG1haWwuZ21haWwuY29tIj48ZGl2IGRpcj0ibHRyIj48ZGl2IGNs
YXNzPSJnbWFpbF9xdW90ZSI+PGRpdj4mbmJzcDs8L2Rpdj48YmxvY2txdW90ZSBjbGFzcz0iZ21h
aWxfcXVvdGUiIHN0eWxlPSJtYXJnaW46MHB4IDBweCAwcHggMC44ZXg7Ym9yZGVyLWxlZnQ6MXB4
IHNvbGlkIHJnYigyMDQsMjA0LDIwNCk7cGFkZGluZy1sZWZ0OjFleCI+PGRpdj5BbmQgdGhlbiBK
TFMgYWxzbyB1c2VkIHRvIHNheSB0aGF0IGlubmVyCiAgICAgIGNsYXNzZXMgZGVmaW5lZCBpbiBh
IHN0YXRpYyBjb250ZXh0IGhhZCBubyBlbmNsb3NpbmcgaW5zdGFuY2UKICAgICAgKDguMS4zKS4K
ICAgIDxwPlNvLCBmb3IgdGhpcyBwYXJ0aWN1bGFyIEpFUCwgSSB0aGluayB0aGVyZSdzIGEgY2hv
aWNlIGluIGZyb250IG9mCiAgICAgIHVzOjwvcD4KICAgIDxwPiogZG8gd2Uga2VlcCBKTFMgYXMg
aXMgKGFuZCBmaXggamF2YWMgdG8gZG8gd2hhdCB0aGUgc3BlYyBoYXMKICAgICAgYWx3YXlzIHNh
aWQgdGhlIGJlaGF2aW9yIHdhcykgPzxicj4KICAgICAgKiBvciwgZG8gd2Uga2VlcCBqYXZhYyBh
cyBpcyBhbmQgdGhlbiB0d2VhayB0aGUgSkxTIHRvIG1vZGVsIHdoYXQKICAgICAgdGhlIGltcGxl
bWVudGVkIGJlaGF2aW9yIGlzPzwvcD4KICAgIDxwPlRoZSBsYXR0ZXIgcGF0aCBzZWVtcyB0byBo
YXZlIGJlZW4gY2hvc2VuLiBEbyB3ZSBoYXZlIGEgZmVlbGluZwogICAgICB0aGF0IGxvY2FsIGNs
YXNzZXMgaW4gcHJlLWNvbnN0cnVjdGlvbiBjb250ZXh0IHdpbGwgYmUgcmFkaWNhbGx5CiAgICAg
IG1vcmUgY29tbW9uIHRoYW4gdGhleSBhcmUgdG9kYXk/IE9yIGFyZSB0aGVyZSBvdGhlciByZWFz
b25zIGJlaGluZAogICAgICB0aGlzIGRlY2lzaW9uPzxicj48L3A+PC9kaXY+PC9ibG9ja3F1b3Rl
PjxkaXY+SGVyZSBpcyBteSBvd24gdW5kZXJzdGFuZGluZyBvZiB0aGUgcmVhc29uaW5nIGJlaGlu
ZCBjaG9vc2luZyBvcHRpb24gIzIgKG90aGVycyBtYXkgZGlmZmVyKS48L2Rpdj48ZGl2Pjxicj48
L2Rpdj48ZGl2PkZpcnN0IG9mIGFsbCwgdGhlIHF1ZXN0aW9uIG9mIGhvdyB0byB0cmVhdCBjbGFz
c2VzIGluIGVhcmx5IGNvbnN0cnVjdGlvbiBjb250ZXh0cyBpcyBub3QgbmV3IC0gaXQncyBqdXN0
IGJlY29tZSBhIGxvdCBtb3JlIG9idmlvdXMgYmVjYXVzZSBvZiB0aGUgbmV3IGZsZXhpYmlsaXR5
IG9mZmVyZWQgaW4gdGhlIEpFUC4mbmJzcDs8YnI+VGhlICJlYXJseSBjb25zdHJ1Y3Rpb24gY29u
dGV4dCIgYWxyZWFkeSBleGlzdHMgaW4gY29uc3RydWN0b3IgcGFyYW1ldGVycywgYWx0aG91Z2gg
b2YgY291cnNlIG1vcmUgc2hvZS1ob3JuaW5nIHJlcXVpcmVkIGRvaW5nIGl0IHRoZSBvbGQgd2F5
LjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+Rm9yIGV4YW1wbGUgdGhpcyBjb2RlIGNvbXBpbGVz
IGZpbmUgaW4gSkRLIDE3Ojxicj48L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2IHN0eWxlPSJtYXJn
aW4tbGVmdDo0MHB4Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6bW9ub3NwYWNlIj5jbGFzcyBF
YXJseUxvY2FsIHs8YnI+Jm5ic3A7ICZuYnNwOyBpbnQgeDs8YnI+Jm5ic3A7ICZuYnNwOyBjbGFz
cyBJbm5lciB7PGJyPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBJbm5lcihpbnQgeCkgezxi
cj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyB0aGlzKHN3aXRjaCAo
eCkgezxicj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7IGRlZmF1bHQgLSZndDsgezxicj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgY2xhc3MgTG9jYWwgeyB7IEVh
cmx5TG9jYWwudGhpcy5oYXNoQ29kZSgpOyB9IH08YnI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IHlpZWxkIDAuMDs8
YnI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyB9PGJyPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IH0pOzxicj4m
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgfTxicj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgSW5uZXIoZG91YmxlIHgpIHs8YnI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IH08YnI+
Jm5ic3A7ICZuYnNwOyB9PGJyPn08L3NwYW4+PC9kaXY+PGRpdj48YnI+PC9kaXY+PC9kaXY+PGRp
diBjbGFzcz0iZ21haWxfcXVvdGUiPlNvIHRoYXQgbWVhbnMgdGhlcmUgaXMgc29tZSBhbW91bnQg
b2YgY29kZSBvdXQgdGhlcmUgKHVua25vd24gaG93IG11Y2gpIHdoaWNoIGlzLCBmb3IgZXhhbXBs
ZSwgcmVmZXJlbmNpbmcgMm5kIG91dGVyIGluc3RhbmNlcyBmcm9tIGFub255bW91cyBjbGFzc2Vz
IHRoYXQgYXJlIGNyZWF0ZWQgaW5zaWRlIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMgKGEgbW9yZSBs
aWtlbHkgZXhhbXBsZSBvZiB0aGF0IGlzIHRoZSBvbmUgZ2l2ZW4gZWFybGllciBpbiB0aGlzIGVt
YWlsIHRocmVhZCAoTWF5IDMwdGgsICJjbGFzcyBPdXRlciIpKS48L2Rpdj48L2Rpdj48L2Jsb2Nr
cXVvdGU+PHA+VGhpcyBtZWFucyAidGhlcmUgbWlnaHQgYmUiIHNvbWUgYW1vbnQgb2YgY29kZS4g
U29tZSBpbml0aWFsIGFuYWx5c2lzIGFnYWluc3QgTWF2ZW4gZm91bmQgaW4gZmFjdCBfbm8gdXNl
c18uIEJ1dCBJIHdpbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIHJlc3VsdHMsIGFuZCBhbHNv
IGluY2x1ZGUgbGFtYmRhIGV4cHJlc3Npb25zIGluIHRoZSBtaXguPC9wPjxwPk15IGJlZWYgd2l0
aCB0aGlzIHRocmVhZCBpcyB0aGF0IHdlIGtlZXAgdXNpbmcgdGhlIGZhY3QgdGhhdCBpdCAid29y
a3MgaW4gamF2YWMiIGFzIGEgcHJvb2YgdGhhdCB0aGUgZmVhdHVyZSBoYXMgdG8gYmUgZGVzaWdu
ZWQgdGhpcyB3YXkuPC9wPjxwPkhlcmUncyBhIHJlY2VudGx5IGRpc2NvdmVyZWQgY291bnRlci1l
eGFtcGxlOjwvcD48cD5gYGBqYXZhPGJyPmNsYXNzIE91dGVyIHs8YnI+Jm5ic3A7Jm5ic3A7Jm5i
c3A7IGludGVyZmFjZSBBIHsgfTxicj4mbmJzcDsmbmJzcDsmbmJzcDsgaW50ZXJmYWNlIEIgeyB9
PGJyPjxicj48YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7IGNsYXNzIElubmVyMSB7PGJyPiZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBJbm5lcjEoKSB7PGJyPiZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyB0aGlzKG5ldyBBKCkgezxicj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm
bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgY2xh
c3MgSW5uZXIyIHs8YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7
Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i
c3A7Jm5ic3A7Jm5ic3A7IElubmVyMigpIHs8YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i
c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7
Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IHRo
aXMobmV3IEIoKSB7IHsgbSgpOyBnKCk7IH0gfSk7PGJyPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyB9PGJyPjxicj4mbmJzcDsmbmJzcDsm
bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz
cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgSW5uZXIyKE9iamVj
dCBvKSB7IH08YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i
c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IH08YnI+PGJyPiZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyB2b2lkIG0oKSB7IH08YnI+Jm5ic3A7Jm5i
c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7
IH0pOzxicj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgfTxicj48
YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IElubmVyMShPYmpl
Y3QgbykgeyB9PGJyPiZuYnNwOyZuYnNwOyZuYnNwOyB9PGJyPiZuYnNwOyZuYnNwOyZuYnNwOyB2
b2lkIGcoKSB7IH08YnI+fTxicj5gYGA8L3A+PHA+VGhpcyBkb2VzIE5PVCB3b3JrIHdpdGggamF2
YWMsIGluIGZhY3QgaXQgbmV2ZXIgZGlkIChJIHdlbnQgYmFjayBhcyBmYXIgYmFjayBhcyBKYXZh
IDcsIGJ1dCBJIGhhdmUgbm8gcmVhc29uIHRvIGJlbGlldmUgaXQgZXZlciB3b3JrZWQpLiBUaGlz
IGV4YW1wbGUgZGVmZWF0cyB0aGUgdmVyeSBhc3N1bXB0aW9uIGphdmFjIHJlbGllcyB1cG9uIHdo
ZW4gdHJhbnNsYXRpbmcgbG9jYWwgY2xhc3NlcyAtIHRoYXQgdGhlcmUgaXMgYSBjaGFpbiBvZiBl
bmNsb3NpbmcgaW5zdGFuY2VzLCByZWFjaGFibGUgdXNpbmcgc29tZSBoaWRkZW4gZmllbGQuIElu
IHRoaXMgY2FzZSB0aGVyZSdzIF90d29fIGVuY2xvc2luZyBpbnN0YW5jZXMsIGFuZCBvbmUgaXMg
bm90IHJlYWNoYWJsZSBieSB0aGUgb3RoZXIuPC9wPjxwPldlIGNhbiBmaXggdGhpcyBieSBtYWtp
bmcgdGhlIGltcGxlbWVudGF0aW9uIGV2ZW4gbW9yZSBjb21wbGV4LiBPciB3ZSBjYW4gc3RlcCBi
YWNrLCBhbmQgYXNrIG91cnNlbHZlczogaG93IG1hbnkgZGV2ZWxvcGVycywgd2hlbiBzZWVpbmcg
dGhlIGFib3ZlIGNvZGUsIHdpbGwgaW1tZWRpYXRlbHkgZ3Jhc3Agd2hhdCB0aGF0IGNvZGUgbWVh
bnM/IE15IGJldCBpcyB0aGF0IG5vYm9keSBfcmVhbGx5XyB3YW50cyB0byB3cml0ZSBjb2RlIHRo
YXQgbG9va3MgbGlrZSB0aGlzLiBTdXJlbHkgbm9ib2R5IHdhbnRzIHRvIHJlYWQgaXQgKEkgZG9u
J3QhKS48YnI+PC9wPjxibG9ja3F1b3RlIHR5cGU9ImNpdGUiIGNpdGU9Im1pZDpDQU5Tb0Z4dnRm
ZU50emRKWmVCQl9FX19RRWVmZjJpclpYYkZOeVFvQ1NicGFIdDN3NFFAbWFpbC5nbWFpbC5jb20i
PjxkaXYgZGlyPSJsdHIiPjxkaXYgY2xhc3M9ImdtYWlsX3F1b3RlIj48YnI+PC9kaXY+PGRpdiBj
bGFzcz0iZ21haWxfcXVvdGUiPkEgc2Vjb25kIHJlYXNvbiBpcyB0aGF0IGFjY2VzcyB0byAybmQg
JmFtcDsgZnVydGhlciBvdXRlciBpbnN0YW5jZXMgaXMgc29tZXRoaW5nIGRldmVsb3BlcnMgdW5k
ZXJzdGFuZCBhbmQgZXhwZWN0LCBhbmQgZGVueWluZyBpdCB0byB0aGVtIGZvciBubyBwYXJ0aWN1
bGFybHkgZ29vZCByZWFzb24gKG15IG9waW5pb24pIGluIG9uZSBwbGFjZSAoZWFybHkgY29uc3Ry
dWN0aW9uKSBidXQgbm90IGFueXdoZXJlIGVsc2Ugd2lsbCBzdHJpa2UgdGhlbSBhcyBhcmJpdHJh
cmlseSBpbmNvbnNpc3RlbnQgYW5kIGFubm95aW5nLiBQdXR0aW5nIHRoaXMgYW5vdGhlciB3YXks
IGRldmVsb3BlcnMgYWxyZWFkeSBoYXZlIGFuIGludHVpdGl2ZSB1bmRlcnN0YW5kaW5nIHRoYXQg
eW91IGNhbid0IGFjY2VzcyAndGhpcycgcHJpb3IgdG8gc3VwZXJjbGFzcyBjb25zdHJ1Y3Rpb24s
IHNvIHRoYXQgZXhjZXB0aW9uIGlzIGFscmVhZHkgYmFrZWQgaW50byB0aGVpciBsaXZlcy4gSWYg
d2UgbWFrZSBlYXJseSBjb25zdHJ1Y3Rpb24gY29udGV4dHMgdHJ1bHkgc3RhdGljIChvcHRpb24g
IzEpLCB0aGVuIHdlJ3JlIGNyZWF0aW5nIHlldCBhbm90aGVyIGV4Y2VwdGlvbiB0aGV5IHdpbGwg
aGF2ZSB0byBsZWFybiBhbmQgd29yayBhcm91bmQuIENvbnRyYXN0IHdpdGggb3B0aW9uICMyIHdo
aWNoIGp1c3QgZXh0ZW5kcyBldmVyeXRoaW5nIHRoZXkgYWxyZWFkeSBrbm93IGFuZCBleHBlY3Qg
aW4gYSBuYXR1cmFsIHdheS48YnI+PC9kaXY+PC9kaXY+PC9ibG9ja3F1b3RlPjxwPlRoZSBleGFt
cGxlIGFib3ZlIGhhcyBub3RoaW5nIGludHVpdGl2ZSBhYm91dCBpdCBJTUhPLjwvcD48cD5UaGUg
cHJvYmxlbSBpcyB0aGF0IHdlJ3JlIHNheWluZywgX3NpbXVsdGFuZW91c2x5XyB0aGF0OjwvcD48
cD4qIGl0IGlzIGFuIGVycm9yIHRvIHVzZSBgdGhpc2AgaW4gYSBwcmUtY29uc3RydWN0aW9uIGNv
bnRleHQ8YnI+KiBpdCBpcyBvayBmb3IgYSBsb2NhbCBjbGFzcyBpbiBhIHByZS1jb25zdHJ1Y3Rp
b24gY29udGV4dCB0byB1c2UgZW5jbG9zaW5nIGluc3RhbmNlcyBvdGhlciB0aGFuICJwcm9ibGVt
YXRpYyBvbmVzIjwvcD48cD5UaGlzIGlzIElNSE8gd2hhdCBsZWFkcyB0byBub24taW50dWl0aXZl
bmVzcy4gSSBjbGFpbSB0aGF0IHRoZSBtZW50YWwgbW9kZWwgZGV2ZWxvcGVycyBoYXZlIGFib3V0
IGVuY2xvaXNpbmcgaW5zdGFuY2VzIGlzIHRoYXQgZWl0aGVyIHRoZXJlIGlzIGFuIGlubmVybW9z
dCBlbmNsb3NpbmcgaW5zdGFuY2UsIG9yIHRoZXJlJ3Mgbm9uZS4gQW5kIGlmIHRoZXJlIGlzIG9u
ZSwgYWxsIG91dGVyIGVuY2xvc2luZyBpbnN0YW5jZXMgYXJlIHJlYWNoYWJsZSwgc29tZWhvdywg
dmlhIHRoZSBpbm5lcm1vc3QgaW5zdGFuY2UuIFRoZSBtb2RlbCB3ZSdyZSBwcm9wb3NpbmcgaW4g
IzIgaXMgZGlmZmVyZW50LCBhbmQgYW1vdW50cyBhdCBzYXlpbmcgdGhhdCBhIGNsYXNzIGNhbiBo
YXZlIE4gZW5jbG9zaW5nIGluc3RhbmNlcywgYWxsIHBvdGVudGlhbGx5IHVucmVsYXRlZCBmcm9t
IGVhY2ggb3RoZXIuPC9wPjxwPlNvLCBpZiBBIGNvbnRhaW5zIEIsIGFuZCBCIGNvbnRhaW5zIEMs
IHdlIGNhbiBlbmQgdXAgd2l0aCBjYXNlcyB3aGVyZSBDIGNhbiBhY2Nlc3MgdGhlIGVuY2xvc2lu
ZyBpbnN0YW5jZSBmb3IgQSwgd2hlcmVhcyBCIGNhbm5vdC4gVGhpcyBzZWVtcyB0byB2aW9sYXRl
IGEgbmF0dXJhbCwgaW50dWl0aXZlLCBhbmQgY29tcG9zaXRpb25hbCBiZWhhdmlvciAoZS5nLiBp
ZiBib3RoIEMgYW5kIEIgaGF2ZSBlbmNsb3NpbmcgaW5zdGFuY2VzLCB0aGVuICJzdXJlbHkiIEEg
bXVzdCBiZSB0aGUgdHlwZSBhbiBlbmNsb3NpbmcgaW5zdGFuY2Ugd2l0aCByZXNwZWN0IHRvIGJv
dGgpLjxicj48L3A+PGJsb2NrcXVvdGUgdHlwZT0iY2l0ZSIgY2l0ZT0ibWlkOkNBTlNvRnh2dGZl
TnR6ZEpaZUJCX0VfX1FFZWZmMmlyWlhiRk55UW9DU2JwYUh0M3c0UUBtYWlsLmdtYWlsLmNvbSI+
PGRpdiBkaXI9Imx0ciI+PGRpdiBjbGFzcz0iZ21haWxfcXVvdGUiPjxibG9ja3F1b3RlIGNsYXNz
PSJnbWFpbF9xdW90ZSIgc3R5bGU9Im1hcmdpbjowcHggMHB4IDBweCAwLjhleDtib3JkZXItbGVm
dDoxcHggc29saWQgcmdiKDIwNCwyMDQsMjA0KTtwYWRkaW5nLWxlZnQ6MWV4Ij48ZGl2PjxwPgog
ICAgPC9wPgogICAgPHA+UGVyaGFwcyB0aGUgdGFjaXQgdW5kZXJzdGFuZGluZyB3YXMgdGhhdCAi
amF2YWMgZ290IHRoaXMgcmlnaHQiLAogICAgICBidXQgbG9va2luZyBhdCB0aGUgaW5jcmVhc2lu
ZyBudW1iZXJzIG9mIGJ1Z3MgZmlsZWQgcmVjZW50bHkgaW4KICAgICAgdGhpcyBhcmVhLCBhbmQg
YWZ0ZXIgbG9va2luZyBtb3JlIGF0IGhvdyB0aGUgY29kZSB3b3JrcywgaXQgc2VlbXMKICAgICAg
dGhhdCBqYXZhYyBkb2Vzbid0IGhhdmUgYSB2ZXJ5IHByaW5jaXBsZWQgd2F5IHRvIGdldCB0aGVy
ZSwgYW5kIGl0CiAgICAgIGlzIGluIGZhY3QgcmF0aGVyIGVhc3kgdG8gY29tZSB1cCB3aXRoIGV4
YW1wbGVzIHdoaWNoIGRlZmVhdHMKICAgICAgamF2YWMncyB0cmFuc2xhdGlvbiBzdHJhdGVneS48
L3A+PC9kaXY+PC9ibG9ja3F1b3RlPjxkaXY+SSBhZ3JlZSB0aGF0IHRoZSBpbmNyZWFzaW5nIG51
bWJlciBvZiBidWdzIGlzIGFsYXJtaW5nLiBCdXQgSSBhdHRyaWJ1dGUgdGhpcyB0byBwb29yIGlu
dGVybmFsIGRvY3VtZW50YXRpb24gYW5kIHllYXJzIG9mIGVhcmx5IGNvbnN0cnVjdGlvbiBmaXhl
cy4gSWYgeW91IGxvb2sgYmFjayBhdCBKaXJhIGhpc3RvcmljYWxseSB5b3UnbGwgc2VlIGEgbG90
IG9mIGJ1Z3MgdGhhdCByZWxhdGUgc3BlY2lmaWNhbGx5IHRvIGVhcmx5IGNvbnN0cnVjdGlvbiBj
b250ZXh0IGlzc3VlcyAoaW4gY29uc3RydWN0b3IgcGFyYW1ldGVycywgb2J2aW91c2x5KS4gVGhl
IE5PT1VURVJUSElTIGZsYWcgaXMgYW4gZXhhbXBsZSBvZiBob3cgdGhlc2UgZ290IGZpeGVkIHdp
dGggKGFyZ3VhYmx5KSBhIHF1aWNrIGhhY2sgcmF0aGVyIHRoYW4gYSBtb3JlIHByaW5jaXBsZWQg
cmVmYWN0b3JpbmcuIElNSE8sIHNheWluZyB0aGF0IHRoZXNlIGFyZSByZWFzb25zIHRvIGRvd25n
cmFkZSB0aGUgc3BlYyBpcyB0aGUgdGFpbCB3YWdnaW5nIHRoZSBkb2cuPC9kaXY+PC9kaXY+PC9k
aXY+PC9ibG9ja3F1b3RlPjxwPkknbSBub3Qgc2F5aW5nIHdlIHNob3VsZG4ndCBkbyBpdCBiZWNh
dXNlIGl0J3MgaGFyZCB0byBpbXBsZW1lbnQuPC9wPjxwPkknbSBzYXlpbmcgdGhhdCB0aGUgbW9k
ZWwgcHV0IGZvcndhcmQgYnkgdGhlIHNwZWMgaXMgKGEpIG5vdCB2ZXJ5IGludHVpdGl2ZSAoZGVz
cGl0ZSB3aGF0IHlvdSBzZWVtIHRvIGNsYWltKSBhbmQgKGIpIG5vdCBhIHZlcnkgdXNlZnVsIGdl
bmVyYWxpemF0aW9uLjxicj48L3A+PHA+TXkgcG9pbnQgaGVyZSBpcyB0aGF0IEkgZGFyZSB0byBm
aW5kIGEgZGV2ZWxvcGVyIHRoYXQgaW4gMiBzZWNvbmRzIHdpbGwgYmUgYWJsZSB0byBkZXRlcm1p
bmUgd2hldGhlciB0aGUgY29kZSBJIHdyb3RlIGFib3ZlIHNob3VsZCBjb21waWxlIG9yIG5vdC48
L3A+PHA+QW5kIGlmIGRldmVsb3BlcnMgc2hvdWxkIHNwZW5kIDEwIG1pbnV0ZXMgY2hhc2luZyBk
b3duIHRoZSBzcGVjIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgcHJvZ3JhbSBpcyBzdXBwb3NlZCB0
byBtZWFuLCBhcmUgd2Ugc3VyZSB3ZSB3YW50IHRoZW0gdG8gd3JpdGUgY29kZSBsaWtlIHRoaXMg
aW4gdGhlIGZpcnN0IHBsYWNlPzwvcD48cD5Tbywgd2hpbGUgd2UgY2FuIHNwZW5kIHJlc291cmNl
cyBpbiBjaGFzaW5nIGRvd24gZXZlcnkgc2luZ2xlIGlzc3VlIGluIAp0aGlzIGFyZWEsIHRoaXMg
ZmVlbHMsIEkgYWRtaXQsIG5vdCBhIGdyZWF0IHVzZSBvZiBvdXIgY29sbGVjdGl2ZSB0aW1lIAoo
d2hpY2ggSSdtIHN1cmUgaXMgbGltaXRlZCkuPGJyPjwvcD48cD5NYXVyaXppbzxicj48L3A+PGJs
b2NrcXVvdGUgdHlwZT0iY2l0ZSIgY2l0ZT0ibWlkOkNBTlNvRnh2dGZlTnR6ZEpaZUJCX0VfX1FF
ZWZmMmlyWlhiRk55UW9DU2JwYUh0M3c0UUBtYWlsLmdtYWlsLmNvbSI+PGRpdiBkaXI9Imx0ciI+
PGRpdiBjbGFzcz0iZ21haWxfcXVvdGUiPjxicj48L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2Pi1B
cmNoaWU8YnI+PC9kaXY+PGRpdj48YnI+PC9kaXY+PHNwYW4gY2xhc3M9ImdtYWlsX3NpZ25hdHVy
ZV9wcmVmaXgiPi0tIDwvc3Bhbj48YnI+PGRpdiBkaXI9Imx0ciIgY2xhc3M9ImdtYWlsX3NpZ25h
dHVyZSI+QXJjaGllIEwuIENvYmJzPGJyPjwvZGl2PjwvZGl2PgoKPC9ibG9ja3F1b3RlPg==" style="height:0;width:0;max-height:0;max-width:0;overflow:hidden;font-size:0em;padding:0;margin:0;">​</div>
    </div>
  </body>
</html>