<!DOCTYPE html><html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
Hi Tagir,<br>
<br>
I had already created [1]. Sorry for not sending an update
yesterday,<br>
<br>
Thanks,<br>
Vicente<br>
<br>
[1] <a class="moz-txt-link-freetext" href="https://bugs.openjdk.org/browse/JDK-8369517">https://bugs.openjdk.org/browse/JDK-8369517</a><br>
<br>
<div class="moz-cite-prefix">On 10/10/25 09:26, Tagir Valeev wrote:<br>
</div>
<blockquote type="cite" cite="mid:CAE+3fjY5ysEDDhybw1o99GRqZSUpBfpzuzQs5dGb3EME4FZuVw@mail.gmail.com">
<div dir="ltr">Here it is:
<div><br>
</div>
<div><a href="https://bugs.openjdk.org/browse/JDK-8369565" moz-do-not-send="true" class="moz-txt-link-freetext">https://bugs.openjdk.org/browse/JDK-8369565</a></div>
<div><br>
</div>
<div>I checked a few random OpenJDK builds I have on my machine,
and it looks like the behavior was like this since Java 8.</div>
<div><br>
</div>
<div>With best regards,</div>
<div>Tagir Valeev</div>
</div>
<br>
<div class="gmail_quote gmail_quote_container">
<div dir="ltr" class="gmail_attr">On Thu, Oct 9, 2025 at 1:46 PM
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:<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>
<div>
<p style="margin-bottom:19.2px;margin-top:0px">Yes,
please!</p>
<p style="margin-bottom:19.2px;margin-top:0px">Thanks<br>
Maurizio</p>
<p style="margin-bottom:19.2px;margin-top:0px">On
09/10/2025 10:18, Tagir Valeev wrote:</p>
<blockquote type="cite" style="border-color:rgb(119,119,119) rgb(119,119,119) rgb(119,119,119) rgb(114,159,207);border-left-width:2px;border-left-style:solid;color:rgb(119,119,119);column-rule-color:rgb(119,119,119);margin:19.2px 0px;outline-color:rgb(119,119,119);padding-left:16px;padding-right:16px;quotes:none;text-decoration-color:rgb(119,119,119);text-emphasis-color:rgb(119,119,119)">
<div id="m_-647106579506287976extcontent-0" style="border-color:rgb(119,119,119);color:rgb(119,119,119);column-rule-color:rgb(119,119,119);outline-color:rgb(119,119,119);quotes:none;text-decoration-color:rgb(119,119,119);text-emphasis-color:rgb(119,119,119)">
<div dir="ltr">Hello, Maurizio!
<div><br>
</div>
<div>Thank you for clarifying this. Should I file an
issue?</div>
<div><br>
</div>
<div>With best regards,</div>
<div>Tagir Valeev</div>
</div>
<br>
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">On Thu, Oct 9,
2025 at 11:00 AM Maurizio Cimadamore <<a href="mailto:maurizio.cimadamore@oracle.com" target="_blank" moz-do-not-send="true" class="moz-txt-link-freetext">maurizio.cimadamore@oracle.com</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>
<p>Hi Tagir!</p>
<p>Nice cacth.</p>
<p>Here's a slightly different example which
reveals a bit more of what's happening:</p>
<p>```<br>
interface Main {<br>
interface X<T> {<br>
X<T> self();<br>
}<br>
<br>
static X<?> makeX() {return null;}<br>
<br>
static <R> X<R>
create(Supplier<? extends R> supplier)
{return null;}<br>
<br>
static X<X<?>> methodRef() {<br>
var s = (String)create(Main::makeX);<br>
}<br>
<br>
static X<X<?>> lambda() {<br>
var s = (String)create(() ->
makeX());<br>
}<br>
}<br>
```</p>
<p>This prints:</p>
<p>```<br>
error: incompatible types: X<X<?>>
cannot be converted to String<br>
var s = (String)create(Main::makeX);<br>
^<br>
error: incompatible types:
X<X<CAP#1>> cannot be converted to
String<br>
var s = (String)create(() ->
makeX());<br>
^<br>
where CAP#1 is a fresh type-variable:<br>
CAP#1 extends Object from capture of ?<br>
```</p>
<p>So, the main difference between the two
examples is that in the lambda case, the
return type of the makeX call is captured. But
in the method refreene case no capture occurs.</p>
<p>I believe the lambda case works as expected,
but the method reference case does not.</p>
<p>The JLS mandates a capture of the resolved
method return type (JLS 15.13.2, emphasis
mine):</p>
<p> </p>
<blockquote type="cite">A method reference
expression is <span><em>congruent</em></span>
with a function type if both of the following
are true:
<div>
<ul style="list-style-type:disc">
<li>
<p>The function type identifies a single
compile-time declaration corresponding
to the reference. </p>
</li>
<li>
<p> One of the following is true: </p>
<div>
<ul style="list-style-type:circle">
<li>
<p>The result of the function type
is <code>void</code>. </p>
</li>
<li>
<p> The result of the function
type is <span>R</span>, <b>and
the result of applying capture
conversion (<a href="https://docs.oracle.com/javase/specs/jls/se25/html/jls-5.html#jls-5.1.10" title="5.1.10. Capture Conversion" target="_blank" moz-do-not-send="true">§5.1.10</a>)
to the return type of the
invocation type (<a href="https://docs.oracle.com/javase/specs/jls/se25/html/jls-15.html#jls-15.12.2.6" title="15.12.2.6. Method Invocation Type" target="_blank" moz-do-not-send="true">§15.12.2.6</a>)
of the chosen compile-time
declaration is <span>R</span>'</b>
(where <span>R</span> is the
target type that may be used to
infer <span>R</span>'), and
neither <span>R</span> nor <span>R</span>'
is <code>void</code>, and <span>R</span>'
is compatible with <span>R</span>
in an assignment context. </p>
</li>
</ul>
</div>
</li>
</ul>
</div>
</blockquote>
<p>It seems like javac is missing this capture
conversion and, because of that, the behavior
of the two examples diverge.</p>
<p>Cheers<br>
Maurizio<br>
</p>
<p><br>
</p>
<p><br>
</p>
<p><br>
</p>
<p><br>
</p>
<div>On 07/10/2025 17:12, Tagir Valeev wrote:<br>
</div>
<blockquote type="cite">
<div dir="ltr">Hello!
<div><br>
</div>
<div>I'm investigating a seemingly weird
compilation case. Consider the following
Java interface:</div>
<div><br>
</div>
<div>import java.util.function.Supplier;<br>
<br>
interface Main {<br>
interface X<T> {<br>
X<T> self();<br>
}<br>
<br>
static X<?> makeX() {return
null;}<br>
<br>
static <R> X<R>
create(Supplier<? extends R>
supplier) {return null;}<br>
<br>
static X<X<?>> methodRef()
{<br>
return create(Main::makeX).self();<br>
}<br>
<br>
static X<X<?>> lambda() {<br>
return create(() ->
makeX()).self();<br>
}<br>
}</div>
<div><br>
</div>
<div>I expect that either both methods
'methodRef' and 'lambda' should be
compilable or both should be
non-compilable. However, while 'methodRef'
compiles, 'lambda' is rejected by compiler
(using javac build 25+36-3489):</div>
<div><br>
Main.java:17: error: incompatible types:
X<X<CAP#1>> cannot be
converted to X<X<?>><br>
return create(() ->
makeX()).self();<br>
^<br>
where CAP#1 is a fresh type-variable:<br>
CAP#1 extends Object from capture of ?<br>
1 error<br>
error: compilation failed</div>
<div><br>
</div>
<div>Could you please help me and clarify
whether this is an expected behavior or
not?</div>
<div><br>
</div>
<div>With best regards,</div>
<div>Tagir Valeev</div>
</div>
</blockquote>
</div>
</blockquote>
</div>
</div>
</blockquote>
</div>
<div style="height:0px;width:0px;max-height:0px;max-width:0px;overflow:hidden;font-size:0px;padding:0px;margin:0px" aria-hidden="true" title="MDH:PHA+WWVzLCBwbGVhc2UhPC9wPjxwPlRoYW5rczxicj5NYXVyaXppbzxicj48L3A+PGRpdiBjbGFzcz0ibW96LWNpdGUtcHJlZml4Ij5PbiAwOS8xMC8yMDI1IDEwOjE4LCBUYWdpciBWYWxlZXYgd3JvdGU6PGJyPjwvZGl2PjxibG9ja3F1b3RlIHR5cGU9ImNpdGUiIGNpdGU9Im1pZDpDQUUrM2ZqWmd5dy1odHdFcnQ5Q3B6c1U0YkRMMzdfY3BFN25XNUF1XzIwMUtxOTJpN1FAbWFpbC5nbWFpbC5jb20iPjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyAiPjxkaXYgZGlyPSJsdHIiPkhlbGxvLCZuYnNwO01hdXJpemlvITxkaXY+PGJyPjwvZGl2PjxkaXY+VGhhbmsgeW91IGZvciBjbGFyaWZ5aW5nIHRoaXMuIFNob3VsZCBJIGZpbGUgYW4gaXNzdWU/PC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5XaXRoIGJlc3QgcmVnYXJkcyw8L2Rpdj48ZGl2PlRhZ2lyIFZhbGVldjwvZGl2PjwvZGl2Pjxicj48ZGl2IGNsYXNzPSJnbWFpbF9xdW90ZSBnbWFpbF9xdW90ZV9jb250YWluZXIiPjxkaXYgZGlyPSJsdHIiIGNsYXNzPSJnbWFpbF9hdHRyIj5PbiBUaHUsIE9jdCA5LCAyMDI1IGF0IDExOjAw4oCvQU0gTWF1cml6aW8gQ2ltYWRhbW9yZSAmbHQ7PGEgaHJlZj0ibWFpbHRvOm1hdXJpemlvLmNpbWFkYW1vcmVAb3JhY2xlLmNvbSIgbW96LWRvLW5vdC1zZW5kPSJ0cnVlIj5tYXVyaXppby5jaW1hZGFtb3JlQG9yYWNsZS5jb208L2E+Jmd0OyB3cm90ZTo8YnI+PC9kaXY+PGJsb2NrcXVvdGUgY2xhc3M9ImdtYWlsX3F1b3RlIiBzdHlsZT0ibWFyZ2luOjBweCAwcHggMHB4IDAuOGV4O2JvcmRlci1sZWZ0OjFweCBzb2xpZCByZ2IoMjA0LDIwNCwyMDQpO3BhZGRpbmctbGVmdDoxZXgiPgoKICAKICA8ZGl2PgogICAgPHA+SGkgVGFnaXIhPC9wPgogICAgPHA+TmljZSBjYWN0aC48L3A+CiAgICA8cD5IZXJlJ3MgYSBzbGlnaHRseSBkaWZmZXJlbnQgZXhhbXBsZSB3aGljaCByZXZlYWxzIGEgYml0IG1vcmUgb2YKICAgICAgd2hhdCdzIGhhcHBlbmluZzo8L3A+CiAgICA8cD5gYGA8YnI+CiAgICAgIGludGVyZmFjZSBNYWluIHs8YnI+CiAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyBpbnRlcmZhY2UgWCZsdDtUJmd0OyB7PGJyPgogICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgWCZsdDtUJmd0OyBzZWxmKCk7PGJyPgogICAgICAmbmJzcDsmbmJzcDsmbmJzcDsgfTxicj4KICAgICAgPGJyPgogICAgICAmbmJzcDsmbmJzcDsmbmJzcDsgc3RhdGljIFgmbHQ7PyZndDsgbWFrZVgoKSB7cmV0dXJuIG51bGw7fTxicj4KICAgICAgPGJyPgogICAgICAmbmJzcDsmbmJzcDsmbmJzcDsgc3RhdGljICZsdDtSJmd0OyBYJmx0O1ImZ3Q7IGNyZWF0ZShTdXBwbGllciZsdDs/IGV4dGVuZHMgUiZndDsKICAgICAgc3VwcGxpZXIpIHtyZXR1cm4gbnVsbDt9PGJyPgogICAgICA8YnI+CiAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyBzdGF0aWMgWCZsdDtYJmx0Oz8mZ3Q7Jmd0OyBtZXRob2RSZWYoKSB7PGJyPgogICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgdmFyIHMgPSAoU3RyaW5nKWNyZWF0ZShNYWluOjptYWtlWCk7PGJyPgogICAgICAmbmJzcDsmbmJzcDsmbmJzcDsgfTxicj4KICAgICAgPGJyPgogICAgICAmbmJzcDsmbmJzcDsmbmJzcDsgc3RhdGljIFgmbHQ7WCZsdDs/Jmd0OyZndDsgbGFtYmRhKCkgezxicj4KICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IHZhciBzID0gKFN0cmluZyljcmVhdGUoKCkgLSZndDsgbWFrZVgoKSk7PGJyPgogICAgICAmbmJzcDsmbmJzcDsmbmJzcDsgfTxicj4KICAgICAgfTxicj4KICAgICAgYGBgPC9wPgogICAgPHA+VGhpcyBwcmludHM6PC9wPgogICAgPHA+YGBgPGJyPgogICAgICBlcnJvcjogaW5jb21wYXRpYmxlIHR5cGVzOiBYJmx0O1gmbHQ7PyZndDsmZ3Q7IGNhbm5vdCBiZSBjb252ZXJ0ZWQKICAgICAgdG8gU3RyaW5nPGJyPgogICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgdmFyIHMgPSAoU3RyaW5nKWNyZWF0ZShNYWluOjptYWtlWCk7PGJyPgogICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgXjxicj4KICAgICAgZXJyb3I6IGluY29tcGF0aWJsZSB0eXBlczogWCZsdDtYJmx0O0NBUCMxJmd0OyZndDsgY2Fubm90IGJlCiAgICAgIGNvbnZlcnRlZCB0byBTdHJpbmc8YnI+CiAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyB2YXIgcyA9IChTdHJpbmcpY3JlYXRlKCgpIC0mZ3Q7IG1ha2VYKCkpOzxicj4KICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IF48YnI+CiAgICAgICZuYnNwOyB3aGVyZSBDQVAjMSBpcyBhIGZyZXNoIHR5cGUtdmFyaWFibGU6PGJyPgogICAgICAmbmJzcDsmbmJzcDsmbmJzcDsgQ0FQIzEgZXh0ZW5kcyBPYmplY3QgZnJvbSBjYXB0dXJlIG9mID88YnI+CiAgICAgIGBgYDwvcD4KICAgIDxwPlNvLCB0aGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHR3byBleGFtcGxlcyBpcyB0aGF0IGluIHRoZQogICAgICBsYW1iZGEgY2FzZSwgdGhlIHJldHVybiB0eXBlIG9mIHRoZSBtYWtlWCBjYWxsIGlzIGNhcHR1cmVkLiBCdXQgaW4KICAgICAgdGhlIG1ldGhvZCByZWZyZWVuZSBjYXNlIG5vIGNhcHR1cmUgb2NjdXJzLjwvcD4KICAgIDxwPkkgYmVsaWV2ZSB0aGUgbGFtYmRhIGNhc2Ugd29ya3MgYXMgZXhwZWN0ZWQsIGJ1dCB0aGUgbWV0aG9kCiAgICAgIHJlZmVyZW5jZSBjYXNlIGRvZXMgbm90LjwvcD4KICAgIDxwPlRoZSBKTFMgbWFuZGF0ZXMgYSBjYXB0dXJlIG9mIHRoZSByZXNvbHZlZCBtZXRob2QgcmV0dXJuIHR5cGUKICAgICAgKEpMUyAxNS4xMy4yLCBlbXBoYXNpcyBtaW5lKTo8L3A+CiAgICA8cD4KICAgICAgPC9wPjxibG9ja3F1b3RlIHR5cGU9ImNpdGUiPkEgbWV0aG9kIHJlZmVyZW5jZSBleHByZXNzaW9uIGlzIDxzcGFuPjxlbT5jb25ncnVlbnQ8L2VtPjwvc3Bhbj4gd2l0aCBhIGZ1bmN0aW9uCiAgICAgICAgdHlwZSBpZiBib3RoIG9mIHRoZSBmb2xsb3dpbmcgYXJlIHRydWU6CiAgICAgICAgPGRpdj4KICAgICAgICAgIDx1bCBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOmRpc2MiPgogICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgPHA+VGhlIGZ1bmN0aW9uIHR5cGUgaWRlbnRpZmllcyBhCiAgICAgICAgICAgICAgICBzaW5nbGUgY29tcGlsZS10aW1lIGRlY2xhcmF0aW9uIGNvcnJlc3BvbmRpbmcgdG8gdGhlCiAgICAgICAgICAgICAgICByZWZlcmVuY2UuIDwvcD4KICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgIDxwPiZuYnNwO09uZSBvZiB0aGUgZm9sbG93aW5nIGlzIHRydWU6IDwvcD4KICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgPHVsIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6Y2lyY2xlIj4KICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgIDxwPlRoZSByZXN1bHQgb2YgdGhlIGZ1bmN0aW9uCiAgICAgICAgICAgICAgICAgICAgICB0eXBlIGlzIDxjb2RlPnZvaWQ8L2NvZGU+LiA8L3A+CiAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICA8cD4mbmJzcDtUaGUgcmVzdWx0IG9mIHRoZSBmdW5jdGlvbgogICAgICAgICAgICAgICAgICAgICAgdHlwZSBpcyA8c3Bhbj5SPC9zcGFuPiwgPGI+YW5kIHRoZQogICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgb2YgYXBwbHlpbmcgY2FwdHVyZSBjb252ZXJzaW9uICg8YSBocmVmPSJodHRwczovL2RvY3Mub3JhY2xlLmNvbS9qYXZhc2Uvc3BlY3MvamxzL3NlMjUvaHRtbC9qbHMtNS5odG1sI2pscy01LjEuMTAiIHRpdGxlPSI1LjEuMTAuJm5ic3A7Q2FwdHVyZSBDb252ZXJzaW9uIiB0YXJnZXQ9Il9ibGFuayIgbW96LWRvLW5vdC1zZW5kPSJ0cnVlIj7CpzUuMS4xMDwvYT4pCiAgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSByZXR1cm4gdHlwZSBvZiB0aGUgaW52b2NhdGlvbiB0eXBlICg8YSBocmVmPSJodHRwczovL2RvY3Mub3JhY2xlLmNvbS9qYXZhc2Uvc3BlY3MvamxzL3NlMjUvaHRtbC9qbHMtMTUuaHRtbCNqbHMtMTUuMTIuMi42IiB0aXRsZT0iMTUuMTIuMi42LiZuYnNwO01ldGhvZCBJbnZvY2F0aW9uIFR5cGUiIHRhcmdldD0iX2JsYW5rIiBtb3otZG8tbm90LXNlbmQ9InRydWUiPsKnMTUuMTIuMi42PC9hPikKICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGNob3NlbiBjb21waWxlLXRpbWUgZGVjbGFyYXRpb24gaXMgPHNwYW4+Ujwvc3Bhbj4nPC9iPiAod2hlcmUgPHNwYW4+Ujwvc3Bhbj4gaXMgdGhlIHRhcmdldCB0eXBlIHRoYXQKICAgICAgICAgICAgICAgICAgICAgIG1heSBiZSB1c2VkIHRvIGluZmVyIDxzcGFuPlI8L3NwYW4+JyksCiAgICAgICAgICAgICAgICAgICAgICBhbmQgbmVpdGhlciA8c3Bhbj5SPC9zcGFuPiBub3IgPHNwYW4+Ujwvc3Bhbj4nIGlzIDxjb2RlPnZvaWQ8L2NvZGU+LAogICAgICAgICAgICAgICAgICAgICAgYW5kIDxzcGFuPlI8L3NwYW4+JyBpcyBjb21wYXRpYmxlCiAgICAgICAgICAgICAgICAgICAgICB3aXRoIDxzcGFuPlI8L3NwYW4+IGluIGFuIGFzc2lnbm1lbnQKICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuIDwvcD4KICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICA8L3VsPgogICAgICAgIDwvZGl2PgogICAgICA8L2Jsb2NrcXVvdGU+CiAgICAKICAgIDxwPkl0IHNlZW1zIGxpa2UgamF2YWMgaXMgbWlzc2luZyB0aGlzIGNhcHR1cmUgY29udmVyc2lvbiBhbmQsCiAgICAgIGJlY2F1c2Ugb2YgdGhhdCwgdGhlIGJlaGF2aW9yIG9mIHRoZSB0d28gZXhhbXBsZXMgZGl2ZXJnZS48L3A+CiAgICA8cD5DaGVlcnM8YnI+CiAgICAgIE1hdXJpemlvPGJyPgogICAgPC9wPgogICAgPHA+PGJyPgogICAgPC9wPgogICAgPHA+PGJyPgogICAgPC9wPgogICAgPHA+PGJyPgogICAgPC9wPgogICAgPHA+PGJyPgogICAgPC9wPgogICAgPGRpdj5PbiAwNy8xMC8yMDI1IDE3OjEyLCBUYWdpciBWYWxlZXYKICAgICAgd3JvdGU6PGJyPgogICAgPC9kaXY+CiAgICA8YmxvY2txdW90ZSB0eXBlPSJjaXRlIj4KICAgICAgCiAgICAgIDxkaXYgZGlyPSJsdHIiPkhlbGxvIQogICAgICAgIDxkaXY+PGJyPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXY+SSdtIGludmVzdGlnYXRpbmcgYSBzZWVtaW5nbHkgd2VpcmQgY29tcGlsYXRpb24gY2FzZS4KICAgICAgICAgIENvbnNpZGVyIHRoZSBmb2xsb3dpbmcgSmF2YSBpbnRlcmZhY2U6PC9kaXY+CiAgICAgICAgPGRpdj48YnI+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdj5pbXBvcnQgamF2YS51dGlsLmZ1bmN0aW9uLlN1cHBsaWVyOzxicj4KICAgICAgICAgIDxicj4KICAgICAgICAgIGludGVyZmFjZSBNYWluIHs8YnI+CiAgICAgICAgICAmbmJzcDsgJm5ic3A7IGludGVyZmFjZSBYJmx0O1QmZ3Q7IHs8YnI+CiAgICAgICAgICAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgWCZsdDtUJmd0OyBzZWxmKCk7PGJyPgogICAgICAgICAgJm5ic3A7ICZuYnNwOyB9PGJyPgogICAgICAgICAgPGJyPgogICAgICAgICAgJm5ic3A7ICZuYnNwOyBzdGF0aWMgWCZsdDs/Jmd0OyBtYWtlWCgpIHtyZXR1cm4gbnVsbDt9PGJyPgogICAgICAgICAgPGJyPgogICAgICAgICAgJm5ic3A7ICZuYnNwOyBzdGF0aWMgJmx0O1ImZ3Q7IFgmbHQ7UiZndDsgY3JlYXRlKFN1cHBsaWVyJmx0Oz8gZXh0ZW5kcwogICAgICAgICAgUiZndDsgc3VwcGxpZXIpIHtyZXR1cm4gbnVsbDt9PGJyPgogICAgICAgICAgJm5ic3A7PGJyPgogICAgICAgICAgJm5ic3A7ICZuYnNwOyBzdGF0aWMgWCZsdDtYJmx0Oz8mZ3Q7Jmd0OyBtZXRob2RSZWYoKSB7PGJyPgogICAgICAgICAgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IHJldHVybiBjcmVhdGUoTWFpbjo6bWFrZVgpLnNlbGYoKTs8YnI+CiAgICAgICAgICAmbmJzcDsgJm5ic3A7IH08YnI+CiAgICAgICAgICA8YnI+CiAgICAgICAgICAmbmJzcDsgJm5ic3A7IHN0YXRpYyBYJmx0O1gmbHQ7PyZndDsmZ3Q7IGxhbWJkYSgpIHs8YnI+CiAgICAgICAgICAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgcmV0dXJuIGNyZWF0ZSgoKSAtJmd0OyBtYWtlWCgpKS5zZWxmKCk7PGJyPgogICAgICAgICAgJm5ic3A7ICZuYnNwOyB9PGJyPgogICAgICAgICAgfTwvZGl2PgogICAgICAgIDxkaXY+PGJyPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXY+SSBleHBlY3QgdGhhdCBlaXRoZXIgYm90aCBtZXRob2RzICdtZXRob2RSZWYnIGFuZCAnbGFtYmRhJwogICAgICAgICAgc2hvdWxkIGJlIGNvbXBpbGFibGUgb3IgYm90aCBzaG91bGQgYmUgbm9uLWNvbXBpbGFibGUuCiAgICAgICAgICBIb3dldmVyLCB3aGlsZSAnbWV0aG9kUmVmJyBjb21waWxlcywgJ2xhbWJkYScgaXMgcmVqZWN0ZWQgYnkKICAgICAgICAgIGNvbXBpbGVyICh1c2luZyBqYXZhYyZuYnNwO2J1aWxkIDI1KzM2LTM0ODkpOjwvZGl2PgogICAgICAgIDxkaXY+PGJyPgogICAgICAgICAgTWFpbi5qYXZhOjE3OiBlcnJvcjogaW5jb21wYXRpYmxlIHR5cGVzOgogICAgICAgICAgWCZsdDtYJmx0O0NBUCMxJmd0OyZndDsgY2Fubm90IGJlIGNvbnZlcnRlZCB0bwogICAgICAgICAgWCZsdDtYJmx0Oz8mZ3Q7Jmd0Ozxicj4KICAgICAgICAgICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyByZXR1cm4gY3JlYXRlKCgpIC0mZ3Q7IG1ha2VYKCkpLnNlbGYoKTs8YnI+CiAgICAgICAgICAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO148YnI+CiAgICAgICAgICAmbmJzcDsgd2hlcmUgQ0FQIzEgaXMgYSBmcmVzaCB0eXBlLXZhcmlhYmxlOjxicj4KICAgICAgICAgICZuYnNwOyAmbmJzcDsgQ0FQIzEgZXh0ZW5kcyBPYmplY3QgZnJvbSBjYXB0dXJlIG9mID88YnI+CiAgICAgICAgICAxIGVycm9yPGJyPgogICAgICAgICAgZXJyb3I6IGNvbXBpbGF0aW9uIGZhaWxlZDwvZGl2PgogICAgICAgIDxkaXY+PGJyPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXY+Q291bGQgeW91IHBsZWFzZSBoZWxwIG1lIGFuZCBjbGFyaWZ5IHdoZXRoZXIgdGhpcyBpcyBhbgogICAgICAgICAgZXhwZWN0ZWQgYmVoYXZpb3Igb3Igbm90PzwvZGl2PgogICAgICAgIDxkaXY+PGJyPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXY+V2l0aCBiZXN0IHJlZ2FyZHMsPC9kaXY+CiAgICAgICAgPGRpdj5UYWdpciBWYWxlZXY8L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Jsb2NrcXVvdGU+CiAgPC9kaXY+Cgo8L2Jsb2NrcXVvdGU+PC9kaXY+Cgo8L2Jsb2NrcXVvdGU+PHVsIGNsYXNzPSJkcm9wZG93bi1tZW51IHRleHRjb21wbGV0ZS1kcm9wZG93biIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgei1pbmRleDogMTAwMDsiIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiIHBvcG92ZXI9ImF1dG8iPjwvdWw+">​</div>
</div>
</blockquote>
</div>
</blockquote>
<br>
</body>
</html>