<div dir="ltr"><div class="markdown-here-wrapper" style=""><p style="margin:0px 0px 1.2em!important">As a follow-up, here is code that you can test now. It demonstrates the same, but with normal function result.</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-swift" 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)"><span class="hljs-func"><span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">func</span> <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">createArbitrary</span><span class="hljs-generics"><T></span><span class="hljs-params">(usingGenerator f: <span class="hljs-params">()</span> -> <span class="hljs-params">(T)</span>)</span> -> <span class="hljs-title" style="color:rgb(153,0,0);font-weight:bold">T</span> </span>{
<span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">let</span> any: <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Any</span> = <span class="hljs-number" style="color:rgb(0,128,128)">42</span> <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">as</span> <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Any</span>
<span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">if</span> <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Int</span>.<span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">self</span> <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">is</span> <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">T</span>.<span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">Type</span> {
<span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">let</span> t = any <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">as</span>! <span class="hljs-type" style="color:rgb(68,85,136);font-weight:bold">T</span>
<span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">return</span> t
}
<span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">return</span> f()
}
<span class="hljs-built_in" style="color:rgb(0,134,179)">print</span>(createArbitrary(usingGenerator: { <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">return</span> <span class="hljs-number" style="color:rgb(0,128,128)">5</span> })) <span class="hljs-comment" style="color:rgb(153,153,136);font-style:italic">//=> 42</span>
</code></pre>
<p style="margin:0px 0px 1.2em!important">And yes, nobody should do these tricks in production code :P</p>
<p style="margin:0px 0px 1.2em!important">2017-02-22 21:15 GMT+03:00 Anton Zhilin <<a href="mailto:antonyzhilin@gmail.com" target="_blank">antonyzhilin@gmail.com</a>>:</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 dir="ltr"><div class="gmail-m_4681612223855602343markdown-here-wrapper"><p style="margin:0px 0px 1.2em">I understand how parametric polymorphism works <em>in Haskell</em>. But we talk about Swift, and there <em>is</em> a way to get an instance 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">E</code>. I’ll explain it another way:</p>
<pre style="font-family:consolas,inconsolata,courier,monospace;font-size:1em;line-height:1.2em;margin:1.2em 0px"><code class="gmail-m_4681612223855602343hljs gmail-m_4681612223855602343language-swift" 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-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;background-color:rgb(248,248,248);display:block"><span class="gmail-"><span class="gmail-m_4681612223855602343hljs-func"><span class="gmail-m_4681612223855602343hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">func</span> <span class="gmail-m_4681612223855602343hljs-title" style="color:rgb(153,0,0);font-weight:bold">bypassRethrows</span><span class="gmail-m_4681612223855602343hljs-generics"><E: Error></span><span class="gmail-m_4681612223855602343hljs-params">(<span class="gmail-m_4681612223855602343hljs-number" style="color:rgb(0,128,128)">_</span> f: <span class="gmail-m_4681612223855602343hljs-params">()</span> throws<span class="gmail-m_4681612223855602343hljs-params">(E)</span> -> <span class="gmail-m_4681612223855602343hljs-params">()</span>)</span> <span class="gmail-m_4681612223855602343hljs-title" style="color:rgb(153,0,0);font-weight:bold">throws</span><span class="gmail-m_4681612223855602343hljs-params">(E)</span> </span></span>{
<span class="gmail-m_4681612223855602343hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">let</span> error: <span class="gmail-m_4681612223855602343hljs-type" style="color:rgb(68,85,136);font-weight:bold">Error</span> = <span class="gmail-m_4681612223855602343hljs-type" style="color:rgb(68,85,136);font-weight:bold">MyError</span>() <span class="gmail-m_4681612223855602343hljs-comment" style="color:rgb(153,153,136);font-style:italic">// create an instance of `MyError`</span>
<span class="gmail-m_4681612223855602343hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">if</span> <span class="gmail-m_4681612223855602343hljs-type" style="color:rgb(68,85,136);font-weight:bold">MyError</span>.<span class="gmail-m_4681612223855602343hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">self</span> <span class="gmail-m_4681612223855602343hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">is</span> <span class="gmail-m_4681612223855602343hljs-type" style="color:rgb(68,85,136);font-weight:bold">E</span>.<span class="gmail-m_4681612223855602343hljs-type" style="color:rgb(68,85,136);font-weight:bold">Type</span> { <span class="gmail-m_4681612223855602343hljs-comment" style="color:rgb(153,153,136);font-style:italic">// in case `E` happens to be `MyError`</span>
<span class="gmail-m_4681612223855602343hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">let</span> e: <span class="gmail-m_4681612223855602343hljs-type" style="color:rgb(68,85,136);font-weight:bold">E</span> = error <span class="gmail-m_4681612223855602343hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">as</span>! <span class="gmail-m_4681612223855602343hljs-type" style="color:rgb(68,85,136);font-weight:bold">E</span> <span class="gmail-m_4681612223855602343hljs-comment" style="color:rgb(153,153,136);font-style:italic">// then we've actually created an instance of `E`, and we can downcast safely</span>
throw e <span class="gmail-m_4681612223855602343hljs-comment" style="color:rgb(153,153,136);font-style:italic">// voila, acquired an instance of `E`</span>
}
}
<span class="gmail-m_4681612223855602343hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">let</span> f: () throws <span class="gmail-m_4681612223855602343hljs-type" style="color:rgb(68,85,136);font-weight:bold">MyError</span> -> () = { }
try bypassRethrows(f) <span class="gmail-m_4681612223855602343hljs-comment" style="color:rgb(153,153,136);font-style:italic">// actually throws `MyError`, without ever calling `f`</span>
</code></pre>
<p style="margin:0px 0px 1.2em">What line here seems impossible? </p></div></div></blockquote><p></p></div><p style="margin:0px 0px 1.2em!important"></p>
<div title="MDH:PGRpdj5BcyBhIGZvbGxvdy11cCwgaGVyZSBpcyBjb2RlIHRoYXQgeW91IGNhbiB0ZXN0IG5vdy4g
SXQgZGVtb25zdHJhdGVzIHRoZSBzYW1lLCBidXQgd2l0aCBub3JtYWwgZnVuY3Rpb24gcmVzdWx0
LjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+YGBgc3dpZnQ8L2Rpdj48ZGl2PjxkaXY+ZnVuYyBj
cmVhdGVBcmJpdHJhcnkmbHQ7VCZndDsodXNpbmdHZW5lcmF0b3IgZjogKCkgLSZndDsgKFQpKSAt
Jmd0OyBUIHs8L2Rpdj48ZGl2PjxzcGFuIGNsYXNzPSJnbWFpbC1BcHBsZS10YWItc3BhbiIgc3R5
bGU9IndoaXRlLXNwYWNlOiBwcmU7Ij4JPC9zcGFuPmxldCBhbnk6IEFueSA9IDQyIGFzIEFueTwv
ZGl2PjxkaXY+PHNwYW4gY2xhc3M9ImdtYWlsLUFwcGxlLXRhYi1zcGFuIiBzdHlsZT0id2hpdGUt
c3BhY2U6IHByZTsiPgk8L3NwYW4+aWYgSW50LnNlbGYgaXMgVC5UeXBlIHs8L2Rpdj48ZGl2Pjxz
cGFuIGNsYXNzPSJnbWFpbC1BcHBsZS10YWItc3BhbiIgc3R5bGU9IndoaXRlLXNwYWNlOiBwcmU7
Ij4JCTwvc3Bhbj5sZXQgdCA9IGFueSBhcyEgVDwvZGl2PjxkaXY+PHNwYW4gY2xhc3M9ImdtYWls
LUFwcGxlLXRhYi1zcGFuIiBzdHlsZT0id2hpdGUtc3BhY2U6IHByZTsiPgkJPC9zcGFuPnJldHVy
biB0PC9kaXY+PGRpdj48c3BhbiBjbGFzcz0iZ21haWwtQXBwbGUtdGFiLXNwYW4iIHN0eWxlPSJ3
aGl0ZS1zcGFjZTogcHJlOyI+CTwvc3Bhbj59PC9kaXY+PGRpdj48c3BhbiBjbGFzcz0iZ21haWwt
QXBwbGUtdGFiLXNwYW4iIHN0eWxlPSJ3aGl0ZS1zcGFjZTogcHJlOyI+CTwvc3Bhbj5yZXR1cm4g
ZigpPC9kaXY+PGRpdj59PC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5wcmludChjcmVhdGVBcmJp
dHJhcnkodXNpbmdHZW5lcmF0b3I6IHsgcmV0dXJuIDUgfSkpICZuYnNwOy8vPSZndDsgNDI8L2Rp
dj48L2Rpdj48ZGl2PmBgYDwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+QW5kIHllcywgbm9ib2R5
IHNob3VsZCBkbyB0aGVzZSB0cmlja3MgaW4gcHJvZHVjdGlvbiBjb2RlIDpQPC9kaXY+PGRpdj48
YnI+PGRpdiBjbGFzcz0iZ21haWxfcXVvdGUiPjIwMTctMDItMjIgMjE6MTUgR01UKzAzOjAwIEFu
dG9uIFpoaWxpbiA8c3BhbiBkaXI9Imx0ciI+Jmx0OzxhIGhyZWY9Im1haWx0bzphbnRvbnl6aGls
aW5AZ21haWwuY29tIiB0YXJnZXQ9Il9ibGFuayI+YW50b255emhpbGluQGdtYWlsLmNvbTwvYT4m
Z3Q7PC9zcGFuPjo8YnI+PGJsb2NrcXVvdGUgY2xhc3M9ImdtYWlsX3F1b3RlIiBzdHlsZT0ibWFy
Z2luOiAwcHggMHB4IDBweCAwLjhleDsgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCByZ2IoMjA0LCAy
MDQsIDIwNCk7IHBhZGRpbmctbGVmdDogMWV4OyI+PGRpdiBkaXI9Imx0ciI+PGRpdiBjbGFzcz0i
Z21haWwtbV80NjgxNjEyMjIzODU1NjAyMzQzbWFya2Rvd24taGVyZS13cmFwcGVyIj48cCBzdHls
ZT0ibWFyZ2luOiAwcHggMHB4IDEuMmVtOyI+SSB1bmRlcnN0YW5kIGhvdyBwYXJhbWV0cmljIHBv
bHltb3JwaGlzbSB3b3JrcyA8ZW0+aW4gSGFza2VsbDwvZW0+LiBCdXQgd2UgdGFsayBhYm91dCBT
d2lmdCwgYW5kIHRoZXJlIDxlbT5pczwvZW0+IGEgd2F5IHRvIGdldCBhbiBpbnN0YW5jZSBvZiA8
Y29kZSBzdHlsZT0iZm9udC1zaXplOiAwLjg1ZW07IGZvbnQtZmFtaWx5OiBjb25zb2xhcywgaW5j
b25zb2xhdGEsIGNvdXJpZXIsIG1vbm9zcGFjZTsgbWFyZ2luOiAwcHggMC4xNWVtOyBwYWRkaW5n
OiAwcHggMC4zZW07IHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsgYm9yZGVyOiAxcHggc29saWQgcmdi
KDIzNCwgMjM0LCAyMzQpOyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjQ4LCAyNDgsIDI0OCk7IGJv
cmRlci1yYWRpdXM6IDNweDsgZGlzcGxheTogaW5saW5lOyI+RTwvY29kZT4uIEnigJlsbCBleHBs
YWluIGl0IGFub3RoZXIgd2F5OjwvcD4KPHByZSBzdHlsZT0iZm9udC1mYW1pbHk6IGNvbnNvbGFz
LCBpbmNvbnNvbGF0YSwgY291cmllciwgbW9ub3NwYWNlOyBmb250LXNpemU6IDFlbTsgbGluZS1o
ZWlnaHQ6IDEuMmVtOyBtYXJnaW46IDEuMmVtIDBweDsiPjxjb2RlIGNsYXNzPSJnbWFpbC1tXzQ2
ODE2MTIyMjM4NTU2MDIzNDNobGpzIGdtYWlsLW1fNDY4MTYxMjIyMzg1NTYwMjM0M2xhbmd1YWdl
LXN3aWZ0IiBzdHlsZT0iZm9udC1zaXplOiAwLjg1ZW07IGZvbnQtZmFtaWx5OiBjb25zb2xhcywg
aW5jb25zb2xhdGEsIGNvdXJpZXIsIG1vbm9zcGFjZTsgbWFyZ2luOiAwcHggMC4xNWVtOyB3aGl0
ZS1zcGFjZTogcHJlLXdyYXA7IG92ZXJmbG93OiBhdXRvOyBib3JkZXItcmFkaXVzOiAzcHg7IGJv
cmRlcjogMXB4IHNvbGlkIHJnYigyMDQsIDIwNCwgMjA0KTsgcGFkZGluZzogMC41ZW07IGNvbG9y
OiByZ2IoNTEsIDUxLCA1MSk7IGJhY2tncm91bmQtaW1hZ2U6IGluaXRpYWw7IGJhY2tncm91bmQt
cG9zaXRpb246IGluaXRpYWw7IGJhY2tncm91bmQtc2l6ZTogaW5pdGlhbDsgYmFja2dyb3VuZC1y
ZXBlYXQ6IGluaXRpYWw7IGJhY2tncm91bmQtYXR0YWNobWVudDogaW5pdGlhbDsgYmFja2dyb3Vu
ZC1vcmlnaW46IGluaXRpYWw7IGJhY2tncm91bmQtY2xpcDogaW5pdGlhbDsgYmFja2dyb3VuZC1j
b2xvcjogcmdiKDI0OCwgMjQ4LCAyNDgpOyBkaXNwbGF5OiBibG9jazsiPjxzcGFuIGNsYXNzPSJn
bWFpbC0iPjxzcGFuIGNsYXNzPSJnbWFpbC1tXzQ2ODE2MTIyMjM4NTU2MDIzNDNobGpzLWZ1bmMi
PjxzcGFuIGNsYXNzPSJnbWFpbC1tXzQ2ODE2MTIyMjM4NTU2MDIzNDNobGpzLWtleXdvcmQiIHN0
eWxlPSJjb2xvcjogcmdiKDUxLCA1MSwgNTEpOyBmb250LXdlaWdodDogYm9sZDsiPmZ1bmM8L3Nw
YW4+IDxzcGFuIGNsYXNzPSJnbWFpbC1tXzQ2ODE2MTIyMjM4NTU2MDIzNDNobGpzLXRpdGxlIiBz
dHlsZT0iY29sb3I6IHJnYigxNTMsIDAsIDApOyBmb250LXdlaWdodDogYm9sZDsiPmJ5cGFzc1Jl
dGhyb3dzPC9zcGFuPjxzcGFuIGNsYXNzPSJnbWFpbC1tXzQ2ODE2MTIyMjM4NTU2MDIzNDNobGpz
LWdlbmVyaWNzIj4mbHQ7RTogRXJyb3ImZ3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJnbWFpbC1tXzQ2
ODE2MTIyMjM4NTU2MDIzNDNobGpzLXBhcmFtcyI+KDxzcGFuIGNsYXNzPSJnbWFpbC1tXzQ2ODE2
MTIyMjM4NTU2MDIzNDNobGpzLW51bWJlciIgc3R5bGU9ImNvbG9yOiByZ2IoMCwgMTI4LCAxMjgp
OyI+Xzwvc3Bhbj4gZjogPHNwYW4gY2xhc3M9ImdtYWlsLW1fNDY4MTYxMjIyMzg1NTYwMjM0M2hs
anMtcGFyYW1zIj4oKTwvc3Bhbj4gdGhyb3dzPHNwYW4gY2xhc3M9ImdtYWlsLW1fNDY4MTYxMjIy
Mzg1NTYwMjM0M2hsanMtcGFyYW1zIj4oRSk8L3NwYW4+IC0mZ3Q7IDxzcGFuIGNsYXNzPSJnbWFp
bC1tXzQ2ODE2MTIyMjM4NTU2MDIzNDNobGpzLXBhcmFtcyI+KCk8L3NwYW4+KTwvc3Bhbj4gPHNw
YW4gY2xhc3M9ImdtYWlsLW1fNDY4MTYxMjIyMzg1NTYwMjM0M2hsanMtdGl0bGUiIHN0eWxlPSJj
b2xvcjogcmdiKDE1MywgMCwgMCk7IGZvbnQtd2VpZ2h0OiBib2xkOyI+dGhyb3dzPC9zcGFuPjxz
cGFuIGNsYXNzPSJnbWFpbC1tXzQ2ODE2MTIyMjM4NTU2MDIzNDNobGpzLXBhcmFtcyI+KEUpPC9z
cGFuPiA8L3NwYW4+PC9zcGFuPnsKICAgIDxzcGFuIGNsYXNzPSJnbWFpbC1tXzQ2ODE2MTIyMjM4
NTU2MDIzNDNobGpzLWtleXdvcmQiIHN0eWxlPSJjb2xvcjogcmdiKDUxLCA1MSwgNTEpOyBmb250
LXdlaWdodDogYm9sZDsiPmxldDwvc3Bhbj4gZXJyb3I6IDxzcGFuIGNsYXNzPSJnbWFpbC1tXzQ2
ODE2MTIyMjM4NTU2MDIzNDNobGpzLXR5cGUiIHN0eWxlPSJjb2xvcjogcmdiKDY4LCA4NSwgMTM2
KTsgZm9udC13ZWlnaHQ6IGJvbGQ7Ij5FcnJvcjwvc3Bhbj4gPSA8c3BhbiBjbGFzcz0iZ21haWwt
bV80NjgxNjEyMjIzODU1NjAyMzQzaGxqcy10eXBlIiBzdHlsZT0iY29sb3I6IHJnYig2OCwgODUs
IDEzNik7IGZvbnQtd2VpZ2h0OiBib2xkOyI+TXlFcnJvcjwvc3Bhbj4oKSAgPHNwYW4gY2xhc3M9
ImdtYWlsLW1fNDY4MTYxMjIyMzg1NTYwMjM0M2hsanMtY29tbWVudCIgc3R5bGU9ImNvbG9yOiBy
Z2IoMTUzLCAxNTMsIDEzNik7IGZvbnQtc3R5bGU6IGl0YWxpYzsiPi8vIGNyZWF0ZSBhbiBpbnN0
YW5jZSBvZiBgTXlFcnJvcmA8L3NwYW4+CiAgICA8c3BhbiBjbGFzcz0iZ21haWwtbV80NjgxNjEy
MjIzODU1NjAyMzQzaGxqcy1rZXl3b3JkIiBzdHlsZT0iY29sb3I6IHJnYig1MSwgNTEsIDUxKTsg
Zm9udC13ZWlnaHQ6IGJvbGQ7Ij5pZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImdtYWlsLW1fNDY4MTYx
MjIyMzg1NTYwMjM0M2hsanMtdHlwZSIgc3R5bGU9ImNvbG9yOiByZ2IoNjgsIDg1LCAxMzYpOyBm
b250LXdlaWdodDogYm9sZDsiPk15RXJyb3I8L3NwYW4+LjxzcGFuIGNsYXNzPSJnbWFpbC1tXzQ2
ODE2MTIyMjM4NTU2MDIzNDNobGpzLWtleXdvcmQiIHN0eWxlPSJjb2xvcjogcmdiKDUxLCA1MSwg
NTEpOyBmb250LXdlaWdodDogYm9sZDsiPnNlbGY8L3NwYW4+IDxzcGFuIGNsYXNzPSJnbWFpbC1t
XzQ2ODE2MTIyMjM4NTU2MDIzNDNobGpzLWtleXdvcmQiIHN0eWxlPSJjb2xvcjogcmdiKDUxLCA1
MSwgNTEpOyBmb250LXdlaWdodDogYm9sZDsiPmlzPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ21haWwt
bV80NjgxNjEyMjIzODU1NjAyMzQzaGxqcy10eXBlIiBzdHlsZT0iY29sb3I6IHJnYig2OCwgODUs
IDEzNik7IGZvbnQtd2VpZ2h0OiBib2xkOyI+RTwvc3Bhbj4uPHNwYW4gY2xhc3M9ImdtYWlsLW1f
NDY4MTYxMjIyMzg1NTYwMjM0M2hsanMtdHlwZSIgc3R5bGU9ImNvbG9yOiByZ2IoNjgsIDg1LCAx
MzYpOyBmb250LXdlaWdodDogYm9sZDsiPlR5cGU8L3NwYW4+IHsgICA8c3BhbiBjbGFzcz0iZ21h
aWwtbV80NjgxNjEyMjIzODU1NjAyMzQzaGxqcy1jb21tZW50IiBzdHlsZT0iY29sb3I6IHJnYigx
NTMsIDE1MywgMTM2KTsgZm9udC1zdHlsZTogaXRhbGljOyI+Ly8gaW4gY2FzZSBgRWAgaGFwcGVu
cyB0byBiZSBgTXlFcnJvcmA8L3NwYW4+CiAgICAgICAgPHNwYW4gY2xhc3M9ImdtYWlsLW1fNDY4
MTYxMjIyMzg1NTYwMjM0M2hsanMta2V5d29yZCIgc3R5bGU9ImNvbG9yOiByZ2IoNTEsIDUxLCA1
MSk7IGZvbnQtd2VpZ2h0OiBib2xkOyI+bGV0PC9zcGFuPiBlOiA8c3BhbiBjbGFzcz0iZ21haWwt
bV80NjgxNjEyMjIzODU1NjAyMzQzaGxqcy10eXBlIiBzdHlsZT0iY29sb3I6IHJnYig2OCwgODUs
IDEzNik7IGZvbnQtd2VpZ2h0OiBib2xkOyI+RTwvc3Bhbj4gPSBlcnJvciA8c3BhbiBjbGFzcz0i
Z21haWwtbV80NjgxNjEyMjIzODU1NjAyMzQzaGxqcy1rZXl3b3JkIiBzdHlsZT0iY29sb3I6IHJn
Yig1MSwgNTEsIDUxKTsgZm9udC13ZWlnaHQ6IGJvbGQ7Ij5hczwvc3Bhbj4hIDxzcGFuIGNsYXNz
PSJnbWFpbC1tXzQ2ODE2MTIyMjM4NTU2MDIzNDNobGpzLXR5cGUiIHN0eWxlPSJjb2xvcjogcmdi
KDY4LCA4NSwgMTM2KTsgZm9udC13ZWlnaHQ6IGJvbGQ7Ij5FPC9zcGFuPiAgICA8c3BhbiBjbGFz
cz0iZ21haWwtbV80NjgxNjEyMjIzODU1NjAyMzQzaGxqcy1jb21tZW50IiBzdHlsZT0iY29sb3I6
IHJnYigxNTMsIDE1MywgMTM2KTsgZm9udC1zdHlsZTogaXRhbGljOyI+Ly8gdGhlbiB3ZSd2ZSBh
Y3R1YWxseSBjcmVhdGVkIGFuIGluc3RhbmNlIG9mIGBFYCwgYW5kIHdlIGNhbiBkb3duY2FzdCBz
YWZlbHk8L3NwYW4+CiAgICAgICAgdGhyb3cgZSAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFz
cz0iZ21haWwtbV80NjgxNjEyMjIzODU1NjAyMzQzaGxqcy1jb21tZW50IiBzdHlsZT0iY29sb3I6
IHJnYigxNTMsIDE1MywgMTM2KTsgZm9udC1zdHlsZTogaXRhbGljOyI+Ly8gdm9pbGEsIGFjcXVp
cmVkIGFuIGluc3RhbmNlIG9mIGBFYDwvc3Bhbj4KICAgIH0KfQoKPHNwYW4gY2xhc3M9ImdtYWls
LW1fNDY4MTYxMjIyMzg1NTYwMjM0M2hsanMta2V5d29yZCIgc3R5bGU9ImNvbG9yOiByZ2IoNTEs
IDUxLCA1MSk7IGZvbnQtd2VpZ2h0OiBib2xkOyI+bGV0PC9zcGFuPiBmOiAoKSB0aHJvd3MgPHNw
YW4gY2xhc3M9ImdtYWlsLW1fNDY4MTYxMjIyMzg1NTYwMjM0M2hsanMtdHlwZSIgc3R5bGU9ImNv
bG9yOiByZ2IoNjgsIDg1LCAxMzYpOyBmb250LXdlaWdodDogYm9sZDsiPk15RXJyb3I8L3NwYW4+
IC0mZ3Q7ICgpID0geyB9CnRyeSBieXBhc3NSZXRocm93cyhmKSAgICAgICAgICAgICA8c3BhbiBj
bGFzcz0iZ21haWwtbV80NjgxNjEyMjIzODU1NjAyMzQzaGxqcy1jb21tZW50IiBzdHlsZT0iY29s
b3I6IHJnYigxNTMsIDE1MywgMTM2KTsgZm9udC1zdHlsZTogaXRhbGljOyI+Ly8gYWN0dWFsbHkg
dGhyb3dzIGBNeUVycm9yYCwgd2l0aG91dCBldmVyIGNhbGxpbmcgYGZgPC9zcGFuPgo8L2NvZGU+
PC9wcmU+CjxwIHN0eWxlPSJtYXJnaW46IDBweCAwcHggMS4yZW07Ij5XaGF0IGxpbmUgaGVyZSBz
ZWVtcyBpbXBvc3NpYmxlPyZuYnNwOzwvcD48L2Rpdj48L2Rpdj48L2Jsb2NrcXVvdGU+PC9kaXY+
PC9kaXY+" style="height:0;width:0;max-height:0;max-width:0;overflow:hidden;font-size:0em;padding:0;margin:0"></div></div></div>