<div dir="ltr">Hello,<div><br></div><div>there are multiple things being discussed here, which I think is leading to some confusion, in particular:</div><div>   1. How do pattern bindings work in normal Haskell?  It is not the case that only the outer pattern is lazy---when the patterns are matched depends on how the bound variables are used.  I don't think we need to make changes here.</div><div>   2. How should patterns on unlifted types work in pattern bindings, both nested and at the top level?  This is what started this discussion originally.</div><div>   3. How should nested bang patterns work in pattern bindings?  This came out from Richard's examples in response to my suggestion on how (2) might work.</div><div>   4. Should you always be able to replace `_` with an unused name without changing the semantics, which also came from Richard's examples.</div><div><br></div><div>Going backward, here are my thoughts:</div><div>  4. the answer to this should be `yes`, as it would make it consistent with how the rest of the language works.</div><div>  3. nested bang patterns in pattern bindings should count as "uses" of the value and therefore should be strict.  For example if I write `let ( !x, !y ) = undefined in ()`, I think this should be equivalent to `let (x,y) = undefined in x `seq` y `seq` ()`.  With the current behavior the bang patterns don't do anything, while my guess would be that most people would expect the suggested behavior instead.  As usual, we should not allow that at the top level.</div><div>  2. I think that an unlifted pattern (meaning "a pattern on a value of an unlifted type") that is only nested in other unlifted patterns should be strict  This includes top-level bindings as a special case, as they are not nested in anything.</div><div>    * For unlifted patterns nested in lifted patterns we have a choice:</div><div>         2.1 I suggested that, for simplicity, these should also be strict, so that you could just say "all unlifted patterns are strict".   This would mean that the containing (lifted) value would be always forced.</div><div>         2.2 I could also see a reasonable case being made for these not forcing the evaluation of their containing value until the unlifted value is demanded.   Perhaps this is more consistent with how the rest of the language works, so I'd be on board with that choice too.</div><div><br></div><div>I think what I am suggesting is consistent with Arnaud's choice (1), except it goes into a bit more details on how nested patterns should work.</div><div><br></div><div>Hope this clarifies things a bit,</div><div>-Iavor</div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div>   </div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Sep 10, 2020 at 2:17 AM Spiwack, Arnaud <<a href="mailto:arnaud.spiwack@tweag.io">arnaud.spiwack@tweag.io</a>> wrote:<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 dir="ltr"><div><p style="margin:0px 0px 1.2em">One thing that I had missed, until Simon pointed it out, is that in a <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">let pat = …</code> expression, only the outermost pattern of <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">pat</code> is lazy. So</p>
<pre style="font-family:Consolas,Inconsolata,Courier,monospace;font-size:1em;line-height:1.2em;margin:1.2em 0px"><code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;white-space:pre-wrap;overflow:auto;border-radius:3px;border:1px solid rgb(204,204,204);padding:0.5em;color:rgb(51,51,51);background:none 0% 0% repeat scroll rgb(248,248,248);display:block">
<span style="color:rgb(153,0,0);font-weight:bold">let</span> (x,<span style="color:rgb(68,85,136);font-weight:bold">Just</span> y) = (<span style="color:rgb(0,128,128)">1</span>, undefined) <span style="color:rgb(51,51,51);font-weight:bold">in</span> x `seq` ()
</code></pre>
<p style="margin:0px 0px 1.2em">Diverges. (whereas <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">let (x,~(Just y)) = (1, undefined) in x `seq` ()</code>) doesn’t).</p>
<p style="margin:0px 0px 1.2em">So, really, we are only speaking of the outermost pattern, which does simplify the discussion a little.</p>
<p style="margin:0px 0px 1.2em">I don’t think that I share Iavor’s concern. In fact, I’ve got to say that I personally don’t see (1) as meaning that the pattern is actually strict. I just see a lazy pattern which happens to be immediately forced, because an unlifted variable is bound. In this view, it doesn’t follow that the presence of some unlifted pattern deep inside a lazy pattern ought to force the pattern.</p>
<p style="margin:0px 0px 1.2em">However, if the outermost pattern is unlifted, then it’s most likely that it is not intended for the pattern to be lazy. From there, I see four ways forward:</p>
<ol style="margin:1.2em 0px;padding-left:2em">
<li style="margin:0.5em 0px">Make <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">let pat = …</code> strict if the outermost pattern is unlifted</li>
<li style="margin:0.5em 0px">Make <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">let pat = …</code> emit a warning if the outermost pattern is unlifted, but not explicitly banged.</li>
<li style="margin:0.5em 0px">Decide that I’m mistaken, and that the current design is fine</li>
<li style="margin:0.5em 0px">Decide that I’m mistaken, and that Iavor’s design it best</li>
</ol>
<p style="margin:0px 0px 1.2em">What do you think? I’ll try and make a proposal soon (unless (3) is too popular for a proposal to be worth it).</p>
<p style="margin:0px 0px 1.2em">On Tue, Sep 8, 2020 at 12:02 AM Simon Peyton Jones <a href="http://mailto:simonpj@microsoft.com" target="_blank">simonpj@microsoft.com</a> wrote:</p>
<p style="margin:0px 0px 1.2em"></p><div><p></p><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">





<div lang="EN-GB">
<div>
<p class="MsoNormal" style="margin-left:36pt">I think this is the consistent way to interpret your rule (1) that unlifted bindings are always strict<u></u><u></u></p>
<p class="MsoNormal" style="margin-left:36pt"><u></u> <u></u></p>
<p class="MsoNormal">But that’s not what rule (1) says.  It says that <b>a pattern binding is strict iff it binds a variable of unlifted type</b>. 
<u></u><u></u></p>
<p class="MsoNormal" style="margin-left:5.25pt"><u></u> <u></u></p>
<p class="MsoNormal">Now I think we agree that your proposal says that <b>a pattern binding is strict iff it or any of its sub-patterns has unlifted type,
</b>including wild-cards, variables, and constructor patterns; in fact <i>any</i> sub-pattern.   Call that (2).<u></u><u></u></p>
<p class="MsoNormal" style="margin-left:5.25pt"><u></u> <u></u></p>
<p class="MsoNormal" style="margin-left:5.25pt"><span>So
<u></u><u></u></span></p>
<ul style="margin-top:0cm" type="disc">
<li style="margin-left:5.25pt"><span>(1) is
<i>necessary</i>.   <u></u><u></u></span></li><li style="margin-left:5.25pt"><span>(2) is strictly stronger, and will make fewer program defined.  But is perhaps less surprising.<u></u><u></u></span></li></ul>
<p class="MsoNormal"><span><u></u> <u></u></span></p>
<p class="MsoNormal"><span>I think you could make a proposal out of that if you wanted.  I can’t decide if I like it, myself, but I think that it, too, is simple and consistent.<u></u><u></u></span></p>
<p class="MsoNormal"><span><br>
Simon<u></u><u></u></span></p>
<p class="MsoNormal"><span><u></u> <u></u></span></p>
<div style="border-color:currentcolor currentcolor currentcolor blue;border-style:none none none solid;border-width:medium medium medium 1.5pt;padding:0cm 0cm 0cm 4pt">
<div>
<div style="border-color:rgb(225,225,225) currentcolor currentcolor;border-style:solid none none;border-width:1pt medium medium;padding:3pt 0cm 0cm">
<p class="MsoNormal"><b><span lang="EN-US">From:</span></b><span lang="EN-US"> Iavor Diatchki <<a href="mailto:iavor.diatchki@gmail.com" target="_blank">iavor.diatchki@gmail.com</a>>
<br>
<b>Sent:</b> 07 September 2020 20:46<br>
<b>To:</b> Simon Peyton Jones <<a href="mailto:simonpj@microsoft.com" target="_blank">simonpj@microsoft.com</a>><br>
<b>Cc:</b> Richard Eisenberg <<a href="mailto:rae@richarde.dev" target="_blank">rae@richarde.dev</a>>; Spiwack, Arnaud <<a href="mailto:arnaud.spiwack@tweag.io" target="_blank">arnaud.spiwack@tweag.io</a>>; GHC developers <<a href="mailto:ghc-devs@haskell.org" target="_blank">ghc-devs@haskell.org</a>><br>
<b>Subject:</b> Re: !RE: Implicit reboxing of unboxed tuple in let-patterns<u></u><u></u></span></p>
</div>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<div>
<p class="MsoNormal" style="margin-right:0cm;margin-bottom:6pt;margin-left:0cm">
<u></u> <u></u></p>
</div>
<p class="MsoNormal" style="margin-right:0cm;margin-bottom:6pt;margin-left:0cm">
<u></u> <u></u></p>
<div>
<div>
<p class="MsoNormal" style="margin-right:0cm;margin-bottom:6pt;margin-left:0cm">
On Mon, Sep 7, 2020 at 5:12 AM Simon Peyton Jones via ghc-devs <<a href="mailto:ghc-devs@haskell.org" target="_blank">ghc-devs@haskell.org</a>> wrote:<u></u><u></u></p>
</div>
<blockquote style="border-color:currentcolor currentcolor currentcolor rgb(204,204,204);border-style:none none none solid;border-width:medium medium medium 1pt;padding:0cm 0cm 0cm 6pt;margin-left:4.8pt;margin-right:0cm">
<div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal" style="margin-left:36pt">
 <u></u><u></u></p>
<ol type="1" start="3">
<li class="MsoNormal">
I don’t understand the details of Iavor’s proposal to add that “unlifted patterns are strict”, in addition to (1).  Do you mean “any sub-pattern of the LHS has an unlifted type”? I think this is fully compatible with unlifted user defined data<u></u><u></u></li></ol>
<p class="MsoNormal" style="margin-left:72pt">
Just (# a,b #) = e<u></u><u></u></p>
<p class="MsoNormal" style="margin-left:36pt">
would be strict.   And even<u></u><u></u></p>
<p class="MsoNormal" style="margin-left:72pt">
MkT _ = e<u></u><u></u></p>
<p class="MsoNormal" style="margin-left:36pt">
would be strict if   data T = MkT (# Int,Int #)<u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
</div>
</blockquote>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Yes, the first one would be strict up to the tuple, and the second one would also be strict.  I think this is the consistent way to interpret your rule (1) that unlifted bindings are always strict, and it shouldn't really matter if you
 used a variable pattern, or a wild card pattern.  I don't think there's any other part of the language where replacing a `_` with an unused name changes the semantics of the program, and I don't think it should in this case either.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Just to be fully explicit, the thing I find odd with GHC's current behavior is that these two are different:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">let MkT x = undefined in ()       --> undefined<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">let MkT _ = undefined in ()       --> ()<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Even more explicitly:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">let (_ :: Int#) = undefined in ()   --> ()    -- the value `undefined` is not representable in type `Int#` but GHC is happy to proceed because it doesn't need to represent it<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">let (x :: Int#) = undefined in ()    --> ()   -- same situation, but now GHC is strict, even though it still doesn't need to represent the value.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">I think that the consistent behavior is for all of these to diverge, because laziness does not mix with unlfited values, at least in the presence of non-termination.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">-Iavor<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<blockquote style="border-color:currentcolor currentcolor currentcolor rgb(204,204,204);border-style:none none none solid;border-width:medium medium medium 1pt;padding:0cm 0cm 0cm 6pt;margin-left:4.8pt;margin-right:0cm">
<div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
<div style="border-color:currentcolor currentcolor currentcolor blue;border-style:none none none solid;border-width:medium medium medium 1.5pt;padding:0cm 0cm 0cm 4pt">
<div>
<div style="border-color:rgb(225,225,225) currentcolor currentcolor;border-style:solid none none;border-width:1pt medium medium;padding:3pt 0cm 0cm">
<p class="MsoNormal"><b><span lang="EN-US">From:</span></b><span lang="EN-US"> ghc-devs <<a href="mailto:ghc-devs-bounces@haskell.org" target="_blank">ghc-devs-bounces@haskell.org</a>>
<b>On Behalf Of </b>Richard Eisenberg<br>
<b>Sent:</b> 02 September 2020 14:47<br>
<b>To:</b> Spiwack, Arnaud <<a href="mailto:arnaud.spiwack@tweag.io" target="_blank">arnaud.spiwack@tweag.io</a>><br>
<b>Cc:</b> GHC developers <<a href="mailto:ghc-devs@haskell.org" target="_blank">ghc-devs@haskell.org</a>><br>
<b>Subject:</b> Re: Implicit reboxing of unboxed tuple in let-patterns</span><u></u><u></u></p>
</div>
</div>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<div>
<p class="MsoNormal" style="margin-bottom:12pt"><u></u> <u></u></p>
<blockquote style="margin-top:5pt;margin-bottom:5pt">
<div>
<p class="MsoNormal">On Sep 2, 2020, at 9:39 AM, Spiwack, Arnaud <<a href="mailto:arnaud.spiwack@tweag.io" target="_blank">arnaud.spiwack@tweag.io</a>> wrote:<u></u><u></u></p>
</div>
<p class="MsoNormal"> <u></u><u></u></p>
<div>
<p class="MsoNormal"><span style="font-size:9pt;font-family:Helvetica,sans-serif">Ooh… pattern synonyms for unboxed tuple. I must confess that I don't know what the semantics of these ought to be.
 It does look like an interesting can of worms. How do they currently desugar?</span><u></u><u></u></p>
</div>
</blockquote>
</div>
<p class="MsoNormal"> <u></u><u></u></p>
<div>
<p class="MsoNormal">Right now, there is one rule: if the type of any variable bound in the pattern is unlifted, then the pattern is an unlifter-var pattern and is strict. The pattern must be banged,
 unless the bound variable is not nested. This rule is consistent across all features.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">This thread is suggesting to add a special case -- one that seems to match intuition, but it's still a special case. And my question is: should the special case be for unboxed tuples?
 or should the special case be for any pattern whose overall type is unlifted?<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Richard<u></u><u></u></p>
</div>
</div>
</div>
</div>
<p class="MsoNormal">_______________________________________________<br>
ghc-devs mailing list<br>
<a href="mailto:ghc-devs@haskell.org" target="_blank">ghc-devs@haskell.org</a><br>
<a href="https://nam06.safelinks.protection.outlook.com/?url=http%3A%2F%2Fmail.haskell.org%2Fcgi-bin%2Fmailman%2Flistinfo%2Fghc-devs&data=02%7C01%7Csimonpj%40microsoft.com%7Ca1b8984af610438e315a08d853669e2b%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637351047493622347&sdata=mlcv1AZBJ%2FHQYDQtS7NPQ5YnbhQA17tWx9fzoVe8Gic%3D&reserved=0" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs</a><u></u><u></u></p>
</blockquote>
</div>
</div>
</div>
</div>
</div>

</blockquote><p></p></div><p style="margin:0px 0px 1.2em"></p>
<div title="MDH:PGRpdiBnbWFpbF9vcmlnaW5hbD0iMSI+T25lIHRoaW5nIHRoYXQgSSBoYWQgbWlzc2VkLCB1bnRp
bCBTaW1vbiBwb2ludGVkIGl0IG91dCwgaXMgdGhhdCBpbiBhIGBsZXQgcGF0ID0g4oCmYCBleHBy
ZXNzaW9uLCBvbmx5IHRoZSBvdXRlcm1vc3QgcGF0dGVybiBvZiBgcGF0YCBpcyBsYXp5LiBTbzxi
cj48YnI+YGBgaGFza2VsbDxicj48YnI+bGV0ICh4LEp1c3QgeSkgPSAoMSwgdW5kZWZpbmVkKSBp
biB4IGBzZXFgICgpPGJyPmBgYDxicj48L2Rpdj48ZGl2IGdtYWlsX29yaWdpbmFsPSIxIj48YnI+
PC9kaXY+PGRpdiBnbWFpbF9vcmlnaW5hbD0iMSI+RGl2ZXJnZXMuICh3aGVyZWFzIGBgbGV0ICh4
LH4oSnVzdCB5KSkgPSAoMSwgdW5kZWZpbmVkKSBpbiB4IGBzZXFgICgpYGApIGRvZXNuJ3QpLjwv
ZGl2PjxkaXYgZ21haWxfb3JpZ2luYWw9IjEiPjxicj48L2Rpdj48ZGl2IGdtYWlsX29yaWdpbmFs
PSIxIj5TbywgcmVhbGx5LCB3ZSBhcmUgb25seSBzcGVha2luZyBvZiB0aGUgb3V0ZXJtb3N0IHBh
dHRlcm4sIHdoaWNoIGRvZXMgc2ltcGxpZnkgdGhlIGRpc2N1c3Npb24gYSBsaXR0bGUuPGJyPjwv
ZGl2PjxkaXYgZ21haWxfb3JpZ2luYWw9IjEiPjxicj48L2Rpdj48ZGl2IGdtYWlsX29yaWdpbmFs
PSIxIj5JIGRvbid0IHRoaW5rIHRoYXQgSSBzaGFyZSBJYXZvcidzIGNvbmNlcm4uIEluIGZhY3Qs
IEkndmUgZ290IHRvIHNheSB0aGF0IEkgcGVyc29uYWxseSBkb24ndCBzZWUgKDEpIGFzIG1lYW5p
bmcgdGhhdCB0aGUgcGF0dGVybiBpcyBhY3R1YWxseSBzdHJpY3QuIEkganVzdCBzZWUgYSBsYXp5
IHBhdHRlcm4gd2hpY2ggaGFwcGVucyB0byBiZSA8c3BhbiB6ZXVtNGM1PSIxNTk5NzI4OTA2NjQ4
IiBkYXRhLWRkbndhYj0iMTU5OTcyODkwNjY0OCIgY2xhc3M9Im5nIiBkYXRhLXdwa2d2PSJ0cnVl
Ij5pbW1lZGlhdGVseTwvc3Bhbj4gZm9yY2VkLCBiZWNhdXNlIGFuIHVubGlmdGVkIHZhcmlhYmxl
IGlzIGJvdW5kLiBJbiB0aGlzIHZpZXcsIGl0IGRvZXNuJ3QgZm9sbG93IHRoYXQgdGhlIHByZXNl
bmNlIG9mIHNvbWUgdW5saWZ0ZWQgcGF0dGVybiBkZWVwIGluc2lkZSBhIGxhenkgcGF0dGVybiBv
dWdodCB0byBmb3JjZSB0aGUgcGF0dGVybi48L2Rpdj48ZGl2IGdtYWlsX29yaWdpbmFsPSIxIj48
YnI+PC9kaXY+PGRpdiBnbWFpbF9vcmlnaW5hbD0iMSI+SG93ZXZlciwgaWYgdGhlIG91dGVybW9z
dCBwYXR0ZXJuIGlzIHVubGlmdGVkLCB0aGVuIGl0J3MgbW9zdCBsaWtlbHkgdGhhdCBpdCBpcyBu
b3QgaW50ZW5kZWQgZm9yIHRoZSBwYXR0ZXJuIHRvIGJlIGxhenkuIEZyb20gdGhlcmUsIEkgc2Vl
IGZvdXIgd2F5cyBmb3J3YXJkOjwvZGl2PjxkaXYgZ21haWxfb3JpZ2luYWw9IjEiPjEuIE1ha2Ug
YGxldCBwYXQgPSDigKZgIHN0cmljdCBpZiB0aGUgb3V0ZXJtb3N0IHBhdHRlcm4gaXMgdW5saWZ0
ZWQ8L2Rpdj48ZGl2IGdtYWlsX29yaWdpbmFsPSIxIj4yLiBNYWtlIGBsZXQgcGF0ID0g4oCmYCBl
bWl0IGEgd2FybmluZyBpZiB0aGUgb3V0ZXJtb3N0IHBhdHRlcm4gaXMgdW5saWZ0ZWQsIGJ1dCBu
b3QgZXhwbGljaXRseSBiYW5nZWQuPC9kaXY+PGRpdiBnbWFpbF9vcmlnaW5hbD0iMSI+My4gRGVj
aWRlIHRoYXQgSSdtIG1pc3Rha2VuLCBhbmQgdGhhdCB0aGUgY3VycmVudCBkZXNpZ24gaXMgZmlu
ZTwvZGl2PjxkaXYgZ21haWxfb3JpZ2luYWw9IjEiPjQuIERlY2lkZSB0aGF0IEknbSBtaXN0YWtl
biwgYW5kIHRoYXQgSWF2b3IncyBkZXNpZ24gaXQgYmVzdDwvZGl2PjxkaXYgZ21haWxfb3JpZ2lu
YWw9IjEiPjxicj48L2Rpdj48ZGl2IGdtYWlsX29yaWdpbmFsPSIxIj5XaGF0IGRvIHlvdSB0aGlu
az8gSSdsbCB0cnkgYW5kIG1ha2UgYSBwcm9wb3NhbCBzb29uICh1bmxlc3MgKDMpIGlzIHRvbyBw
b3B1bGFyIGZvciBhIHByb3Bvc2FsIHRvIGJlIHdvcnRoIGl0KS48YnI+PC9kaXY+PGRpdiBnbWFp
bF9vcmlnaW5hbD0iMSI+PGJyPjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX3F1b3RlIj48ZGl2IGRp
cj0ibHRyIiBjbGFzcz0iZ21haWxfYXR0ciI+T24gVHVlLCBTZXAgOCwgMjAyMCBhdCAxMjowMiBB
TSBTaW1vbiBQZXl0b24gSm9uZXMgJmx0O3NpbW9ucGpAbWljcm9zb2Z0LmNvbSZndDsgd3JvdGU6
PGJyPjwvZGl2PjxibG9ja3F1b3RlIGNsYXNzPSJnbWFpbF9xdW90ZSIgc3R5bGU9Im1hcmdpbjog
MHB4IDBweCAwcHggMC44ZXg7IGJvcmRlci1sZWZ0OiAxcHggc29saWQgcmdiKDIwNCwgMjA0LCAy
MDQpOyBwYWRkaW5nLWxlZnQ6IDFleDsiPgoKCgoKCjxkaXYgbGFuZz0iRU4tR0IiPgo8ZGl2IGNs
YXNzPSJnbWFpbC1tXzMzNjU0NjQxNzIzMzI0MTE0NzFXb3JkU2VjdGlvbjEiPgo8cCBjbGFzcz0i
TXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDM2cHQ7Ij5JIHRoaW5rIHRoaXMgaXMgdGhl
IGNvbnNpc3RlbnQgd2F5IHRvIGludGVycHJldCB5b3VyIHJ1bGUgKDEpIHRoYXQgdW5saWZ0ZWQg
YmluZGluZ3MgYXJlIGFsd2F5cyBzdHJpY3Q8dT48L3U+PHU+PC91PjwvcD4KPHAgY2xhc3M9Ik1z
b05vcm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0OiAzNnB0OyI+PHU+PC91PiZuYnNwOzx1PjwvdT48
L3A+CjxwIGNsYXNzPSJNc29Ob3JtYWwiPkJ1dCB0aGF04oCZcyBub3Qgd2hhdCBydWxlICgxKSBz
YXlzLiZuYnNwOyBJdCBzYXlzIHRoYXQgPGI+YSBwYXR0ZXJuIGJpbmRpbmcgaXMgc3RyaWN0IGlm
ZiBpdCBiaW5kcyBhIHZhcmlhYmxlIG9mIHVubGlmdGVkIHR5cGU8L2I+LiZuYnNwOwo8dT48L3U+
PHU+PC91PjwvcD4KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0OiA1LjI1
cHQ7Ij48dT48L3U+Jm5ic3A7PHU+PC91PjwvcD4KPHAgY2xhc3M9Ik1zb05vcm1hbCI+Tm93IEkg
dGhpbmsgd2UgYWdyZWUgdGhhdCB5b3VyIHByb3Bvc2FsIHNheXMgdGhhdCA8Yj5hIHBhdHRlcm4g
YmluZGluZyBpcyBzdHJpY3QgaWZmIGl0IG9yIGFueSBvZiBpdHMgc3ViLXBhdHRlcm5zIGhhcyB1
bmxpZnRlZCB0eXBlLAo8L2I+aW5jbHVkaW5nIHdpbGQtY2FyZHMsIHZhcmlhYmxlcywgYW5kIGNv
bnN0cnVjdG9yIHBhdHRlcm5zOyBpbiBmYWN0IDxpPmFueTwvaT4gc3ViLXBhdHRlcm4uJm5ic3A7
Jm5ic3A7IENhbGwgdGhhdCAoMikuPHU+PC91Pjx1PjwvdT48L3A+CjxwIGNsYXNzPSJNc29Ob3Jt
YWwiIHN0eWxlPSJtYXJnaW4tbGVmdDogNS4yNXB0OyI+PHU+PC91PiZuYnNwOzx1PjwvdT48L3A+
CjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVmdDogNS4yNXB0OyI+PHNwYW4+
U28KPHU+PC91Pjx1PjwvdT48L3NwYW4+PC9wPgo8dWwgc3R5bGU9Im1hcmdpbi10b3A6IDBjbTsi
IHR5cGU9ImRpc2MiPgo8bGkgY2xhc3M9ImdtYWlsLW1fMzM2NTQ2NDE3MjMzMjQxMTQ3MU1zb0xp
c3RQYXJhZ3JhcGgiIHN0eWxlPSJtYXJnaW4tbGVmdDogNS4yNXB0OyI+PHNwYW4+KDEpIGlzCjxp
Pm5lY2Vzc2FyeTwvaT4uICZuYnNwOyZuYnNwOzx1PjwvdT48dT48L3U+PC9zcGFuPjwvbGk+PGxp
IGNsYXNzPSJnbWFpbC1tXzMzNjU0NjQxNzIzMzI0MTE0NzFNc29MaXN0UGFyYWdyYXBoIiBzdHls
ZT0ibWFyZ2luLWxlZnQ6IDUuMjVwdDsiPjxzcGFuPigyKSBpcyBzdHJpY3RseSBzdHJvbmdlciwg
YW5kIHdpbGwgbWFrZSBmZXdlciBwcm9ncmFtIGRlZmluZWQuJm5ic3A7IEJ1dCBpcyBwZXJoYXBz
IGxlc3Mgc3VycHJpc2luZy48dT48L3U+PHU+PC91Pjwvc3Bhbj48L2xpPjwvdWw+CjxwIGNsYXNz
PSJNc29Ob3JtYWwiPjxzcGFuPjx1PjwvdT4mbmJzcDs8dT48L3U+PC9zcGFuPjwvcD4KPHAgY2xh
c3M9Ik1zb05vcm1hbCI+PHNwYW4+SSB0aGluayB5b3UgY291bGQgbWFrZSBhIHByb3Bvc2FsIG91
dCBvZiB0aGF0IGlmIHlvdSB3YW50ZWQuJm5ic3A7IEkgY2Fu4oCZdCBkZWNpZGUgaWYgSSBsaWtl
IGl0LCBteXNlbGYsIGJ1dCBJIHRoaW5rIHRoYXQgaXQsIHRvbywgaXMgc2ltcGxlIGFuZCBjb25z
aXN0ZW50Ljx1PjwvdT48dT48L3U+PC9zcGFuPjwvcD4KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNw
YW4+PGJyPgpTaW1vbjx1PjwvdT48dT48L3U+PC9zcGFuPjwvcD4KPHAgY2xhc3M9Ik1zb05vcm1h
bCI+PHNwYW4+PHU+PC91PiZuYnNwOzx1PjwvdT48L3NwYW4+PC9wPgo8ZGl2IHN0eWxlPSJib3Jk
ZXItY29sb3I6IGN1cnJlbnRjb2xvciBjdXJyZW50Y29sb3IgY3VycmVudGNvbG9yIGJsdWU7IGJv
cmRlci1zdHlsZTogbm9uZSBub25lIG5vbmUgc29saWQ7IGJvcmRlci13aWR0aDogbWVkaXVtIG1l
ZGl1bSBtZWRpdW0gMS41cHQ7IGJvcmRlci1pbWFnZTogbm9uZSAxMDAlIC8gMSAvIDAgc3RyZXRj
aDsgcGFkZGluZzogMGNtIDBjbSAwY20gNHB0OyI+CjxkaXY+CjxkaXYgc3R5bGU9ImJvcmRlci1j
b2xvcjogcmdiKDIyNSwgMjI1LCAyMjUpIGN1cnJlbnRjb2xvciBjdXJyZW50Y29sb3I7IGJvcmRl
ci1zdHlsZTogc29saWQgbm9uZSBub25lOyBib3JkZXItd2lkdGg6IDFwdCBtZWRpdW0gbWVkaXVt
OyBib3JkZXItaW1hZ2U6IG5vbmUgMTAwJSAvIDEgLyAwIHN0cmV0Y2g7IHBhZGRpbmc6IDNwdCAw
Y20gMGNtOyI+CjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxiPjxzcGFuIGxhbmc9IkVOLVVTIj5Gcm9t
Ojwvc3Bhbj48L2I+PHNwYW4gbGFuZz0iRU4tVVMiPiBJYXZvciBEaWF0Y2hraSAmbHQ7PGEgaHJl
Zj0ibWFpbHRvOmlhdm9yLmRpYXRjaGtpQGdtYWlsLmNvbSIgdGFyZ2V0PSJfYmxhbmsiPmlhdm9y
LmRpYXRjaGtpQGdtYWlsLmNvbTwvYT4mZ3Q7Cjxicj4KPGI+U2VudDo8L2I+IDA3IFNlcHRlbWJl
ciAyMDIwIDIwOjQ2PGJyPgo8Yj5Ubzo8L2I+IFNpbW9uIFBleXRvbiBKb25lcyAmbHQ7PGEgaHJl
Zj0ibWFpbHRvOnNpbW9ucGpAbWljcm9zb2Z0LmNvbSIgdGFyZ2V0PSJfYmxhbmsiPnNpbW9ucGpA
bWljcm9zb2Z0LmNvbTwvYT4mZ3Q7PGJyPgo8Yj5DYzo8L2I+IFJpY2hhcmQgRWlzZW5iZXJnICZs
dDs8YSBocmVmPSJtYWlsdG86cmFlQHJpY2hhcmRlLmRldiIgdGFyZ2V0PSJfYmxhbmsiPnJhZUBy
aWNoYXJkZS5kZXY8L2E+Jmd0OzsgU3Bpd2FjaywgQXJuYXVkICZsdDs8YSBocmVmPSJtYWlsdG86
YXJuYXVkLnNwaXdhY2tAdHdlYWcuaW8iIHRhcmdldD0iX2JsYW5rIj5hcm5hdWQuc3Bpd2Fja0B0
d2VhZy5pbzwvYT4mZ3Q7OyBHSEMgZGV2ZWxvcGVycyAmbHQ7PGEgaHJlZj0ibWFpbHRvOmdoYy1k
ZXZzQGhhc2tlbGwub3JnIiB0YXJnZXQ9Il9ibGFuayI+Z2hjLWRldnNAaGFza2VsbC5vcmc8L2E+
Jmd0Ozxicj4KPGI+U3ViamVjdDo8L2I+IFJlOiAhUkU6IEltcGxpY2l0IHJlYm94aW5nIG9mIHVu
Ym94ZWQgdHVwbGUgaW4gbGV0LXBhdHRlcm5zPHU+PC91Pjx1PjwvdT48L3NwYW4+PC9wPgo8L2Rp
dj4KPC9kaXY+CjxwIGNsYXNzPSJNc29Ob3JtYWwiPjx1PjwvdT4mbmJzcDs8dT48L3U+PC9wPgo8
ZGl2Pgo8ZGl2Pgo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLXJpZ2h0OiAwY207
IG1hcmdpbi1ib3R0b206IDZwdDsgbWFyZ2luLWxlZnQ6IDBjbTsiPgo8dT48L3U+Jm5ic3A7PHU+
PC91PjwvcD4KPC9kaXY+CjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tcmlnaHQ6
IDBjbTsgbWFyZ2luLWJvdHRvbTogNnB0OyBtYXJnaW4tbGVmdDogMGNtOyI+Cjx1PjwvdT4mbmJz
cDs8dT48L3U+PC9wPgo8ZGl2Pgo8ZGl2Pgo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFy
Z2luLXJpZ2h0OiAwY207IG1hcmdpbi1ib3R0b206IDZwdDsgbWFyZ2luLWxlZnQ6IDBjbTsiPgpP
biBNb24sIFNlcCA3LCAyMDIwIGF0IDU6MTIgQU0gU2ltb24gUGV5dG9uIEpvbmVzIHZpYSBnaGMt
ZGV2cyAmbHQ7PGEgaHJlZj0ibWFpbHRvOmdoYy1kZXZzQGhhc2tlbGwub3JnIiB0YXJnZXQ9Il9i
bGFuayI+Z2hjLWRldnNAaGFza2VsbC5vcmc8L2E+Jmd0OyB3cm90ZTo8dT48L3U+PHU+PC91Pjwv
cD4KPC9kaXY+CjxibG9ja3F1b3RlIHN0eWxlPSJib3JkZXItY29sb3I6IGN1cnJlbnRjb2xvciBj
dXJyZW50Y29sb3IgY3VycmVudGNvbG9yIHJnYigyMDQsIDIwNCwgMjA0KTsgYm9yZGVyLXN0eWxl
OiBub25lIG5vbmUgbm9uZSBzb2xpZDsgYm9yZGVyLXdpZHRoOiBtZWRpdW0gbWVkaXVtIG1lZGl1
bSAxcHQ7IGJvcmRlci1pbWFnZTogbm9uZSAxMDAlIC8gMSAvIDAgc3RyZXRjaDsgcGFkZGluZzog
MGNtIDBjbSAwY20gNnB0OyBtYXJnaW4tbGVmdDogNC44cHQ7IG1hcmdpbi1yaWdodDogMGNtOyI+
CjxkaXY+CjxkaXY+CjxwIGNsYXNzPSJNc29Ob3JtYWwiPjx1PjwvdT4mbmJzcDs8dT48L3U+PC9w
Pgo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDM2cHQ7Ij4KJm5ic3A7
PHU+PC91Pjx1PjwvdT48L3A+CjxvbCB0eXBlPSIxIiBzdGFydD0iMyI+CjxsaSBjbGFzcz0iTXNv
Tm9ybWFsIj4KSSBkb27igJl0IHVuZGVyc3RhbmQgdGhlIGRldGFpbHMgb2YgSWF2b3LigJlzIHBy
b3Bvc2FsIHRvIGFkZCB0aGF0IOKAnHVubGlmdGVkIHBhdHRlcm5zIGFyZSBzdHJpY3TigJ0sIGlu
IGFkZGl0aW9uIHRvICgxKS4mbmJzcDsgRG8geW91IG1lYW4g4oCcYW55IHN1Yi1wYXR0ZXJuIG9m
IHRoZSBMSFMgaGFzIGFuIHVubGlmdGVkIHR5cGXigJ0/IEkgdGhpbmsgdGhpcyBpcyBmdWxseSBj
b21wYXRpYmxlIHdpdGggdW5saWZ0ZWQgdXNlciBkZWZpbmVkIGRhdGE8dT48L3U+PHU+PC91Pjwv
bGk+PC9vbD4KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0OiA3MnB0OyI+
Ckp1c3QgKCMgYSxiICMpID0gZTx1PjwvdT48dT48L3U+PC9wPgo8cCBjbGFzcz0iTXNvTm9ybWFs
IiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDM2cHQ7Ij4Kd291bGQgYmUgc3RyaWN0LiAmbmJzcDsmbmJz
cDtBbmQgZXZlbjx1PjwvdT48dT48L3U+PC9wPgo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0i
bWFyZ2luLWxlZnQ6IDcycHQ7Ij4KTWtUIF8gPSBlPHU+PC91Pjx1PjwvdT48L3A+CjxwIGNsYXNz
PSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVmdDogMzZwdDsiPgp3b3VsZCBiZSBzdHJpY3Qg
aWYmbmJzcDsmbmJzcDsgZGF0YSBUID0gTWtUICgjIEludCxJbnQgIyk8dT48L3U+PHU+PC91Pjwv
cD4KPHAgY2xhc3M9Ik1zb05vcm1hbCI+Jm5ic3A7PHU+PC91Pjx1PjwvdT48L3A+CjwvZGl2Pgo8
L2Rpdj4KPC9ibG9ja3F1b3RlPgo8ZGl2Pgo8cCBjbGFzcz0iTXNvTm9ybWFsIj48dT48L3U+Jm5i
c3A7PHU+PC91PjwvcD4KPC9kaXY+CjxkaXY+CjxwIGNsYXNzPSJNc29Ob3JtYWwiPlllcywgdGhl
IGZpcnN0IG9uZSB3b3VsZCBiZSBzdHJpY3QgdXAgdG8gdGhlIHR1cGxlLCBhbmQgdGhlIHNlY29u
ZCBvbmUgd291bGQgYWxzbyBiZSBzdHJpY3QuJm5ic3A7IEkgdGhpbmsgdGhpcyBpcyB0aGUgY29u
c2lzdGVudCB3YXkgdG8gaW50ZXJwcmV0IHlvdXIgcnVsZSAoMSkgdGhhdCB1bmxpZnRlZCBiaW5k
aW5ncyBhcmUgYWx3YXlzIHN0cmljdCwgYW5kIGl0IHNob3VsZG4ndCByZWFsbHkgbWF0dGVyIGlm
IHlvdQogdXNlZCBhIHZhcmlhYmxlIHBhdHRlcm4sIG9yIGEgd2lsZCBjYXJkIHBhdHRlcm4uJm5i
c3A7IEkgZG9uJ3QgdGhpbmsgdGhlcmUncyBhbnkgb3RoZXIgcGFydCBvZiB0aGUgbGFuZ3VhZ2Ug
d2hlcmUgcmVwbGFjaW5nIGEgYF9gIHdpdGggYW4gdW51c2VkIG5hbWUgY2hhbmdlcyB0aGUgc2Vt
YW50aWNzIG9mIHRoZSBwcm9ncmFtLCBhbmQgSSBkb24ndCB0aGluayBpdCBzaG91bGQgaW4gdGhp
cyBjYXNlIGVpdGhlci48dT48L3U+PHU+PC91PjwvcD4KPC9kaXY+CjxkaXY+CjxwIGNsYXNzPSJN
c29Ob3JtYWwiPjx1PjwvdT4mbmJzcDs8dT48L3U+PC9wPgo8L2Rpdj4KPGRpdj4KPHAgY2xhc3M9
Ik1zb05vcm1hbCI+SnVzdCB0byBiZSBmdWxseSBleHBsaWNpdCwgdGhlIHRoaW5nIEkgZmluZCBv
ZGQgd2l0aCBHSEMncyBjdXJyZW50IGJlaGF2aW9yIGlzIHRoYXQgdGhlc2UgdHdvIGFyZSBkaWZm
ZXJlbnQ6PHU+PC91Pjx1PjwvdT48L3A+CjwvZGl2Pgo8ZGl2Pgo8cCBjbGFzcz0iTXNvTm9ybWFs
Ij48dT48L3U+Jm5ic3A7PHU+PC91PjwvcD4KPC9kaXY+CjxkaXY+CjxwIGNsYXNzPSJNc29Ob3Jt
YWwiPmxldCBNa1QgeCA9IHVuZGVmaW5lZCBpbiAoKSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
Oy0tJmd0OyB1bmRlZmluZWQ8dT48L3U+PHU+PC91PjwvcD4KPC9kaXY+CjxkaXY+CjxwIGNsYXNz
PSJNc29Ob3JtYWwiPmxldCBNa1QgXyA9IHVuZGVmaW5lZCBpbiAoKSZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOy0tJmd0OyAoKTx1PjwvdT48dT48L3U+PC9wPgo8L2Rpdj4KPGRpdj4KPHAgY2xh
c3M9Ik1zb05vcm1hbCI+PHU+PC91PiZuYnNwOzx1PjwvdT48L3A+CjwvZGl2Pgo8ZGl2Pgo8cCBj
bGFzcz0iTXNvTm9ybWFsIj5FdmVuIG1vcmUgZXhwbGljaXRseTo8dT48L3U+PHU+PC91PjwvcD4K
PC9kaXY+CjxkaXY+CjxwIGNsYXNzPSJNc29Ob3JtYWwiPmxldCAoXyA6OiBJbnQjKSA9IHVuZGVm
aW5lZCBpbiAoKSZuYnNwOyAmbmJzcDstLSZndDsgKCkmbmJzcDsgJm5ic3A7IC0tIHRoZSB2YWx1
ZSBgdW5kZWZpbmVkYCBpcyBub3QgcmVwcmVzZW50YWJsZSBpbiB0eXBlIGBJbnQjYCBidXQgR0hD
IGlzIGhhcHB5IHRvIHByb2NlZWQgYmVjYXVzZSBpdCBkb2Vzbid0IG5lZWQgdG8gcmVwcmVzZW50
IGl0PHU+PC91Pjx1PjwvdT48L3A+CjwvZGl2Pgo8ZGl2Pgo8cCBjbGFzcz0iTXNvTm9ybWFsIj5s
ZXQgKHggOjogSW50IykgPSB1bmRlZmluZWQgaW4gKCkmbmJzcDsgJm5ic3A7IC0tJmd0OyAoKSZu
YnNwOyAmbmJzcDstLSBzYW1lIHNpdHVhdGlvbiwgYnV0IG5vdyBHSEMgaXMgc3RyaWN0LCBldmVu
IHRob3VnaCBpdCBzdGlsbCBkb2Vzbid0IG5lZWQgdG8gcmVwcmVzZW50IHRoZSB2YWx1ZS48dT48
L3U+PHU+PC91PjwvcD4KPC9kaXY+CjxkaXY+CjxwIGNsYXNzPSJNc29Ob3JtYWwiPjx1PjwvdT4m
bmJzcDs8dT48L3U+PC9wPgo8L2Rpdj4KPGRpdj4KPHAgY2xhc3M9Ik1zb05vcm1hbCI+SSB0aGlu
ayB0aGF0IHRoZSBjb25zaXN0ZW50IGJlaGF2aW9yIGlzIGZvciBhbGwgb2YgdGhlc2UgdG8gZGl2
ZXJnZSwgYmVjYXVzZSBsYXppbmVzcyZuYnNwO2RvZXMgbm90IG1peCB3aXRoIHVubGZpdGVkIHZh
bHVlcywgYXQgbGVhc3QgaW4gdGhlIHByZXNlbmNlIG9mIG5vbi10ZXJtaW5hdGlvbi48dT48L3U+
PHU+PC91PjwvcD4KPC9kaXY+CjxkaXY+CjxwIGNsYXNzPSJNc29Ob3JtYWwiPjx1PjwvdT4mbmJz
cDs8dT48L3U+PC9wPgo8L2Rpdj4KPGRpdj4KPHAgY2xhc3M9Ik1zb05vcm1hbCI+LUlhdm9yPHU+
PC91Pjx1PjwvdT48L3A+CjwvZGl2Pgo8ZGl2Pgo8cCBjbGFzcz0iTXNvTm9ybWFsIj48dT48L3U+
Jm5ic3A7PHU+PC91PjwvcD4KPC9kaXY+CjxkaXY+CjxwIGNsYXNzPSJNc29Ob3JtYWwiPjx1Pjwv
dT4mbmJzcDs8dT48L3U+PC9wPgo8L2Rpdj4KPGRpdj4KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHU+
PC91PiZuYnNwOzx1PjwvdT48L3A+CjwvZGl2Pgo8ZGl2Pgo8cCBjbGFzcz0iTXNvTm9ybWFsIj48
dT48L3U+Jm5ic3A7PHU+PC91PjwvcD4KPC9kaXY+CjxkaXY+CjxwIGNsYXNzPSJNc29Ob3JtYWwi
Pjx1PjwvdT4mbmJzcDs8dT48L3U+PC9wPgo8L2Rpdj4KPGRpdj4KPHAgY2xhc3M9Ik1zb05vcm1h
bCI+PHU+PC91PiZuYnNwOzx1PjwvdT48L3A+CjwvZGl2Pgo8ZGl2Pgo8cCBjbGFzcz0iTXNvTm9y
bWFsIj48dT48L3U+Jm5ic3A7PHU+PC91PjwvcD4KPC9kaXY+CjxkaXY+CjxwIGNsYXNzPSJNc29O
b3JtYWwiPjx1PjwvdT4mbmJzcDs8dT48L3U+PC9wPgo8L2Rpdj4KPGRpdj4KPHAgY2xhc3M9Ik1z
b05vcm1hbCI+Jm5ic3A7PHU+PC91Pjx1PjwvdT48L3A+CjwvZGl2Pgo8YmxvY2txdW90ZSBzdHls
ZT0iYm9yZGVyLWNvbG9yOiBjdXJyZW50Y29sb3IgY3VycmVudGNvbG9yIGN1cnJlbnRjb2xvciBy
Z2IoMjA0LCAyMDQsIDIwNCk7IGJvcmRlci1zdHlsZTogbm9uZSBub25lIG5vbmUgc29saWQ7IGJv
cmRlci13aWR0aDogbWVkaXVtIG1lZGl1bSBtZWRpdW0gMXB0OyBib3JkZXItaW1hZ2U6IG5vbmUg
MTAwJSAvIDEgLyAwIHN0cmV0Y2g7IHBhZGRpbmc6IDBjbSAwY20gMGNtIDZwdDsgbWFyZ2luLWxl
ZnQ6IDQuOHB0OyBtYXJnaW4tcmlnaHQ6IDBjbTsiPgo8ZGl2Pgo8ZGl2Pgo8cCBjbGFzcz0iTXNv
Tm9ybWFsIj4mbmJzcDs8dT48L3U+PHU+PC91PjwvcD4KPGRpdiBzdHlsZT0iYm9yZGVyLWNvbG9y
OiBjdXJyZW50Y29sb3IgY3VycmVudGNvbG9yIGN1cnJlbnRjb2xvciBibHVlOyBib3JkZXItc3R5
bGU6IG5vbmUgbm9uZSBub25lIHNvbGlkOyBib3JkZXItd2lkdGg6IG1lZGl1bSBtZWRpdW0gbWVk
aXVtIDEuNXB0OyBib3JkZXItaW1hZ2U6IG5vbmUgMTAwJSAvIDEgLyAwIHN0cmV0Y2g7IHBhZGRp
bmc6IDBjbSAwY20gMGNtIDRwdDsiPgo8ZGl2Pgo8ZGl2IHN0eWxlPSJib3JkZXItY29sb3I6IHJn
YigyMjUsIDIyNSwgMjI1KSBjdXJyZW50Y29sb3IgY3VycmVudGNvbG9yOyBib3JkZXItc3R5bGU6
IHNvbGlkIG5vbmUgbm9uZTsgYm9yZGVyLXdpZHRoOiAxcHQgbWVkaXVtIG1lZGl1bTsgYm9yZGVy
LWltYWdlOiBub25lIDEwMCUgLyAxIC8gMCBzdHJldGNoOyBwYWRkaW5nOiAzcHQgMGNtIDBjbTsi
Pgo8cCBjbGFzcz0iTXNvTm9ybWFsIj48Yj48c3BhbiBsYW5nPSJFTi1VUyI+RnJvbTo8L3NwYW4+
PC9iPjxzcGFuIGxhbmc9IkVOLVVTIj4gZ2hjLWRldnMgJmx0OzxhIGhyZWY9Im1haWx0bzpnaGMt
ZGV2cy1ib3VuY2VzQGhhc2tlbGwub3JnIiB0YXJnZXQ9Il9ibGFuayI+Z2hjLWRldnMtYm91bmNl
c0BoYXNrZWxsLm9yZzwvYT4mZ3Q7CjxiPk9uIEJlaGFsZiBPZiA8L2I+UmljaGFyZCBFaXNlbmJl
cmc8YnI+CjxiPlNlbnQ6PC9iPiAwMiBTZXB0ZW1iZXIgMjAyMCAxNDo0Nzxicj4KPGI+VG86PC9i
PiBTcGl3YWNrLCBBcm5hdWQgJmx0OzxhIGhyZWY9Im1haWx0bzphcm5hdWQuc3Bpd2Fja0B0d2Vh
Zy5pbyIgdGFyZ2V0PSJfYmxhbmsiPmFybmF1ZC5zcGl3YWNrQHR3ZWFnLmlvPC9hPiZndDs8YnI+
CjxiPkNjOjwvYj4gR0hDIGRldmVsb3BlcnMgJmx0OzxhIGhyZWY9Im1haWx0bzpnaGMtZGV2c0Bo
YXNrZWxsLm9yZyIgdGFyZ2V0PSJfYmxhbmsiPmdoYy1kZXZzQGhhc2tlbGwub3JnPC9hPiZndDs8
YnI+CjxiPlN1YmplY3Q6PC9iPiBSZTogSW1wbGljaXQgcmVib3hpbmcgb2YgdW5ib3hlZCB0dXBs
ZSBpbiBsZXQtcGF0dGVybnM8L3NwYW4+PHU+PC91Pjx1PjwvdT48L3A+CjwvZGl2Pgo8L2Rpdj4K
PHAgY2xhc3M9Ik1zb05vcm1hbCI+Jm5ic3A7PHU+PC91Pjx1PjwvdT48L3A+CjxwIGNsYXNzPSJN
c29Ob3JtYWwiPiZuYnNwOzx1PjwvdT48dT48L3U+PC9wPgo8ZGl2Pgo8cCBjbGFzcz0iTXNvTm9y
bWFsIiBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMTJwdDsiPjx1PjwvdT4mbmJzcDs8dT48L3U+PC9w
Pgo8YmxvY2txdW90ZSBzdHlsZT0ibWFyZ2luLXRvcDogNXB0OyBtYXJnaW4tYm90dG9tOiA1cHQ7
Ij4KPGRpdj4KPHAgY2xhc3M9Ik1zb05vcm1hbCI+T24gU2VwIDIsIDIwMjAsIGF0IDk6MzkgQU0s
IFNwaXdhY2ssIEFybmF1ZCAmbHQ7PGEgaHJlZj0ibWFpbHRvOmFybmF1ZC5zcGl3YWNrQHR3ZWFn
LmlvIiB0YXJnZXQ9Il9ibGFuayI+YXJuYXVkLnNwaXdhY2tAdHdlYWcuaW88L2E+Jmd0OyB3cm90
ZTo8dT48L3U+PHU+PC91PjwvcD4KPC9kaXY+CjxwIGNsYXNzPSJNc29Ob3JtYWwiPiZuYnNwOzx1
PjwvdT48dT48L3U+PC9wPgo8ZGl2Pgo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0i
Zm9udC1zaXplOiA5cHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtIZWx2ZXRpY2EmcXVvdDssIHNhbnMt
c2VyaWY7Ij5Pb2jigKYgcGF0dGVybiBzeW5vbnltcyBmb3IgdW5ib3hlZCB0dXBsZS4gSSBtdXN0
IGNvbmZlc3MgdGhhdCBJIGRvbid0IGtub3cgd2hhdCB0aGUgc2VtYW50aWNzIG9mIHRoZXNlIG91
Z2h0IHRvIGJlLgogSXQgZG9lcyBsb29rIGxpa2UgYW4gaW50ZXJlc3RpbmcgY2FuIG9mIHdvcm1z
LiBIb3cgZG8gdGhleSBjdXJyZW50bHkgZGVzdWdhcj88L3NwYW4+PHU+PC91Pjx1PjwvdT48L3A+
CjwvZGl2Pgo8L2Jsb2NrcXVvdGU+CjwvZGl2Pgo8cCBjbGFzcz0iTXNvTm9ybWFsIj4mbmJzcDs8
dT48L3U+PHU+PC91PjwvcD4KPGRpdj4KPHAgY2xhc3M9Ik1zb05vcm1hbCI+UmlnaHQgbm93LCB0
aGVyZSBpcyBvbmUgcnVsZTogaWYgdGhlIHR5cGUgb2YgYW55IHZhcmlhYmxlIGJvdW5kIGluIHRo
ZSBwYXR0ZXJuIGlzIHVubGlmdGVkLCB0aGVuIHRoZSBwYXR0ZXJuIGlzIGFuIHVubGlmdGVyLXZh
ciBwYXR0ZXJuIGFuZCBpcyBzdHJpY3QuIFRoZSBwYXR0ZXJuIG11c3QgYmUgYmFuZ2VkLAogdW5s
ZXNzIHRoZSBib3VuZCB2YXJpYWJsZSBpcyBub3QgbmVzdGVkLiBUaGlzIHJ1bGUgaXMgY29uc2lz
dGVudCBhY3Jvc3MgYWxsIGZlYXR1cmVzLjx1PjwvdT48dT48L3U+PC9wPgo8L2Rpdj4KPGRpdj4K
PHAgY2xhc3M9Ik1zb05vcm1hbCI+Jm5ic3A7PHU+PC91Pjx1PjwvdT48L3A+CjwvZGl2Pgo8ZGl2
Pgo8cCBjbGFzcz0iTXNvTm9ybWFsIj5UaGlzIHRocmVhZCBpcyBzdWdnZXN0aW5nIHRvIGFkZCBh
IHNwZWNpYWwgY2FzZSAtLSBvbmUgdGhhdCBzZWVtcyB0byBtYXRjaCBpbnR1aXRpb24sIGJ1dCBp
dCdzIHN0aWxsIGEgc3BlY2lhbCBjYXNlLiBBbmQgbXkgcXVlc3Rpb24gaXM6IHNob3VsZCB0aGUg
c3BlY2lhbCBjYXNlIGJlIGZvciB1bmJveGVkIHR1cGxlcz8KIG9yIHNob3VsZCB0aGUgc3BlY2lh
bCBjYXNlIGJlIGZvciBhbnkgcGF0dGVybiB3aG9zZSBvdmVyYWxsIHR5cGUgaXMgdW5saWZ0ZWQ/
PHU+PC91Pjx1PjwvdT48L3A+CjwvZGl2Pgo8ZGl2Pgo8cCBjbGFzcz0iTXNvTm9ybWFsIj4mbmJz
cDs8dT48L3U+PHU+PC91PjwvcD4KPC9kaXY+CjxkaXY+CjxwIGNsYXNzPSJNc29Ob3JtYWwiPlJp
Y2hhcmQ8dT48L3U+PHU+PC91PjwvcD4KPC9kaXY+CjwvZGl2Pgo8L2Rpdj4KPC9kaXY+CjxwIGNs
YXNzPSJNc29Ob3JtYWwiPl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fXzx3YnI+X19fX19f
X19fX19fX19fX188YnI+CmdoYy1kZXZzIG1haWxpbmcgbGlzdDxicj4KPGEgaHJlZj0ibWFpbHRv
OmdoYy1kZXZzQGhhc2tlbGwub3JnIiB0YXJnZXQ9Il9ibGFuayI+Z2hjLWRldnNAaGFza2VsbC5v
cmc8L2E+PGJyPgo8YSBocmVmPSJodHRwczovL25hbTA2LnNhZmVsaW5rcy5wcm90ZWN0aW9uLm91
dGxvb2suY29tLz91cmw9aHR0cCUzQSUyRiUyRm1haWwuaGFza2VsbC5vcmclMkZjZ2ktYmluJTJG
bWFpbG1hbiUyRmxpc3RpbmZvJTJGZ2hjLWRldnMmYW1wO2RhdGE9MDIlN0MwMSU3Q3NpbW9ucGol
NDBtaWNyb3NvZnQuY29tJTdDYTFiODk4NGFmNjEwNDM4ZTMxNWEwOGQ4NTM2NjllMmIlN0M3MmY5
ODhiZjg2ZjE0MWFmOTFhYjJkN2NkMDExZGI0NyU3QzElN0MwJTdDNjM3MzUxMDQ3NDkzNjIyMzQ3
JmFtcDtzZGF0YT1tbGN2MUFaQkolMkZIUVlEUXRTN05QUTVZbmJoUUExN3RXeDlmem9WZThHaWMl
M0QmYW1wO3Jlc2VydmVkPTAiIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vbWFpbC5oYXNrZWxsLm9y
Zy9jZ2ktPHdicj5iaW4vbWFpbG1hbi9saXN0aW5mby9naGMtZGV2czwvYT48dT48L3U+PHU+PC91
PjwvcD4KPC9ibG9ja3F1b3RlPgo8L2Rpdj4KPC9kaXY+CjwvZGl2Pgo8L2Rpdj4KPC9kaXY+Cgo8
L2Jsb2NrcXVvdGU+PC9kaXY+" style="height:0px;width:0px;max-height:0px;max-width:0px;overflow:hidden;font-size:0em;padding:0px;margin:0px"></div></div></div>
</blockquote></div>