<div dir="ltr"><div class="markdown-here-wrapper" style=""><p style="margin:0px 0px 1.2em!important">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-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;font-size:1em;line-height:1.2em;margin:1.2em 0px"><code class="hljs language-haskell" 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) none repeat scroll 0% 0%">
<span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">let</span> (x,<span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Just</span> y) = (<span class="hljs-number" style="color:rgb(0,128,128)">1</span>, undefined) <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">in</span> x `seq` ()
</code></pre>
<p style="margin:0px 0px 1.2em!important">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!important">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!important">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!important">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!important">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!important">On Tue, Sep 8, 2020 at 12:02 AM Simon Peyton Jones <a href="http://mailto:simonpj@microsoft.com">simonpj@microsoft.com</a> wrote:</p>
<p style="margin:0px 0px 1.2em!important"></p><div class="markdown-here-exclude"><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 class="gmail-m_3365464172332411471WordSection1">
<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 class="gmail-m_3365464172332411471MsoListParagraph" style="margin-left:5.25pt"><span>(1) is
<i>necessary</i>.   <u></u><u></u></span></li><li class="gmail-m_3365464172332411471MsoListParagraph" 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!important"></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:0;width:0;max-height:0;max-width:0;overflow:hidden;font-size:0em;padding:0;margin:0"></div></div></div>