<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>146191</bug_id>
          
          <creation_ts>2015-06-21 02:16:50 -0700</creation_ts>
          <short_desc>Make Array.join work directly on substrings without reifying them</short_desc>
          <delta_ts>2015-06-24 12:00:49 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>ap</cc>
    
    <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>kling</cc>
    
    <cc>mark.lam</cc>
    
    <cc>ossy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1103707</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-06-21 02:16:50 -0700</bug_when>
    <thetext>Make Array.join work directly on substrings without reifying them</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1103710</commentid>
    <comment_count>1</comment_count>
      <attachid>255318</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-06-21 02:30:46 -0700</bug_when>
    <thetext>Created attachment 255318
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1103711</commentid>
    <comment_count>2</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-06-21 02:31:23 -0700</bug_when>
    <thetext>OK, Mr. Kling. You asked me to do this, so help advise me on what more I should do before landing it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1103712</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-06-21 02:33:37 -0700</bug_when>
    <thetext>Attachment 255318 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/ArrayPrototype.cpp:388:  Missing space before {  [whitespace/braces] [5]
Total errors found: 1 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1103719</commentid>
    <comment_count>4</comment_count>
      <attachid>255321</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-06-21 05:02:06 -0700</bug_when>
    <thetext>Created attachment 255321
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1103720</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-06-21 05:04:30 -0700</bug_when>
    <thetext>Attachment 255321 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/ArrayPrototype.cpp:388:  Missing space before {  [whitespace/braces] [5]
Total errors found: 1 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1103762</commentid>
    <comment_count>6</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-06-21 21:16:17 -0700</bug_when>
    <thetext>Can you please verify the performance on Peacekeeper&apos;s array tests? That code used to be ridiculously hot and we are not leading on that benchmark.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1103851</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-06-22 09:54:08 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Can you please verify the performance on Peacekeeper&apos;s array tests?

Sure, I’ll do that. Is there an easy way to run just those tests?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1103866</commentid>
    <comment_count>8</comment_count>
      <attachid>255321</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2015-06-22 10:28:06 -0700</bug_when>
    <thetext>Comment on attachment 255321
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=255321&amp;action=review

&gt; Source/JavaScriptCore/ChangeLog:9
&gt; +        1) Performance testing to see if this is truly a speedup.

Even if there&apos;s only little or no speedup from this, there&apos;s good value in avoiding the StringImpl reification.
For instance, on cnet.com, there is ~400 kB worth of StringImpl getting allocated below the JSString::value() call that you&apos;re sidestepping here.

&gt; Source/JavaScriptCore/ChangeLog:10
&gt; +        2) Correctness testing for the various missing exception checks.

AFAICT they are all OOM exception checks. I don&apos;t know how we&apos;d test for those.

&gt; Source/JavaScriptCore/ChangeLog:28
&gt; +        (JSC::JSValue::toWTFStringSlowCase): MOved the contents of the

MOved -&gt; Moved

&gt; Source/JavaScriptCore/runtime/JSStringJoiner.h:96
&gt; +    m_strings.uncheckedAppend({ { }, { } });

I can&apos;t decide if this is cute or ugly. Let&apos;s go with cute.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1103868</commentid>
    <comment_count>9</comment_count>
      <attachid>255321</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-06-22 10:36:12 -0700</bug_when>
    <thetext>Comment on attachment 255321
Patch

OK, I’ll put a new patch up for review with the change log fixed, and after I do some Peacekeeper performance testing (still might need some help on how to run only part of that test; the whole Peacekeeper seems like too much).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1104040</commentid>
    <comment_count>10</comment_count>
      <attachid>255396</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-06-22 23:45:39 -0700</bug_when>
    <thetext>Created attachment 255396
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1104041</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-06-22 23:49:01 -0700</bug_when>
    <thetext>Attachment 255396 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/ArrayPrototype.cpp:382:  Missing space before {  [whitespace/braces] [5]
Total errors found: 1 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1104045</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-06-22 23:54:15 -0700</bug_when>
    <thetext>Ben, there’s a lot more that could be done to make Peacekeeper faster; we should go over that some time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1104050</commentid>
    <comment_count>13</comment_count>
      <attachid>255396</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2015-06-23 00:10:54 -0700</bug_when>
    <thetext>Comment on attachment 255396
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=255396&amp;action=review

&gt; Source/JavaScriptCore/ChangeLog:9
&gt; +        Bsides the Array.join change, this has other optimizations based on
&gt; +        profiling the Peacekeeper array benchmark.

Bsides -&gt; Besides

Other optimizations eh? I see you couldn&apos;t help yourself.. well, the StringView::m_length ones are great.
So are the method table bypassing ones. I guess I can&apos;t really complain about this. Very nice.

&gt; Source/JavaScriptCore/ChangeLog:11
&gt; +        I measured a 14% speed improvement in the Peacekeeper array benchmark.

Sweet!

&gt; Source/JavaScriptCore/runtime/ArrayPrototype.cpp:394
&gt; +        for (; i &lt; length &amp;&amp; array-&gt;canGetIndexQuickly(i); ++i) {
&gt; +            stringJoiner.append(*exec, array-&gt;getIndexQuickly(i));
&gt; +            if (exec-&gt;hadException())
&gt; +                return JSValue::encode(jsUndefined());
&gt;          }

It&apos;s a bit sad that we fall out of the JSArray fast path here if we encounter a hole (canGetIndexQuickly fails.)
Maybe if the array&apos;s Structure says holesMustForwardToPrototype() is false, we could do even better here?
Not sure if holes a common occurrence here in practice.

&gt; Source/JavaScriptCore/runtime/JSStringJoiner.h:52
&gt; +    Vector&lt;StringViewWithUnderlyingString&gt; m_strings;

This seems like an ideal candidate for some gratuitous inline capacity.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1104102</commentid>
    <comment_count>14</comment_count>
      <attachid>255396</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2015-06-23 08:30:38 -0700</bug_when>
    <thetext>Comment on attachment 255396
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1104124</commentid>
    <comment_count>15</comment_count>
      <attachid>255396</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-06-23 10:31:43 -0700</bug_when>
    <thetext>Comment on attachment 255396
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=255396&amp;action=review

&gt;&gt; Source/JavaScriptCore/runtime/ArrayPrototype.cpp:394
&gt;&gt;          }
&gt; 
&gt; It&apos;s a bit sad that we fall out of the JSArray fast path here if we encounter a hole (canGetIndexQuickly fails.)
&gt; Maybe if the array&apos;s Structure says holesMustForwardToPrototype() is false, we could do even better here?
&gt; Not sure if holes a common occurrence here in practice.

I agree we should come back to this. It’s strange that this function iterates the array so differently from the other array prototype functions.

&gt;&gt; Source/JavaScriptCore/runtime/JSStringJoiner.h:52
&gt;&gt; +    Vector&lt;StringViewWithUnderlyingString&gt; m_strings;
&gt; 
&gt; This seems like an ideal candidate for some gratuitous inline capacity.

I considered it. A value 10 or higher would have helped slightly with the Peacekeeper benchmark.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1104307</commentid>
    <comment_count>16</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-06-23 19:34:04 -0700</bug_when>
    <thetext>Committed r185899: &lt;http://trac.webkit.org/changeset/185899&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1104313</commentid>
    <comment_count>17</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-06-23 21:49:32 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; Committed r185899: &lt;http://trac.webkit.org/changeset/185899&gt;

It made runtime-array jsc test fail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1104325</commentid>
    <comment_count>18</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-06-24 00:22:44 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; It made runtime-array jsc test fail.

OK, I’ll investigate. We probably need to roll out until I deal with that. Sadly it seems that EWS does not run the jsc tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1104329</commentid>
    <comment_count>19</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-06-24 01:15:18 -0700</bug_when>
    <thetext>The problem is that RuntimeArray is derived from JSArray, but JSArray::length gives the wrong answer. My patch changed the Array.concat implementation to use JSArray::length when the pointer is to a JSArray.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1104330</commentid>
    <comment_count>20</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-06-24 01:15:39 -0700</bug_when>
    <thetext>Fixed in http://trac.webkit.org/changeset/185904</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1104338</commentid>
    <comment_count>21</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2015-06-24 04:56:27 -0700</bug_when>
    <thetext>This change caused Debug builds to assert in the following test:

sputnik/Conformance/15_Native_Objects/15.4_Array/15.4.4/15.4.4.3_Array_prototype_toLocaleString/S15.4.4.3_A1_T1.html

Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0   com.apple.JavaScriptCore      	0x0000000108a0fa5a WTFCrash + 42
1   com.apple.JavaScriptCore      	0x000000010870fdf2 JSC::JSStringJoiner::join(JSC::ExecState&amp;) + 114
2   com.apple.JavaScriptCore      	0x0000000107fc7060 JSC::arrayProtoFuncToLocaleString(JSC::ExecState*) + 1040
3   ???                           	0x0000339124e01028 0 + 56698481938472
4   com.apple.JavaScriptCore      	0x00000001087a50c1 llint_entry + 26101
5   com.apple.JavaScriptCore      	0x000000010879e889 vmEntryToJavaScript + 361
6   com.apple.JavaScriptCore      	0x00000001085edf6a JSC::JITCode::execute(JSC::VM*, JSC::ProtoCallFrame*) + 266
7   com.apple.JavaScriptCore      	0x00000001085d173e JSC::Interpreter::execute(JSC::ProgramExecutable*, JSC::ExecState*, JSC::JSObject*) + 4830
8   com.apple.JavaScriptCore      	0x00000001080c9411 JSC::evaluate(JSC::ExecState*, JSC::SourceCode const&amp;, JSC::JSValue, WTF::NakedPtr&lt;JSC::Exception&gt;&amp;) + 465
9   com.apple.WebCore             	0x000000010de83735 WebCore::JSMainThreadExecState::evaluate(JSC::ExecState*, JSC::SourceCode const&amp;, JSC::JSValue, WTF::NakedPtr&lt;JSC::Exception&gt;&amp;) + 69
10  com.apple.WebCore             	0x000000010e8d1ddd WebCore::ScriptController::evaluateInWorld(WebCore::ScriptSourceCode const&amp;, WebCore::DOMWrapperWorld&amp;) + 317
11  com.apple.WebCore             	0x000000010e8d1f24 WebCore::ScriptController::evaluate(WebCore::ScriptSourceCode const&amp;) + 68
12  com.apple.WebCore             	0x000000010e8e1267 WebCore::ScriptElement::executeScript(WebCore::ScriptSourceCode const&amp;) + 455
13  com.apple.WebCore             	0x000000010e8e01f0 WebCore::ScriptElement::prepareScript(WTF::TextPosition const&amp;, WebCore::ScriptElement::LegacyTypeSupport) + 1792
14  com.apple.WebCore             	0x000000010d8d1c46 WebCore::HTMLScriptRunner::runScript(WebCore::Element*, WTF::TextPosition const&amp;) + 374
15  com.apple.WebCore             	0x000000010d8d1a49 WebCore::HTMLScriptRunner::execute(WTF::PassRefPtr&lt;WebCore::Element&gt;, WTF::TextPosition const&amp;) + 137
16  com.apple.WebCore             	0x000000010d803ac0 WebCore::HTMLDocumentParser::runScriptsForPausedTreeBuilder() + 288
[...]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1104358</commentid>
    <comment_count>22</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-06-24 07:20:08 -0700</bug_when>
    <thetext>The sputnik/Conformance/15_Native_Objects/15.4_Array/15.4.4/15.4.4.3_Array_prototype_toLocaleString/S15.4.4.3_A1_T1.html assertion failure was fixed in r185909: &lt;http://trac.webkit.org/r185909&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1104418</commentid>
    <comment_count>23</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-06-24 11:16:42 -0700</bug_when>
    <thetext>Thanks for fixing the assertion, Mark!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1104435</commentid>
    <comment_count>24</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-06-24 12:00:49 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; Thanks for fixing the assertion, Mark!

I noticed two things about the assertion fix:

1) All vectors have sizes that are &lt;= capacity, so the assertion no longer has any value. We should remove it!

2) Only toLocaleString omits null and undefined elements. Both toString and Array.join convert them to the empty string (so put separators around them). I suspect it is actually a bug in toLocaleString that it is skipping those elements.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>255318</attachid>
            <date>2015-06-21 02:30:46 -0700</date>
            <delta_ts>2015-06-21 05:02:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-146191-20150621023005.patch</filename>
            <type>text/plain</type>
            <size>29447</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg1ODA0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
ZGMwZDVjOTQ5M2QxMTVlODMxMzdlYmU3Zjk1NGI3ZjgyZDUwZDI1Li5jYjdhODJiMjNiNzBmZGE1
ZTQxZDE5ZjU5MTNlNzc1ZjEzOGJjZmEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1NiBAQAorMjAxNS0wNi0yMSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgTWFrZSBBcnJheS5qb2luIHdvcmsgZGlyZWN0bHkgb24gc3Vic3RyaW5ncyB3aXRo
b3V0IHJlaWZ5aW5nIHRoZW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE0NjE5MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFNob3VsZCBoYXZlIHNvbWUgbW9yZSB0ZXN0aW5nOgorICAgICAgICAxKSBQZXJm
b3JtYW5jZSB0ZXN0aW5nIHRvIHNlZSBpZiB0aGlzIGlzIHRydWx5IGEgc3BlZWR1cC4KKyAgICAg
ICAgMikgQ29ycmVjdG5lc3MgdGVzdGluZyBmb3IgdGhlIHZhcmlvdXMgbWlzc2luZyBleGNlcHRp
b24gY2hlY2tzLgorCisgICAgICAgICogcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHA6CisgICAg
ICAgIChKU0M6OmFycmF5UHJvdG9GdW5jVG9TdHJpbmcpOiBVcGRhdGVkIHRvIHVzZSB0aGUgbmV3
IEpTU3RyaW5nSm9pbmVyCisgICAgICAgIGludGVyZmFjZS4gQ2hhbmdlZCBsb2NhbCB2YXJpYWJs
ZSBuYW1lIHRvIHRoaXNBcnJheSBzaW5jZSBpdCdzIG5vdCBhCisgICAgICAgIEpTT2JqZWN0Ki4g
Q2hhbmdlZCBsb29wIGluZGV4IHRvIGkgaW5zdGVhZCBvZiBrLgorICAgICAgICAoSlNDOjphcnJh
eVByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKTogVXBkYXRlZCB0byB1c2UgdGhlIG5ldyBKU1N0cmlu
Z0pvaW5lcgorICAgICAgICBpbnRlcmZhY2UuIFJlbmFtZWQgdGhpc09iaiB0byB0aGlzT2JqZWN0
LiBBZGRlZCBhIG1pc3NpbmcgZXhjZXB0aW9uIGNoZWNrCisgICAgICAgIGFmdGVyIHRoZSB0b0xv
Y2FsZVN0cmluZyBmdW5jdGlvbiBpcyBjYWxsZWQsIGJ1dCBiZWZvcmUgdG9TdHJpbmcgaXMgY2Fs
bGVkCisgICAgICAgIHRoZSByZXN1bHQgb2YgdGhhdCBmdW5jdGlvbi4KKyAgICAgICAgKEpTQzo6
YXJyYXlQcm90b0Z1bmNKb2luKTogVXBkYXRlZCB0byB1c2UgdGhlIG5ldyBKU1N0cmluZ0pvaW50
ZXIgaW50ZXJmYWNlLgorICAgICAgICBBZGRlZCBhIG1pc3NpbmcgZXhjZXB0aW9uIGNoZWNrIGFm
dGVyIGNhbGxpbmcgdG9TdHJpbmcgb24gdGhlIHNlcGFyYXRvcgorICAgICAgICBidXQgYmVmb3Jl
IGNhbGxpbmcgZ2V0IHRvIGdldCB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUgYXJyYXktbGlrZSBv
YmplY3QKKyAgICAgICAgYmVpbmcgam9pbmVkLiBDaGFuZ2VkIGxvb3AgaW5kZXggdG8gaSBpbnN0
ZWFkIG9mIGsuIEFkZGVkIG1pc3NpbmcgZXhjZXB0aW9uCisgICAgICAgIGNoZWNrIGFmdGVyIGNh
bGxpbmcgdG9TdHJpbmcgb24gZWFjaCBzdHJpbmcgZnJvbSB0aGUgYXJyYXkgYmVmb3JlIGNhbGxp
bmcKKyAgICAgICAgZ2V0IGZvciB0aGUgbmV4dCBlbGVtZW50LgorCisgICAgICAgICogcnVudGlt
ZS9KU0NKU1ZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6dG9XVEZTdHJpbmdTbG93
Q2FzZSk6IE1PdmVkIHRoZSBjb250ZW50cyBvZiB0aGUKKyAgICAgICAgaW5saW5lSlNWYWx1ZU5v
dFN0cmluZ3RvU3RyaW5nIGZ1bmN0aW9uIGhlcmUuCisgICAgICAgICogcnVudGltZS9KU0NKU1Zh
bHVlLmg6IFJlbW92ZWQgbm8gbG9uZ2VyIHVzZWQgdG9XVEZTdHJpbmdJbmxpbmUgYW5kIGZpeGVk
CisgICAgICAgIGEgY29tbWVudCB3aXRoIGEgdHlwby4KKworICAgICAgICAqIHJ1bnRpbWUvSlNT
dHJpbmcuaDogQWRkZWQgdGhlIFN0cmluZ1ZpZXdXaXRoVW5kZXJseWluZ1N0cmluZyBzdHJ1Y3Qg
YW5kCisgICAgICAgIHRoZSB2aWV3V2l0aFVuZGVybHlpbmdTdHJpbmcgZnVuY3Rpb24uIFJlbW92
ZWQgdGhlIGlubGluZUpTVmFsdWVOb3RTdHJpbmd0b1N0cmluZworICAgICAgICBhbmQgdG9XVEZT
dHJpbmdJbmxpbmUgZnVuY3Rpb25zLgorCisgICAgICAgICogcnVudGltZS9KU1N0cmluZ0pvaW5l
ci5jcHA6CisgICAgICAgIChKU0M6OmFwcGVuZFN0cmluZ1RvRGF0YSk6IENoYW5nZWQgdGhpcyB0
byBiZSBhIHRlbXBsYXRlIGluc3RlYWQgb2Ygd3JpdGluZworICAgICAgICBpdCBvdXQsIHNpbmNl
IFN0cmluZ1ZpZXc6OmdldENoYXJhY3RlcnNXaXRoVXBjb252ZXJ0IGRvZXMgYWxtc290IGV4YWN0
bHkgd2hhdAorICAgICAgICB0aGlzIGZ1bmN0aW9uIHdhcyB0cnlpbmcgdG8gZG8uCisgICAgICAg
IChKU0M6OmpvaW5TdHJpbmdzKTogUmV3cm90ZSB0aGlzIHRvIHVzZSBTdHJpbmdWaWV3LgorICAg
ICAgICAoSlNDOjpKU1N0cmluZ0pvaW5lcjo6am9pbmVkTGVuZ3RoKTogQWRkZWQuIEZhY3RvcmVk
IG91dCBmcm9tIHRoZSBqb2luIGZ1bmN0aW9uLgorICAgICAgICAoSlNDOjpKU1N0cmluZ0pvaW5l
cjo6am9pbik6IFJld3JvdGUgdG8gbWFrZSBpdCBhIGJpdCBzaW1wbGVyLiBBZGRlZCBhbiBhc3Nl
cnRpb24KKyAgICAgICAgdGhhdCB3ZSBlbnRpcmVseSBmaWxsZWQgY2FwYWNpdHksIHNpbmNlIHdl
IGFyZSBub3cgcmVzZXJ2aW5nIGNhcGFjaXR5IGFuZCB1c2luZworICAgICAgICB1bmNoZWNrZWRB
cHBlbmQuIFVzZSBTdHJpbmcgaW5zdGVhZCBvZiBSZWZQdHI8U3RyaW5nSW1wbD4gYmVjYXVzZSB0
aGVyZSB3YXMgbm8KKyAgICAgICAgcGFydGljdWxhciB2YWx1ZSB0byB1c2luZyB0aGUgaW1wbCBk
aXJlY3RseS4KKworICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmdKb2luZXIuaDogQ2hhbmdlZCB0
aGUgaW50ZXJmYWNlIHRvIHRoZSBjbGFzcyB0byB1c2UgU3RyaW5nVmlldy4KKyAgICAgICAgQWxz
byBjaGFuZ2VkIHRoaXMgY2xhc3Mgc28gaXQgbm93IGhhcyB0aGUgcmVzcG9uc2liaWxpdHkgdG8g
Y29udmVydCBlYWNoIEpTVmFsdWUKKyAgICAgICAgaW50byBhIHN0cmluZy4gVGhpcyBsZXQgdXMg
c2hhcmUgbW9yZSBjb2RlIGJldHdlZW4gdG9TdHJpbmcgYW5kIGpvaW4sIGFuZCBhbHNvCisgICAg
ICAgIGxldHMgdXMgdXNlIHRoZSBuZXcgdmlld1dpdGhVbmRlcmx5aW5nU3RyaW5nIGZ1bmN0aW9u
LCB3aGljaCBjb3VsZCBiZSBjb25mdXNpbmcgYXQKKyAgICAgICAgYWxsIHRoZSBjYWxsIHNpdGVz
LCBidXQgaXMgZWFzaWVyIHRvIHVuZGVyc3RhbmQgaGVyZS4KKwogMjAxNS0wNi0yMCAgWXVzdWtl
IFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBbRVM2XSBEZXN0cnVj
dHVyaW5nIGFzc2lnbm1lbnQgbmVlZCB0byBhY2NlcHQgaXRlcmFibGVzCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGVlZTIwZTM5
N2U1OTBlNjc0ZTc4YzZkNjZjOTQ5MDA0NWRhYTQzZDYuLmQ1NWVhNDUwOGY3YmQzNTI4NTJhNjE3
ZTRkZWUxY2I1NzUyYTA3ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTUtMDYtMjEgIERhcmlu
IEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIE1ha2UgQXJyYXkuam9pbiB3b3Jr
IGRpcmVjdGx5IG9uIHN1YnN0cmluZ3Mgd2l0aG91dCByZWlmeWluZyB0aGVtCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDYxOTEKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9WZWN0b3IuaDogQWRk
ZWQgYW4gb3ZlcmxvYWQgb2YgdW5jaGVja2VkQXBwZW5kIGxpa2UgdGhlIG9uZSB3ZSBhZGRlZAor
ICAgICAgICBhIHdoaWxlIGJhY2ssIGEgbm9uLXRlbXBsYXRlIGZ1bmN0aW9uIHRoYXQgZm9yd2Fy
ZHMgdGhyb3VnaCB0byB0aGUgZnVuY3Rpb24KKyAgICAgICAgdGVtcGxhdGUuIFRoaXMgbGV0cyB1
cyBjYWxsIHVuY2hlY2tlZEFwcGVuZCBvbiBhbiBhcmd1bWVudCBsaXN0IGFuZCBoYXZlIGl0Cisg
ICAgICAgIHByb3Blcmx5IGNvbnZlcnQgaXQgdG8gdGhlIFZlY3RvcidzIGVsZW1lbnQgdHlwZS4K
KwogMjAxNS0wNi0yMCAgTWljaGFlbCBDYXRhbnphcm8gIDxtY2F0YW56YXJvQGlnYWxpYS5jb20+
CiAKICAgICAgICAgW0VGTF1bR1RLXSBEZWZpbmUgR0xJQl9WRVJTSU9OX01JTl9SRVFVSVJFRCBh
bmQgcmVxdWlyZSBnbGliIDIuMzYgZm9yIEdUSwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCmluZGV4IDkyODA0ZDYyMjViN2JjZDNmZTIwNDQy
MmY4N2QwNWY1NmY5Zjk3ODQuLjViYTcxNTYzYzY4Y2ZmNGIyNTgyZWNmNThiZjc0OTRkZDRkMjUw
NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90
eXBlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlw
ZS5jcHAKQEAgLTI5MSw4MCArMjkxLDc5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
YXJyYXlQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoY2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0
aGlzT2JqZWN0LCBleGVjLT5lbXB0eUxpc3QoKSkpOwogCiAgICAgQVNTRVJUKGlzSlNBcnJheSh0
aGlzVmFsdWUpKTsKLSAgICBKU0FycmF5KiB0aGlzT2JqID0gYXNBcnJheSh0aGlzVmFsdWUpOwor
ICAgIEpTQXJyYXkqIHRoaXNBcnJheSA9IGFzQXJyYXkodGhpc1ZhbHVlKTsKICAgICAKLSAgICB1
bnNpZ25lZCBsZW5ndGggPSBnZXRMZW5ndGgoZXhlYywgdGhpc09iaik7CisgICAgdW5zaWduZWQg
bGVuZ3RoID0gZ2V0TGVuZ3RoKGV4ZWMsIHRoaXNBcnJheSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogCi0gICAgU3RyaW5nUmVjdXJzaW9uQ2hlY2tlciBjaGVja2VyKGV4ZWMsIHRoaXNPYmopOwor
ICAgIFN0cmluZ1JlY3Vyc2lvbkNoZWNrZXIgY2hlY2tlcihleGVjLCB0aGlzQXJyYXkpOwogICAg
IGlmIChKU1ZhbHVlIGVhcmx5UmV0dXJuVmFsdWUgPSBjaGVja2VyLmVhcmx5UmV0dXJuVmFsdWUo
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShlYXJseVJldHVyblZhbHVlKTsKIAot
ICAgIFN0cmluZyBzZXBhcmF0b3IoIiwiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsK
LSAgICBKU1N0cmluZ0pvaW5lciBzdHJpbmdKb2luZXIoc2VwYXJhdG9yLCBsZW5ndGgpOwotICAg
IGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBsZW5ndGg7IGsrKykgeworICAgIEpTU3RyaW5nSm9p
bmVyIGpvaW5lcigqZXhlYywgJywnLCBsZW5ndGgpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBKU1Zh
bHVlIGVsZW1lbnQ7Ci0gICAgICAgIGlmICh0aGlzT2JqLT5jYW5HZXRJbmRleFF1aWNrbHkoaykp
Ci0gICAgICAgICAgICBlbGVtZW50ID0gdGhpc09iai0+Z2V0SW5kZXhRdWlja2x5KGspOworICAg
ICAgICBpZiAodGhpc0FycmF5LT5jYW5HZXRJbmRleFF1aWNrbHkoaSkpCisgICAgICAgICAgICBl
bGVtZW50ID0gdGhpc0FycmF5LT5nZXRJbmRleFF1aWNrbHkoaSk7CiAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgZWxlbWVudCA9IHRoaXNPYmotPmdldChleGVjLCBrKTsKKyAgICAgICAgICAg
IGVsZW1lbnQgPSB0aGlzQXJyYXktPmdldChleGVjLCBpKTsKICAgICAgICAgICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGVsZW1lbnQuaXNVbmRl
ZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHN0cmluZ0pvaW5lci5hcHBlbmQoU3RyaW5nKCkp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzdHJpbmdKb2luZXIuYXBwZW5kKGVsZW1lbnQu
dG9XVEZTdHJpbmcoZXhlYykpOwotCisgICAgICAgIGpvaW5lci5hcHBlbmQoKmV4ZWMsIGVsZW1l
bnQpOwogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHN0cmluZ0pvaW5lci5qb2luKGV4ZWMpKTsKKworICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoam9pbmVyLmpvaW4oKmV4ZWMpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykK
IHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVj
LCBTdHJpY3RNb2RlKTsKIAotICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gdGhpc1ZhbHVlLnRvT2Jq
ZWN0KGV4ZWMpOworICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gdGhpc1ZhbHVlLnRvT2JqZWN0
KGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAotICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdl
dExlbmd0aChleGVjLCB0aGlzT2JqKTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBnZXRMZW5ndGgo
ZXhlYywgdGhpc09iamVjdCk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCi0gICAgU3RyaW5nUmVj
dXJzaW9uQ2hlY2tlciBjaGVja2VyKGV4ZWMsIHRoaXNPYmopOworICAgIFN0cmluZ1JlY3Vyc2lv
bkNoZWNrZXIgY2hlY2tlcihleGVjLCB0aGlzT2JqZWN0KTsKICAgICBpZiAoSlNWYWx1ZSBlYXJs
eVJldHVyblZhbHVlID0gY2hlY2tlci5lYXJseVJldHVyblZhbHVlKCkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoZWFybHlSZXR1cm5WYWx1ZSk7CiAKLSAgICBTdHJpbmcgc2VwYXJh
dG9yKCIsIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgSlNTdHJpbmdKb2lu
ZXIgc3RyaW5nSm9pbmVyKHNlcGFyYXRvciwgbGVuZ3RoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGsg
PSAwOyBrIDwgbGVuZ3RoOyBrKyspIHsKLSAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gdGhpc09i
ai0+Z2V0KGV4ZWMsIGspOworICAgIEpTU3RyaW5nSm9pbmVyIHN0cmluZ0pvaW5lcigqZXhlYywg
JywnLCBsZW5ndGgpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSB0aGlz
T2JqZWN0LT5nZXQoZXhlYywgaSk7CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
ICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAg
ICAgIGlmICghZWxlbWVudC5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7Ci0gICAgICAgICAgICBKU09i
amVjdCogbyA9IGVsZW1lbnQudG9PYmplY3QoZXhlYyk7Ci0gICAgICAgICAgICBKU1ZhbHVlIGNv
bnZlcnNpb25GdW5jdGlvbiA9IG8tPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9M
b2NhbGVTdHJpbmcpOwotICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAg
ICAgICAgICBTdHJpbmcgc3RyOwotICAgICAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7Ci0gICAg
ICAgICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKGNvbnZlcnNpb25GdW5jdGlv
biwgY2FsbERhdGEpOwotICAgICAgICAgICAgaWYgKGNhbGxUeXBlICE9IENhbGxUeXBlTm9uZSkK
LSAgICAgICAgICAgICAgICBzdHIgPSBjYWxsKGV4ZWMsIGNvbnZlcnNpb25GdW5jdGlvbiwgY2Fs
bFR5cGUsIGNhbGxEYXRhLCBlbGVtZW50LCBleGVjLT5lbXB0eUxpc3QoKSkudG9XVEZTdHJpbmco
ZXhlYyk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc3RyID0gZWxlbWVudC50
b1dURlN0cmluZyhleGVjKTsKKyAgICAgICAgaWYgKGVsZW1lbnQuaXNVbmRlZmluZWRPck51bGwo
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBKU1ZhbHVlIGNvbnZlcnNpb25GdW5j
dGlvbiA9IGVsZW1lbnQuZ2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS50b0xvY2FsZVN0
cmluZyk7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIENhbGxEYXRhIGNh
bGxEYXRhOworICAgICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKGNvbnZlcnNp
b25GdW5jdGlvbiwgY2FsbERhdGEpOworICAgICAgICBpZiAoY2FsbFR5cGUgIT0gQ2FsbFR5cGVO
b25lKSB7CisgICAgICAgICAgICBlbGVtZW50ID0gY2FsbChleGVjLCBjb252ZXJzaW9uRnVuY3Rp
b24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgZWxlbWVudCwgZXhlYy0+ZW1wdHlMaXN0KCkpOwogICAg
ICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgICAgICAgICBzdHJpbmdKb2lu
ZXIuYXBwZW5kKHN0cik7CiAgICAgICAgIH0KKyAgICAgICAgc3RyaW5nSm9pbmVyLmFwcGVuZCgq
ZXhlYywgZWxlbWVudCk7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogCi0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzdHJpbmdKb2luZXIuam9pbihleGVjKSk7CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShzdHJpbmdKb2luZXIuam9pbigqZXhlYykpOwogfQogCiBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jSm9pbihFeGVjU3RhdGUq
IGV4ZWMpCkBAIC0zNzgsNDEgKzM3NywzOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGFycmF5UHJvdG9GdW5jSm9pbihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgaWYgKEpTVmFsdWUgZWFy
bHlSZXR1cm5WYWx1ZSA9IGNoZWNrZXIuZWFybHlSZXR1cm5WYWx1ZSgpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGVhcmx5UmV0dXJuVmFsdWUpOwogCi0gICAgU3RyaW5nIHNlcGFy
YXRvcjsKLSAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkpCi0gICAgICAg
IHNlcGFyYXRvciA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKGV4ZWMpOwotICAgIGlm
IChzZXBhcmF0b3IuaXNOdWxsKCkpCi0gICAgICAgIHNlcGFyYXRvciA9IFN0cmluZygiLCIsIFN0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgIEpTU3RyaW5nKiBzZXBhcmF0b3IgPSBu
dWxscHRyOworICAgIGlmICghZXhlYy0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSkgeworICAg
ICAgICBzZXBhcmF0b3IgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKTsKKyAgICAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICB9CiAKLSAgICBKU1N0cmluZ0pvaW5lciBzdHJp
bmdKb2luZXIoc2VwYXJhdG9yLCBsZW5ndGgpOworICAgIGNvbnN0IExDaGFyIGNvbW1hID0gJywn
OworICAgIEpTU3RyaW5nSm9pbmVyIHN0cmluZ0pvaW5lcigqZXhlYywgc2VwYXJhdG9yID8gc2Vw
YXJhdG9yLT52aWV3KGV4ZWMpIDogU3RyaW5nVmlld3sgJmNvbW1hLCAxIH0sIGxlbmd0aCk7Cisg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOworCisgICAgdW5zaWduZWQgaSA9IDA7CiAKLSAgICB1bnNpZ25l
ZCBrID0gMDsKICAgICBpZiAoaXNKU0FycmF5KHRoaXNPYmopKSB7CiAgICAgICAgIEpTQXJyYXkq
IGFycmF5ID0gYXNBcnJheSh0aGlzT2JqKTsKLQotICAgICAgICBmb3IgKDsgayA8IGxlbmd0aDsg
aysrKSB7Ci0gICAgICAgICAgICBpZiAoIWFycmF5LT5jYW5HZXRJbmRleFF1aWNrbHkoaykpCi0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IGFy
cmF5LT5nZXRJbmRleFF1aWNrbHkoayk7Ci0gICAgICAgICAgICBpZiAoIWVsZW1lbnQuaXNVbmRl
ZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgICAgICBzdHJpbmdKb2luZXIuYXBwZW5kKGVsZW1l
bnQudG9XVEZTdHJpbmdJbmxpbmUoZXhlYykpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIHN0cmluZ0pvaW5lci5hcHBlbmQoU3RyaW5nKCkpOworICAgICAgICBmb3IgKDsgaSA8
IGxlbmd0aCAmJiBhcnJheS0+Y2FuR2V0SW5kZXhRdWlja2x5KGkpOyArK2kpIHsKKyAgICAgICAg
ICAgIHN0cmluZ0pvaW5lci5hcHBlbmQoKmV4ZWMsIGFycmF5LT5nZXRJbmRleFF1aWNrbHkoaSkp
OworICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAgIH0KICAgICB9
CiAKLSAgICBmb3IgKDsgayA8IGxlbmd0aDsgaysrKSB7Ci0gICAgICAgIEpTVmFsdWUgZWxlbWVu
dCA9IHRoaXNPYmotPmdldChleGVjLCBrKTsKKyAgICBmb3IgKDsgaSA8IGxlbmd0aDsgKytpKSB7
CisgICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IHRoaXNPYmotPmdldChleGVjLCBpKTsKKyAgICAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgc3RyaW5nSm9pbmVyLmFwcGVuZCgqZXhl
YywgZWxlbWVudCk7CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgICAgIGlmICgh
ZWxlbWVudC5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgc3RyaW5nSm9pbmVyLmFw
cGVuZChlbGVtZW50LnRvV1RGU3RyaW5nSW5saW5lKGV4ZWMpKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgc3RyaW5nSm9pbmVyLmFwcGVuZChTdHJpbmcoKSk7CiAgICAgfQogCi0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShzdHJpbmdKb2luZXIuam9pbihleGVjKSk7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShzdHJpbmdKb2luZXIuam9pbigqZXhlYykpOwogfQogCiBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jQ29uY2F0KEV4ZWNTdGF0ZSogZXhl
YykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAKaW5kZXgg
YTcwODNhZWRmMjQ5ZmMwNWM4MWUwZmE0NDBmZDU1NDcxMjJlNWU1Yy4uOWM0YTQ5ZDI0Y2M1NjY5
YzIxZTUyYjdhNDZkYTE1MmQ3ZjE1OTMyOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNDSlNWYWx1ZS5jcHAKQEAgLTM4MCw3ICszODAsMjAgQEAgSlNTdHJpbmcqIEpTVmFs
dWU6OnRvU3RyaW5nU2xvd0Nhc2UoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogCiBTdHJpbmcgSlNW
YWx1ZTo6dG9XVEZTdHJpbmdTbG93Q2FzZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIGlubGluZUpTVmFsdWVOb3RTdHJpbmd0b1N0cmluZygqdGhpcywgZXhlYyk7CisgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBpZiAoaXNJbnQzMigpKQorICAgICAgICByZXR1cm4g
dm0ubnVtZXJpY1N0cmluZ3MuYWRkKGFzSW50MzIoKSk7CisgICAgaWYgKGlzRG91YmxlKCkpCisg
ICAgICAgIHJldHVybiB2bS5udW1lcmljU3RyaW5ncy5hZGQoYXNEb3VibGUoKSk7CisgICAgaWYg
KGlzVHJ1ZSgpKQorICAgICAgICByZXR1cm4gdm0ucHJvcGVydHlOYW1lcy0+dHJ1ZUtleXdvcmQu
c3RyaW5nKCk7CisgICAgaWYgKGlzRmFsc2UoKSkKKyAgICAgICAgcmV0dXJuIHZtLnByb3BlcnR5
TmFtZXMtPmZhbHNlS2V5d29yZC5zdHJpbmcoKTsKKyAgICBpZiAoaXNOdWxsKCkpCisgICAgICAg
IHJldHVybiB2bS5wcm9wZXJ0eU5hbWVzLT5udWxsS2V5d29yZC5zdHJpbmcoKTsKKyAgICBpZiAo
aXNVbmRlZmluZWQoKSkKKyAgICAgICAgcmV0dXJuIHZtLnByb3BlcnR5TmFtZXMtPnVuZGVmaW5l
ZEtleXdvcmQuc3RyaW5nKCk7CisgICAgcmV0dXJuIHRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVj
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0NKU1ZhbHVlLmgKaW5kZXggNzliMDliNDE4MzUwZThlMmUxNTNlNGMyNTg3ZTVmYzM4ZWNj
YTVkMi4uMDM5YzE0ZWI3YTEyYWFlNjU2NWRiYTdmYTRmYmRjYmZhZmYzMTk5MyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuaApAQCAtMjUyLDcgKzI1Miw2IEBA
IHB1YmxpYzoKICAgICBKU1N0cmluZyogdG9TdHJpbmcoRXhlY1N0YXRlKikgY29uc3Q7CiAgICAg
SWRlbnRpZmllciB0b1Byb3BlcnR5S2V5KEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgIFdURjo6U3Ry
aW5nIHRvV1RGU3RyaW5nKEV4ZWNTdGF0ZSopIGNvbnN0OwotICAgIFdURjo6U3RyaW5nIHRvV1RG
U3RyaW5nSW5saW5lKEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgIEpTT2JqZWN0KiB0b09iamVjdChF
eGVjU3RhdGUqKSBjb25zdDsKICAgICBKU09iamVjdCogdG9PYmplY3QoRXhlY1N0YXRlKiwgSlNH
bG9iYWxPYmplY3QqKSBjb25zdDsKIApAQCAtMjYyLDggKzI2MSw4IEBAIHB1YmxpYzoKICAgICBp
bnQzMl90IHRvSW50MzIoRXhlY1N0YXRlKikgY29uc3Q7CiAgICAgdWludDMyX3QgdG9VSW50MzIo
RXhlY1N0YXRlKikgY29uc3Q7CiAKLSAgICAvLyBGbG9hdGluZyBwb2ludCBjb252ZXJzaW9ucyAo
dGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCBmb3Igd2ViY29yZTsKLSAgICAvLyBzaWdubGUg
cHJlY2lzaW9uIGZsb2F0IGlzIG5vdCBhIHJlcHJlc2VudGF0aW9uIHVzZWQgaW4gSlMgb3IgSlND
KS4KKyAgICAvLyBGbG9hdGluZyBwb2ludCBjb252ZXJzaW9ucyAodGhpcyBpcyBhIGNvbnZlbmll
bmNlIGZ1bmN0aW9uIGZvciBXZWJDb3JlOworICAgIC8vIHNpbmdsZSBwcmVjaXNpb24gZmxvYXQg
aXMgbm90IGEgcmVwcmVzZW50YXRpb24gdXNlZCBpbiBKUyBvciBKU0MpLgogICAgIGZsb2F0IHRv
RmxvYXQoRXhlY1N0YXRlKiBleGVjKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4o
dG9OdW1iZXIoZXhlYykpOyB9CiAKICAgICAvLyBPYmplY3Qgb3BlcmF0aW9ucywgd2l0aCB0aGUg
dG9PYmplY3Qgb3BlcmF0aW9uIGluY2x1ZGVkLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU3RyaW5nLmgKaW5kZXggNjZhMzhiMmFjOGI1Njg4NzdlZDJhMzI0ZTEzOWJkM2FlZWZkMmE0
NC4uMDM0ZTdjYjUwY2RkMWQ3MzczNWY2YTdjOGUzOTllZjhjOWNlYjljYSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCkBAIC02Miw2ICs2MiwxMSBAQCBKU1N0cmlu
ZyoganNPd25lZFN0cmluZyhFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmKTsKIAogSlNSb3BlU3Ry
aW5nKiBqc1N0cmluZ0J1aWxkZXIoVk0qKTsKIAorc3RydWN0IFN0cmluZ1ZpZXdXaXRoVW5kZXJs
eWluZ1N0cmluZyB7CisgICAgU3RyaW5nVmlldyB2aWV3OworICAgIFN0cmluZyB1bmRlcmx5aW5n
U3RyaW5nOworfTsKKwogY2xhc3MgSlNTdHJpbmcgOiBwdWJsaWMgSlNDZWxsIHsKIHB1YmxpYzoK
ICAgICBmcmllbmQgY2xhc3MgSklUOwpAQCAtMTQ0LDYgKzE0OSw3IEBAIHB1YmxpYzoKICAgICBB
dG9taWNTdHJpbmcgdG9BdG9taWNTdHJpbmcoRXhlY1N0YXRlKikgY29uc3Q7CiAgICAgUmVmUHRy
PEF0b21pY1N0cmluZ0ltcGw+IHRvRXhpc3RpbmdBdG9taWNTdHJpbmcoRXhlY1N0YXRlKikgY29u
c3Q7CiAgICAgU3RyaW5nVmlldyB2aWV3KEV4ZWNTdGF0ZSopIGNvbnN0OworICAgIFN0cmluZ1Zp
ZXdXaXRoVW5kZXJseWluZ1N0cmluZyB2aWV3V2l0aFVuZGVybHlpbmdTdHJpbmcoRXhlY1N0YXRl
JikgY29uc3Q7CiAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZShFeGVjU3RhdGUqKSBjb25zdDsKICAg
ICBjb25zdCBTdHJpbmcmIHRyeUdldFZhbHVlKCkgY29uc3Q7CiAgICAgY29uc3QgU3RyaW5nSW1w
bCogdHJ5R2V0VmFsdWVJbXBsKCkgY29uc3Q7CkBAIC0zODQsNiArMzkwLDcgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIHJlc29sdmVSb3BlSW50ZXJuYWwxNk5vU3Vic3RyaW5nKFVDaGFyKikgY29uc3Q7
CiAgICAgdm9pZCBjbGVhckZpYmVycygpIGNvbnN0OwogICAgIFN0cmluZ1ZpZXcgdmlldyhFeGVj
U3RhdGUqKSBjb25zdDsKKyAgICBTdHJpbmdWaWV3V2l0aFVuZGVybHlpbmdTdHJpbmcgdmlld1dp
dGhVbmRlcmx5aW5nU3RyaW5nKEV4ZWNTdGF0ZSYpIGNvbnN0OwogCiAgICAgV3JpdGVCYXJyaWVy
QmFzZTxKU1N0cmluZz4mIGZpYmVyKHVuc2lnbmVkIGkpIGNvbnN0CiAgICAgewpAQCAtNjczLDMy
ICs2ODAsNiBAQCBpbmxpbmUgU3RyaW5nIEpTVmFsdWU6OnRvV1RGU3RyaW5nKEV4ZWNTdGF0ZSog
ZXhlYykgY29uc3QKICAgICByZXR1cm4gdG9XVEZTdHJpbmdTbG93Q2FzZShleGVjKTsKIH0KIAot
QUxXQVlTX0lOTElORSBTdHJpbmcgaW5saW5lSlNWYWx1ZU5vdFN0cmluZ3RvU3RyaW5nKGNvbnN0
IEpTVmFsdWUmIHZhbHVlLCBFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKLSAgICBpZiAodmFsdWUuaXNJbnQzMigpKQotICAgICAgICByZXR1cm4gdm0ubnVtZXJp
Y1N0cmluZ3MuYWRkKHZhbHVlLmFzSW50MzIoKSk7Ci0gICAgaWYgKHZhbHVlLmlzRG91YmxlKCkp
Ci0gICAgICAgIHJldHVybiB2bS5udW1lcmljU3RyaW5ncy5hZGQodmFsdWUuYXNEb3VibGUoKSk7
Ci0gICAgaWYgKHZhbHVlLmlzVHJ1ZSgpKQotICAgICAgICByZXR1cm4gdm0ucHJvcGVydHlOYW1l
cy0+dHJ1ZUtleXdvcmQuc3RyaW5nKCk7Ci0gICAgaWYgKHZhbHVlLmlzRmFsc2UoKSkKLSAgICAg
ICAgcmV0dXJuIHZtLnByb3BlcnR5TmFtZXMtPmZhbHNlS2V5d29yZC5zdHJpbmcoKTsKLSAgICBp
ZiAodmFsdWUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiB2bS5wcm9wZXJ0eU5hbWVzLT5udWxs
S2V5d29yZC5zdHJpbmcoKTsKLSAgICBpZiAodmFsdWUuaXNVbmRlZmluZWQoKSkKLSAgICAgICAg
cmV0dXJuIHZtLnByb3BlcnR5TmFtZXMtPnVuZGVmaW5lZEtleXdvcmQuc3RyaW5nKCk7Ci0gICAg
cmV0dXJuIHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLX0KLQotQUxXQVlTX0lO
TElORSBTdHJpbmcgSlNWYWx1ZTo6dG9XVEZTdHJpbmdJbmxpbmUoRXhlY1N0YXRlKiBleGVjKSBj
b25zdAotewotICAgIGlmIChpc1N0cmluZygpKQotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
SlNTdHJpbmcqPihhc0NlbGwoKSktPnZhbHVlKGV4ZWMpOwotCi0gICAgcmV0dXJuIGlubGluZUpT
VmFsdWVOb3RTdHJpbmd0b1N0cmluZygqdGhpcywgZXhlYyk7Ci19Ci0KIEFMV0FZU19JTkxJTkUg
U3RyaW5nVmlldyBKU1JvcGVTdHJpbmc6OnZpZXcoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewog
ICAgIGlmIChpc1N1YnN0cmluZygpKSB7CkBAIC03MTAsNiArNjkxLDE4IEBAIEFMV0FZU19JTkxJ
TkUgU3RyaW5nVmlldyBKU1JvcGVTdHJpbmc6OnZpZXcoRXhlY1N0YXRlKiBleGVjKSBjb25zdAog
ICAgIHJldHVybiBTdHJpbmdWaWV3KG1fdmFsdWUpOwogfQogCitBTFdBWVNfSU5MSU5FIFN0cmlu
Z1ZpZXdXaXRoVW5kZXJseWluZ1N0cmluZyBKU1JvcGVTdHJpbmc6OnZpZXdXaXRoVW5kZXJseWlu
Z1N0cmluZyhFeGVjU3RhdGUmIHN0YXRlKSBjb25zdAoreworICAgIGlmIChpc1N1YnN0cmluZygp
KSB7CisgICAgICAgIGF1dG8mIGJhc2UgPSBzdWJzdHJpbmdCYXNlKCktPm1fdmFsdWU7CisgICAg
ICAgIGlmIChpczhCaXQoKSkKKyAgICAgICAgICAgIHJldHVybiB7IHsgYmFzZS5jaGFyYWN0ZXJz
OCgpICsgc3Vic3RyaW5nT2Zmc2V0KCksIG1fbGVuZ3RoIH0sIGJhc2UgfTsKKyAgICAgICAgcmV0
dXJuIHsgeyBiYXNlLmNoYXJhY3RlcnMxNigpICsgc3Vic3RyaW5nT2Zmc2V0KCksIG1fbGVuZ3Ro
IH0sIGJhc2UgfTsKKyAgICB9CisgICAgcmVzb2x2ZVJvcGUoJnN0YXRlKTsKKyAgICByZXR1cm4g
eyBtX3ZhbHVlLCBtX3ZhbHVlIH07Cit9CisKIEFMV0FZU19JTkxJTkUgU3RyaW5nVmlldyBKU1N0
cmluZzo6dmlldyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgaWYgKGlzUm9wZSgpKQpA
QCAtNzE3LDYgKzcxMCwxMyBAQCBBTFdBWVNfSU5MSU5FIFN0cmluZ1ZpZXcgSlNTdHJpbmc6OnZp
ZXcoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogICAgIHJldHVybiBTdHJpbmdWaWV3KG1fdmFsdWUp
OwogfQogCitBTFdBWVNfSU5MSU5FIFN0cmluZ1ZpZXdXaXRoVW5kZXJseWluZ1N0cmluZyBKU1N0
cmluZzo6dmlld1dpdGhVbmRlcmx5aW5nU3RyaW5nKEV4ZWNTdGF0ZSYgc3RhdGUpIGNvbnN0Cit7
CisgICAgaWYgKGlzUm9wZSgpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgSlNS
b3BlU3RyaW5nJj4oKnRoaXMpLnZpZXdXaXRoVW5kZXJseWluZ1N0cmluZyhzdGF0ZSk7CisgICAg
cmV0dXJuIHsgbV92YWx1ZSwgbV92YWx1ZSB9OworfQorCiBpbmxpbmUgYm9vbCBKU1N0cmluZzo6
aXNTdWJzdHJpbmcoKSBjb25zdAogewogICAgIHJldHVybiBpc1JvcGUoKSAmJiBzdGF0aWNfY2Fz
dDxjb25zdCBKU1JvcGVTdHJpbmcqPih0aGlzKS0+aXNTdWJzdHJpbmcoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSm9pbmVyLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSm9pbmVyLmNwcAppbmRleCBmOTg3MGMz
NDIzYjRhZDExMTk4MjViZjUxZGYxMzdhODIxYTAzY2MyLi5lMTE4Yzk2ZTVlMjIyZjgwYzkwMTUy
YTUwMDQ5N2M3Mjg3ZWZkMjQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1N0cmluZ0pvaW5lci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTdHJpbmdKb2luZXIuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDk3ICszNCw3MyBAQAogCiBuYW1lc3BhY2Ug
SlNDIHsKIAotLy8gVGhlIGRlc3RpbmF0aW9uIGlzIDE2Yml0cywgYXQgbGVhc3Qgb25lIHN0cmlu
ZyBpcyAxNiBiaXRzLgotc3RhdGljIGlubGluZSB2b2lkIGFwcGVuZFN0cmluZ1RvRGF0YShVQ2hh
ciomIGRhdGEsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4KK3N0YXRpYyBpbmxpbmUgdm9pZCBhcHBlbmRTdHJpbmdUb0RhdGEoQ2hhcmFjdGVy
VHlwZSomIGRhdGEsIFN0cmluZ1ZpZXcgc3RyaW5nKQogewotICAgIGlmIChzdHJpbmcuaXNOdWxs
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZy5sZW5n
dGgoKTsKLSAgICBjb25zdCBTdHJpbmdJbXBsKiBzdHJpbmdJbXBsID0gc3RyaW5nLmltcGwoKTsK
LQotICAgIGlmIChzdHJpbmdJbXBsLT5pczhCaXQoKSkgewotICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICpkYXRhID0gc3RyaW5nSW1w
bC0+Y2hhcmFjdGVyczgoKVtpXTsKLSAgICAgICAgICAgICsrZGF0YTsKLSAgICAgICAgfQotICAg
IH0gZWxzZSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkg
ewotICAgICAgICAgICAgKmRhdGEgPSBzdHJpbmdJbXBsLT5jaGFyYWN0ZXJzMTYoKVtpXTsKLSAg
ICAgICAgICAgICsrZGF0YTsKLSAgICAgICAgfQotICAgIH0KKyAgICBzdHJpbmcuZ2V0Q2hhcmFj
dGVyc1dpdGhVcGNvbnZlcnQoZGF0YSk7CisgICAgZGF0YSArPSBzdHJpbmcubGVuZ3RoKCk7CiB9
CiAKLS8vIElmIHRoZSBkZXN0aW5hdGlvbiBpcyA4Yml0cywgd2Uga25vdyBldmVyeSBzdHJpbmcg
aGFzIHRvIGJlIDhiaXQuCi1zdGF0aWMgaW5saW5lIHZvaWQgYXBwZW5kU3RyaW5nVG9EYXRhKExD
aGFyKiYgZGF0YSwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPgorc3RhdGljIGlubGluZSBTdHJpbmcgam9pblN0cmluZ3MoY29uc3QgVmVjdG9y
PFN0cmluZ1ZpZXdXaXRoVW5kZXJseWluZ1N0cmluZz4mIHN0cmluZ3MsIFN0cmluZ1ZpZXcgc2Vw
YXJhdG9yLCB1bnNpZ25lZCBqb2luZWRMZW5ndGgpCiB7Ci0gICAgaWYgKHN0cmluZy5pc051bGwo
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVChzdHJpbmcuaXM4Qml0KCkpOworICAgIEFT
U0VSVChqb2luZWRMZW5ndGgpOwogCi0gICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5nLmxlbmd0
aCgpOwotICAgIGNvbnN0IFN0cmluZ0ltcGwqIHN0cmluZ0ltcGwgPSBzdHJpbmcuaW1wbCgpOwor
ICAgIENoYXJhY3RlclR5cGUqIGRhdGE7CisgICAgU3RyaW5nIHJlc3VsdCA9IFN0cmluZ0ltcGw6
OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoam9pbmVkTGVuZ3RoLCBkYXRhKTsKKyAgICBpZiAocmVz
dWx0LmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgICpkYXRhID0gc3RyaW5nSW1wbC0+
Y2hhcmFjdGVyczgoKVtpXTsKLSAgICAgICAgKytkYXRhOworICAgIGFwcGVuZFN0cmluZ1RvRGF0
YShkYXRhLCBzdHJpbmdzWzBdLnZpZXcpOworICAgIGZvciAodW5zaWduZWQgaSA9IDEsIHNpemUg
PSBzdHJpbmdzLnNpemUoKTsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBhcHBlbmRTdHJpbmdU
b0RhdGEoZGF0YSwgc2VwYXJhdG9yKTsKKyAgICAgICAgYXBwZW5kU3RyaW5nVG9EYXRhKGRhdGEs
IHN0cmluZ3NbaV0udmlldyk7CiAgICAgfQorICAgIEFTU0VSVChkYXRhID09IHJlc3VsdC5jaGFy
YWN0ZXJzPENoYXJhY3RlclR5cGU+KCkgKyBqb2luZWRMZW5ndGgpOworCisgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBpbmxp
bmUgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBqb2luU3RyaW5ncyhjb25zdCBWZWN0b3I8U3RyaW5n
PiYgc3RyaW5ncywgY29uc3QgU3RyaW5nJiBzZXBhcmF0b3IsIHVuc2lnbmVkIG91dHB1dExlbmd0
aCkKK2lubGluZSB1bnNpZ25lZCBKU1N0cmluZ0pvaW5lcjo6am9pbmVkTGVuZ3RoKEV4ZWNTdGF0
ZSYgc3RhdGUpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKG91dHB1dExlbmd0aCk7CisgICAgdW5zaWdu
ZWQgbnVtYmVyT2ZTdHJpbmdzID0gbV9zdHJpbmdzLnNpemUoKTsKKyAgICBpZiAoIW51bWJlck9m
U3RyaW5ncykKKyAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBDaGFyYWN0ZXJUeXBlKiBkYXRhOwot
ICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBvdXRwdXRTdHJpbmdJbXBsID0gU3RyaW5nSW1wbDo6dHJ5
Q3JlYXRlVW5pbml0aWFsaXplZChvdXRwdXRMZW5ndGgsIGRhdGEpOwotICAgIGlmICghb3V0cHV0
U3RyaW5nSW1wbCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBjb25zdCBTdHJpbmcg
Zmlyc3RTdHJpbmcgPSBzdHJpbmdzLmZpcnN0KCk7Ci0gICAgYXBwZW5kU3RyaW5nVG9EYXRhKGRh
dGEsIGZpcnN0U3RyaW5nKTsKKyAgICBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4g
c2VwYXJhdG9yTGVuZ3RoID0gbV9zZXBhcmF0b3IubGVuZ3RoKCk7CisgICAgQ2hlY2tlZDx1bnNp
Z25lZCwgUmVjb3JkT3ZlcmZsb3c+IHRvdGFsU2VwYXJhdG9yc0xlbmd0aCA9IHNlcGFyYXRvckxl
bmd0aCAqIChudW1iZXJPZlN0cmluZ3MgLSAxKTsKKyAgICBDaGVja2VkPHVuc2lnbmVkLCBSZWNv
cmRPdmVyZmxvdz4gdG90YWxMZW5ndGggPSB0b3RhbFNlcGFyYXRvcnNMZW5ndGggKyBtX2FjY3Vt
dWxhdGVkU3RyaW5nc0xlbmd0aDsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgc3RyaW5n
cy5zaXplKCk7ICsraSkgewotICAgICAgICBhcHBlbmRTdHJpbmdUb0RhdGEoZGF0YSwgc2VwYXJh
dG9yKTsKLSAgICAgICAgYXBwZW5kU3RyaW5nVG9EYXRhKGRhdGEsIHN0cmluZ3NbaV0pOworICAg
IHVuc2lnbmVkIHJlc3VsdDsKKyAgICBpZiAodG90YWxMZW5ndGguc2FmZUdldChyZXN1bHQpID09
IENoZWNrZWRTdGF0ZTo6RGlkT3ZlcmZsb3cpIHsKKyAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVy
cm9yKCZzdGF0ZSk7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KLQotICAgIEFTU0VSVChkYXRh
ID09IChvdXRwdXRTdHJpbmdJbXBsLT5jaGFyYWN0ZXJzPENoYXJhY3RlclR5cGU+KCkgKyBvdXRw
dXRTdHJpbmdJbXBsLT5sZW5ndGgoKSkpOwotICAgIHJldHVybiBvdXRwdXRTdHJpbmdJbXBsLnJl
bGVhc2UoKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlIEpTU3RyaW5nSm9pbmVy
Ojpqb2luKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNTdHJpbmdKb2luZXI6OmpvaW4oRXhl
Y1N0YXRlJiBzdGF0ZSkKIHsKLSAgICBpZiAoIW1faXNWYWxpZCkKLSAgICAgICAgcmV0dXJuIHRo
cm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAgICBBU1NFUlQobV9zdHJpbmdzLnNpemUoKSA9
PSBtX3N0cmluZ3MuY2FwYWNpdHkoKSk7CiAKLSAgICBpZiAoIW1fc3RyaW5ncy5zaXplKCkpCi0g
ICAgICAgIHJldHVybiBqc0VtcHR5U3RyaW5nKGV4ZWMpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9
IGpvaW5lZExlbmd0aChzdGF0ZSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIENoZWNrZWQ8dW5zaWduZWQsIFJlY29y
ZE92ZXJmbG93PiBzZXBhcmF0b3JMZW5ndGggPSBtX3NlcGFyYXRvci5sZW5ndGgoKTsKLSAgICAv
LyBGSVhNRTogYWRkIHNwZWNpYWwgY2FzZXMgb2Ygam9pblN0cmluZ3MoKSBmb3IgKHNlcGFyYXRv
ckxlbmd0aCA9PSAwKSBhbmQgKHNlcGFyYXRvckxlbmd0aCA9PSAxKS4KLSAgICBBU1NFUlQobV9z
dHJpbmdzLnNpemUoKSA+IDApOwotICAgIENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93
PiB0b3RhbFNlcGFyYWN0b3JzTGVuZ3RoID0gc2VwYXJhdG9yTGVuZ3RoICogKG1fc3RyaW5ncy5z
aXplKCkgLSAxKTsKLSAgICBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gb3V0cHV0
U3RyaW5nU2l6ZSA9IHRvdGFsU2VwYXJhY3RvcnNMZW5ndGggKyBtX2FjY3VtdWxhdGVkU3RyaW5n
c0xlbmd0aDsKLQotICAgIHVuc2lnbmVkIGZpbmFsU2l6ZTsKLSAgICBpZiAob3V0cHV0U3RyaW5n
U2l6ZS5zYWZlR2V0KGZpbmFsU2l6ZSkgPT0gQ2hlY2tlZFN0YXRlOjpEaWRPdmVyZmxvdykKLSAg
ICAgICAgcmV0dXJuIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKLSAgICAgICAgCi0gICAg
aWYgKCFvdXRwdXRTdHJpbmdTaXplKQotICAgICAgICByZXR1cm4ganNFbXB0eVN0cmluZyhleGVj
KTsKLQotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBvdXRwdXRTdHJpbmdJbXBsOwotICAgIGlmICht
X2lzOEJpdHMpCi0gICAgICAgIG91dHB1dFN0cmluZ0ltcGwgPSBqb2luU3RyaW5nczxMQ2hhcj4o
bV9zdHJpbmdzLCBtX3NlcGFyYXRvciwgZmluYWxTaXplKTsKKyAgICBpZiAoIWxlbmd0aCkKKyAg
ICAgICAgcmV0dXJuIGpzRW1wdHlTdHJpbmcoJnN0YXRlKTsKKworICAgIC8vIEZJWE1FOiBDb25z
aWRlciBvcHRpbWl6ZWQgc3BlY2lhbCBjYXNlcyBmb3Igc2VwYXJhdG9yIGxlbmd0aCAwIGFuZCAx
LgorICAgIFN0cmluZyByZXN1bHQ7CisgICAgaWYgKG1faXNBbGw4Qml0KQorICAgICAgICByZXN1
bHQgPSBqb2luU3RyaW5nczxMQ2hhcj4obV9zdHJpbmdzLCBtX3NlcGFyYXRvciwgbGVuZ3RoKTsK
ICAgICBlbHNlCi0gICAgICAgIG91dHB1dFN0cmluZ0ltcGwgPSBqb2luU3RyaW5nczxVQ2hhcj4o
bV9zdHJpbmdzLCBtX3NlcGFyYXRvciwgZmluYWxTaXplKTsKKyAgICAgICAgcmVzdWx0ID0gam9p
blN0cmluZ3M8VUNoYXI+KG1fc3RyaW5ncywgbV9zZXBhcmF0b3IsIGxlbmd0aCk7CiAKLSAgICBp
ZiAoIW91dHB1dFN0cmluZ0ltcGwpCi0gICAgICAgIHJldHVybiB0aHJvd091dE9mTWVtb3J5RXJy
b3IoZXhlYyk7CisgICAgaWYgKHJlc3VsdC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIHRocm93
T3V0T2ZNZW1vcnlFcnJvcigmc3RhdGUpOwogCi0gICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGUo
ZXhlYy0+dm0oKSwgb3V0cHV0U3RyaW5nSW1wbC5yZWxlYXNlKCkpOworICAgIHJldHVybiBqc1N0
cmluZygmc3RhdGUsIFdURjo6bW92ZShyZXN1bHQpKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdKb2luZXIuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSm9pbmVyLmgKaW5kZXggNzM5NTBjNmQ3NDVhMGFj
OGNhZjNlY2EzMjI1Mjc3Zjc2NzNlZjI1NC4uMGJmODJmMzhjMzIxNzhmNzQyYjI0YWNjNTM2OTQ0
OTZiNDQzNDgzMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
dHJpbmdKb2luZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmlu
Z0pvaW5lci5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIt
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTI2LDUwICsyNiwxMTIgQEAKICNpZm5kZWYgSlNTdHJpbmdKb2luZXJf
aAogI2RlZmluZSBKU1N0cmluZ0pvaW5lcl9oCiAKKyNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJz
LmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNz
IEV4ZWNTdGF0ZTsKLQotCiBjbGFzcyBKU1N0cmluZ0pvaW5lciB7CiBwdWJsaWM6Ci0gICAgSlNT
dHJpbmdKb2luZXIoY29uc3QgU3RyaW5nJiBzZXBhcmF0b3IsIHNpemVfdCBzdHJpbmdDb3VudCk7
CisgICAgSlNTdHJpbmdKb2luZXIoRXhlY1N0YXRlJiwgTENoYXIgc2VwYXJhdG9yLCB1bnNpZ25l
ZCBzdHJpbmdDb3VudCk7CisgICAgSlNTdHJpbmdKb2luZXIoRXhlY1N0YXRlJiwgU3RyaW5nVmll
dyBzZXBhcmF0b3IsIHVuc2lnbmVkIHN0cmluZ0NvdW50KTsKIAotICAgIHZvaWQgYXBwZW5kKGNv
bnN0IFN0cmluZyYpOwotICAgIEpTVmFsdWUgam9pbihFeGVjU3RhdGUqKTsKKyAgICB2b2lkIGFw
cGVuZChFeGVjU3RhdGUmLCBKU1ZhbHVlKTsKKworICAgIEpTVmFsdWUgam9pbihFeGVjU3RhdGUm
KTsKIAogcHJpdmF0ZToKLSAgICBTdHJpbmcgbV9zZXBhcmF0b3I7Ci0gICAgVmVjdG9yPFN0cmlu
Zz4gbV9zdHJpbmdzOworICAgIHZvaWQgYXBwZW5kKFN0cmluZ1ZpZXdXaXRoVW5kZXJseWluZ1N0
cmluZyYmKTsKKyAgICB2b2lkIGFwcGVuZDhCaXQoY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBh
cHBlbmRMaXRlcmFsKGNvbnN0IElkZW50aWZpZXImKTsKKyAgICB2b2lkIGFwcGVuZEVtcHR5U3Ry
aW5nKCk7CisgICAgdW5zaWduZWQgam9pbmVkTGVuZ3RoKEV4ZWNTdGF0ZSYpIGNvbnN0OwogCisg
ICAgTENoYXIgbV9zaW5nbGVDaGFyYWN0ZXJTZXBhcmF0b3I7CisgICAgU3RyaW5nVmlldyBtX3Nl
cGFyYXRvcjsKKyAgICBWZWN0b3I8U3RyaW5nVmlld1dpdGhVbmRlcmx5aW5nU3RyaW5nPiBtX3N0
cmluZ3M7CiAgICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IG1fYWNjdW11bGF0
ZWRTdHJpbmdzTGVuZ3RoOwotICAgIGJvb2wgbV9pc1ZhbGlkOwotICAgIGJvb2wgbV9pczhCaXRz
OworICAgIGJvb2wgbV9pc0FsbDhCaXQgeyB0cnVlIH07CiB9OwogCi1pbmxpbmUgSlNTdHJpbmdK
b2luZXI6OkpTU3RyaW5nSm9pbmVyKGNvbnN0IFN0cmluZyYgc2VwYXJhdG9yLCBzaXplX3Qgc3Ry
aW5nQ291bnQpCitpbmxpbmUgSlNTdHJpbmdKb2luZXI6OkpTU3RyaW5nSm9pbmVyKEV4ZWNTdGF0
ZSYgc3RhdGUsIFN0cmluZ1ZpZXcgc2VwYXJhdG9yLCB1bnNpZ25lZCBzdHJpbmdDb3VudCkKICAg
ICA6IG1fc2VwYXJhdG9yKHNlcGFyYXRvcikKLSAgICAsIG1faXNWYWxpZCh0cnVlKQotICAgICwg
bV9pczhCaXRzKG1fc2VwYXJhdG9yLmlzOEJpdCgpKQorICAgICwgbV9pc0FsbDhCaXQobV9zZXBh
cmF0b3IuaXM4Qml0KCkpCit7CisgICAgaWYgKCFtX3N0cmluZ3MudHJ5UmVzZXJ2ZUNhcGFjaXR5
KHN0cmluZ0NvdW50KSkKKyAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKCZzdGF0ZSk7Cit9
CisKK2lubGluZSBKU1N0cmluZ0pvaW5lcjo6SlNTdHJpbmdKb2luZXIoRXhlY1N0YXRlJiBzdGF0
ZSwgTENoYXIgc2VwYXJhdG9yLCB1bnNpZ25lZCBzdHJpbmdDb3VudCkKKyAgICA6IG1fc2luZ2xl
Q2hhcmFjdGVyU2VwYXJhdG9yKHNlcGFyYXRvcikKKyAgICAsIG1fc2VwYXJhdG9yIHsgJm1fc2lu
Z2xlQ2hhcmFjdGVyU2VwYXJhdG9yLCAxIH0KK3sKKyAgICBpZiAoIW1fc3RyaW5ncy50cnlSZXNl
cnZlQ2FwYWNpdHkoc3RyaW5nQ291bnQpKQorICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3Io
JnN0YXRlKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpTU3RyaW5nSm9pbmVyOjphcHBlbmQo
U3RyaW5nVmlld1dpdGhVbmRlcmx5aW5nU3RyaW5nJiYgc3RyaW5nKQogewotICAgIEFTU0VSVCgh
bV9zZXBhcmF0b3IuaXNOdWxsKCkpOwotICAgIG1faXNWYWxpZCA9IG1fc3RyaW5ncy50cnlSZXNl
cnZlQ2FwYWNpdHkoc3RyaW5nQ291bnQpOworICAgIG1fYWNjdW11bGF0ZWRTdHJpbmdzTGVuZ3Ro
ICs9IHN0cmluZy52aWV3Lmxlbmd0aCgpOworICAgIG1faXNBbGw4Qml0ID0gbV9pc0FsbDhCaXQg
JiYgc3RyaW5nLnZpZXcuaXM4Qml0KCk7CisgICAgbV9zdHJpbmdzLnVuY2hlY2tlZEFwcGVuZChX
VEY6Om1vdmUoc3RyaW5nKSk7CiB9CiAKLWlubGluZSB2b2lkIEpTU3RyaW5nSm9pbmVyOjphcHBl
bmQoY29uc3QgU3RyaW5nJiBzdHIpCitBTFdBWVNfSU5MSU5FIHZvaWQgSlNTdHJpbmdKb2luZXI6
OmFwcGVuZDhCaXQoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7Ci0gICAgaWYgKCFtX2lzVmFsaWQp
CisgICAgQVNTRVJUKHN0cmluZy5pczhCaXQoKSk7CisgICAgbV9hY2N1bXVsYXRlZFN0cmluZ3NM
ZW5ndGggKz0gc3RyaW5nLmxlbmd0aCgpOworICAgIG1fc3RyaW5ncy51bmNoZWNrZWRBcHBlbmQo
eyBzdHJpbmcsIHN0cmluZyB9KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpTU3RyaW5nSm9p
bmVyOjphcHBlbmRMaXRlcmFsKGNvbnN0IElkZW50aWZpZXImIGxpdGVyYWwpCit7CisgICAgbV9h
Y2N1bXVsYXRlZFN0cmluZ3NMZW5ndGggKz0gbGl0ZXJhbC5sZW5ndGgoKTsKKyAgICBBU1NFUlQo
bGl0ZXJhbC5zdHJpbmcoKS5pczhCaXQoKSk7CisgICAgbV9zdHJpbmdzLnVuY2hlY2tlZEFwcGVu
ZCh7IGxpdGVyYWwuc3RyaW5nKCksIHsgfSB9KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpT
U3RyaW5nSm9pbmVyOjphcHBlbmRFbXB0eVN0cmluZygpCit7CisgICAgbV9zdHJpbmdzLnVuY2hl
Y2tlZEFwcGVuZCh7IH0pOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSlNTdHJpbmdKb2luZXI6
OmFwcGVuZChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIC8vIFRoZSBm
b2xsb3dpbmcgY29kZSBkaWZmZXJzIGZyb20gdXNpbmcgdGhlIHJlc3VsdCBvZiBKU1ZhbHVlOjp0
b1N0cmluZyBpbiB0aGUgZm9sbG93aW5nIHdheXM6CisgICAgLy8gMSkgSXQncyBpbmxpbmVkIG1v
cmUgdGhhbiBKU1ZhbHVlOjp0b1N0cmluZyBpcy4KKyAgICAvLyAyKSBJdCBpbmNsdWRlcyBjb252
ZXJzaW9uIHRvIFdURjo6U3RyaW5nIGluIGEgd2F5IHRoYXQgYXZvaWRzIGFsbG9jYXRpbmcgY29w
aWVzIG9mIHN1YnN0cmluZ3MuCisgICAgLy8gMykgSXQgZG9lc24ndCBjcmVhdGUgYSBKU1N0cmlu
ZyBmb3IgbnVtYmVycywgdHJ1ZSwgb3IgZmFsc2UuCisgICAgLy8gNCkgSXQgdHVybnMgdW5kZWZp
bmVkIGFuZCBudWxsIGludG8gdGhlIGVtcHR5IHN0cmluZyBpbnN0ZWFkIG9mICJ1bmRlZmluZWQi
IGFuZCAibnVsbCIuCisgICAgLy8gNSkgSXQgdXNlcyBvcHRpbWl6ZWQgY29kZSBwYXRocyBmb3Ig
YWxsIHRoZSBjYXNlcyBrbm93biB0byBiZSA4LWJpdCBhbmQgZm9yIHRoZSBlbXB0eSBzdHJpbmcu
CisKKyAgICBpZiAodmFsdWUuaXNDZWxsKCkpIHsKKyAgICAgICAgaWYgKHZhbHVlLmFzQ2VsbCgp
LT5pc1N0cmluZygpKSB7CisgICAgICAgICAgICBhcHBlbmQoYXNTdHJpbmcodmFsdWUpLT52aWV3
V2l0aFVuZGVybHlpbmdTdHJpbmcoc3RhdGUpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICBhcHBlbmQodmFsdWUudG9TdHJpbmcoJnN0YXRlKS0+dmlld1dpdGhVbmRl
cmx5aW5nU3RyaW5nKHN0YXRlKSk7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBtX3N0
cmluZ3MuYXBwZW5kKHN0cik7Ci0gICAgaWYgKCFzdHIuaXNOdWxsKCkpIHsKLSAgICAgICAgbV9h
Y2N1bXVsYXRlZFN0cmluZ3NMZW5ndGggKz0gc3RyLmxlbmd0aCgpOwotICAgICAgICBtX2lzOEJp
dHMgPSBtX2lzOEJpdHMgJiYgc3RyLmlzOEJpdCgpOworICAgIGlmICh2YWx1ZS5pc0ludDMyKCkp
IHsKKyAgICAgICAgYXBwZW5kOEJpdChzdGF0ZS52bSgpLm51bWVyaWNTdHJpbmdzLmFkZCh2YWx1
ZS5hc0ludDMyKCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAodmFsdWUuaXNE
b3VibGUoKSkgeworICAgICAgICBhcHBlbmQ4Qml0KHN0YXRlLnZtKCkubnVtZXJpY1N0cmluZ3Mu
YWRkKHZhbHVlLmFzRG91YmxlKCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAo
dmFsdWUuaXNUcnVlKCkpIHsKKyAgICAgICAgYXBwZW5kOEJpdChzdGF0ZS52bSgpLnByb3BlcnR5
TmFtZXMtPnRydWVLZXl3b3JkLnN0cmluZygpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBpZiAodmFsdWUuaXNGYWxzZSgpKSB7CisgICAgICAgIGFwcGVuZDhCaXQoc3RhdGUudm0oKS5w
cm9wZXJ0eU5hbWVzLT5mYWxzZUtleXdvcmQuc3RyaW5nKCkpOworICAgICAgICByZXR1cm47CiAg
ICAgfQorICAgIEFTU0VSVCh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKTsKKyAgICBhcHBlbmRF
bXB0eVN0cmluZygpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9WZWN0b3Iu
aCBiL1NvdXJjZS9XVEYvd3RmL1ZlY3Rvci5oCmluZGV4IGQ2MWM1ZmZjMzZhMGNiOGVhMWU5ZTdj
NGZmNjU1OWU5OWVhNjZkMDcuLmRhY2RiMGE5NDkwZjk0NzlmN2FhODdjYmY2NDBiMzMyODlmYjVi
NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1ZlY3Rvci5oCisrKyBiL1NvdXJjZS9XVEYv
d3RmL1ZlY3Rvci5oCkBAIC03MjQsOSArNzI0LDEyIEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFy
KCkgeyBzaHJpbmtDYXBhY2l0eSgwKTsgfQogCiAgICAgdm9pZCBhcHBlbmQoVmFsdWVUeXBlJiYg
dmFsdWUpIHsgYXBwZW5kPFZhbHVlVHlwZT4oc3RkOjpmb3J3YXJkPFZhbHVlVHlwZT4odmFsdWUp
KTsgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHZvaWQgYXBwZW5kKGNvbnN0IFUqLCBzaXpl
X3QpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHZvaWQgYXBwZW5kKFUmJik7Ci0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgVT4gdm9pZCB1bmNoZWNrZWRBcHBlbmQoVSYmIHZhbCk7CisKKyAgICB2
b2lkIHVuY2hlY2tlZEFwcGVuZChWYWx1ZVR5cGUmJiB2YWx1ZSkgeyB1bmNoZWNrZWRBcHBlbmQ8
VmFsdWVUeXBlPihzdGQ6OmZvcndhcmQ8VmFsdWVUeXBlPih2YWx1ZSkpOyB9CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVT4gdm9pZCB1bmNoZWNrZWRBcHBlbmQoVSYmKTsKKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFU+IHZvaWQgYXBwZW5kKGNvbnN0IFUqLCBzaXplX3QpOwogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFUsIHNpemVfdCBvdGhlckNhcGFjaXR5PiB2b2lkIGFwcGVuZFZlY3Rvcihjb25z
dCBWZWN0b3I8VSwgb3RoZXJDYXBhY2l0eT4mKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBi
b29sIHRyeUFwcGVuZChjb25zdCBVKiwgc2l6ZV90KTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>255321</attachid>
            <date>2015-06-21 05:02:06 -0700</date>
            <delta_ts>2015-06-22 23:45:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-146191-20150621050126.patch</filename>
            <type>text/plain</type>
            <size>29456</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg1ODA0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
ZGMwZDVjOTQ5M2QxMTVlODMxMzdlYmU3Zjk1NGI3ZjgyZDUwZDI1Li5jYjdhODJiMjNiNzBmZGE1
ZTQxZDE5ZjU5MTNlNzc1ZjEzOGJjZmEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1NiBAQAorMjAxNS0wNi0yMSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgTWFrZSBBcnJheS5qb2luIHdvcmsgZGlyZWN0bHkgb24gc3Vic3RyaW5ncyB3aXRo
b3V0IHJlaWZ5aW5nIHRoZW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE0NjE5MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFNob3VsZCBoYXZlIHNvbWUgbW9yZSB0ZXN0aW5nOgorICAgICAgICAxKSBQZXJm
b3JtYW5jZSB0ZXN0aW5nIHRvIHNlZSBpZiB0aGlzIGlzIHRydWx5IGEgc3BlZWR1cC4KKyAgICAg
ICAgMikgQ29ycmVjdG5lc3MgdGVzdGluZyBmb3IgdGhlIHZhcmlvdXMgbWlzc2luZyBleGNlcHRp
b24gY2hlY2tzLgorCisgICAgICAgICogcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHA6CisgICAg
ICAgIChKU0M6OmFycmF5UHJvdG9GdW5jVG9TdHJpbmcpOiBVcGRhdGVkIHRvIHVzZSB0aGUgbmV3
IEpTU3RyaW5nSm9pbmVyCisgICAgICAgIGludGVyZmFjZS4gQ2hhbmdlZCBsb2NhbCB2YXJpYWJs
ZSBuYW1lIHRvIHRoaXNBcnJheSBzaW5jZSBpdCdzIG5vdCBhCisgICAgICAgIEpTT2JqZWN0Ki4g
Q2hhbmdlZCBsb29wIGluZGV4IHRvIGkgaW5zdGVhZCBvZiBrLgorICAgICAgICAoSlNDOjphcnJh
eVByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKTogVXBkYXRlZCB0byB1c2UgdGhlIG5ldyBKU1N0cmlu
Z0pvaW5lcgorICAgICAgICBpbnRlcmZhY2UuIFJlbmFtZWQgdGhpc09iaiB0byB0aGlzT2JqZWN0
LiBBZGRlZCBhIG1pc3NpbmcgZXhjZXB0aW9uIGNoZWNrCisgICAgICAgIGFmdGVyIHRoZSB0b0xv
Y2FsZVN0cmluZyBmdW5jdGlvbiBpcyBjYWxsZWQsIGJ1dCBiZWZvcmUgdG9TdHJpbmcgaXMgY2Fs
bGVkCisgICAgICAgIHRoZSByZXN1bHQgb2YgdGhhdCBmdW5jdGlvbi4KKyAgICAgICAgKEpTQzo6
YXJyYXlQcm90b0Z1bmNKb2luKTogVXBkYXRlZCB0byB1c2UgdGhlIG5ldyBKU1N0cmluZ0pvaW50
ZXIgaW50ZXJmYWNlLgorICAgICAgICBBZGRlZCBhIG1pc3NpbmcgZXhjZXB0aW9uIGNoZWNrIGFm
dGVyIGNhbGxpbmcgdG9TdHJpbmcgb24gdGhlIHNlcGFyYXRvcgorICAgICAgICBidXQgYmVmb3Jl
IGNhbGxpbmcgZ2V0IHRvIGdldCB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUgYXJyYXktbGlrZSBv
YmplY3QKKyAgICAgICAgYmVpbmcgam9pbmVkLiBDaGFuZ2VkIGxvb3AgaW5kZXggdG8gaSBpbnN0
ZWFkIG9mIGsuIEFkZGVkIG1pc3NpbmcgZXhjZXB0aW9uCisgICAgICAgIGNoZWNrIGFmdGVyIGNh
bGxpbmcgdG9TdHJpbmcgb24gZWFjaCBzdHJpbmcgZnJvbSB0aGUgYXJyYXkgYmVmb3JlIGNhbGxp
bmcKKyAgICAgICAgZ2V0IGZvciB0aGUgbmV4dCBlbGVtZW50LgorCisgICAgICAgICogcnVudGlt
ZS9KU0NKU1ZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6dG9XVEZTdHJpbmdTbG93
Q2FzZSk6IE1PdmVkIHRoZSBjb250ZW50cyBvZiB0aGUKKyAgICAgICAgaW5saW5lSlNWYWx1ZU5v
dFN0cmluZ3RvU3RyaW5nIGZ1bmN0aW9uIGhlcmUuCisgICAgICAgICogcnVudGltZS9KU0NKU1Zh
bHVlLmg6IFJlbW92ZWQgbm8gbG9uZ2VyIHVzZWQgdG9XVEZTdHJpbmdJbmxpbmUgYW5kIGZpeGVk
CisgICAgICAgIGEgY29tbWVudCB3aXRoIGEgdHlwby4KKworICAgICAgICAqIHJ1bnRpbWUvSlNT
dHJpbmcuaDogQWRkZWQgdGhlIFN0cmluZ1ZpZXdXaXRoVW5kZXJseWluZ1N0cmluZyBzdHJ1Y3Qg
YW5kCisgICAgICAgIHRoZSB2aWV3V2l0aFVuZGVybHlpbmdTdHJpbmcgZnVuY3Rpb24uIFJlbW92
ZWQgdGhlIGlubGluZUpTVmFsdWVOb3RTdHJpbmd0b1N0cmluZworICAgICAgICBhbmQgdG9XVEZT
dHJpbmdJbmxpbmUgZnVuY3Rpb25zLgorCisgICAgICAgICogcnVudGltZS9KU1N0cmluZ0pvaW5l
ci5jcHA6CisgICAgICAgIChKU0M6OmFwcGVuZFN0cmluZ1RvRGF0YSk6IENoYW5nZWQgdGhpcyB0
byBiZSBhIHRlbXBsYXRlIGluc3RlYWQgb2Ygd3JpdGluZworICAgICAgICBpdCBvdXQsIHNpbmNl
IFN0cmluZ1ZpZXc6OmdldENoYXJhY3RlcnNXaXRoVXBjb252ZXJ0IGRvZXMgYWxtc290IGV4YWN0
bHkgd2hhdAorICAgICAgICB0aGlzIGZ1bmN0aW9uIHdhcyB0cnlpbmcgdG8gZG8uCisgICAgICAg
IChKU0M6OmpvaW5TdHJpbmdzKTogUmV3cm90ZSB0aGlzIHRvIHVzZSBTdHJpbmdWaWV3LgorICAg
ICAgICAoSlNDOjpKU1N0cmluZ0pvaW5lcjo6am9pbmVkTGVuZ3RoKTogQWRkZWQuIEZhY3RvcmVk
IG91dCBmcm9tIHRoZSBqb2luIGZ1bmN0aW9uLgorICAgICAgICAoSlNDOjpKU1N0cmluZ0pvaW5l
cjo6am9pbik6IFJld3JvdGUgdG8gbWFrZSBpdCBhIGJpdCBzaW1wbGVyLiBBZGRlZCBhbiBhc3Nl
cnRpb24KKyAgICAgICAgdGhhdCB3ZSBlbnRpcmVseSBmaWxsZWQgY2FwYWNpdHksIHNpbmNlIHdl
IGFyZSBub3cgcmVzZXJ2aW5nIGNhcGFjaXR5IGFuZCB1c2luZworICAgICAgICB1bmNoZWNrZWRB
cHBlbmQuIFVzZSBTdHJpbmcgaW5zdGVhZCBvZiBSZWZQdHI8U3RyaW5nSW1wbD4gYmVjYXVzZSB0
aGVyZSB3YXMgbm8KKyAgICAgICAgcGFydGljdWxhciB2YWx1ZSB0byB1c2luZyB0aGUgaW1wbCBk
aXJlY3RseS4KKworICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmdKb2luZXIuaDogQ2hhbmdlZCB0
aGUgaW50ZXJmYWNlIHRvIHRoZSBjbGFzcyB0byB1c2UgU3RyaW5nVmlldy4KKyAgICAgICAgQWxz
byBjaGFuZ2VkIHRoaXMgY2xhc3Mgc28gaXQgbm93IGhhcyB0aGUgcmVzcG9uc2liaWxpdHkgdG8g
Y29udmVydCBlYWNoIEpTVmFsdWUKKyAgICAgICAgaW50byBhIHN0cmluZy4gVGhpcyBsZXQgdXMg
c2hhcmUgbW9yZSBjb2RlIGJldHdlZW4gdG9TdHJpbmcgYW5kIGpvaW4sIGFuZCBhbHNvCisgICAg
ICAgIGxldHMgdXMgdXNlIHRoZSBuZXcgdmlld1dpdGhVbmRlcmx5aW5nU3RyaW5nIGZ1bmN0aW9u
LCB3aGljaCBjb3VsZCBiZSBjb25mdXNpbmcgYXQKKyAgICAgICAgYWxsIHRoZSBjYWxsIHNpdGVz
LCBidXQgaXMgZWFzaWVyIHRvIHVuZGVyc3RhbmQgaGVyZS4KKwogMjAxNS0wNi0yMCAgWXVzdWtl
IFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBbRVM2XSBEZXN0cnVj
dHVyaW5nIGFzc2lnbm1lbnQgbmVlZCB0byBhY2NlcHQgaXRlcmFibGVzCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGVlZTIwZTM5
N2U1OTBlNjc0ZTc4YzZkNjZjOTQ5MDA0NWRhYTQzZDYuLmQ1NWVhNDUwOGY3YmQzNTI4NTJhNjE3
ZTRkZWUxY2I1NzUyYTA3ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTUtMDYtMjEgIERhcmlu
IEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIE1ha2UgQXJyYXkuam9pbiB3b3Jr
IGRpcmVjdGx5IG9uIHN1YnN0cmluZ3Mgd2l0aG91dCByZWlmeWluZyB0aGVtCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDYxOTEKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9WZWN0b3IuaDogQWRk
ZWQgYW4gb3ZlcmxvYWQgb2YgdW5jaGVja2VkQXBwZW5kIGxpa2UgdGhlIG9uZSB3ZSBhZGRlZAor
ICAgICAgICBhIHdoaWxlIGJhY2ssIGEgbm9uLXRlbXBsYXRlIGZ1bmN0aW9uIHRoYXQgZm9yd2Fy
ZHMgdGhyb3VnaCB0byB0aGUgZnVuY3Rpb24KKyAgICAgICAgdGVtcGxhdGUuIFRoaXMgbGV0cyB1
cyBjYWxsIHVuY2hlY2tlZEFwcGVuZCBvbiBhbiBhcmd1bWVudCBsaXN0IGFuZCBoYXZlIGl0Cisg
ICAgICAgIHByb3Blcmx5IGNvbnZlcnQgaXQgdG8gdGhlIFZlY3RvcidzIGVsZW1lbnQgdHlwZS4K
KwogMjAxNS0wNi0yMCAgTWljaGFlbCBDYXRhbnphcm8gIDxtY2F0YW56YXJvQGlnYWxpYS5jb20+
CiAKICAgICAgICAgW0VGTF1bR1RLXSBEZWZpbmUgR0xJQl9WRVJTSU9OX01JTl9SRVFVSVJFRCBh
bmQgcmVxdWlyZSBnbGliIDIuMzYgZm9yIEdUSwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCmluZGV4IDkyODA0ZDYyMjViN2JjZDNmZTIwNDQy
MmY4N2QwNWY1NmY5Zjk3ODQuLjViYTcxNTYzYzY4Y2ZmNGIyNTgyZWNmNThiZjc0OTRkZDRkMjUw
NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90
eXBlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlw
ZS5jcHAKQEAgLTI5MSw4MCArMjkxLDc5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
YXJyYXlQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoY2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0
aGlzT2JqZWN0LCBleGVjLT5lbXB0eUxpc3QoKSkpOwogCiAgICAgQVNTRVJUKGlzSlNBcnJheSh0
aGlzVmFsdWUpKTsKLSAgICBKU0FycmF5KiB0aGlzT2JqID0gYXNBcnJheSh0aGlzVmFsdWUpOwor
ICAgIEpTQXJyYXkqIHRoaXNBcnJheSA9IGFzQXJyYXkodGhpc1ZhbHVlKTsKICAgICAKLSAgICB1
bnNpZ25lZCBsZW5ndGggPSBnZXRMZW5ndGgoZXhlYywgdGhpc09iaik7CisgICAgdW5zaWduZWQg
bGVuZ3RoID0gZ2V0TGVuZ3RoKGV4ZWMsIHRoaXNBcnJheSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogCi0gICAgU3RyaW5nUmVjdXJzaW9uQ2hlY2tlciBjaGVja2VyKGV4ZWMsIHRoaXNPYmopOwor
ICAgIFN0cmluZ1JlY3Vyc2lvbkNoZWNrZXIgY2hlY2tlcihleGVjLCB0aGlzQXJyYXkpOwogICAg
IGlmIChKU1ZhbHVlIGVhcmx5UmV0dXJuVmFsdWUgPSBjaGVja2VyLmVhcmx5UmV0dXJuVmFsdWUo
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShlYXJseVJldHVyblZhbHVlKTsKIAot
ICAgIFN0cmluZyBzZXBhcmF0b3IoIiwiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsK
LSAgICBKU1N0cmluZ0pvaW5lciBzdHJpbmdKb2luZXIoc2VwYXJhdG9yLCBsZW5ndGgpOwotICAg
IGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBsZW5ndGg7IGsrKykgeworICAgIEpTU3RyaW5nSm9p
bmVyIGpvaW5lcigqZXhlYywgJywnLCBsZW5ndGgpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBKU1Zh
bHVlIGVsZW1lbnQ7Ci0gICAgICAgIGlmICh0aGlzT2JqLT5jYW5HZXRJbmRleFF1aWNrbHkoaykp
Ci0gICAgICAgICAgICBlbGVtZW50ID0gdGhpc09iai0+Z2V0SW5kZXhRdWlja2x5KGspOworICAg
ICAgICBpZiAodGhpc0FycmF5LT5jYW5HZXRJbmRleFF1aWNrbHkoaSkpCisgICAgICAgICAgICBl
bGVtZW50ID0gdGhpc0FycmF5LT5nZXRJbmRleFF1aWNrbHkoaSk7CiAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgZWxlbWVudCA9IHRoaXNPYmotPmdldChleGVjLCBrKTsKKyAgICAgICAgICAg
IGVsZW1lbnQgPSB0aGlzQXJyYXktPmdldChleGVjLCBpKTsKICAgICAgICAgICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGVsZW1lbnQuaXNVbmRl
ZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHN0cmluZ0pvaW5lci5hcHBlbmQoU3RyaW5nKCkp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzdHJpbmdKb2luZXIuYXBwZW5kKGVsZW1lbnQu
dG9XVEZTdHJpbmcoZXhlYykpOwotCisgICAgICAgIGpvaW5lci5hcHBlbmQoKmV4ZWMsIGVsZW1l
bnQpOwogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHN0cmluZ0pvaW5lci5qb2luKGV4ZWMpKTsKKworICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoam9pbmVyLmpvaW4oKmV4ZWMpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykK
IHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVj
LCBTdHJpY3RNb2RlKTsKIAotICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gdGhpc1ZhbHVlLnRvT2Jq
ZWN0KGV4ZWMpOworICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gdGhpc1ZhbHVlLnRvT2JqZWN0
KGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAotICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdl
dExlbmd0aChleGVjLCB0aGlzT2JqKTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBnZXRMZW5ndGgo
ZXhlYywgdGhpc09iamVjdCk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCi0gICAgU3RyaW5nUmVj
dXJzaW9uQ2hlY2tlciBjaGVja2VyKGV4ZWMsIHRoaXNPYmopOworICAgIFN0cmluZ1JlY3Vyc2lv
bkNoZWNrZXIgY2hlY2tlcihleGVjLCB0aGlzT2JqZWN0KTsKICAgICBpZiAoSlNWYWx1ZSBlYXJs
eVJldHVyblZhbHVlID0gY2hlY2tlci5lYXJseVJldHVyblZhbHVlKCkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoZWFybHlSZXR1cm5WYWx1ZSk7CiAKLSAgICBTdHJpbmcgc2VwYXJh
dG9yKCIsIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgSlNTdHJpbmdKb2lu
ZXIgc3RyaW5nSm9pbmVyKHNlcGFyYXRvciwgbGVuZ3RoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGsg
PSAwOyBrIDwgbGVuZ3RoOyBrKyspIHsKLSAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gdGhpc09i
ai0+Z2V0KGV4ZWMsIGspOworICAgIEpTU3RyaW5nSm9pbmVyIHN0cmluZ0pvaW5lcigqZXhlYywg
JywnLCBsZW5ndGgpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSB0aGlz
T2JqZWN0LT5nZXQoZXhlYywgaSk7CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
ICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAg
ICAgIGlmICghZWxlbWVudC5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7Ci0gICAgICAgICAgICBKU09i
amVjdCogbyA9IGVsZW1lbnQudG9PYmplY3QoZXhlYyk7Ci0gICAgICAgICAgICBKU1ZhbHVlIGNv
bnZlcnNpb25GdW5jdGlvbiA9IG8tPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9M
b2NhbGVTdHJpbmcpOwotICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAg
ICAgICAgICBTdHJpbmcgc3RyOwotICAgICAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7Ci0gICAg
ICAgICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKGNvbnZlcnNpb25GdW5jdGlv
biwgY2FsbERhdGEpOwotICAgICAgICAgICAgaWYgKGNhbGxUeXBlICE9IENhbGxUeXBlTm9uZSkK
LSAgICAgICAgICAgICAgICBzdHIgPSBjYWxsKGV4ZWMsIGNvbnZlcnNpb25GdW5jdGlvbiwgY2Fs
bFR5cGUsIGNhbGxEYXRhLCBlbGVtZW50LCBleGVjLT5lbXB0eUxpc3QoKSkudG9XVEZTdHJpbmco
ZXhlYyk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc3RyID0gZWxlbWVudC50
b1dURlN0cmluZyhleGVjKTsKKyAgICAgICAgaWYgKGVsZW1lbnQuaXNVbmRlZmluZWRPck51bGwo
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBKU1ZhbHVlIGNvbnZlcnNpb25GdW5j
dGlvbiA9IGVsZW1lbnQuZ2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS50b0xvY2FsZVN0
cmluZyk7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIENhbGxEYXRhIGNh
bGxEYXRhOworICAgICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKGNvbnZlcnNp
b25GdW5jdGlvbiwgY2FsbERhdGEpOworICAgICAgICBpZiAoY2FsbFR5cGUgIT0gQ2FsbFR5cGVO
b25lKSB7CisgICAgICAgICAgICBlbGVtZW50ID0gY2FsbChleGVjLCBjb252ZXJzaW9uRnVuY3Rp
b24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgZWxlbWVudCwgZXhlYy0+ZW1wdHlMaXN0KCkpOwogICAg
ICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgICAgICAgICBzdHJpbmdKb2lu
ZXIuYXBwZW5kKHN0cik7CiAgICAgICAgIH0KKyAgICAgICAgc3RyaW5nSm9pbmVyLmFwcGVuZCgq
ZXhlYywgZWxlbWVudCk7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogCi0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzdHJpbmdKb2luZXIuam9pbihleGVjKSk7CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShzdHJpbmdKb2luZXIuam9pbigqZXhlYykpOwogfQogCiBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jSm9pbihFeGVjU3RhdGUq
IGV4ZWMpCkBAIC0zNzgsNDEgKzM3NywzOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGFycmF5UHJvdG9GdW5jSm9pbihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgaWYgKEpTVmFsdWUgZWFy
bHlSZXR1cm5WYWx1ZSA9IGNoZWNrZXIuZWFybHlSZXR1cm5WYWx1ZSgpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGVhcmx5UmV0dXJuVmFsdWUpOwogCi0gICAgU3RyaW5nIHNlcGFy
YXRvcjsKLSAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkpCi0gICAgICAg
IHNlcGFyYXRvciA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKGV4ZWMpOwotICAgIGlm
IChzZXBhcmF0b3IuaXNOdWxsKCkpCi0gICAgICAgIHNlcGFyYXRvciA9IFN0cmluZygiLCIsIFN0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgIEpTU3RyaW5nKiBzZXBhcmF0b3IgPSBu
dWxscHRyOworICAgIGlmICghZXhlYy0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSkgeworICAg
ICAgICBzZXBhcmF0b3IgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKTsKKyAgICAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICB9CiAKLSAgICBKU1N0cmluZ0pvaW5lciBzdHJp
bmdKb2luZXIoc2VwYXJhdG9yLCBsZW5ndGgpOworICAgIGNvbnN0IExDaGFyIGNvbW1hID0gJywn
OworICAgIEpTU3RyaW5nSm9pbmVyIHN0cmluZ0pvaW5lcigqZXhlYywgc2VwYXJhdG9yID8gc2Vw
YXJhdG9yLT52aWV3KGV4ZWMpIDogU3RyaW5nVmlld3sgJmNvbW1hLCAxIH0sIGxlbmd0aCk7Cisg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOworCisgICAgdW5zaWduZWQgaSA9IDA7CiAKLSAgICB1bnNpZ25l
ZCBrID0gMDsKICAgICBpZiAoaXNKU0FycmF5KHRoaXNPYmopKSB7CiAgICAgICAgIEpTQXJyYXkq
IGFycmF5ID0gYXNBcnJheSh0aGlzT2JqKTsKLQotICAgICAgICBmb3IgKDsgayA8IGxlbmd0aDsg
aysrKSB7Ci0gICAgICAgICAgICBpZiAoIWFycmF5LT5jYW5HZXRJbmRleFF1aWNrbHkoaykpCi0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IGFy
cmF5LT5nZXRJbmRleFF1aWNrbHkoayk7Ci0gICAgICAgICAgICBpZiAoIWVsZW1lbnQuaXNVbmRl
ZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgICAgICBzdHJpbmdKb2luZXIuYXBwZW5kKGVsZW1l
bnQudG9XVEZTdHJpbmdJbmxpbmUoZXhlYykpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIHN0cmluZ0pvaW5lci5hcHBlbmQoU3RyaW5nKCkpOworICAgICAgICBmb3IgKDsgaSA8
IGxlbmd0aCAmJiBhcnJheS0+Y2FuR2V0SW5kZXhRdWlja2x5KGkpOyArK2kpIHsKKyAgICAgICAg
ICAgIHN0cmluZ0pvaW5lci5hcHBlbmQoKmV4ZWMsIGFycmF5LT5nZXRJbmRleFF1aWNrbHkoaSkp
OworICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAgIH0KICAgICB9
CiAKLSAgICBmb3IgKDsgayA8IGxlbmd0aDsgaysrKSB7Ci0gICAgICAgIEpTVmFsdWUgZWxlbWVu
dCA9IHRoaXNPYmotPmdldChleGVjLCBrKTsKKyAgICBmb3IgKDsgaSA8IGxlbmd0aDsgKytpKSB7
CisgICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IHRoaXNPYmotPmdldChleGVjLCBpKTsKKyAgICAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgc3RyaW5nSm9pbmVyLmFwcGVuZCgqZXhl
YywgZWxlbWVudCk7CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgICAgIGlmICgh
ZWxlbWVudC5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgc3RyaW5nSm9pbmVyLmFw
cGVuZChlbGVtZW50LnRvV1RGU3RyaW5nSW5saW5lKGV4ZWMpKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgc3RyaW5nSm9pbmVyLmFwcGVuZChTdHJpbmcoKSk7CiAgICAgfQogCi0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShzdHJpbmdKb2luZXIuam9pbihleGVjKSk7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShzdHJpbmdKb2luZXIuam9pbigqZXhlYykpOwogfQogCiBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jQ29uY2F0KEV4ZWNTdGF0ZSogZXhl
YykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAKaW5kZXgg
YTcwODNhZWRmMjQ5ZmMwNWM4MWUwZmE0NDBmZDU1NDcxMjJlNWU1Yy4uOWM0YTQ5ZDI0Y2M1NjY5
YzIxZTUyYjdhNDZkYTE1MmQ3ZjE1OTMyOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNDSlNWYWx1ZS5jcHAKQEAgLTM4MCw3ICszODAsMjAgQEAgSlNTdHJpbmcqIEpTVmFs
dWU6OnRvU3RyaW5nU2xvd0Nhc2UoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogCiBTdHJpbmcgSlNW
YWx1ZTo6dG9XVEZTdHJpbmdTbG93Q2FzZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIGlubGluZUpTVmFsdWVOb3RTdHJpbmd0b1N0cmluZygqdGhpcywgZXhlYyk7CisgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBpZiAoaXNJbnQzMigpKQorICAgICAgICByZXR1cm4g
dm0ubnVtZXJpY1N0cmluZ3MuYWRkKGFzSW50MzIoKSk7CisgICAgaWYgKGlzRG91YmxlKCkpCisg
ICAgICAgIHJldHVybiB2bS5udW1lcmljU3RyaW5ncy5hZGQoYXNEb3VibGUoKSk7CisgICAgaWYg
KGlzVHJ1ZSgpKQorICAgICAgICByZXR1cm4gdm0ucHJvcGVydHlOYW1lcy0+dHJ1ZUtleXdvcmQu
c3RyaW5nKCk7CisgICAgaWYgKGlzRmFsc2UoKSkKKyAgICAgICAgcmV0dXJuIHZtLnByb3BlcnR5
TmFtZXMtPmZhbHNlS2V5d29yZC5zdHJpbmcoKTsKKyAgICBpZiAoaXNOdWxsKCkpCisgICAgICAg
IHJldHVybiB2bS5wcm9wZXJ0eU5hbWVzLT5udWxsS2V5d29yZC5zdHJpbmcoKTsKKyAgICBpZiAo
aXNVbmRlZmluZWQoKSkKKyAgICAgICAgcmV0dXJuIHZtLnByb3BlcnR5TmFtZXMtPnVuZGVmaW5l
ZEtleXdvcmQuc3RyaW5nKCk7CisgICAgcmV0dXJuIHRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVj
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0NKU1ZhbHVlLmgKaW5kZXggNzliMDliNDE4MzUwZThlMmUxNTNlNGMyNTg3ZTVmYzM4ZWNj
YTVkMi4uMDM5YzE0ZWI3YTEyYWFlNjU2NWRiYTdmYTRmYmRjYmZhZmYzMTk5MyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuaApAQCAtMjUyLDcgKzI1Miw2IEBA
IHB1YmxpYzoKICAgICBKU1N0cmluZyogdG9TdHJpbmcoRXhlY1N0YXRlKikgY29uc3Q7CiAgICAg
SWRlbnRpZmllciB0b1Byb3BlcnR5S2V5KEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgIFdURjo6U3Ry
aW5nIHRvV1RGU3RyaW5nKEV4ZWNTdGF0ZSopIGNvbnN0OwotICAgIFdURjo6U3RyaW5nIHRvV1RG
U3RyaW5nSW5saW5lKEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgIEpTT2JqZWN0KiB0b09iamVjdChF
eGVjU3RhdGUqKSBjb25zdDsKICAgICBKU09iamVjdCogdG9PYmplY3QoRXhlY1N0YXRlKiwgSlNH
bG9iYWxPYmplY3QqKSBjb25zdDsKIApAQCAtMjYyLDggKzI2MSw4IEBAIHB1YmxpYzoKICAgICBp
bnQzMl90IHRvSW50MzIoRXhlY1N0YXRlKikgY29uc3Q7CiAgICAgdWludDMyX3QgdG9VSW50MzIo
RXhlY1N0YXRlKikgY29uc3Q7CiAKLSAgICAvLyBGbG9hdGluZyBwb2ludCBjb252ZXJzaW9ucyAo
dGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCBmb3Igd2ViY29yZTsKLSAgICAvLyBzaWdubGUg
cHJlY2lzaW9uIGZsb2F0IGlzIG5vdCBhIHJlcHJlc2VudGF0aW9uIHVzZWQgaW4gSlMgb3IgSlND
KS4KKyAgICAvLyBGbG9hdGluZyBwb2ludCBjb252ZXJzaW9ucyAodGhpcyBpcyBhIGNvbnZlbmll
bmNlIGZ1bmN0aW9uIGZvciBXZWJDb3JlOworICAgIC8vIHNpbmdsZSBwcmVjaXNpb24gZmxvYXQg
aXMgbm90IGEgcmVwcmVzZW50YXRpb24gdXNlZCBpbiBKUyBvciBKU0MpLgogICAgIGZsb2F0IHRv
RmxvYXQoRXhlY1N0YXRlKiBleGVjKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4o
dG9OdW1iZXIoZXhlYykpOyB9CiAKICAgICAvLyBPYmplY3Qgb3BlcmF0aW9ucywgd2l0aCB0aGUg
dG9PYmplY3Qgb3BlcmF0aW9uIGluY2x1ZGVkLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU3RyaW5nLmgKaW5kZXggNjZhMzhiMmFjOGI1Njg4NzdlZDJhMzI0ZTEzOWJkM2FlZWZkMmE0
NC4uMDM0ZTdjYjUwY2RkMWQ3MzczNWY2YTdjOGUzOTllZjhjOWNlYjljYSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCkBAIC02Miw2ICs2MiwxMSBAQCBKU1N0cmlu
ZyoganNPd25lZFN0cmluZyhFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmKTsKIAogSlNSb3BlU3Ry
aW5nKiBqc1N0cmluZ0J1aWxkZXIoVk0qKTsKIAorc3RydWN0IFN0cmluZ1ZpZXdXaXRoVW5kZXJs
eWluZ1N0cmluZyB7CisgICAgU3RyaW5nVmlldyB2aWV3OworICAgIFN0cmluZyB1bmRlcmx5aW5n
U3RyaW5nOworfTsKKwogY2xhc3MgSlNTdHJpbmcgOiBwdWJsaWMgSlNDZWxsIHsKIHB1YmxpYzoK
ICAgICBmcmllbmQgY2xhc3MgSklUOwpAQCAtMTQ0LDYgKzE0OSw3IEBAIHB1YmxpYzoKICAgICBB
dG9taWNTdHJpbmcgdG9BdG9taWNTdHJpbmcoRXhlY1N0YXRlKikgY29uc3Q7CiAgICAgUmVmUHRy
PEF0b21pY1N0cmluZ0ltcGw+IHRvRXhpc3RpbmdBdG9taWNTdHJpbmcoRXhlY1N0YXRlKikgY29u
c3Q7CiAgICAgU3RyaW5nVmlldyB2aWV3KEV4ZWNTdGF0ZSopIGNvbnN0OworICAgIFN0cmluZ1Zp
ZXdXaXRoVW5kZXJseWluZ1N0cmluZyB2aWV3V2l0aFVuZGVybHlpbmdTdHJpbmcoRXhlY1N0YXRl
JikgY29uc3Q7CiAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZShFeGVjU3RhdGUqKSBjb25zdDsKICAg
ICBjb25zdCBTdHJpbmcmIHRyeUdldFZhbHVlKCkgY29uc3Q7CiAgICAgY29uc3QgU3RyaW5nSW1w
bCogdHJ5R2V0VmFsdWVJbXBsKCkgY29uc3Q7CkBAIC0zODQsNiArMzkwLDcgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIHJlc29sdmVSb3BlSW50ZXJuYWwxNk5vU3Vic3RyaW5nKFVDaGFyKikgY29uc3Q7
CiAgICAgdm9pZCBjbGVhckZpYmVycygpIGNvbnN0OwogICAgIFN0cmluZ1ZpZXcgdmlldyhFeGVj
U3RhdGUqKSBjb25zdDsKKyAgICBTdHJpbmdWaWV3V2l0aFVuZGVybHlpbmdTdHJpbmcgdmlld1dp
dGhVbmRlcmx5aW5nU3RyaW5nKEV4ZWNTdGF0ZSYpIGNvbnN0OwogCiAgICAgV3JpdGVCYXJyaWVy
QmFzZTxKU1N0cmluZz4mIGZpYmVyKHVuc2lnbmVkIGkpIGNvbnN0CiAgICAgewpAQCAtNjczLDMy
ICs2ODAsNiBAQCBpbmxpbmUgU3RyaW5nIEpTVmFsdWU6OnRvV1RGU3RyaW5nKEV4ZWNTdGF0ZSog
ZXhlYykgY29uc3QKICAgICByZXR1cm4gdG9XVEZTdHJpbmdTbG93Q2FzZShleGVjKTsKIH0KIAot
QUxXQVlTX0lOTElORSBTdHJpbmcgaW5saW5lSlNWYWx1ZU5vdFN0cmluZ3RvU3RyaW5nKGNvbnN0
IEpTVmFsdWUmIHZhbHVlLCBFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKLSAgICBpZiAodmFsdWUuaXNJbnQzMigpKQotICAgICAgICByZXR1cm4gdm0ubnVtZXJp
Y1N0cmluZ3MuYWRkKHZhbHVlLmFzSW50MzIoKSk7Ci0gICAgaWYgKHZhbHVlLmlzRG91YmxlKCkp
Ci0gICAgICAgIHJldHVybiB2bS5udW1lcmljU3RyaW5ncy5hZGQodmFsdWUuYXNEb3VibGUoKSk7
Ci0gICAgaWYgKHZhbHVlLmlzVHJ1ZSgpKQotICAgICAgICByZXR1cm4gdm0ucHJvcGVydHlOYW1l
cy0+dHJ1ZUtleXdvcmQuc3RyaW5nKCk7Ci0gICAgaWYgKHZhbHVlLmlzRmFsc2UoKSkKLSAgICAg
ICAgcmV0dXJuIHZtLnByb3BlcnR5TmFtZXMtPmZhbHNlS2V5d29yZC5zdHJpbmcoKTsKLSAgICBp
ZiAodmFsdWUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiB2bS5wcm9wZXJ0eU5hbWVzLT5udWxs
S2V5d29yZC5zdHJpbmcoKTsKLSAgICBpZiAodmFsdWUuaXNVbmRlZmluZWQoKSkKLSAgICAgICAg
cmV0dXJuIHZtLnByb3BlcnR5TmFtZXMtPnVuZGVmaW5lZEtleXdvcmQuc3RyaW5nKCk7Ci0gICAg
cmV0dXJuIHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLX0KLQotQUxXQVlTX0lO
TElORSBTdHJpbmcgSlNWYWx1ZTo6dG9XVEZTdHJpbmdJbmxpbmUoRXhlY1N0YXRlKiBleGVjKSBj
b25zdAotewotICAgIGlmIChpc1N0cmluZygpKQotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
SlNTdHJpbmcqPihhc0NlbGwoKSktPnZhbHVlKGV4ZWMpOwotCi0gICAgcmV0dXJuIGlubGluZUpT
VmFsdWVOb3RTdHJpbmd0b1N0cmluZygqdGhpcywgZXhlYyk7Ci19Ci0KIEFMV0FZU19JTkxJTkUg
U3RyaW5nVmlldyBKU1JvcGVTdHJpbmc6OnZpZXcoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewog
ICAgIGlmIChpc1N1YnN0cmluZygpKSB7CkBAIC03MTAsNiArNjkxLDE4IEBAIEFMV0FZU19JTkxJ
TkUgU3RyaW5nVmlldyBKU1JvcGVTdHJpbmc6OnZpZXcoRXhlY1N0YXRlKiBleGVjKSBjb25zdAog
ICAgIHJldHVybiBTdHJpbmdWaWV3KG1fdmFsdWUpOwogfQogCitBTFdBWVNfSU5MSU5FIFN0cmlu
Z1ZpZXdXaXRoVW5kZXJseWluZ1N0cmluZyBKU1JvcGVTdHJpbmc6OnZpZXdXaXRoVW5kZXJseWlu
Z1N0cmluZyhFeGVjU3RhdGUmIHN0YXRlKSBjb25zdAoreworICAgIGlmIChpc1N1YnN0cmluZygp
KSB7CisgICAgICAgIGF1dG8mIGJhc2UgPSBzdWJzdHJpbmdCYXNlKCktPm1fdmFsdWU7CisgICAg
ICAgIGlmIChpczhCaXQoKSkKKyAgICAgICAgICAgIHJldHVybiB7IHsgYmFzZS5jaGFyYWN0ZXJz
OCgpICsgc3Vic3RyaW5nT2Zmc2V0KCksIG1fbGVuZ3RoIH0sIGJhc2UgfTsKKyAgICAgICAgcmV0
dXJuIHsgeyBiYXNlLmNoYXJhY3RlcnMxNigpICsgc3Vic3RyaW5nT2Zmc2V0KCksIG1fbGVuZ3Ro
IH0sIGJhc2UgfTsKKyAgICB9CisgICAgcmVzb2x2ZVJvcGUoJnN0YXRlKTsKKyAgICByZXR1cm4g
eyBtX3ZhbHVlLCBtX3ZhbHVlIH07Cit9CisKIEFMV0FZU19JTkxJTkUgU3RyaW5nVmlldyBKU1N0
cmluZzo6dmlldyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgaWYgKGlzUm9wZSgpKQpA
QCAtNzE3LDYgKzcxMCwxMyBAQCBBTFdBWVNfSU5MSU5FIFN0cmluZ1ZpZXcgSlNTdHJpbmc6OnZp
ZXcoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogICAgIHJldHVybiBTdHJpbmdWaWV3KG1fdmFsdWUp
OwogfQogCitBTFdBWVNfSU5MSU5FIFN0cmluZ1ZpZXdXaXRoVW5kZXJseWluZ1N0cmluZyBKU1N0
cmluZzo6dmlld1dpdGhVbmRlcmx5aW5nU3RyaW5nKEV4ZWNTdGF0ZSYgc3RhdGUpIGNvbnN0Cit7
CisgICAgaWYgKGlzUm9wZSgpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgSlNS
b3BlU3RyaW5nJj4oKnRoaXMpLnZpZXdXaXRoVW5kZXJseWluZ1N0cmluZyhzdGF0ZSk7CisgICAg
cmV0dXJuIHsgbV92YWx1ZSwgbV92YWx1ZSB9OworfQorCiBpbmxpbmUgYm9vbCBKU1N0cmluZzo6
aXNTdWJzdHJpbmcoKSBjb25zdAogewogICAgIHJldHVybiBpc1JvcGUoKSAmJiBzdGF0aWNfY2Fz
dDxjb25zdCBKU1JvcGVTdHJpbmcqPih0aGlzKS0+aXNTdWJzdHJpbmcoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSm9pbmVyLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSm9pbmVyLmNwcAppbmRleCBmOTg3MGMz
NDIzYjRhZDExMTk4MjViZjUxZGYxMzdhODIxYTAzY2MyLi5lMTE4Yzk2ZTVlMjIyZjgwYzkwMTUy
YTUwMDQ5N2M3Mjg3ZWZkMjQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1N0cmluZ0pvaW5lci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTdHJpbmdKb2luZXIuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDk3ICszNCw3MyBAQAogCiBuYW1lc3BhY2Ug
SlNDIHsKIAotLy8gVGhlIGRlc3RpbmF0aW9uIGlzIDE2Yml0cywgYXQgbGVhc3Qgb25lIHN0cmlu
ZyBpcyAxNiBiaXRzLgotc3RhdGljIGlubGluZSB2b2lkIGFwcGVuZFN0cmluZ1RvRGF0YShVQ2hh
ciomIGRhdGEsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4KK3N0YXRpYyBpbmxpbmUgdm9pZCBhcHBlbmRTdHJpbmdUb0RhdGEoQ2hhcmFjdGVy
VHlwZSomIGRhdGEsIFN0cmluZ1ZpZXcgc3RyaW5nKQogewotICAgIGlmIChzdHJpbmcuaXNOdWxs
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZy5sZW5n
dGgoKTsKLSAgICBjb25zdCBTdHJpbmdJbXBsKiBzdHJpbmdJbXBsID0gc3RyaW5nLmltcGwoKTsK
LQotICAgIGlmIChzdHJpbmdJbXBsLT5pczhCaXQoKSkgewotICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICpkYXRhID0gc3RyaW5nSW1w
bC0+Y2hhcmFjdGVyczgoKVtpXTsKLSAgICAgICAgICAgICsrZGF0YTsKLSAgICAgICAgfQotICAg
IH0gZWxzZSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkg
ewotICAgICAgICAgICAgKmRhdGEgPSBzdHJpbmdJbXBsLT5jaGFyYWN0ZXJzMTYoKVtpXTsKLSAg
ICAgICAgICAgICsrZGF0YTsKLSAgICAgICAgfQotICAgIH0KKyAgICBzdHJpbmcuZ2V0Q2hhcmFj
dGVyc1dpdGhVcGNvbnZlcnQoZGF0YSk7CisgICAgZGF0YSArPSBzdHJpbmcubGVuZ3RoKCk7CiB9
CiAKLS8vIElmIHRoZSBkZXN0aW5hdGlvbiBpcyA4Yml0cywgd2Uga25vdyBldmVyeSBzdHJpbmcg
aGFzIHRvIGJlIDhiaXQuCi1zdGF0aWMgaW5saW5lIHZvaWQgYXBwZW5kU3RyaW5nVG9EYXRhKExD
aGFyKiYgZGF0YSwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPgorc3RhdGljIGlubGluZSBTdHJpbmcgam9pblN0cmluZ3MoY29uc3QgVmVjdG9y
PFN0cmluZ1ZpZXdXaXRoVW5kZXJseWluZ1N0cmluZz4mIHN0cmluZ3MsIFN0cmluZ1ZpZXcgc2Vw
YXJhdG9yLCB1bnNpZ25lZCBqb2luZWRMZW5ndGgpCiB7Ci0gICAgaWYgKHN0cmluZy5pc051bGwo
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVChzdHJpbmcuaXM4Qml0KCkpOworICAgIEFT
U0VSVChqb2luZWRMZW5ndGgpOwogCi0gICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5nLmxlbmd0
aCgpOwotICAgIGNvbnN0IFN0cmluZ0ltcGwqIHN0cmluZ0ltcGwgPSBzdHJpbmcuaW1wbCgpOwor
ICAgIENoYXJhY3RlclR5cGUqIGRhdGE7CisgICAgU3RyaW5nIHJlc3VsdCA9IFN0cmluZ0ltcGw6
OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoam9pbmVkTGVuZ3RoLCBkYXRhKTsKKyAgICBpZiAocmVz
dWx0LmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgICpkYXRhID0gc3RyaW5nSW1wbC0+
Y2hhcmFjdGVyczgoKVtpXTsKLSAgICAgICAgKytkYXRhOworICAgIGFwcGVuZFN0cmluZ1RvRGF0
YShkYXRhLCBzdHJpbmdzWzBdLnZpZXcpOworICAgIGZvciAodW5zaWduZWQgaSA9IDEsIHNpemUg
PSBzdHJpbmdzLnNpemUoKTsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBhcHBlbmRTdHJpbmdU
b0RhdGEoZGF0YSwgc2VwYXJhdG9yKTsKKyAgICAgICAgYXBwZW5kU3RyaW5nVG9EYXRhKGRhdGEs
IHN0cmluZ3NbaV0udmlldyk7CiAgICAgfQorICAgIEFTU0VSVChkYXRhID09IHJlc3VsdC5jaGFy
YWN0ZXJzPENoYXJhY3RlclR5cGU+KCkgKyBqb2luZWRMZW5ndGgpOworCisgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBpbmxp
bmUgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBqb2luU3RyaW5ncyhjb25zdCBWZWN0b3I8U3RyaW5n
PiYgc3RyaW5ncywgY29uc3QgU3RyaW5nJiBzZXBhcmF0b3IsIHVuc2lnbmVkIG91dHB1dExlbmd0
aCkKK2lubGluZSB1bnNpZ25lZCBKU1N0cmluZ0pvaW5lcjo6am9pbmVkTGVuZ3RoKEV4ZWNTdGF0
ZSYgc3RhdGUpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKG91dHB1dExlbmd0aCk7CisgICAgdW5zaWdu
ZWQgbnVtYmVyT2ZTdHJpbmdzID0gbV9zdHJpbmdzLnNpemUoKTsKKyAgICBpZiAoIW51bWJlck9m
U3RyaW5ncykKKyAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBDaGFyYWN0ZXJUeXBlKiBkYXRhOwot
ICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBvdXRwdXRTdHJpbmdJbXBsID0gU3RyaW5nSW1wbDo6dHJ5
Q3JlYXRlVW5pbml0aWFsaXplZChvdXRwdXRMZW5ndGgsIGRhdGEpOwotICAgIGlmICghb3V0cHV0
U3RyaW5nSW1wbCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBjb25zdCBTdHJpbmcg
Zmlyc3RTdHJpbmcgPSBzdHJpbmdzLmZpcnN0KCk7Ci0gICAgYXBwZW5kU3RyaW5nVG9EYXRhKGRh
dGEsIGZpcnN0U3RyaW5nKTsKKyAgICBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4g
c2VwYXJhdG9yTGVuZ3RoID0gbV9zZXBhcmF0b3IubGVuZ3RoKCk7CisgICAgQ2hlY2tlZDx1bnNp
Z25lZCwgUmVjb3JkT3ZlcmZsb3c+IHRvdGFsU2VwYXJhdG9yc0xlbmd0aCA9IHNlcGFyYXRvckxl
bmd0aCAqIChudW1iZXJPZlN0cmluZ3MgLSAxKTsKKyAgICBDaGVja2VkPHVuc2lnbmVkLCBSZWNv
cmRPdmVyZmxvdz4gdG90YWxMZW5ndGggPSB0b3RhbFNlcGFyYXRvcnNMZW5ndGggKyBtX2FjY3Vt
dWxhdGVkU3RyaW5nc0xlbmd0aDsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgc3RyaW5n
cy5zaXplKCk7ICsraSkgewotICAgICAgICBhcHBlbmRTdHJpbmdUb0RhdGEoZGF0YSwgc2VwYXJh
dG9yKTsKLSAgICAgICAgYXBwZW5kU3RyaW5nVG9EYXRhKGRhdGEsIHN0cmluZ3NbaV0pOworICAg
IHVuc2lnbmVkIHJlc3VsdDsKKyAgICBpZiAodG90YWxMZW5ndGguc2FmZUdldChyZXN1bHQpID09
IENoZWNrZWRTdGF0ZTo6RGlkT3ZlcmZsb3cpIHsKKyAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVy
cm9yKCZzdGF0ZSk7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KLQotICAgIEFTU0VSVChkYXRh
ID09IChvdXRwdXRTdHJpbmdJbXBsLT5jaGFyYWN0ZXJzPENoYXJhY3RlclR5cGU+KCkgKyBvdXRw
dXRTdHJpbmdJbXBsLT5sZW5ndGgoKSkpOwotICAgIHJldHVybiBvdXRwdXRTdHJpbmdJbXBsLnJl
bGVhc2UoKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlIEpTU3RyaW5nSm9pbmVy
Ojpqb2luKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNTdHJpbmdKb2luZXI6OmpvaW4oRXhl
Y1N0YXRlJiBzdGF0ZSkKIHsKLSAgICBpZiAoIW1faXNWYWxpZCkKLSAgICAgICAgcmV0dXJuIHRo
cm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAgICBBU1NFUlQobV9zdHJpbmdzLnNpemUoKSA9
PSBtX3N0cmluZ3MuY2FwYWNpdHkoKSk7CiAKLSAgICBpZiAoIW1fc3RyaW5ncy5zaXplKCkpCi0g
ICAgICAgIHJldHVybiBqc0VtcHR5U3RyaW5nKGV4ZWMpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9
IGpvaW5lZExlbmd0aChzdGF0ZSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIENoZWNrZWQ8dW5zaWduZWQsIFJlY29y
ZE92ZXJmbG93PiBzZXBhcmF0b3JMZW5ndGggPSBtX3NlcGFyYXRvci5sZW5ndGgoKTsKLSAgICAv
LyBGSVhNRTogYWRkIHNwZWNpYWwgY2FzZXMgb2Ygam9pblN0cmluZ3MoKSBmb3IgKHNlcGFyYXRv
ckxlbmd0aCA9PSAwKSBhbmQgKHNlcGFyYXRvckxlbmd0aCA9PSAxKS4KLSAgICBBU1NFUlQobV9z
dHJpbmdzLnNpemUoKSA+IDApOwotICAgIENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93
PiB0b3RhbFNlcGFyYWN0b3JzTGVuZ3RoID0gc2VwYXJhdG9yTGVuZ3RoICogKG1fc3RyaW5ncy5z
aXplKCkgLSAxKTsKLSAgICBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gb3V0cHV0
U3RyaW5nU2l6ZSA9IHRvdGFsU2VwYXJhY3RvcnNMZW5ndGggKyBtX2FjY3VtdWxhdGVkU3RyaW5n
c0xlbmd0aDsKLQotICAgIHVuc2lnbmVkIGZpbmFsU2l6ZTsKLSAgICBpZiAob3V0cHV0U3RyaW5n
U2l6ZS5zYWZlR2V0KGZpbmFsU2l6ZSkgPT0gQ2hlY2tlZFN0YXRlOjpEaWRPdmVyZmxvdykKLSAg
ICAgICAgcmV0dXJuIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKLSAgICAgICAgCi0gICAg
aWYgKCFvdXRwdXRTdHJpbmdTaXplKQotICAgICAgICByZXR1cm4ganNFbXB0eVN0cmluZyhleGVj
KTsKLQotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBvdXRwdXRTdHJpbmdJbXBsOwotICAgIGlmICht
X2lzOEJpdHMpCi0gICAgICAgIG91dHB1dFN0cmluZ0ltcGwgPSBqb2luU3RyaW5nczxMQ2hhcj4o
bV9zdHJpbmdzLCBtX3NlcGFyYXRvciwgZmluYWxTaXplKTsKKyAgICBpZiAoIWxlbmd0aCkKKyAg
ICAgICAgcmV0dXJuIGpzRW1wdHlTdHJpbmcoJnN0YXRlKTsKKworICAgIC8vIEZJWE1FOiBDb25z
aWRlciBvcHRpbWl6ZWQgc3BlY2lhbCBjYXNlcyBmb3Igc2VwYXJhdG9yIGxlbmd0aCAwIGFuZCAx
LgorICAgIFN0cmluZyByZXN1bHQ7CisgICAgaWYgKG1faXNBbGw4Qml0KQorICAgICAgICByZXN1
bHQgPSBqb2luU3RyaW5nczxMQ2hhcj4obV9zdHJpbmdzLCBtX3NlcGFyYXRvciwgbGVuZ3RoKTsK
ICAgICBlbHNlCi0gICAgICAgIG91dHB1dFN0cmluZ0ltcGwgPSBqb2luU3RyaW5nczxVQ2hhcj4o
bV9zdHJpbmdzLCBtX3NlcGFyYXRvciwgZmluYWxTaXplKTsKKyAgICAgICAgcmVzdWx0ID0gam9p
blN0cmluZ3M8VUNoYXI+KG1fc3RyaW5ncywgbV9zZXBhcmF0b3IsIGxlbmd0aCk7CiAKLSAgICBp
ZiAoIW91dHB1dFN0cmluZ0ltcGwpCi0gICAgICAgIHJldHVybiB0aHJvd091dE9mTWVtb3J5RXJy
b3IoZXhlYyk7CisgICAgaWYgKHJlc3VsdC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIHRocm93
T3V0T2ZNZW1vcnlFcnJvcigmc3RhdGUpOwogCi0gICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGUo
ZXhlYy0+dm0oKSwgb3V0cHV0U3RyaW5nSW1wbC5yZWxlYXNlKCkpOworICAgIHJldHVybiBqc1N0
cmluZygmc3RhdGUsIFdURjo6bW92ZShyZXN1bHQpKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdKb2luZXIuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSm9pbmVyLmgKaW5kZXggNzM5NTBjNmQ3NDVhMGFj
OGNhZjNlY2EzMjI1Mjc3Zjc2NzNlZjI1NC4uYjkxNGNkYjY2N2Y0ZDRkZTIwM2M5ZTRhNDJiYzVj
NDY1YmFlNmRjZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
dHJpbmdKb2luZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmlu
Z0pvaW5lci5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIt
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTI2LDUwICsyNiwxMTIgQEAKICNpZm5kZWYgSlNTdHJpbmdKb2luZXJf
aAogI2RlZmluZSBKU1N0cmluZ0pvaW5lcl9oCiAKKyNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJz
LmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNz
IEV4ZWNTdGF0ZTsKLQotCiBjbGFzcyBKU1N0cmluZ0pvaW5lciB7CiBwdWJsaWM6Ci0gICAgSlNT
dHJpbmdKb2luZXIoY29uc3QgU3RyaW5nJiBzZXBhcmF0b3IsIHNpemVfdCBzdHJpbmdDb3VudCk7
CisgICAgSlNTdHJpbmdKb2luZXIoRXhlY1N0YXRlJiwgTENoYXIgc2VwYXJhdG9yLCB1bnNpZ25l
ZCBzdHJpbmdDb3VudCk7CisgICAgSlNTdHJpbmdKb2luZXIoRXhlY1N0YXRlJiwgU3RyaW5nVmll
dyBzZXBhcmF0b3IsIHVuc2lnbmVkIHN0cmluZ0NvdW50KTsKIAotICAgIHZvaWQgYXBwZW5kKGNv
bnN0IFN0cmluZyYpOwotICAgIEpTVmFsdWUgam9pbihFeGVjU3RhdGUqKTsKKyAgICB2b2lkIGFw
cGVuZChFeGVjU3RhdGUmLCBKU1ZhbHVlKTsKKworICAgIEpTVmFsdWUgam9pbihFeGVjU3RhdGUm
KTsKIAogcHJpdmF0ZToKLSAgICBTdHJpbmcgbV9zZXBhcmF0b3I7Ci0gICAgVmVjdG9yPFN0cmlu
Zz4gbV9zdHJpbmdzOworICAgIHZvaWQgYXBwZW5kKFN0cmluZ1ZpZXdXaXRoVW5kZXJseWluZ1N0
cmluZyYmKTsKKyAgICB2b2lkIGFwcGVuZDhCaXQoY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBh
cHBlbmRMaXRlcmFsKGNvbnN0IElkZW50aWZpZXImKTsKKyAgICB2b2lkIGFwcGVuZEVtcHR5U3Ry
aW5nKCk7CisgICAgdW5zaWduZWQgam9pbmVkTGVuZ3RoKEV4ZWNTdGF0ZSYpIGNvbnN0OwogCisg
ICAgTENoYXIgbV9zaW5nbGVDaGFyYWN0ZXJTZXBhcmF0b3I7CisgICAgU3RyaW5nVmlldyBtX3Nl
cGFyYXRvcjsKKyAgICBWZWN0b3I8U3RyaW5nVmlld1dpdGhVbmRlcmx5aW5nU3RyaW5nPiBtX3N0
cmluZ3M7CiAgICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IG1fYWNjdW11bGF0
ZWRTdHJpbmdzTGVuZ3RoOwotICAgIGJvb2wgbV9pc1ZhbGlkOwotICAgIGJvb2wgbV9pczhCaXRz
OworICAgIGJvb2wgbV9pc0FsbDhCaXQgeyB0cnVlIH07CiB9OwogCi1pbmxpbmUgSlNTdHJpbmdK
b2luZXI6OkpTU3RyaW5nSm9pbmVyKGNvbnN0IFN0cmluZyYgc2VwYXJhdG9yLCBzaXplX3Qgc3Ry
aW5nQ291bnQpCitpbmxpbmUgSlNTdHJpbmdKb2luZXI6OkpTU3RyaW5nSm9pbmVyKEV4ZWNTdGF0
ZSYgc3RhdGUsIFN0cmluZ1ZpZXcgc2VwYXJhdG9yLCB1bnNpZ25lZCBzdHJpbmdDb3VudCkKICAg
ICA6IG1fc2VwYXJhdG9yKHNlcGFyYXRvcikKLSAgICAsIG1faXNWYWxpZCh0cnVlKQotICAgICwg
bV9pczhCaXRzKG1fc2VwYXJhdG9yLmlzOEJpdCgpKQorICAgICwgbV9pc0FsbDhCaXQobV9zZXBh
cmF0b3IuaXM4Qml0KCkpCit7CisgICAgaWYgKCFtX3N0cmluZ3MudHJ5UmVzZXJ2ZUNhcGFjaXR5
KHN0cmluZ0NvdW50KSkKKyAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKCZzdGF0ZSk7Cit9
CisKK2lubGluZSBKU1N0cmluZ0pvaW5lcjo6SlNTdHJpbmdKb2luZXIoRXhlY1N0YXRlJiBzdGF0
ZSwgTENoYXIgc2VwYXJhdG9yLCB1bnNpZ25lZCBzdHJpbmdDb3VudCkKKyAgICA6IG1fc2luZ2xl
Q2hhcmFjdGVyU2VwYXJhdG9yKHNlcGFyYXRvcikKKyAgICAsIG1fc2VwYXJhdG9yIHsgJm1fc2lu
Z2xlQ2hhcmFjdGVyU2VwYXJhdG9yLCAxIH0KK3sKKyAgICBpZiAoIW1fc3RyaW5ncy50cnlSZXNl
cnZlQ2FwYWNpdHkoc3RyaW5nQ291bnQpKQorICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3Io
JnN0YXRlKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpTU3RyaW5nSm9pbmVyOjphcHBlbmQo
U3RyaW5nVmlld1dpdGhVbmRlcmx5aW5nU3RyaW5nJiYgc3RyaW5nKQogewotICAgIEFTU0VSVCgh
bV9zZXBhcmF0b3IuaXNOdWxsKCkpOwotICAgIG1faXNWYWxpZCA9IG1fc3RyaW5ncy50cnlSZXNl
cnZlQ2FwYWNpdHkoc3RyaW5nQ291bnQpOworICAgIG1fYWNjdW11bGF0ZWRTdHJpbmdzTGVuZ3Ro
ICs9IHN0cmluZy52aWV3Lmxlbmd0aCgpOworICAgIG1faXNBbGw4Qml0ID0gbV9pc0FsbDhCaXQg
JiYgc3RyaW5nLnZpZXcuaXM4Qml0KCk7CisgICAgbV9zdHJpbmdzLnVuY2hlY2tlZEFwcGVuZChX
VEY6Om1vdmUoc3RyaW5nKSk7CiB9CiAKLWlubGluZSB2b2lkIEpTU3RyaW5nSm9pbmVyOjphcHBl
bmQoY29uc3QgU3RyaW5nJiBzdHIpCitBTFdBWVNfSU5MSU5FIHZvaWQgSlNTdHJpbmdKb2luZXI6
OmFwcGVuZDhCaXQoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7Ci0gICAgaWYgKCFtX2lzVmFsaWQp
CisgICAgQVNTRVJUKHN0cmluZy5pczhCaXQoKSk7CisgICAgbV9hY2N1bXVsYXRlZFN0cmluZ3NM
ZW5ndGggKz0gc3RyaW5nLmxlbmd0aCgpOworICAgIG1fc3RyaW5ncy51bmNoZWNrZWRBcHBlbmQo
eyBzdHJpbmcsIHN0cmluZyB9KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpTU3RyaW5nSm9p
bmVyOjphcHBlbmRMaXRlcmFsKGNvbnN0IElkZW50aWZpZXImIGxpdGVyYWwpCit7CisgICAgbV9h
Y2N1bXVsYXRlZFN0cmluZ3NMZW5ndGggKz0gbGl0ZXJhbC5sZW5ndGgoKTsKKyAgICBBU1NFUlQo
bGl0ZXJhbC5zdHJpbmcoKS5pczhCaXQoKSk7CisgICAgbV9zdHJpbmdzLnVuY2hlY2tlZEFwcGVu
ZCh7IGxpdGVyYWwuc3RyaW5nKCksIHsgfSB9KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpT
U3RyaW5nSm9pbmVyOjphcHBlbmRFbXB0eVN0cmluZygpCit7CisgICAgbV9zdHJpbmdzLnVuY2hl
Y2tlZEFwcGVuZCh7IHsgfSwgeyB9IH0pOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSlNTdHJp
bmdKb2luZXI6OmFwcGVuZChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAg
IC8vIFRoZSBmb2xsb3dpbmcgY29kZSBkaWZmZXJzIGZyb20gdXNpbmcgdGhlIHJlc3VsdCBvZiBK
U1ZhbHVlOjp0b1N0cmluZyBpbiB0aGUgZm9sbG93aW5nIHdheXM6CisgICAgLy8gMSkgSXQncyBp
bmxpbmVkIG1vcmUgdGhhbiBKU1ZhbHVlOjp0b1N0cmluZyBpcy4KKyAgICAvLyAyKSBJdCBpbmNs
dWRlcyBjb252ZXJzaW9uIHRvIFdURjo6U3RyaW5nIGluIGEgd2F5IHRoYXQgYXZvaWRzIGFsbG9j
YXRpbmcgY29waWVzIG9mIHN1YnN0cmluZ3MuCisgICAgLy8gMykgSXQgZG9lc24ndCBjcmVhdGUg
YSBKU1N0cmluZyBmb3IgbnVtYmVycywgdHJ1ZSwgb3IgZmFsc2UuCisgICAgLy8gNCkgSXQgdHVy
bnMgdW5kZWZpbmVkIGFuZCBudWxsIGludG8gdGhlIGVtcHR5IHN0cmluZyBpbnN0ZWFkIG9mICJ1
bmRlZmluZWQiIGFuZCAibnVsbCIuCisgICAgLy8gNSkgSXQgdXNlcyBvcHRpbWl6ZWQgY29kZSBw
YXRocyBmb3IgYWxsIHRoZSBjYXNlcyBrbm93biB0byBiZSA4LWJpdCBhbmQgZm9yIHRoZSBlbXB0
eSBzdHJpbmcuCisKKyAgICBpZiAodmFsdWUuaXNDZWxsKCkpIHsKKyAgICAgICAgaWYgKHZhbHVl
LmFzQ2VsbCgpLT5pc1N0cmluZygpKSB7CisgICAgICAgICAgICBhcHBlbmQoYXNTdHJpbmcodmFs
dWUpLT52aWV3V2l0aFVuZGVybHlpbmdTdHJpbmcoc3RhdGUpKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICBhcHBlbmQodmFsdWUudG9TdHJpbmcoJnN0YXRlKS0+dmll
d1dpdGhVbmRlcmx5aW5nU3RyaW5nKHN0YXRlKSk7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAK
LSAgICBtX3N0cmluZ3MuYXBwZW5kKHN0cik7Ci0gICAgaWYgKCFzdHIuaXNOdWxsKCkpIHsKLSAg
ICAgICAgbV9hY2N1bXVsYXRlZFN0cmluZ3NMZW5ndGggKz0gc3RyLmxlbmd0aCgpOwotICAgICAg
ICBtX2lzOEJpdHMgPSBtX2lzOEJpdHMgJiYgc3RyLmlzOEJpdCgpOworICAgIGlmICh2YWx1ZS5p
c0ludDMyKCkpIHsKKyAgICAgICAgYXBwZW5kOEJpdChzdGF0ZS52bSgpLm51bWVyaWNTdHJpbmdz
LmFkZCh2YWx1ZS5hc0ludDMyKCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAo
dmFsdWUuaXNEb3VibGUoKSkgeworICAgICAgICBhcHBlbmQ4Qml0KHN0YXRlLnZtKCkubnVtZXJp
Y1N0cmluZ3MuYWRkKHZhbHVlLmFzRG91YmxlKCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBpZiAodmFsdWUuaXNUcnVlKCkpIHsKKyAgICAgICAgYXBwZW5kOEJpdChzdGF0ZS52bSgp
LnByb3BlcnR5TmFtZXMtPnRydWVLZXl3b3JkLnN0cmluZygpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBpZiAodmFsdWUuaXNGYWxzZSgpKSB7CisgICAgICAgIGFwcGVuZDhCaXQoc3Rh
dGUudm0oKS5wcm9wZXJ0eU5hbWVzLT5mYWxzZUtleXdvcmQuc3RyaW5nKCkpOworICAgICAgICBy
ZXR1cm47CiAgICAgfQorICAgIEFTU0VSVCh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKTsKKyAg
ICBhcHBlbmRFbXB0eVN0cmluZygpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi9WZWN0b3IuaCBiL1NvdXJjZS9XVEYvd3RmL1ZlY3Rvci5oCmluZGV4IGQ2MWM1ZmZjMzZhMGNi
OGVhMWU5ZTdjNGZmNjU1OWU5OWVhNjZkMDcuLmRhY2RiMGE5NDkwZjk0NzlmN2FhODdjYmY2NDBi
MzMyODlmYjViNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1ZlY3Rvci5oCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL1ZlY3Rvci5oCkBAIC03MjQsOSArNzI0LDEyIEBAIHB1YmxpYzoKICAgICB2
b2lkIGNsZWFyKCkgeyBzaHJpbmtDYXBhY2l0eSgwKTsgfQogCiAgICAgdm9pZCBhcHBlbmQoVmFs
dWVUeXBlJiYgdmFsdWUpIHsgYXBwZW5kPFZhbHVlVHlwZT4oc3RkOjpmb3J3YXJkPFZhbHVlVHlw
ZT4odmFsdWUpKTsgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHZvaWQgYXBwZW5kKGNvbnN0
IFUqLCBzaXplX3QpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHZvaWQgYXBwZW5kKFUmJik7
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gdm9pZCB1bmNoZWNrZWRBcHBlbmQoVSYmIHZhbCk7
CisKKyAgICB2b2lkIHVuY2hlY2tlZEFwcGVuZChWYWx1ZVR5cGUmJiB2YWx1ZSkgeyB1bmNoZWNr
ZWRBcHBlbmQ8VmFsdWVUeXBlPihzdGQ6OmZvcndhcmQ8VmFsdWVUeXBlPih2YWx1ZSkpOyB9Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gdm9pZCB1bmNoZWNrZWRBcHBlbmQoVSYmKTsKKworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFU+IHZvaWQgYXBwZW5kKGNvbnN0IFUqLCBzaXplX3QpOwogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFUsIHNpemVfdCBvdGhlckNhcGFjaXR5PiB2b2lkIGFwcGVuZFZl
Y3Rvcihjb25zdCBWZWN0b3I8VSwgb3RoZXJDYXBhY2l0eT4mKTsKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBVPiBib29sIHRyeUFwcGVuZChjb25zdCBVKiwgc2l6ZV90KTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>255396</attachid>
            <date>2015-06-22 23:45:39 -0700</date>
            <delta_ts>2015-06-23 08:30:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-146191-20150622234456.patch</filename>
            <type>text/plain</type>
            <size>51777</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg1ODYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
ZDk2ZTg4OWJiMTgwZjdiYmFiZDQ4MjU1N2U4NjEyN2U5NWUzOGRlLi41ZGVjNzBkMDQ5MTBkOTgy
NjhlMjU0ZWNkMzE3OTc3OTRiODBkMzk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5MSBAQAorMjAxNS0wNi0yMiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgTWFrZSBBcnJheS5qb2luIHdvcmsgZGlyZWN0bHkgb24gc3Vic3RyaW5ncyB3aXRo
b3V0IHJlaWZ5aW5nIHRoZW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE0NjE5MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEJzaWRlcyB0aGUgQXJyYXkuam9pbiBjaGFuZ2UsIHRoaXMgaGFzIG90aGVyIG9w
dGltaXphdGlvbnMgYmFzZWQgb24KKyAgICAgICAgcHJvZmlsaW5nIHRoZSBQZWFjZWtlZXBlciBh
cnJheSBiZW5jaG1hcmsuCisKKyAgICAgICAgSSBtZWFzdXJlZCBhIDE0JSBzcGVlZCBpbXByb3Zl
bWVudCBpbiB0aGUgUGVhY2VrZWVwZXIgYXJyYXkgYmVuY2htYXJrLgorCisgICAgICAgIFN0aWxs
IGEgbG90IG9mIGxvdyBoYW5naW5nIGZydWl0IGluIHRoYXQgdGVzdCBiZWNhdXNlIHNvIG1hbnkg
b2YgZnVuY3Rpb25zCisgICAgICAgIG9uIHRoZSBhcnJheSBwcm90b3R5cGUgYXJlIG5vdCBvcHRp
bWl6aW5nIGZvciBzaW1wbGUgY2FzZXMuIEZvciBleGFtcGxlLAorICAgICAgICB0aGUgcmV2ZXJz
ZSBmdW5jdGlvbiBkb2VzIGluZGl2aWR1YWwgZ2V0IGFuZCBwdXQgY2FsbHMgZXZlbiB3aGVuIHRo
ZSBhcnJheQorICAgICAgICBpcyBlbnRpcmVseSBtYWRlIHVwIG9mIGludGVnZXJzIGluIGNvbnRp
Z3VvdXMgc3RvcmFnZS4KKworICAgICAgICAqIHJ1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwOgor
ICAgICAgICAoSlNDOjpnZXRQcm9wZXJ0eSk6IFVzZSB0cnlHZXRJbmRleFF1aWNrbHkgZmlyc3Qg
YmVmb3JlIGdldFByb3BlcnR5U2xvdC4KKyAgICAgICAgKEpTQzo6YXJndW1lbnRDbGFtcGVkSW5k
ZXhGcm9tU3RhcnRPckVuZCk6IE1hcmtlZCBpbmxpbmUuCisgICAgICAgIChKU0M6OnNoaWZ0KTog
VXNlIHRoZSBnZXRQcm9wZXJ0eSBoZWxwZXIgaW4gdGhpcyBmaWxlIGluc3RlYWQgb2YgdXNpbmcK
KyAgICAgICAgZ2V0UHJvcGVydHlTbG90LiBVc2UgcHV0QnlJbmRleElubGluZSBpbnN0ZWFkIG9m
IGNhbGxpbmcgcHV0QnlJbmRleCBkaXJlY3RseS4KKyAgICAgICAgSW4gYm90aCBjYXNlcyB0aGlz
IGNhbiB5aWVsZCBhIGZhc3RlciBjb2RlIHBhdGguCisgICAgICAgIChKU0M6OnVuc2hpZnQpOiBE
aXR0by4KKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNUb1N0cmluZyk6IFVwZGF0ZWQgdG8g
dXNlIHRoZSBuZXcgSlNTdHJpbmdKb2luZXIKKyAgICAgICAgaW50ZXJmYWNlLiBDaGFuZ2VkIGxv
Y2FsIHZhcmlhYmxlIG5hbWUgdG8gdGhpc0FycmF5IHNpbmNlIGl0J3Mgbm90IGEKKyAgICAgICAg
SlNPYmplY3QqLiBDaGFuZ2VkIGxvb3AgaW5kZXggdG8gaSBpbnN0ZWFkIG9mIGsuCisgICAgICAg
IChKU0M6OmFycmF5UHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcpOiBVcGRhdGVkIHRvIHVzZSB0aGUg
bmV3IEpTU3RyaW5nSm9pbmVyCisgICAgICAgIGludGVyZmFjZS4gUmVuYW1lZCB0aGlzT2JqIHRv
IHRoaXNPYmplY3QuIEFkZGVkIGEgbWlzc2luZyBleGNlcHRpb24gY2hlY2sKKyAgICAgICAgYWZ0
ZXIgdGhlIHRvTG9jYWxlU3RyaW5nIGZ1bmN0aW9uIGlzIGNhbGxlZCwgYnV0IGJlZm9yZSB0b1N0
cmluZyBpcyBjYWxsZWQKKyAgICAgICAgdGhlIHJlc3VsdCBvZiB0aGF0IGZ1bmN0aW9uLgorICAg
ICAgICAoSlNDOjphcnJheVByb3RvRnVuY0pvaW4pOiBVcGRhdGVkIHRvIHVzZSB0aGUgbmV3IEpT
U3RyaW5nSm9pbnRlciBpbnRlcmZhY2UuCisgICAgICAgIEFkZGVkIGEgbWlzc2luZyBleGNlcHRp
b24gY2hlY2sgYWZ0ZXIgY2FsbGluZyB0b1N0cmluZyBvbiB0aGUgc2VwYXJhdG9yCisgICAgICAg
IGJ1dCBiZWZvcmUgY2FsbGluZyBnZXQgdG8gZ2V0IHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSBh
cnJheS1saWtlIG9iamVjdAorICAgICAgICBiZWluZyBqb2luZWQuIENoYW5nZWQgbG9vcCBpbmRl
eCB0byBpIGluc3RlYWQgb2Ygay4gQWRkZWQgbWlzc2luZyBleGNlcHRpb24KKyAgICAgICAgY2hl
Y2sgYWZ0ZXIgY2FsbGluZyB0b1N0cmluZyBvbiBlYWNoIHN0cmluZyBmcm9tIHRoZSBhcnJheSBi
ZWZvcmUgY2FsbGluZworICAgICAgICBnZXQgZm9yIHRoZSBuZXh0IGVsZW1lbnQuCisgICAgICAg
IChKU0M6OmFycmF5UHJvdG9GdW5jQ29uY2F0KTogVXNlIEpTQXJyYXk6Omxlbmd0aCBpbnN0ZWFk
IG9mIHVzaW5nIHRoZQorICAgICAgICBnZXRMZW5ndGggZnVuY3Rpb24uCisgICAgICAgIChKU0M6
OmFycmF5UHJvdG9GdW5jUmV2ZXJzZSk6IERpdHRvLiBBbHNvIHVzZSBwdXRCeUluZGV4SW5saW5l
LgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1NoaWZ0KTogRGl0dG8uCisgICAgICAgIChK
U0M6OmFycmF5UHJvdG9GdW5jU3BsaWNlKTogVXNlIGdldEluZGV4IGluc3RlYWQgb2YgZ2V0LCB3
aGljaCBpbmNsdWRlcyBzb21lCisgICAgICAgIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucy4KKyAg
ICAgICAgKEpTQzo6Z2V0T3JIb2xlKTogRGVsZXRlZC4gVW51c2VkIGZ1bmN0aW9uLgorICAgICAg
ICAoSlNDOjphcnJheVByb3RvRnVuY1VuU2hpZnQpOiBVc2UgcHV0QnlJbmRleElubGluZS4KKwor
ICAgICAgICAqIHJ1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHA6CisgICAgICAgIChKU0M6OmVy
cm9yRGVzY3JpcHRpb25Gb3JWYWx1ZSk6IFJlbW92ZWQgdGhlIGR1cGxpY2F0ZSBjb3B5IG9mIHRo
ZSB0aGUgbG9naWMKKyAgICAgICAgZnJvbSBKU1ZhbHVlOjp0b1N0cmluZy4KKworICAgICAgICAq
IHJ1bnRpbWUvSlNDSlNWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OnRvU3RyaW5n
U2xvd0Nhc2UpOiBJbXByb3ZlZCB0aGUgcGVyZm9ybWFuY2Ugd2hlbiBjb252ZXJ0aW5nIGEKKyAg
ICAgICAgc21hbGwgaW50ZWdlciB0byBhIHNpbmdsZSBjaGFyYWN0ZXIgc3RyaW5nLgorICAgICAg
ICAoSlNDOjpKU1ZhbHVlOjp0b1dURlN0cmluZ1Nsb3dDYXNlKTogTW92ZWQgdGhlIGNvbnRlbnRz
IG9mIHRoZQorICAgICAgICBpbmxpbmVKU1ZhbHVlTm90U3RyaW5ndG9TdHJpbmcgZnVuY3Rpb24g
aGVyZS4KKyAgICAgICAgKiBydW50aW1lL0pTQ0pTVmFsdWUuaDogUmVtb3ZlZCBubyBsb25nZXIg
dXNlZCB0b1dURlN0cmluZ0lubGluZSBhbmQgZml4ZWQKKyAgICAgICAgYSBjb21tZW50IHdpdGgg
YSB0eXBvLgorCisgICAgICAgICogcnVudGltZS9KU09iamVjdC5oOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6cHV0QnlJbmRleElubGluZSk6IE1hcmtlZCBBTFdBWVNfSU5MSU5FIGJlY2F1c2Ug
dGhpcyB3YXMgbm90CisgICAgICAgIGdldHRpbmcgaW5saW5lZCBhdCBzb21lIGNhbGwgc2l0ZXMu
CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjppbmRleGluZ0RhdGEpOiBEZWxldGVkLiBVbnVzZWQg
ZnVuY3Rpb24uCisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjdXJyZW50SW5kZXhpbmdEYXRhKTog
RGVsZXRlZC4gVW51c2VkIGZ1bmN0aW9uLgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0SG9s
eUluZGV4UXVpY2tseSk6IERlbGV0ZWQuIFVudXNlZCBmdW5jdGlvbi4KKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OnJlbGV2YW50TGVuZ3RoKTogRGVsZXRlZC4gVW51c2VkIGZ1bmN0aW9uLgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6Y3VycmVudFJlbGV2YW50TGVuZ3RoKTogRGVsZXRlZC4gVW51
c2VkIGZ1bmN0aW9uLgorCisgICAgICAgICogcnVudGltZS9KU1N0cmluZy5oOiBBZGRlZCB0aGUg
U3RyaW5nVmlld1dpdGhVbmRlcmx5aW5nU3RyaW5nIHN0cnVjdCBhbmQKKyAgICAgICAgdGhlIHZp
ZXdXaXRoVW5kZXJseWluZ1N0cmluZyBmdW5jdGlvbi4gUmVtb3ZlZCB0aGUgaW5saW5lSlNWYWx1
ZU5vdFN0cmluZ3RvU3RyaW5nCisgICAgICAgIGFuZCB0b1dURlN0cmluZ0lubGluZSBmdW5jdGlv
bnMuCisKKyAgICAgICAgKiBydW50aW1lL0pTU3RyaW5nSm9pbmVyLmNwcDoKKyAgICAgICAgKEpT
Qzo6YXBwZW5kU3RyaW5nVG9EYXRhKTogQ2hhbmdlZCB0aGlzIHRvIGJlIGEgdGVtcGxhdGUgaW5z
dGVhZCBvZiB3cml0aW5nCisgICAgICAgIGl0IG91dCwgc2luY2UgU3RyaW5nVmlldzo6Z2V0Q2hh
cmFjdGVyc1dpdGhVcGNvbnZlcnQgZG9lcyBhbG1zb3QgZXhhY3RseSB3aGF0CisgICAgICAgIHRo
aXMgZnVuY3Rpb24gd2FzIHRyeWluZyB0byBkby4KKyAgICAgICAgKEpTQzo6am9pblN0cmluZ3Mp
OiBSZXdyb3RlIHRoaXMgdG8gdXNlIFN0cmluZ1ZpZXcuCisgICAgICAgIChKU0M6OkpTU3RyaW5n
Sm9pbmVyOjpqb2luZWRMZW5ndGgpOiBBZGRlZC4gRmFjdG9yZWQgb3V0IGZyb20gdGhlIGpvaW4g
ZnVuY3Rpb24uCisgICAgICAgIChKU0M6OkpTU3RyaW5nSm9pbmVyOjpqb2luKTogUmV3cm90ZSB0
byBtYWtlIGl0IGEgYml0IHNpbXBsZXIuIEFkZGVkIGFuIGFzc2VydGlvbgorICAgICAgICB0aGF0
IHdlIGVudGlyZWx5IGZpbGxlZCBjYXBhY2l0eSwgc2luY2Ugd2UgYXJlIG5vdyByZXNlcnZpbmcg
Y2FwYWNpdHkgYW5kIHVzaW5nCisgICAgICAgIHVuY2hlY2tlZEFwcGVuZC4gVXNlIFN0cmluZyBp
bnN0ZWFkIG9mIFJlZlB0cjxTdHJpbmdJbXBsPiBiZWNhdXNlIHRoZXJlIHdhcyBubworICAgICAg
ICBwYXJ0aWN1bGFyIHZhbHVlIHRvIHVzaW5nIHRoZSBpbXBsIGRpcmVjdGx5LgorCisgICAgICAg
ICogcnVudGltZS9KU1N0cmluZ0pvaW5lci5oOiBDaGFuZ2VkIHRoZSBpbnRlcmZhY2UgdG8gdGhl
IGNsYXNzIHRvIHVzZSBTdHJpbmdWaWV3LgorICAgICAgICBBbHNvIGNoYW5nZWQgdGhpcyBjbGFz
cyBzbyBpdCBub3cgaGFzIHRoZSByZXNwb25zaWJpbGl0eSB0byBjb252ZXJ0IGVhY2ggSlNWYWx1
ZQorICAgICAgICBpbnRvIGEgc3RyaW5nLiBUaGlzIGxldCB1cyBzaGFyZSBtb3JlIGNvZGUgYmV0
d2VlbiB0b1N0cmluZyBhbmQgam9pbiwgYW5kIGFsc28KKyAgICAgICAgbGV0cyB1cyB1c2UgdGhl
IG5ldyB2aWV3V2l0aFVuZGVybHlpbmdTdHJpbmcgZnVuY3Rpb24sIHdoaWNoIGNvdWxkIGJlIGNv
bmZ1c2luZyBhdAorICAgICAgICBhbGwgdGhlIGNhbGwgc2l0ZXMsIGJ1dCBpcyBlYXNpZXIgdG8g
dW5kZXJzdGFuZCBoZXJlLgorCiAyMDE1LTA2LTIyICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50
ZWFAZ21haWwuY29tPgogCiAgICAgICAgIFtFUzZdIEFsbG93IHRyYWlsaW5nIGNvbW1hIGluIEFy
cmF5QmluZGluZ1BhdHRlcm4gYW5kIE9iamVjdEJpbmRpbmdQYXR0ZXJuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGNhZDIwMGIy
ODg3MjIxNTUyNWZmMmY0YmI3MGI2MjFlM2I3MzVmOWYuLjU1NGI0Njg5NjAzNGU4NTM2YTNlZTNh
NjdjNzNmNjk0YWVhOTc5OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTUtMDYtMjIgIERhcmlu
IEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIE1ha2UgQXJyYXkuam9pbiB3b3Jr
IGRpcmVjdGx5IG9uIHN1YnN0cmluZ3Mgd2l0aG91dCByZWlmeWluZyB0aGVtCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDYxOTEKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9WZWN0b3IuaDogQWRk
ZWQgYW4gb3ZlcmxvYWQgb2YgdW5jaGVja2VkQXBwZW5kIGxpa2UgdGhlIG9uZSB3ZSBhZGRlZAor
ICAgICAgICBhIHdoaWxlIGJhY2ssIGEgbm9uLXRlbXBsYXRlIGZ1bmN0aW9uIHRoYXQgZm9yd2Fy
ZHMgdGhyb3VnaCB0byB0aGUgZnVuY3Rpb24KKyAgICAgICAgdGVtcGxhdGUuIFRoaXMgbGV0cyB1
cyBjYWxsIHVuY2hlY2tlZEFwcGVuZCBvbiBhbiBhcmd1bWVudCBsaXN0IGFuZCBoYXZlIGl0Cisg
ICAgICAgIHByb3Blcmx5IGNvbnZlcnQgaXQgdG8gdGhlIFZlY3RvcidzIGVsZW1lbnQgdHlwZS4K
KworICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaDoKKyAgICAgICAgKFdURjo6U3RyaW5n
Vmlldzo6Z2V0Q2hhcmFjdGVyc1dpdGhVcGNvbnZlcnQpOiBDaGFuZ2VkIHRvIG5vdCB1c2UgbWVt
Y3B5OworICAgICAgICBzYXcgc29tZSBpbmRpY2F0aW9uIHRoZSBoYW5kLXdyaXR0ZW4gbG9vcCB3
YXMgZmFzdGVyIHdoZW4gcHJvZmlsaW5nLiBBbHNvCisgICAgICAgIHVzZSBtX2xlbmd0aCBkaXJl
Y3RseSB3aGVuIHdlIGtub3cgd2UgYXJlIGRlYWxpbmcgd2l0aCBhbiA4LWJpdCBzdHJpbmcsCisg
ICAgICAgIHNpbmNlIHRoZSBtYXNraW5nIHRoYXQgdGhlIGluZGV4IGZ1bmN0aW9uIGRvZXMgaXMg
bm90IG5lZWRlZCBpbiB0aGF0IGNhc2UuCisgICAgICAgIChXVEY6OlN0cmluZ1ZpZXc6OlVwY29u
dmVydGVkQ2hhcmFjdGVyczo6VXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKTogRGl0dG8uCisgICAgICAg
IChXVEY6OlN0cmluZ1ZpZXc6OnRvU3RyaW5nKTogRGl0dG8uCisgICAgICAgIChXVEY6OlN0cmlu
Z1ZpZXc6OnRvRmxvYXQpOiBEaXR0by4KKyAgICAgICAgKFdURjo6U3RyaW5nVmlldzo6dG9JbnQp
OiBEaXR0by4KKyAgICAgICAgKFdURjo6U3RyaW5nVmlldzo6dG9TdHJpbmdXaXRob3V0Q29weWlu
Zyk6IERpdHRvLgorICAgICAgICAoV1RGOjpTdHJpbmdWaWV3OjpmaW5kKTogRGl0dG8uCisKIDIw
MTUtMDYtMjIgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAg
ICBGaXggYnVpbGQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cnJheVByb3RvdHlwZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVBy
b3RvdHlwZS5jcHAKaW5kZXggOTI4MDRkNjIyNWI3YmNkM2ZlMjA0NDIyZjg3ZDA1ZjU2ZjlmOTc4
NC4uMjlkMmE0NDA4Yzg4MGZlNmRhYjZhMTkwODZjODI0MmQxNmYzZDlkMSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcApAQCAtMTM4LDEx
ICsxMzgsMTIgQEAgdm9pZCBBcnJheVByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0gQXJyYXkgRnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAot
Ly8gSGVscGVyIGZ1bmN0aW9uCi1zdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldFByb3Bl
cnR5KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iaiwgdW5zaWduZWQgaW5kZXgpCitzdGF0
aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldFByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIG9iamVjdCwgdW5zaWduZWQgaW5kZXgpCiB7Ci0gICAgUHJvcGVydHlTbG90IHNsb3Qo
b2JqKTsKLSAgICBpZiAoIW9iai0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGluZGV4LCBzbG90KSkK
KyAgICBpZiAoSlNWYWx1ZSByZXN1bHQgPSBvYmplY3QtPnRyeUdldEluZGV4UXVpY2tseShpbmRl
eCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgUHJvcGVydHlTbG90IHNsb3Qob2JqZWN0
KTsKKyAgICBpZiAoIW9iamVjdC0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGluZGV4LCBzbG90KSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICByZXR1cm4gc2xvdC5nZXRWYWx1ZShleGVj
LCBpbmRleCk7CiB9CkBAIC0xNjAsNyArMTYxLDcgQEAgc3RhdGljIHZvaWQgcHV0TGVuZ3RoKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iaiwgSlNWYWx1ZSB2YWx1ZSkKICAgICBvYmotPm1l
dGhvZFRhYmxlKCktPnB1dChvYmosIGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgs
IHZhbHVlLCBzbG90KTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGFyZ3VtZW50Q2xhbXBlZEluZGV4
RnJvbVN0YXJ0T3JFbmQoRXhlY1N0YXRlKiBleGVjLCBpbnQgYXJndW1lbnQsIHVuc2lnbmVkIGxl
bmd0aCwgdW5zaWduZWQgdW5kZWZpbmVkVmFsdWUgPSAwKQorc3RhdGljIGlubGluZSB1bnNpZ25l
ZCBhcmd1bWVudENsYW1wZWRJbmRleEZyb21TdGFydE9yRW5kKEV4ZWNTdGF0ZSogZXhlYywgaW50
IGFyZ3VtZW50LCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHVuZGVmaW5lZFZhbHVlID0gMCkK
IHsKICAgICBKU1ZhbHVlIHZhbHVlID0gZXhlYy0+YXJndW1lbnQoYXJndW1lbnQpOwogICAgIGlm
ICh2YWx1ZS5pc1VuZGVmaW5lZCgpKQpAQCAtMTc0LDcgKzE3NSw2IEBAIHN0YXRpYyB1bnNpZ25l
ZCBhcmd1bWVudENsYW1wZWRJbmRleEZyb21TdGFydE9yRW5kKEV4ZWNTdGF0ZSogZXhlYywgaW50
IGFyZ3VtZW50CiAgICAgcmV0dXJuIGluZGV4RG91YmxlID4gbGVuZ3RoID8gbGVuZ3RoIDogc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGluZGV4RG91YmxlKTsKIH0KIAotCiAvLyBUaGUgc2hpZnQvdW5z
aGlmdCBmdW5jdGlvbiBpbXBsZW1lbnQgdGhlIHNoaWZ0L3Vuc2hpZnQgYmVoYXZpb3VyIHJlcXVp
cmVkCiAvLyBieSB0aGUgY29ycmVzcG9uZGluZyBhcnJheSBwcm90b3R5cGUgbWV0aG9kcywgYW5k
IGJ5IHNwbGljZS4gSW4gYm90aCBjYXNlcywKIC8vIHRoZSBtZXRob2RzIGFyZSBvcGVyYXRpbmcg
YW4gYW4gYXJyYXkgb3IgYXJyYXkgbGlrZSBvYmplY3QuCkBAIC0xODksNiArMTg5LDcgQEAgc3Rh
dGljIHVuc2lnbmVkIGFyZ3VtZW50Q2xhbXBlZEluZGV4RnJvbVN0YXJ0T3JFbmQoRXhlY1N0YXRl
KiBleGVjLCBpbnQgYXJndW1lbnQKIC8vIGN1cnJlbnRDb3VudCkgd2lsbCBiZSBzaGlmdGVkIHRv
IHRoZSBsZWZ0IG9yIHJpZ2h0IGFzIGFwcHJvcHJpYXRlOyBpbiB0aGUKIC8vIGNhc2Ugb2Ygc2hp
ZnQgdGhpcyBtdXN0IGJlIHJlbW92aW5nIHZhbHVlcywgaW4gdGhlIGNhc2Ugb2YgdW5zaGlmdCB0
aGlzCiAvLyBtdXN0IGJlIGludHJvZHVjaW5nIG5ldyB2YWx1ZXMuCisKIHRlbXBsYXRlPEpTQXJy
YXk6OlNoaWZ0Q291bnRNb2RlIHNoaWZ0Q291bnRNb2RlPgogdm9pZCBzaGlmdChFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCB1bnNpZ25lZCBoZWFkZXIsIHVuc2lnbmVkIGN1cnJl
bnRDb3VudCwgdW5zaWduZWQgcmVzdWx0Q291bnQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKQEAgLTIw
NywxMiArMjA4LDEwIEBAIHZvaWQgc2hpZnQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhp
c09iaiwgdW5zaWduZWQgaGVhZGVyLCB1bnNpZ25lZCBjdXJyZW50CiAgICAgZm9yICh1bnNpZ25l
ZCBrID0gaGVhZGVyOyBrIDwgbGVuZ3RoIC0gY3VycmVudENvdW50OyArK2spIHsKICAgICAgICAg
dW5zaWduZWQgZnJvbSA9IGsgKyBjdXJyZW50Q291bnQ7CiAgICAgICAgIHVuc2lnbmVkIHRvID0g
ayArIHJlc3VsdENvdW50OwotICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzT2JqKTsKLSAg
ICAgICAgaWYgKHRoaXNPYmotPmdldFByb3BlcnR5U2xvdChleGVjLCBmcm9tLCBzbG90KSkgewot
ICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHNsb3QuZ2V0VmFsdWUoZXhlYywgZnJvbSk7Cisg
ICAgICAgIGlmIChKU1ZhbHVlIHZhbHVlID0gZ2V0UHJvcGVydHkoZXhlYywgdGhpc09iaiwgZnJv
bSkpIHsKICAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICB0aGlzT2JqLT5tZXRob2RUYWJsZShleGVjLT52bSgp
KS0+cHV0QnlJbmRleCh0aGlzT2JqLCBleGVjLCB0bywgdmFsdWUsIHRydWUpOworICAgICAgICAg
ICAgdGhpc09iai0+cHV0QnlJbmRleElubGluZShleGVjLCB0bywgdmFsdWUsIHRydWUpOwogICAg
ICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfSBlbHNlIGlmICghdGhpc09iai0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSkt
PmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzT2JqLCBleGVjLCB0bykpIHsKQEAgLTIyNyw2ICsy
MjYsNyBAQCB2b2lkIHNoaWZ0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIHVu
c2lnbmVkIGhlYWRlciwgdW5zaWduZWQgY3VycmVudAogICAgICAgICB9CiAgICAgfQogfQorCiB0
ZW1wbGF0ZTxKU0FycmF5OjpTaGlmdENvdW50TW9kZSBzaGlmdENvdW50TW9kZT4KIHZvaWQgdW5z
aGlmdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCB1bnNpZ25lZCBoZWFkZXIs
IHVuc2lnbmVkIGN1cnJlbnRDb3VudCwgdW5zaWduZWQgcmVzdWx0Q291bnQsIHVuc2lnbmVkIGxl
bmd0aCkKIHsKQEAgLTI0NywxNiArMjQ3LDE0IEBAIHZvaWQgdW5zaGlmdChFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCB1bnNpZ25lZCBoZWFkZXIsIHVuc2lnbmVkIGN1cnJlCiAg
ICAgICAgIGlmIChhcnJheS0+bGVuZ3RoKCkgPT0gbGVuZ3RoICYmIGFycmF5LT51bnNoaWZ0Q291
bnQ8c2hpZnRDb3VudE1vZGU+KGV4ZWMsIGhlYWRlciwgY291bnQpKQogICAgICAgICAgICAgcmV0
dXJuOwogICAgIH0KLSAgICAKKwogICAgIGZvciAodW5zaWduZWQgayA9IGxlbmd0aCAtIGN1cnJl
bnRDb3VudDsgayA+IGhlYWRlcjsgLS1rKSB7CiAgICAgICAgIHVuc2lnbmVkIGZyb20gPSBrICsg
Y3VycmVudENvdW50IC0gMTsKICAgICAgICAgdW5zaWduZWQgdG8gPSBrICsgcmVzdWx0Q291bnQg
LSAxOwotICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzT2JqKTsKLSAgICAgICAgaWYgKHRo
aXNPYmotPmdldFByb3BlcnR5U2xvdChleGVjLCBmcm9tLCBzbG90KSkgewotICAgICAgICAgICAg
SlNWYWx1ZSB2YWx1ZSA9IHNsb3QuZ2V0VmFsdWUoZXhlYywgZnJvbSk7CisgICAgICAgIGlmIChK
U1ZhbHVlIHZhbHVlID0gZ2V0UHJvcGVydHkoZXhlYywgdGhpc09iaiwgZnJvbSkpIHsKICAgICAg
ICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICB0aGlzT2JqLT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+cHV0QnlJbmRl
eCh0aGlzT2JqLCBleGVjLCB0bywgdmFsdWUsIHRydWUpOworICAgICAgICAgICAgdGhpc09iai0+
cHV0QnlJbmRleElubGluZShleGVjLCB0bywgdmFsdWUsIHRydWUpOwogICAgICAgICB9IGVsc2Ug
aWYgKCF0aGlzT2JqLT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+ZGVsZXRlUHJvcGVydHlCeUlu
ZGV4KHRoaXNPYmosIGV4ZWMsIHRvKSkgewogICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhl
YywgQVNDSUlMaXRlcmFsKCJVbmFibGUgdG8gZGVsZXRlIHByb3BlcnR5LiIpKTsKICAgICAgICAg
ICAgIHJldHVybjsKQEAgLTI5MSw4MCArMjg5LDc1IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgYXJyYXlQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoY2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxE
YXRhLCB0aGlzT2JqZWN0LCBleGVjLT5lbXB0eUxpc3QoKSkpOwogCiAgICAgQVNTRVJUKGlzSlNB
cnJheSh0aGlzVmFsdWUpKTsKLSAgICBKU0FycmF5KiB0aGlzT2JqID0gYXNBcnJheSh0aGlzVmFs
dWUpOworICAgIEpTQXJyYXkqIHRoaXNBcnJheSA9IGFzQXJyYXkodGhpc1ZhbHVlKTsKICAgICAK
LSAgICB1bnNpZ25lZCBsZW5ndGggPSBnZXRMZW5ndGgoZXhlYywgdGhpc09iaik7Ci0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRoaXNBcnJheS0+bGVuZ3RoKCk7
CiAKLSAgICBTdHJpbmdSZWN1cnNpb25DaGVja2VyIGNoZWNrZXIoZXhlYywgdGhpc09iaik7Cisg
ICAgU3RyaW5nUmVjdXJzaW9uQ2hlY2tlciBjaGVja2VyKGV4ZWMsIHRoaXNBcnJheSk7CiAgICAg
aWYgKEpTVmFsdWUgZWFybHlSZXR1cm5WYWx1ZSA9IGNoZWNrZXIuZWFybHlSZXR1cm5WYWx1ZSgp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGVhcmx5UmV0dXJuVmFsdWUpOwogCi0g
ICAgU3RyaW5nIHNlcGFyYXRvcigiLCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwot
ICAgIEpTU3RyaW5nSm9pbmVyIHN0cmluZ0pvaW5lcihzZXBhcmF0b3IsIGxlbmd0aCk7Ci0gICAg
Zm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGxlbmd0aDsgaysrKSB7Ci0gICAgICAgIEpTVmFsdWUg
ZWxlbWVudDsKLSAgICAgICAgaWYgKHRoaXNPYmotPmNhbkdldEluZGV4UXVpY2tseShrKSkKLSAg
ICAgICAgICAgIGVsZW1lbnQgPSB0aGlzT2JqLT5nZXRJbmRleFF1aWNrbHkoayk7Ci0gICAgICAg
IGVsc2UgewotICAgICAgICAgICAgZWxlbWVudCA9IHRoaXNPYmotPmdldChleGVjLCBrKTsKKyAg
ICBKU1N0cmluZ0pvaW5lciBqb2luZXIoKmV4ZWMsICcsJywgbGVuZ3RoKTsKKyAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsK
KyAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gdGhpc0FycmF5LT50cnlHZXRJbmRleFF1aWNrbHko
aSk7CisgICAgICAgIGlmICghZWxlbWVudCkgeworICAgICAgICAgICAgZWxlbWVudCA9IHRoaXNB
cnJheS0+Z2V0KGV4ZWMsIGkpOwogICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAgICAgICAgIH0KLQotICAgICAgICBpZiAoZWxlbWVudC5pc1VuZGVmaW5lZE9yTnVsbCgpKQot
ICAgICAgICAgICAgc3RyaW5nSm9pbmVyLmFwcGVuZChTdHJpbmcoKSk7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHN0cmluZ0pvaW5lci5hcHBlbmQoZWxlbWVudC50b1dURlN0cmluZyhleGVj
KSk7Ci0KKyAgICAgICAgam9pbmVyLmFwcGVuZCgqZXhlYywgZWxlbWVudCk7CiAgICAgICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc3Ry
aW5nSm9pbmVyLmpvaW4oZXhlYykpOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqb2lu
ZXIuam9pbigqZXhlYykpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5
UHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUg
dGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpOwog
Ci0gICAgSlNPYmplY3QqIHRoaXNPYmogPSB0aGlzVmFsdWUudG9PYmplY3QoZXhlYyk7CisgICAg
SlNPYmplY3QqIHRoaXNPYmplY3QgPSB0aGlzVmFsdWUudG9PYmplY3QoZXhlYyk7CiAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogCi0gICAgdW5zaWduZWQgbGVuZ3RoID0gZ2V0TGVuZ3RoKGV4ZWMsIHRo
aXNPYmopOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdldExlbmd0aChleGVjLCB0aGlzT2JqZWN0
KTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKLSAgICBTdHJpbmdSZWN1cnNpb25DaGVja2VyIGNo
ZWNrZXIoZXhlYywgdGhpc09iaik7CisgICAgU3RyaW5nUmVjdXJzaW9uQ2hlY2tlciBjaGVja2Vy
KGV4ZWMsIHRoaXNPYmplY3QpOwogICAgIGlmIChKU1ZhbHVlIGVhcmx5UmV0dXJuVmFsdWUgPSBj
aGVja2VyLmVhcmx5UmV0dXJuVmFsdWUoKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShlYXJseVJldHVyblZhbHVlKTsKIAotICAgIFN0cmluZyBzZXBhcmF0b3IoIiwiLCBTdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICBKU1N0cmluZ0pvaW5lciBzdHJpbmdKb2luZXIo
c2VwYXJhdG9yLCBsZW5ndGgpOwotICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBsZW5ndGg7
IGsrKykgewotICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSB0aGlzT2JqLT5nZXQoZXhlYywgayk7
CisgICAgSlNTdHJpbmdKb2luZXIgc3RyaW5nSm9pbmVyKCpleGVjLCAnLCcsIGxlbmd0aCk7Cisg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0
aDsgKytpKSB7CisgICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IHRoaXNPYmplY3QtPmdldEluZGV4
KGV4ZWMsIGkpOwogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgICAgICBpZiAoIWVs
ZW1lbnQuaXNVbmRlZmluZWRPck51bGwoKSkgewotICAgICAgICAgICAgSlNPYmplY3QqIG8gPSBl
bGVtZW50LnRvT2JqZWN0KGV4ZWMpOwotICAgICAgICAgICAgSlNWYWx1ZSBjb252ZXJzaW9uRnVu
Y3Rpb24gPSBvLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvTG9jYWxlU3RyaW5n
KTsKLSAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgICAgICAgICAgU3Ry
aW5nIHN0cjsKLSAgICAgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOwotICAgICAgICAgICAgQ2Fs
bFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShjb252ZXJzaW9uRnVuY3Rpb24sIGNhbGxEYXRh
KTsKLSAgICAgICAgICAgIGlmIChjYWxsVHlwZSAhPSBDYWxsVHlwZU5vbmUpCi0gICAgICAgICAg
ICAgICAgc3RyID0gY2FsbChleGVjLCBjb252ZXJzaW9uRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxs
RGF0YSwgZWxlbWVudCwgZXhlYy0+ZW1wdHlMaXN0KCkpLnRvV1RGU3RyaW5nKGV4ZWMpOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHN0ciA9IGVsZW1lbnQudG9XVEZTdHJpbmco
ZXhlYyk7CisgICAgICAgIGlmIChlbGVtZW50LmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgSlNWYWx1ZSBjb252ZXJzaW9uRnVuY3Rpb24gPSBlbGVt
ZW50LmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9Mb2NhbGVTdHJpbmcpOworICAg
ICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAg
ICAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShjb252ZXJzaW9uRnVuY3Rpb24s
IGNhbGxEYXRhKTsKKyAgICAgICAgaWYgKGNhbGxUeXBlICE9IENhbGxUeXBlTm9uZSkgeworICAg
ICAgICAgICAgZWxlbWVudCA9IGNhbGwoZXhlYywgY29udmVyc2lvbkZ1bmN0aW9uLCBjYWxsVHlw
ZSwgY2FsbERhdGEsIGVsZW1lbnQsIGV4ZWMtPmVtcHR5TGlzdCgpKTsKICAgICAgICAgICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgICAgICAgICAgc3RyaW5nSm9pbmVyLmFwcGVuZChz
dHIpOwogICAgICAgICB9CisgICAgICAgIHN0cmluZ0pvaW5lci5hcHBlbmQoKmV4ZWMsIGVsZW1l
bnQpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KIAotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoc3RyaW5nSm9pbmVyLmpvaW4oZXhlYykpOworICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoc3RyaW5nSm9pbmVyLmpvaW4oKmV4ZWMpKTsKIH0KIAogRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY0pvaW4oRXhlY1N0YXRlKiBleGVjKQpAQCAt
Mzc4LDYxICszNzEsNTYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3Rv
RnVuY0pvaW4oRXhlY1N0YXRlKiBleGVjKQogICAgIGlmIChKU1ZhbHVlIGVhcmx5UmV0dXJuVmFs
dWUgPSBjaGVja2VyLmVhcmx5UmV0dXJuVmFsdWUoKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShlYXJseVJldHVyblZhbHVlKTsKIAotICAgIFN0cmluZyBzZXBhcmF0b3I7Ci0gICAg
aWYgKCFleGVjLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpKQotICAgICAgICBzZXBhcmF0b3Ig
PSBleGVjLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhleGVjKTsKLSAgICBpZiAoc2VwYXJhdG9y
LmlzTnVsbCgpKQotICAgICAgICBzZXBhcmF0b3IgPSBTdHJpbmcoIiwiLCBTdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKTsKKyAgICBKU1N0cmluZyogc2VwYXJhdG9yID0gbnVsbHB0cjsKKyAg
ICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgc2VwYXJh
dG9yID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7CisgICAgICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CisgICAgfQorCisgICAgY29uc3QgTENoYXIgY29tbWEgPSAnLCc7CisgICAg
SlNTdHJpbmdKb2luZXIgc3RyaW5nSm9pbmVyKCpleGVjLCBzZXBhcmF0b3IgPyBzZXBhcmF0b3It
PnZpZXcoZXhlYykgOiBTdHJpbmdWaWV3eyAmY29tbWEsIDEgfSwgbGVuZ3RoKTsKKyAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAKLSAgICBKU1N0cmluZ0pvaW5lciBzdHJpbmdKb2luZXIoc2VwYXJhdG9y
LCBsZW5ndGgpOworICAgIHVuc2lnbmVkIGkgPSAwOwogCi0gICAgdW5zaWduZWQgayA9IDA7CiAg
ICAgaWYgKGlzSlNBcnJheSh0aGlzT2JqKSkgewogICAgICAgICBKU0FycmF5KiBhcnJheSA9IGFz
QXJyYXkodGhpc09iaik7Ci0KLSAgICAgICAgZm9yICg7IGsgPCBsZW5ndGg7IGsrKykgewotICAg
ICAgICAgICAgaWYgKCFhcnJheS0+Y2FuR2V0SW5kZXhRdWlja2x5KGspKQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotCi0gICAgICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSBhcnJheS0+Z2V0SW5k
ZXhRdWlja2x5KGspOwotICAgICAgICAgICAgaWYgKCFlbGVtZW50LmlzVW5kZWZpbmVkT3JOdWxs
KCkpCi0gICAgICAgICAgICAgICAgc3RyaW5nSm9pbmVyLmFwcGVuZChlbGVtZW50LnRvV1RGU3Ry
aW5nSW5saW5lKGV4ZWMpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzdHJp
bmdKb2luZXIuYXBwZW5kKFN0cmluZygpKTsKKyAgICAgICAgZm9yICg7IGkgPCBsZW5ndGggJiYg
YXJyYXktPmNhbkdldEluZGV4UXVpY2tseShpKTsgKytpKSB7CisgICAgICAgICAgICBzdHJpbmdK
b2luZXIuYXBwZW5kKCpleGVjLCBhcnJheS0+Z2V0SW5kZXhRdWlja2x5KGkpKTsKKyAgICAgICAg
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgZm9y
ICg7IGsgPCBsZW5ndGg7IGsrKykgewotICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSB0aGlzT2Jq
LT5nZXQoZXhlYywgayk7CisgICAgZm9yICg7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBK
U1ZhbHVlIGVsZW1lbnQgPSB0aGlzT2JqLT5nZXQoZXhlYywgaSk7CisgICAgICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CisgICAgICAgIHN0cmluZ0pvaW5lci5hcHBlbmQoKmV4ZWMsIGVsZW1lbnQp
OwogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgICAgICBpZiAoIWVsZW1lbnQuaXNV
bmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHN0cmluZ0pvaW5lci5hcHBlbmQoZWxlbWVu
dC50b1dURlN0cmluZ0lubGluZShleGVjKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0
cmluZ0pvaW5lci5hcHBlbmQoU3RyaW5nKCkpOwogICAgIH0KIAotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoc3RyaW5nSm9pbmVyLmpvaW4oZXhlYykpOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoc3RyaW5nSm9pbmVyLmpvaW4oKmV4ZWMpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY0NvbmNhdChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAg
SlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKS50b1RoaXMoZXhlYywgU3RyaWN0
TW9kZSk7Ci0gICAgc2l6ZV90IGFyZ0NvdW50ID0gZXhlYy0+YXJndW1lbnRDb3VudCgpOworICAg
IHVuc2lnbmVkIGFyZ0NvdW50ID0gZXhlYy0+YXJndW1lbnRDb3VudCgpOwogICAgIEpTVmFsdWUg
Y3VyQXJnID0gdGhpc1ZhbHVlLnRvT2JqZWN0KGV4ZWMpOwogICAgIENoZWNrZWQ8dW5zaWduZWQs
IFJlY29yZE92ZXJmbG93PiBmaW5hbEFycmF5U2l6ZSA9IDA7CiAKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDs7KSB7Ci0gICAgICAgIGlmIChKU0FycmF5KiBjdXJyZW50QXJyYXkgPSBqc0R5bmFtaWND
YXN0PEpTQXJyYXkqPihjdXJBcmcpKSB7Ci0gICAgICAgICAgICBmaW5hbEFycmF5U2l6ZSArPSBn
ZXRMZW5ndGgoZXhlYywgY3VycmVudEFycmF5KTsKLSAgICAgICAgICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGZpbmFsQXJyYXlTaXplKys7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgOyArK2kpIHsKKyAgICAgICAgaWYgKEpTQXJyYXkq
IGN1cnJlbnRBcnJheSA9IGpzRHluYW1pY0Nhc3Q8SlNBcnJheSo+KGN1ckFyZykpCisgICAgICAg
ICAgICBmaW5hbEFycmF5U2l6ZSArPSBjdXJyZW50QXJyYXktPmxlbmd0aCgpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICArK2ZpbmFsQXJyYXlTaXplOwogICAgICAgICBpZiAoaSA9PSBhcmdD
b3VudCkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjdXJBcmcgPSBleGVjLT51bmNoZWNr
ZWRBcmd1bWVudChpKTsKLSAgICAgICAgKytpOwogICAgIH0KIAogICAgIGlmIChmaW5hbEFycmF5
U2l6ZS5oYXNPdmVyZmxvd2VkKCkpCkBAIC00NDQsOSArNDMyLDkgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY0NvbmNhdChFeGVjU3RhdGUqIGV4ZWMpCiAKICAg
ICBjdXJBcmcgPSB0aGlzVmFsdWUudG9PYmplY3QoZXhlYyk7CiAgICAgdW5zaWduZWQgbiA9IDA7
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7OykgeworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IDsg
KytpKSB7CiAgICAgICAgIGlmIChKU0FycmF5KiBjdXJyZW50QXJyYXkgPSBqc0R5bmFtaWNDYXN0
PEpTQXJyYXkqPihjdXJBcmcpKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBnZXRM
ZW5ndGgoZXhlYywgY3VycmVudEFycmF5KTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9
IGN1cnJlbnRBcnJheS0+bGVuZ3RoKCk7CiAgICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBsZW5ndGg7ICsraykg
ewpAQCAtNDY0LDcgKzQ1Miw2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQ
cm90b0Z1bmNDb25jYXQoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICBpZiAoaSA9PSBhcmdDb3Vu
dCkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjdXJBcmcgPSBleGVjLT51bmNoZWNrZWRB
cmd1bWVudChpKTsKLSAgICAgICAgKytpOwogICAgIH0KICAgICBhcnItPnNldExlbmd0aChleGVj
LCBuKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFycik7CkBAIC01NTAsNyArNTM3LDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1JldmVyc2UoRXhl
Y1N0YXRlKiBleGVjKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKIAogICAgICAgICBpZiAob2JqMikgewotICAgICAgICAgICAgdGhpc09iai0+bWV0
aG9kVGFibGUoZXhlYy0+dm0oKSktPnB1dEJ5SW5kZXgodGhpc09iaiwgZXhlYywgaywgb2JqMiwg
dHJ1ZSk7CisgICAgICAgICAgICB0aGlzT2JqLT5wdXRCeUluZGV4SW5saW5lKGV4ZWMsIGssIG9i
ajIsIHRydWUpOwogICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAg
IH0gZWxzZSBpZiAoIXRoaXNPYmotPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5kZWxldGVQcm9w
ZXJ0eUJ5SW5kZXgodGhpc09iaiwgZXhlYywgaykpIHsKQEAgLTU1OSw3ICs1NDYsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jUmV2ZXJzZShFeGVjU3RhdGUq
IGV4ZWMpCiAgICAgICAgIH0KIAogICAgICAgICBpZiAob2JqKSB7Ci0gICAgICAgICAgICB0aGlz
T2JqLT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+cHV0QnlJbmRleCh0aGlzT2JqLCBleGVjLCBs
azEsIG9iaiwgdHJ1ZSk7CisgICAgICAgICAgICB0aGlzT2JqLT5wdXRCeUluZGV4SW5saW5lKGV4
ZWMsIGxrMSwgb2JqLCB0cnVlKTsKICAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogICAgICAgICB9IGVsc2UgaWYgKCF0aGlzT2JqLT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+
ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmosIGV4ZWMsIGxrMSkpIHsKQEAgLTU4Miw3ICs1
NjksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jU2hpZnQo
RXhlY1N0YXRlKiBleGVjKQogICAgICAgICBwdXRMZW5ndGgoZXhlYywgdGhpc09iaiwganNOdW1i
ZXIobGVuZ3RoKSk7CiAgICAgICAgIHJlc3VsdCA9IGpzVW5kZWZpbmVkKCk7CiAgICAgfSBlbHNl
IHsKLSAgICAgICAgcmVzdWx0ID0gdGhpc09iai0+Z2V0KGV4ZWMsIDApOworICAgICAgICByZXN1
bHQgPSB0aGlzT2JqLT5nZXRJbmRleChleGVjLCAwKTsKICAgICAgICAgc2hpZnQ8SlNBcnJheTo6
U2hpZnRDb3VudEZvclNoaWZ0PihleGVjLCB0aGlzT2JqLCAwLCAxLCAwLCBsZW5ndGgpOwogICAg
ICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNjIxLDE1ICs2MDgsNiBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jU2xpY2UoRXhlY1N0YXRlKiBleGVjKQog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAotaW5saW5lIEpTVmFsdWUg
Z2V0T3JIb2xlKEpTT2JqZWN0KiBvYmosIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVy
dHlOYW1lKQotewotICAgIFByb3BlcnR5U2xvdCBzbG90KG9iaik7Ci0gICAgaWYgKG9iai0+Z2V0
UHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpCi0gICAgICAgIHJldHVybiBz
bG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZSgp
OwotfQotCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jU3BsaWNl
KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICAvLyAxNS40LjQuMTIKQEAgLTY4Niw3ICs2NjQsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jU3BsaWNlKEV4ZWNT
dGF0ZSogZXhlYykKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAgICAgfQogICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBhZGRpdGlvbmFsQXJn
czsgKytrKSB7Ci0gICAgICAgIHRoaXNPYmotPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5wdXRC
eUluZGV4KHRoaXNPYmosIGV4ZWMsIGsgKyBiZWdpbiwgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQo
ayArIDIpLCB0cnVlKTsKKyAgICAgICAgdGhpc09iai0+cHV0QnlJbmRleElubGluZShleGVjLCBr
ICsgYmVnaW4sIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KGsgKyAyKSwgdHJ1ZSk7CiAgICAgICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQpAQCAtNzExLDcgKzY4OSw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNVblNoaWZ0KEV4ZWNTdGF0ZSogZXhl
YykKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgfQogICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBuckFyZ3M7ICsraykgewotICAgICAg
ICB0aGlzT2JqLT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+cHV0QnlJbmRleCh0aGlzT2JqLCBl
eGVjLCBrLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudChrKSwgdHJ1ZSk7CisgICAgICAgIHRoaXNP
YmotPnB1dEJ5SW5kZXhJbmxpbmUoZXhlYywgaywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoayks
IHRydWUpOwogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAKaW5kZXggN2Nk
ZjM2YTEyOTI2MDI4ZjBjZDJkNjY3NDI5NDg0ZjkwYjI3YjYyOS4uNDk3MDIxMmVjOWNmMzc5YzI2
NWE2ZmMxM2JkM2E0YzFkNmIxNzZkZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAKQEAgLTgyLDMyICs4MiwxNiBAQCBKU09iamVj
dCogY3JlYXRlVW5kZWZpbmVkVmFyaWFibGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElk
ZW50aWZpZXImIGlkZW50KQogICAgIAogSlNTdHJpbmcqIGVycm9yRGVzY3JpcHRpb25Gb3JWYWx1
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdikKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwotICAgIGlmICh2LmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gdm0uc21hbGxTdHJpbmdzLm51
bGxTdHJpbmcoKTsKLSAgICBpZiAodi5pc1VuZGVmaW5lZCgpKQotICAgICAgICByZXR1cm4gdm0u
c21hbGxTdHJpbmdzLnVuZGVmaW5lZFN0cmluZygpOwotICAgIGlmICh2LmlzSW50MzIoKSkKLSAg
ICAgICAgcmV0dXJuIGpzU3RyaW5nKCZ2bSwgdm0ubnVtZXJpY1N0cmluZ3MuYWRkKHYuYXNJbnQz
MigpKSk7Ci0gICAgaWYgKHYuaXNEb3VibGUoKSkKLSAgICAgICAgcmV0dXJuIGpzU3RyaW5nKCZ2
bSwgdm0ubnVtZXJpY1N0cmluZ3MuYWRkKHYuYXNEb3VibGUoKSkpOwotICAgIGlmICh2LmlzVHJ1
ZSgpKQotICAgICAgICByZXR1cm4gdm0uc21hbGxTdHJpbmdzLnRydWVTdHJpbmcoKTsKLSAgICBp
ZiAodi5pc0ZhbHNlKCkpCi0gICAgICAgIHJldHVybiB2bS5zbWFsbFN0cmluZ3MuZmFsc2VTdHJp
bmcoKTsKICAgICBpZiAodi5pc1N0cmluZygpKQotICAgICAgICByZXR1cm4ganNOb250cml2aWFs
U3RyaW5nKCZ2bSwgbWFrZVN0cmluZygnIicsICBhc1N0cmluZyh2KS0+dmFsdWUoZXhlYyksICci
JykpOworICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsIG1ha2VTdHJpbmco
JyInLCAgYXNTdHJpbmcodiktPnZhbHVlKGV4ZWMpLCAnIicpKTsKICAgICBpZiAodi5pc09iamVj
dCgpKSB7CiAgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgICAgICBKU09iamVjdCogb2Jq
ZWN0ID0gYXNPYmplY3Qodik7CiAgICAgICAgIGlmIChvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdl
dENhbGxEYXRhKG9iamVjdCwgY2FsbERhdGEpICE9IENhbGxUeXBlTm9uZSkKLSAgICAgICAgICAg
IHJldHVybiB2bS5zbWFsbFN0cmluZ3MuZnVuY3Rpb25TdHJpbmcoKTsKKyAgICAgICAgICAgIHJl
dHVybiBleGVjLT52bSgpLnNtYWxsU3RyaW5ncy5mdW5jdGlvblN0cmluZygpOwogICAgICAgICBy
ZXR1cm4ganNTdHJpbmcoZXhlYywgSlNPYmplY3Q6OmNhbGN1bGF0ZWRDbGFzc05hbWUob2JqZWN0
KSk7CiAgICAgfQotICAgIAotICAgIC8vIFRoZSBKU1ZhbHVlIHNob3VsZCBuZXZlciBiZSBlbXB0
eSwgc28gdGhpcyBwb2ludCBpbiB0aGUgY29kZSBzaG91bGQgbmV2ZXIgYmUgcmVhY2hlZC4KLSAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gdm0uc21hbGxTdHJpbmdzLmVtcHR5
U3RyaW5nKCk7CisgICAgcmV0dXJuIHYudG9TdHJpbmcoZXhlYyk7CiB9CiAgICAgCiBzdGF0aWMg
U3RyaW5nIGRlZmF1bHRBcHByb3hpbWF0ZVNvdXJjZUVycm9yKGNvbnN0IFN0cmluZyYgb3JpZ2lu
YWxNZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVRleHQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3BwCmluZGV4IGE3MDgzYWVkZjI0OWZjMDVjODFlMGZh
NDQwZmQ1NTQ3MTIyZTVlNWMuLjllMGFhYjE3NzRkZTE3YTAzY2E2ZGUxMmM5ZTk4ZjlkNzIzNjM2
MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3BwCkBA
IC0zNTMsOCArMzUzLDEyIEBAIEpTU3RyaW5nKiBKU1ZhbHVlOjp0b1N0cmluZ1Nsb3dDYXNlKEV4
ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIEFT
U0VSVCghaXNTdHJpbmcoKSk7Ci0gICAgaWYgKGlzSW50MzIoKSkKLSAgICAgICAgcmV0dXJuIGpz
U3RyaW5nKCZ2bSwgdm0ubnVtZXJpY1N0cmluZ3MuYWRkKGFzSW50MzIoKSkpOworICAgIGlmIChp
c0ludDMyKCkpIHsKKyAgICAgICAgYXV0byBpbnRlZ2VyID0gYXNJbnQzMigpOworICAgICAgICBp
ZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGludGVnZXIpIDw9IDkpCisgICAgICAgICAgICByZXR1
cm4gdm0uc21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZyhpbnRlZ2VyICsgJzAnKTsK
KyAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIHZtLm51bWVyaWNTdHJpbmdz
LmFkZChpbnRlZ2VyKSk7CisgICAgfQogICAgIGlmIChpc0RvdWJsZSgpKQogICAgICAgICByZXR1
cm4ganNTdHJpbmcoJnZtLCB2bS5udW1lcmljU3RyaW5ncy5hZGQoYXNEb3VibGUoKSkpOwogICAg
IGlmIChpc1RydWUoKSkKQEAgLTM4MCw3ICszODQsMjAgQEAgSlNTdHJpbmcqIEpTVmFsdWU6OnRv
U3RyaW5nU2xvd0Nhc2UoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogCiBTdHJpbmcgSlNWYWx1ZTo6
dG9XVEZTdHJpbmdTbG93Q2FzZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IGlubGluZUpTVmFsdWVOb3RTdHJpbmd0b1N0cmluZygqdGhpcywgZXhlYyk7CisgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKKyAgICBpZiAoaXNJbnQzMigpKQorICAgICAgICByZXR1cm4gdm0ubnVt
ZXJpY1N0cmluZ3MuYWRkKGFzSW50MzIoKSk7CisgICAgaWYgKGlzRG91YmxlKCkpCisgICAgICAg
IHJldHVybiB2bS5udW1lcmljU3RyaW5ncy5hZGQoYXNEb3VibGUoKSk7CisgICAgaWYgKGlzVHJ1
ZSgpKQorICAgICAgICByZXR1cm4gdm0ucHJvcGVydHlOYW1lcy0+dHJ1ZUtleXdvcmQuc3RyaW5n
KCk7CisgICAgaWYgKGlzRmFsc2UoKSkKKyAgICAgICAgcmV0dXJuIHZtLnByb3BlcnR5TmFtZXMt
PmZhbHNlS2V5d29yZC5zdHJpbmcoKTsKKyAgICBpZiAoaXNOdWxsKCkpCisgICAgICAgIHJldHVy
biB2bS5wcm9wZXJ0eU5hbWVzLT5udWxsS2V5d29yZC5zdHJpbmcoKTsKKyAgICBpZiAoaXNVbmRl
ZmluZWQoKSkKKyAgICAgICAgcmV0dXJuIHZtLnByb3BlcnR5TmFtZXMtPnVuZGVmaW5lZEtleXdv
cmQuc3RyaW5nKCk7CisgICAgcmV0dXJuIHRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0NKU1ZhbHVlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NK
U1ZhbHVlLmgKaW5kZXggNzliMDliNDE4MzUwZThlMmUxNTNlNGMyNTg3ZTVmYzM4ZWNjYTVkMi4u
MDM5YzE0ZWI3YTEyYWFlNjU2NWRiYTdmYTRmYmRjYmZhZmYzMTk5MyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuaApAQCAtMjUyLDcgKzI1Miw2IEBAIHB1Ymxp
YzoKICAgICBKU1N0cmluZyogdG9TdHJpbmcoRXhlY1N0YXRlKikgY29uc3Q7CiAgICAgSWRlbnRp
ZmllciB0b1Byb3BlcnR5S2V5KEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgIFdURjo6U3RyaW5nIHRv
V1RGU3RyaW5nKEV4ZWNTdGF0ZSopIGNvbnN0OwotICAgIFdURjo6U3RyaW5nIHRvV1RGU3RyaW5n
SW5saW5lKEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgIEpTT2JqZWN0KiB0b09iamVjdChFeGVjU3Rh
dGUqKSBjb25zdDsKICAgICBKU09iamVjdCogdG9PYmplY3QoRXhlY1N0YXRlKiwgSlNHbG9iYWxP
YmplY3QqKSBjb25zdDsKIApAQCAtMjYyLDggKzI2MSw4IEBAIHB1YmxpYzoKICAgICBpbnQzMl90
IHRvSW50MzIoRXhlY1N0YXRlKikgY29uc3Q7CiAgICAgdWludDMyX3QgdG9VSW50MzIoRXhlY1N0
YXRlKikgY29uc3Q7CiAKLSAgICAvLyBGbG9hdGluZyBwb2ludCBjb252ZXJzaW9ucyAodGhpcyBp
cyBhIGNvbnZlbmllbmNlIG1ldGhvZCBmb3Igd2ViY29yZTsKLSAgICAvLyBzaWdubGUgcHJlY2lz
aW9uIGZsb2F0IGlzIG5vdCBhIHJlcHJlc2VudGF0aW9uIHVzZWQgaW4gSlMgb3IgSlNDKS4KKyAg
ICAvLyBGbG9hdGluZyBwb2ludCBjb252ZXJzaW9ucyAodGhpcyBpcyBhIGNvbnZlbmllbmNlIGZ1
bmN0aW9uIGZvciBXZWJDb3JlOworICAgIC8vIHNpbmdsZSBwcmVjaXNpb24gZmxvYXQgaXMgbm90
IGEgcmVwcmVzZW50YXRpb24gdXNlZCBpbiBKUyBvciBKU0MpLgogICAgIGZsb2F0IHRvRmxvYXQo
RXhlY1N0YXRlKiBleGVjKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4odG9OdW1i
ZXIoZXhlYykpOyB9CiAKICAgICAvLyBPYmplY3Qgb3BlcmF0aW9ucywgd2l0aCB0aGUgdG9PYmpl
Y3Qgb3BlcmF0aW9uIGluY2x1ZGVkLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNPYmplY3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2Jq
ZWN0LmgKaW5kZXggYmNjMjZjZDcxMzVmODU5MmQyNzhkNGY2YmFjMmViY2JmYzM2NmNjMS4uNWM5
NjIyY2M0ZGU0YWRhYmU1MTEzNmMyMzljNWVhMTczMjM4MmYyZiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdC5oCkBAIC0xNDUsNyArMTQ1LDcgQEAgcHVibGljOgogICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyB2b2lkIHB1dEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWdu
ZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKICAgICAgICAgCi0g
ICAgdm9pZCBwdXRCeUluZGV4SW5saW5lKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVy
dHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQorICAgIEFMV0FZU19JTkxJ
TkUgdm9pZCBwdXRCeUluZGV4SW5saW5lKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVy
dHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQogICAgIHsKICAgICAgICAg
aWYgKGNhblNldEluZGV4UXVpY2tseShwcm9wZXJ0eU5hbWUpKSB7CiAgICAgICAgICAgICBzZXRJ
bmRleFF1aWNrbHkoZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7CkBAIC04MzcsMTAz
ICs4MzcsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgLy8gVGhpcyBpcyByZWxldmFudCB0byB1bmRlY2lk
ZWQsIGludDMyLCBkb3VibGUsIGFuZCBjb250aWd1b3VzLgogICAgIHVuc2lnbmVkIGNvdW50RWxl
bWVudHMoKTsKICAgICAgICAgCi0gICAgLy8gVGhpcyBzdHJhbmdlIG1ldGhvZCByZXR1cm5zIGEg
cG9pbnRlciB0byB0aGUgc3RhcnQgb2YgdGhlIGluZGV4ZWQgZGF0YQotICAgIC8vIGFzIGlmIGl0
IGNvbnRhaW5lZCBKU1ZhbHVlcy4gQnV0IGl0IHdvbid0IGFsd2F5cyBjb250YWluIEpTVmFsdWVz
LgotICAgIC8vIE1ha2Ugc3VyZSB5b3UgY2FzdCB0aGlzIHRvIHRoZSBhcHByb3ByaWF0ZSB0eXBl
IGJlZm9yZSB1c2luZy4KLSAgICB0ZW1wbGF0ZTxJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlPgot
ICAgIENvbnRpZ3VvdXNKU1ZhbHVlcyBpbmRleGluZ0RhdGEoKQotICAgIHsKLSAgICAgICAgc3dp
dGNoIChpbmRleGluZ1R5cGUpIHsKLSAgICAgICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQ
RVM6Ci0gICAgICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgY2Fz
ZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgIHJldHVybiBtX2J1
dHRlcmZseS0+Y29udGlndW91cygpOwotICAgICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFM
TF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgcmV0dXJuIG1fYnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yKCk7Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgICAgICByZXR1cm4gQ29udGlndW91c0pTVmFsdWVz
KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBDb250aWd1b3VzSlNWYWx1ZXMgY3VycmVudElu
ZGV4aW5nRGF0YSgpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7Ci0g
ICAgICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZUEVTOgotICAgICAgICBjYXNlIEFMTF9D
T05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5
LT5jb250aWd1b3VzKCk7Ci0KLSAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElO
R19UWVBFUzoKLSAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkt
PnZlY3RvcigpOwotCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBDUkFTSCgpOwotICAg
ICAgICAgICAgcmV0dXJuIENvbnRpZ3VvdXNKU1ZhbHVlcygpOwotICAgICAgICB9Ci0gICAgfQot
ICAgICAgICAKLSAgICBKU1ZhbHVlIGdldEhvbHlJbmRleFF1aWNrbHkodW5zaWduZWQgaSkKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVChpIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKLSAg
ICAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUoKSkgewotICAgICAgICBjYXNlIEFMTF9JTlQzMl9J
TkRFWElOR19UWVBFUzoKLSAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBF
UzoKLSAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgp
OwotICAgICAgICBjYXNlIEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQRVM6IHsKLSAgICAgICAgICAg
IGRvdWJsZSB2YWx1ZSA9IG1fYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV07Ci0gICAg
ICAgICAgICBpZiAodmFsdWUgPT0gdmFsdWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRF
WElOR19UWVBFUzoKLSAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCktPm1fdmVjdG9yW2ldLmdldCgpOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQ1JB
U0goKTsKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgICAgIAotICAgIHRlbXBsYXRlPEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGU+Ci0gICAgdW5z
aWduZWQgcmVsZXZhbnRMZW5ndGgoKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChpbmRleGluZ1R5
cGUpIHsKLSAgICAgICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgIGNh
c2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgY2FzZSBBTExfQ09OVElHVU9V
U19JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+cHVibGlj
TGVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JB
R0VfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjptaW4oCi0gICAgICAg
ICAgICAgICAgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5sZW5ndGgoKSwKLSAgICAgICAg
ICAgICAgICBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpKTsKLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIENSQVNIKCk7Ci0g
ICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHVuc2lnbmVkIGN1
cnJlbnRSZWxldmFudExlbmd0aCgpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGluZGV4aW5nVHlw
ZSgpKSB7Ci0gICAgICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZUEVTOgotICAgICAgICBj
YXNlIEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgIGNhc2UgQUxMX0NPTlRJR1VP
VVNfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPnB1Ymxp
Y0xlbmd0aCgpOwotCi0gICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQ
RVM6Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjptaW4oCi0gICAgICAgICAgICAgICAgbV9idXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5sZW5ndGgoKSwKLSAgICAgICAgICAgICAgICBtX2J1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpKTsKLQotICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9
Ci0gICAgfQotCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0
b3I7CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTdHJpbmcuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgKaW5k
ZXggNjZhMzhiMmFjOGI1Njg4NzdlZDJhMzI0ZTEzOWJkM2FlZWZkMmE0NC4uMDM0ZTdjYjUwY2Rk
MWQ3MzczNWY2YTdjOGUzOTllZjhjOWNlYjljYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1N0cmluZy5oCkBAIC02Miw2ICs2MiwxMSBAQCBKU1N0cmluZyoganNPd25lZFN0cmlu
ZyhFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmKTsKIAogSlNSb3BlU3RyaW5nKiBqc1N0cmluZ0J1
aWxkZXIoVk0qKTsKIAorc3RydWN0IFN0cmluZ1ZpZXdXaXRoVW5kZXJseWluZ1N0cmluZyB7Cisg
ICAgU3RyaW5nVmlldyB2aWV3OworICAgIFN0cmluZyB1bmRlcmx5aW5nU3RyaW5nOworfTsKKwog
Y2xhc3MgSlNTdHJpbmcgOiBwdWJsaWMgSlNDZWxsIHsKIHB1YmxpYzoKICAgICBmcmllbmQgY2xh
c3MgSklUOwpAQCAtMTQ0LDYgKzE0OSw3IEBAIHB1YmxpYzoKICAgICBBdG9taWNTdHJpbmcgdG9B
dG9taWNTdHJpbmcoRXhlY1N0YXRlKikgY29uc3Q7CiAgICAgUmVmUHRyPEF0b21pY1N0cmluZ0lt
cGw+IHRvRXhpc3RpbmdBdG9taWNTdHJpbmcoRXhlY1N0YXRlKikgY29uc3Q7CiAgICAgU3RyaW5n
VmlldyB2aWV3KEV4ZWNTdGF0ZSopIGNvbnN0OworICAgIFN0cmluZ1ZpZXdXaXRoVW5kZXJseWlu
Z1N0cmluZyB2aWV3V2l0aFVuZGVybHlpbmdTdHJpbmcoRXhlY1N0YXRlJikgY29uc3Q7CiAgICAg
Y29uc3QgU3RyaW5nJiB2YWx1ZShFeGVjU3RhdGUqKSBjb25zdDsKICAgICBjb25zdCBTdHJpbmcm
IHRyeUdldFZhbHVlKCkgY29uc3Q7CiAgICAgY29uc3QgU3RyaW5nSW1wbCogdHJ5R2V0VmFsdWVJ
bXBsKCkgY29uc3Q7CkBAIC0zODQsNiArMzkwLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlc29s
dmVSb3BlSW50ZXJuYWwxNk5vU3Vic3RyaW5nKFVDaGFyKikgY29uc3Q7CiAgICAgdm9pZCBjbGVh
ckZpYmVycygpIGNvbnN0OwogICAgIFN0cmluZ1ZpZXcgdmlldyhFeGVjU3RhdGUqKSBjb25zdDsK
KyAgICBTdHJpbmdWaWV3V2l0aFVuZGVybHlpbmdTdHJpbmcgdmlld1dpdGhVbmRlcmx5aW5nU3Ry
aW5nKEV4ZWNTdGF0ZSYpIGNvbnN0OwogCiAgICAgV3JpdGVCYXJyaWVyQmFzZTxKU1N0cmluZz4m
IGZpYmVyKHVuc2lnbmVkIGkpIGNvbnN0CiAgICAgewpAQCAtNjczLDMyICs2ODAsNiBAQCBpbmxp
bmUgU3RyaW5nIEpTVmFsdWU6OnRvV1RGU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKICAg
ICByZXR1cm4gdG9XVEZTdHJpbmdTbG93Q2FzZShleGVjKTsKIH0KIAotQUxXQVlTX0lOTElORSBT
dHJpbmcgaW5saW5lSlNWYWx1ZU5vdFN0cmluZ3RvU3RyaW5nKGNvbnN0IEpTVmFsdWUmIHZhbHVl
LCBFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBpZiAo
dmFsdWUuaXNJbnQzMigpKQotICAgICAgICByZXR1cm4gdm0ubnVtZXJpY1N0cmluZ3MuYWRkKHZh
bHVlLmFzSW50MzIoKSk7Ci0gICAgaWYgKHZhbHVlLmlzRG91YmxlKCkpCi0gICAgICAgIHJldHVy
biB2bS5udW1lcmljU3RyaW5ncy5hZGQodmFsdWUuYXNEb3VibGUoKSk7Ci0gICAgaWYgKHZhbHVl
LmlzVHJ1ZSgpKQotICAgICAgICByZXR1cm4gdm0ucHJvcGVydHlOYW1lcy0+dHJ1ZUtleXdvcmQu
c3RyaW5nKCk7Ci0gICAgaWYgKHZhbHVlLmlzRmFsc2UoKSkKLSAgICAgICAgcmV0dXJuIHZtLnBy
b3BlcnR5TmFtZXMtPmZhbHNlS2V5d29yZC5zdHJpbmcoKTsKLSAgICBpZiAodmFsdWUuaXNOdWxs
KCkpCi0gICAgICAgIHJldHVybiB2bS5wcm9wZXJ0eU5hbWVzLT5udWxsS2V5d29yZC5zdHJpbmco
KTsKLSAgICBpZiAodmFsdWUuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgcmV0dXJuIHZtLnByb3Bl
cnR5TmFtZXMtPnVuZGVmaW5lZEtleXdvcmQuc3RyaW5nKCk7Ci0gICAgcmV0dXJuIHZhbHVlLnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLX0KLQotQUxXQVlTX0lOTElORSBTdHJpbmcgSlNW
YWx1ZTo6dG9XVEZTdHJpbmdJbmxpbmUoRXhlY1N0YXRlKiBleGVjKSBjb25zdAotewotICAgIGlm
IChpc1N0cmluZygpKQotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNTdHJpbmcqPihhc0Nl
bGwoKSktPnZhbHVlKGV4ZWMpOwotCi0gICAgcmV0dXJuIGlubGluZUpTVmFsdWVOb3RTdHJpbmd0
b1N0cmluZygqdGhpcywgZXhlYyk7Ci19Ci0KIEFMV0FZU19JTkxJTkUgU3RyaW5nVmlldyBKU1Jv
cGVTdHJpbmc6OnZpZXcoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIGlmIChpc1N1YnN0
cmluZygpKSB7CkBAIC03MTAsNiArNjkxLDE4IEBAIEFMV0FZU19JTkxJTkUgU3RyaW5nVmlldyBK
U1JvcGVTdHJpbmc6OnZpZXcoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogICAgIHJldHVybiBTdHJp
bmdWaWV3KG1fdmFsdWUpOwogfQogCitBTFdBWVNfSU5MSU5FIFN0cmluZ1ZpZXdXaXRoVW5kZXJs
eWluZ1N0cmluZyBKU1JvcGVTdHJpbmc6OnZpZXdXaXRoVW5kZXJseWluZ1N0cmluZyhFeGVjU3Rh
dGUmIHN0YXRlKSBjb25zdAoreworICAgIGlmIChpc1N1YnN0cmluZygpKSB7CisgICAgICAgIGF1
dG8mIGJhc2UgPSBzdWJzdHJpbmdCYXNlKCktPm1fdmFsdWU7CisgICAgICAgIGlmIChpczhCaXQo
KSkKKyAgICAgICAgICAgIHJldHVybiB7IHsgYmFzZS5jaGFyYWN0ZXJzOCgpICsgc3Vic3RyaW5n
T2Zmc2V0KCksIG1fbGVuZ3RoIH0sIGJhc2UgfTsKKyAgICAgICAgcmV0dXJuIHsgeyBiYXNlLmNo
YXJhY3RlcnMxNigpICsgc3Vic3RyaW5nT2Zmc2V0KCksIG1fbGVuZ3RoIH0sIGJhc2UgfTsKKyAg
ICB9CisgICAgcmVzb2x2ZVJvcGUoJnN0YXRlKTsKKyAgICByZXR1cm4geyBtX3ZhbHVlLCBtX3Zh
bHVlIH07Cit9CisKIEFMV0FZU19JTkxJTkUgU3RyaW5nVmlldyBKU1N0cmluZzo6dmlldyhFeGVj
U3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgaWYgKGlzUm9wZSgpKQpAQCAtNzE3LDYgKzcxMCwx
MyBAQCBBTFdBWVNfSU5MSU5FIFN0cmluZ1ZpZXcgSlNTdHJpbmc6OnZpZXcoRXhlY1N0YXRlKiBl
eGVjKSBjb25zdAogICAgIHJldHVybiBTdHJpbmdWaWV3KG1fdmFsdWUpOwogfQogCitBTFdBWVNf
SU5MSU5FIFN0cmluZ1ZpZXdXaXRoVW5kZXJseWluZ1N0cmluZyBKU1N0cmluZzo6dmlld1dpdGhV
bmRlcmx5aW5nU3RyaW5nKEV4ZWNTdGF0ZSYgc3RhdGUpIGNvbnN0Cit7CisgICAgaWYgKGlzUm9w
ZSgpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgSlNSb3BlU3RyaW5nJj4oKnRo
aXMpLnZpZXdXaXRoVW5kZXJseWluZ1N0cmluZyhzdGF0ZSk7CisgICAgcmV0dXJuIHsgbV92YWx1
ZSwgbV92YWx1ZSB9OworfQorCiBpbmxpbmUgYm9vbCBKU1N0cmluZzo6aXNTdWJzdHJpbmcoKSBj
b25zdAogewogICAgIHJldHVybiBpc1JvcGUoKSAmJiBzdGF0aWNfY2FzdDxjb25zdCBKU1JvcGVT
dHJpbmcqPih0aGlzKS0+aXNTdWJzdHJpbmcoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSm9pbmVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU3RyaW5nSm9pbmVyLmNwcAppbmRleCBmOTg3MGMzNDIzYjRhZDExMTk4MjVi
ZjUxZGYxMzdhODIxYTAzY2MyLi41M2RiN2YzYWJkMTRjM2Y5NDk0OTU2ZjM3M2ZhMTZiNGUzYTMy
MWIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0pv
aW5lci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdKb2lu
ZXIuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTI2LDEwNSArMjYsOTQgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJKU1N0cmluZ0pvaW5lci5oIgogCi0jaW5jbHVkZSAiRXhjZXB0aW9uSGVscGVycy5oIgot
I2luY2x1ZGUgIkpTU2NvcGUuaCIKLSNpbmNsdWRlICJKU1N0cmluZy5oIgogI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdJbXBsLmg+CiAKIG5hbWVzcGFj
ZSBKU0MgewogCi0vLyBUaGUgZGVzdGluYXRpb24gaXMgMTZiaXRzLCBhdCBsZWFzdCBvbmUgc3Ry
aW5nIGlzIDE2IGJpdHMuCi1zdGF0aWMgaW5saW5lIHZvaWQgYXBwZW5kU3RyaW5nVG9EYXRhKFVD
aGFyKiYgZGF0YSwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPgorc3RhdGljIGlubGluZSB2b2lkIGFwcGVuZFN0cmluZ1RvRGF0YShDaGFyYWN0
ZXJUeXBlKiYgZGF0YSwgU3RyaW5nVmlldyBzdHJpbmcpCiB7Ci0gICAgaWYgKHN0cmluZy5pc051
bGwoKSkKLSAgICAgICAgcmV0dXJuOworICAgIHN0cmluZy5nZXRDaGFyYWN0ZXJzV2l0aFVwY29u
dmVydChkYXRhKTsKKyAgICBkYXRhICs9IHN0cmluZy5sZW5ndGgoKTsKK30KIAotICAgIHVuc2ln
bmVkIGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKLSAgICBjb25zdCBTdHJpbmdJbXBsKiBzdHJp
bmdJbXBsID0gc3RyaW5nLmltcGwoKTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
CitzdGF0aWMgaW5saW5lIFN0cmluZyBqb2luU3RyaW5ncyhjb25zdCBWZWN0b3I8U3RyaW5nVmll
d1dpdGhVbmRlcmx5aW5nU3RyaW5nPiYgc3RyaW5ncywgU3RyaW5nVmlldyBzZXBhcmF0b3IsIHVu
c2lnbmVkIGpvaW5lZExlbmd0aCkKK3sKKyAgICBBU1NFUlQoam9pbmVkTGVuZ3RoKTsKIAotICAg
IGlmIChzdHJpbmdJbXBsLT5pczhCaXQoKSkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICpkYXRhID0gc3RyaW5nSW1wbC0+Y2hh
cmFjdGVyczgoKVtpXTsKLSAgICAgICAgICAgICsrZGF0YTsKKyAgICBDaGFyYWN0ZXJUeXBlKiBk
YXRhOworICAgIFN0cmluZyByZXN1bHQgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxp
emVkKGpvaW5lZExlbmd0aCwgZGF0YSk7CisgICAgaWYgKHJlc3VsdC5pc051bGwoKSkKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKworICAgIGFwcGVuZFN0cmluZ1RvRGF0YShkYXRhLCBzdHJpbmdz
WzBdLnZpZXcpOworCisgICAgdW5zaWduZWQgc2l6ZSA9IHN0cmluZ3Muc2l6ZSgpOworCisgICAg
c3dpdGNoIChzZXBhcmF0b3IubGVuZ3RoKCkpIHsKKyAgICBjYXNlIDA6CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDE7IGkgPCBzaXplOyArK2kpCisgICAgICAgICAgICBhcHBlbmRTdHJpbmdU
b0RhdGEoZGF0YSwgc3RyaW5nc1tpXS52aWV3KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAx
OiB7CisgICAgICAgIENoYXJhY3RlclR5cGUgc2VwYXJhdG9yQ2hhcmFjdGVyID0gc2VwYXJhdG9y
WzBdOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgc2l6ZTsgKytpKSB7CisgICAg
ICAgICAgICAqZGF0YSsrID0gc2VwYXJhdG9yQ2hhcmFjdGVyOworICAgICAgICAgICAgYXBwZW5k
U3RyaW5nVG9EYXRhKGRhdGEsIHN0cmluZ3NbaV0udmlldyk7CiAgICAgICAgIH0KLSAgICB9IGVs
c2UgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAg
ICAgICAgICAgICpkYXRhID0gc3RyaW5nSW1wbC0+Y2hhcmFjdGVyczE2KClbaV07Ci0gICAgICAg
ICAgICArK2RhdGE7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgICAgICBhcHBl
bmRTdHJpbmdUb0RhdGEoZGF0YSwgc2VwYXJhdG9yKTsKKyAgICAgICAgICAgIGFwcGVuZFN0cmlu
Z1RvRGF0YShkYXRhLCBzdHJpbmdzW2ldLnZpZXcpOwogICAgICAgICB9CiAgICAgfQotfQotCi0v
LyBJZiB0aGUgZGVzdGluYXRpb24gaXMgOGJpdHMsIHdlIGtub3cgZXZlcnkgc3RyaW5nIGhhcyB0
byBiZSA4Yml0Lgotc3RhdGljIGlubGluZSB2b2lkIGFwcGVuZFN0cmluZ1RvRGF0YShMQ2hhciom
IGRhdGEsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQotewotICAgIGlmIChzdHJpbmcuaXNOdWxsKCkp
Ci0gICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQoc3RyaW5nLmlzOEJpdCgpKTsKKyAgICBBU1NF
UlQoZGF0YSA9PSByZXN1bHQuY2hhcmFjdGVyczxDaGFyYWN0ZXJUeXBlPigpICsgam9pbmVkTGVu
Z3RoKTsKIAotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKLSAgICBjb25z
dCBTdHJpbmdJbXBsKiBzdHJpbmdJbXBsID0gc3RyaW5nLmltcGwoKTsKLQotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICAqZGF0YSA9IHN0cmluZ0lt
cGwtPmNoYXJhY3RlcnM4KClbaV07Ci0gICAgICAgICsrZGF0YTsKLSAgICB9CisgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBp
bmxpbmUgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBqb2luU3RyaW5ncyhjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgc3RyaW5ncywgY29uc3QgU3RyaW5nJiBzZXBhcmF0b3IsIHVuc2lnbmVkIG91dHB1dExl
bmd0aCkKK2lubGluZSB1bnNpZ25lZCBKU1N0cmluZ0pvaW5lcjo6am9pbmVkTGVuZ3RoKEV4ZWNT
dGF0ZSYgc3RhdGUpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKG91dHB1dExlbmd0aCk7Ci0KLSAgICBD
aGFyYWN0ZXJUeXBlKiBkYXRhOwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBvdXRwdXRTdHJpbmdJ
bXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChvdXRwdXRMZW5ndGgsIGRh
dGEpOwotICAgIGlmICghb3V0cHV0U3RyaW5nSW1wbCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgdW5zaWduZWQgbnVtYmVyT2ZTdHJpbmdzID0gbV9zdHJpbmdzLnNpemUoKTsKKyAgICBp
ZiAoIW51bWJlck9mU3RyaW5ncykKKyAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBjb25zdCBTdHJp
bmcgZmlyc3RTdHJpbmcgPSBzdHJpbmdzLmZpcnN0KCk7Ci0gICAgYXBwZW5kU3RyaW5nVG9EYXRh
KGRhdGEsIGZpcnN0U3RyaW5nKTsKKyAgICBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxv
dz4gc2VwYXJhdG9yTGVuZ3RoID0gbV9zZXBhcmF0b3IubGVuZ3RoKCk7CisgICAgQ2hlY2tlZDx1
bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IHRvdGFsU2VwYXJhdG9yc0xlbmd0aCA9IHNlcGFyYXRv
ckxlbmd0aCAqIChudW1iZXJPZlN0cmluZ3MgLSAxKTsKKyAgICBDaGVja2VkPHVuc2lnbmVkLCBS
ZWNvcmRPdmVyZmxvdz4gdG90YWxMZW5ndGggPSB0b3RhbFNlcGFyYXRvcnNMZW5ndGggKyBtX2Fj
Y3VtdWxhdGVkU3RyaW5nc0xlbmd0aDsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgc3Ry
aW5ncy5zaXplKCk7ICsraSkgewotICAgICAgICBhcHBlbmRTdHJpbmdUb0RhdGEoZGF0YSwgc2Vw
YXJhdG9yKTsKLSAgICAgICAgYXBwZW5kU3RyaW5nVG9EYXRhKGRhdGEsIHN0cmluZ3NbaV0pOwor
ICAgIHVuc2lnbmVkIHJlc3VsdDsKKyAgICBpZiAodG90YWxMZW5ndGguc2FmZUdldChyZXN1bHQp
ID09IENoZWNrZWRTdGF0ZTo6RGlkT3ZlcmZsb3cpIHsKKyAgICAgICAgdGhyb3dPdXRPZk1lbW9y
eUVycm9yKCZzdGF0ZSk7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KLQotICAgIEFTU0VSVChk
YXRhID09IChvdXRwdXRTdHJpbmdJbXBsLT5jaGFyYWN0ZXJzPENoYXJhY3RlclR5cGU+KCkgKyBv
dXRwdXRTdHJpbmdJbXBsLT5sZW5ndGgoKSkpOwotICAgIHJldHVybiBvdXRwdXRTdHJpbmdJbXBs
LnJlbGVhc2UoKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlIEpTU3RyaW5nSm9p
bmVyOjpqb2luKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNTdHJpbmdKb2luZXI6OmpvaW4o
RXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICBpZiAoIW1faXNWYWxpZCkKLSAgICAgICAgcmV0dXJu
IHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAgICBBU1NFUlQobV9zdHJpbmdzLnNpemUo
KSA9PSBtX3N0cmluZ3MuY2FwYWNpdHkoKSk7CiAKLSAgICBpZiAoIW1fc3RyaW5ncy5zaXplKCkp
Ci0gICAgICAgIHJldHVybiBqc0VtcHR5U3RyaW5nKGV4ZWMpOworICAgIHVuc2lnbmVkIGxlbmd0
aCA9IGpvaW5lZExlbmd0aChzdGF0ZSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQor
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIENoZWNrZWQ8dW5zaWduZWQsIFJl
Y29yZE92ZXJmbG93PiBzZXBhcmF0b3JMZW5ndGggPSBtX3NlcGFyYXRvci5sZW5ndGgoKTsKLSAg
ICAvLyBGSVhNRTogYWRkIHNwZWNpYWwgY2FzZXMgb2Ygam9pblN0cmluZ3MoKSBmb3IgKHNlcGFy
YXRvckxlbmd0aCA9PSAwKSBhbmQgKHNlcGFyYXRvckxlbmd0aCA9PSAxKS4KLSAgICBBU1NFUlQo
bV9zdHJpbmdzLnNpemUoKSA+IDApOwotICAgIENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJm
bG93PiB0b3RhbFNlcGFyYWN0b3JzTGVuZ3RoID0gc2VwYXJhdG9yTGVuZ3RoICogKG1fc3RyaW5n
cy5zaXplKCkgLSAxKTsKLSAgICBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gb3V0
cHV0U3RyaW5nU2l6ZSA9IHRvdGFsU2VwYXJhY3RvcnNMZW5ndGggKyBtX2FjY3VtdWxhdGVkU3Ry
aW5nc0xlbmd0aDsKLQotICAgIHVuc2lnbmVkIGZpbmFsU2l6ZTsKLSAgICBpZiAob3V0cHV0U3Ry
aW5nU2l6ZS5zYWZlR2V0KGZpbmFsU2l6ZSkgPT0gQ2hlY2tlZFN0YXRlOjpEaWRPdmVyZmxvdykK
LSAgICAgICAgcmV0dXJuIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKLSAgICAgICAgCi0g
ICAgaWYgKCFvdXRwdXRTdHJpbmdTaXplKQotICAgICAgICByZXR1cm4ganNFbXB0eVN0cmluZyhl
eGVjKTsKLQotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBvdXRwdXRTdHJpbmdJbXBsOwotICAgIGlm
IChtX2lzOEJpdHMpCi0gICAgICAgIG91dHB1dFN0cmluZ0ltcGwgPSBqb2luU3RyaW5nczxMQ2hh
cj4obV9zdHJpbmdzLCBtX3NlcGFyYXRvciwgZmluYWxTaXplKTsKKyAgICBpZiAoIWxlbmd0aCkK
KyAgICAgICAgcmV0dXJuIGpzRW1wdHlTdHJpbmcoJnN0YXRlKTsKKworICAgIFN0cmluZyByZXN1
bHQ7CisgICAgaWYgKG1faXNBbGw4Qml0KQorICAgICAgICByZXN1bHQgPSBqb2luU3RyaW5nczxM
Q2hhcj4obV9zdHJpbmdzLCBtX3NlcGFyYXRvciwgbGVuZ3RoKTsKICAgICBlbHNlCi0gICAgICAg
IG91dHB1dFN0cmluZ0ltcGwgPSBqb2luU3RyaW5nczxVQ2hhcj4obV9zdHJpbmdzLCBtX3NlcGFy
YXRvciwgZmluYWxTaXplKTsKKyAgICAgICAgcmVzdWx0ID0gam9pblN0cmluZ3M8VUNoYXI+KG1f
c3RyaW5ncywgbV9zZXBhcmF0b3IsIGxlbmd0aCk7CiAKLSAgICBpZiAoIW91dHB1dFN0cmluZ0lt
cGwpCi0gICAgICAgIHJldHVybiB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CisgICAgaWYg
KHJlc3VsdC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIHRocm93T3V0T2ZNZW1vcnlFcnJvcigm
c3RhdGUpOwogCi0gICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGUoZXhlYy0+dm0oKSwgb3V0cHV0
U3RyaW5nSW1wbC5yZWxlYXNlKCkpOworICAgIHJldHVybiBqc1N0cmluZygmc3RhdGUsIFdURjo6
bW92ZShyZXN1bHQpKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTdHJpbmdKb2luZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU3RyaW5nSm9pbmVyLmgKaW5kZXggNzM5NTBjNmQ3NDVhMGFjOGNhZjNlY2EzMjI1Mjc3Zjc2
NzNlZjI1NC4uYjkxNGNkYjY2N2Y0ZDRkZTIwM2M5ZTRhNDJiYzVjNDY1YmFlNmRjZSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdKb2luZXIuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0pvaW5lci5oCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2
LDUwICsyNiwxMTIgQEAKICNpZm5kZWYgSlNTdHJpbmdKb2luZXJfaAogI2RlZmluZSBKU1N0cmlu
Z0pvaW5lcl9oCiAKKyNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCiAjaW5jbHVkZSAiSlND
SlNWYWx1ZS5oIgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIEV4ZWNTdGF0ZTsKLQotCiBj
bGFzcyBKU1N0cmluZ0pvaW5lciB7CiBwdWJsaWM6Ci0gICAgSlNTdHJpbmdKb2luZXIoY29uc3Qg
U3RyaW5nJiBzZXBhcmF0b3IsIHNpemVfdCBzdHJpbmdDb3VudCk7CisgICAgSlNTdHJpbmdKb2lu
ZXIoRXhlY1N0YXRlJiwgTENoYXIgc2VwYXJhdG9yLCB1bnNpZ25lZCBzdHJpbmdDb3VudCk7Cisg
ICAgSlNTdHJpbmdKb2luZXIoRXhlY1N0YXRlJiwgU3RyaW5nVmlldyBzZXBhcmF0b3IsIHVuc2ln
bmVkIHN0cmluZ0NvdW50KTsKIAotICAgIHZvaWQgYXBwZW5kKGNvbnN0IFN0cmluZyYpOwotICAg
IEpTVmFsdWUgam9pbihFeGVjU3RhdGUqKTsKKyAgICB2b2lkIGFwcGVuZChFeGVjU3RhdGUmLCBK
U1ZhbHVlKTsKKworICAgIEpTVmFsdWUgam9pbihFeGVjU3RhdGUmKTsKIAogcHJpdmF0ZToKLSAg
ICBTdHJpbmcgbV9zZXBhcmF0b3I7Ci0gICAgVmVjdG9yPFN0cmluZz4gbV9zdHJpbmdzOworICAg
IHZvaWQgYXBwZW5kKFN0cmluZ1ZpZXdXaXRoVW5kZXJseWluZ1N0cmluZyYmKTsKKyAgICB2b2lk
IGFwcGVuZDhCaXQoY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBhcHBlbmRMaXRlcmFsKGNvbnN0
IElkZW50aWZpZXImKTsKKyAgICB2b2lkIGFwcGVuZEVtcHR5U3RyaW5nKCk7CisgICAgdW5zaWdu
ZWQgam9pbmVkTGVuZ3RoKEV4ZWNTdGF0ZSYpIGNvbnN0OwogCisgICAgTENoYXIgbV9zaW5nbGVD
aGFyYWN0ZXJTZXBhcmF0b3I7CisgICAgU3RyaW5nVmlldyBtX3NlcGFyYXRvcjsKKyAgICBWZWN0
b3I8U3RyaW5nVmlld1dpdGhVbmRlcmx5aW5nU3RyaW5nPiBtX3N0cmluZ3M7CiAgICAgQ2hlY2tl
ZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IG1fYWNjdW11bGF0ZWRTdHJpbmdzTGVuZ3RoOwot
ICAgIGJvb2wgbV9pc1ZhbGlkOwotICAgIGJvb2wgbV9pczhCaXRzOworICAgIGJvb2wgbV9pc0Fs
bDhCaXQgeyB0cnVlIH07CiB9OwogCi1pbmxpbmUgSlNTdHJpbmdKb2luZXI6OkpTU3RyaW5nSm9p
bmVyKGNvbnN0IFN0cmluZyYgc2VwYXJhdG9yLCBzaXplX3Qgc3RyaW5nQ291bnQpCitpbmxpbmUg
SlNTdHJpbmdKb2luZXI6OkpTU3RyaW5nSm9pbmVyKEV4ZWNTdGF0ZSYgc3RhdGUsIFN0cmluZ1Zp
ZXcgc2VwYXJhdG9yLCB1bnNpZ25lZCBzdHJpbmdDb3VudCkKICAgICA6IG1fc2VwYXJhdG9yKHNl
cGFyYXRvcikKLSAgICAsIG1faXNWYWxpZCh0cnVlKQotICAgICwgbV9pczhCaXRzKG1fc2VwYXJh
dG9yLmlzOEJpdCgpKQorICAgICwgbV9pc0FsbDhCaXQobV9zZXBhcmF0b3IuaXM4Qml0KCkpCit7
CisgICAgaWYgKCFtX3N0cmluZ3MudHJ5UmVzZXJ2ZUNhcGFjaXR5KHN0cmluZ0NvdW50KSkKKyAg
ICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKCZzdGF0ZSk7Cit9CisKK2lubGluZSBKU1N0cmlu
Z0pvaW5lcjo6SlNTdHJpbmdKb2luZXIoRXhlY1N0YXRlJiBzdGF0ZSwgTENoYXIgc2VwYXJhdG9y
LCB1bnNpZ25lZCBzdHJpbmdDb3VudCkKKyAgICA6IG1fc2luZ2xlQ2hhcmFjdGVyU2VwYXJhdG9y
KHNlcGFyYXRvcikKKyAgICAsIG1fc2VwYXJhdG9yIHsgJm1fc2luZ2xlQ2hhcmFjdGVyU2VwYXJh
dG9yLCAxIH0KK3sKKyAgICBpZiAoIW1fc3RyaW5ncy50cnlSZXNlcnZlQ2FwYWNpdHkoc3RyaW5n
Q291bnQpKQorICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoJnN0YXRlKTsKK30KKworQUxX
QVlTX0lOTElORSB2b2lkIEpTU3RyaW5nSm9pbmVyOjphcHBlbmQoU3RyaW5nVmlld1dpdGhVbmRl
cmx5aW5nU3RyaW5nJiYgc3RyaW5nKQogewotICAgIEFTU0VSVCghbV9zZXBhcmF0b3IuaXNOdWxs
KCkpOwotICAgIG1faXNWYWxpZCA9IG1fc3RyaW5ncy50cnlSZXNlcnZlQ2FwYWNpdHkoc3RyaW5n
Q291bnQpOworICAgIG1fYWNjdW11bGF0ZWRTdHJpbmdzTGVuZ3RoICs9IHN0cmluZy52aWV3Lmxl
bmd0aCgpOworICAgIG1faXNBbGw4Qml0ID0gbV9pc0FsbDhCaXQgJiYgc3RyaW5nLnZpZXcuaXM4
Qml0KCk7CisgICAgbV9zdHJpbmdzLnVuY2hlY2tlZEFwcGVuZChXVEY6Om1vdmUoc3RyaW5nKSk7
CiB9CiAKLWlubGluZSB2b2lkIEpTU3RyaW5nSm9pbmVyOjphcHBlbmQoY29uc3QgU3RyaW5nJiBz
dHIpCitBTFdBWVNfSU5MSU5FIHZvaWQgSlNTdHJpbmdKb2luZXI6OmFwcGVuZDhCaXQoY29uc3Qg
U3RyaW5nJiBzdHJpbmcpCiB7Ci0gICAgaWYgKCFtX2lzVmFsaWQpCisgICAgQVNTRVJUKHN0cmlu
Zy5pczhCaXQoKSk7CisgICAgbV9hY2N1bXVsYXRlZFN0cmluZ3NMZW5ndGggKz0gc3RyaW5nLmxl
bmd0aCgpOworICAgIG1fc3RyaW5ncy51bmNoZWNrZWRBcHBlbmQoeyBzdHJpbmcsIHN0cmluZyB9
KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpTU3RyaW5nSm9pbmVyOjphcHBlbmRMaXRlcmFs
KGNvbnN0IElkZW50aWZpZXImIGxpdGVyYWwpCit7CisgICAgbV9hY2N1bXVsYXRlZFN0cmluZ3NM
ZW5ndGggKz0gbGl0ZXJhbC5sZW5ndGgoKTsKKyAgICBBU1NFUlQobGl0ZXJhbC5zdHJpbmcoKS5p
czhCaXQoKSk7CisgICAgbV9zdHJpbmdzLnVuY2hlY2tlZEFwcGVuZCh7IGxpdGVyYWwuc3RyaW5n
KCksIHsgfSB9KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpTU3RyaW5nSm9pbmVyOjphcHBl
bmRFbXB0eVN0cmluZygpCit7CisgICAgbV9zdHJpbmdzLnVuY2hlY2tlZEFwcGVuZCh7IHsgfSwg
eyB9IH0pOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSlNTdHJpbmdKb2luZXI6OmFwcGVuZChF
eGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIC8vIFRoZSBmb2xsb3dpbmcg
Y29kZSBkaWZmZXJzIGZyb20gdXNpbmcgdGhlIHJlc3VsdCBvZiBKU1ZhbHVlOjp0b1N0cmluZyBp
biB0aGUgZm9sbG93aW5nIHdheXM6CisgICAgLy8gMSkgSXQncyBpbmxpbmVkIG1vcmUgdGhhbiBK
U1ZhbHVlOjp0b1N0cmluZyBpcy4KKyAgICAvLyAyKSBJdCBpbmNsdWRlcyBjb252ZXJzaW9uIHRv
IFdURjo6U3RyaW5nIGluIGEgd2F5IHRoYXQgYXZvaWRzIGFsbG9jYXRpbmcgY29waWVzIG9mIHN1
YnN0cmluZ3MuCisgICAgLy8gMykgSXQgZG9lc24ndCBjcmVhdGUgYSBKU1N0cmluZyBmb3IgbnVt
YmVycywgdHJ1ZSwgb3IgZmFsc2UuCisgICAgLy8gNCkgSXQgdHVybnMgdW5kZWZpbmVkIGFuZCBu
dWxsIGludG8gdGhlIGVtcHR5IHN0cmluZyBpbnN0ZWFkIG9mICJ1bmRlZmluZWQiIGFuZCAibnVs
bCIuCisgICAgLy8gNSkgSXQgdXNlcyBvcHRpbWl6ZWQgY29kZSBwYXRocyBmb3IgYWxsIHRoZSBj
YXNlcyBrbm93biB0byBiZSA4LWJpdCBhbmQgZm9yIHRoZSBlbXB0eSBzdHJpbmcuCisKKyAgICBp
ZiAodmFsdWUuaXNDZWxsKCkpIHsKKyAgICAgICAgaWYgKHZhbHVlLmFzQ2VsbCgpLT5pc1N0cmlu
ZygpKSB7CisgICAgICAgICAgICBhcHBlbmQoYXNTdHJpbmcodmFsdWUpLT52aWV3V2l0aFVuZGVy
bHlpbmdTdHJpbmcoc3RhdGUpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICBhcHBlbmQodmFsdWUudG9TdHJpbmcoJnN0YXRlKS0+dmlld1dpdGhVbmRlcmx5aW5nU3Ry
aW5nKHN0YXRlKSk7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBtX3N0cmluZ3MuYXBw
ZW5kKHN0cik7Ci0gICAgaWYgKCFzdHIuaXNOdWxsKCkpIHsKLSAgICAgICAgbV9hY2N1bXVsYXRl
ZFN0cmluZ3NMZW5ndGggKz0gc3RyLmxlbmd0aCgpOwotICAgICAgICBtX2lzOEJpdHMgPSBtX2lz
OEJpdHMgJiYgc3RyLmlzOEJpdCgpOworICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpIHsKKyAgICAg
ICAgYXBwZW5kOEJpdChzdGF0ZS52bSgpLm51bWVyaWNTdHJpbmdzLmFkZCh2YWx1ZS5hc0ludDMy
KCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAodmFsdWUuaXNEb3VibGUoKSkg
eworICAgICAgICBhcHBlbmQ4Qml0KHN0YXRlLnZtKCkubnVtZXJpY1N0cmluZ3MuYWRkKHZhbHVl
LmFzRG91YmxlKCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAodmFsdWUuaXNU
cnVlKCkpIHsKKyAgICAgICAgYXBwZW5kOEJpdChzdGF0ZS52bSgpLnByb3BlcnR5TmFtZXMtPnRy
dWVLZXl3b3JkLnN0cmluZygpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAodmFs
dWUuaXNGYWxzZSgpKSB7CisgICAgICAgIGFwcGVuZDhCaXQoc3RhdGUudm0oKS5wcm9wZXJ0eU5h
bWVzLT5mYWxzZUtleXdvcmQuc3RyaW5nKCkpOworICAgICAgICByZXR1cm47CiAgICAgfQorICAg
IEFTU0VSVCh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKTsKKyAgICBhcHBlbmRFbXB0eVN0cmlu
ZygpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaCBiL1NvdXJj
ZS9XVEYvd3RmL1ZlY3Rvci5oCmluZGV4IGQ2MWM1ZmZjMzZhMGNiOGVhMWU5ZTdjNGZmNjU1OWU5
OWVhNjZkMDcuLmRhY2RiMGE5NDkwZjk0NzlmN2FhODdjYmY2NDBiMzMyODlmYjViNDIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1ZlY3Rvci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1ZlY3Rv
ci5oCkBAIC03MjQsOSArNzI0LDEyIEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyKCkgeyBzaHJp
bmtDYXBhY2l0eSgwKTsgfQogCiAgICAgdm9pZCBhcHBlbmQoVmFsdWVUeXBlJiYgdmFsdWUpIHsg
YXBwZW5kPFZhbHVlVHlwZT4oc3RkOjpmb3J3YXJkPFZhbHVlVHlwZT4odmFsdWUpKTsgfQotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFU+IHZvaWQgYXBwZW5kKGNvbnN0IFUqLCBzaXplX3QpOwogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFU+IHZvaWQgYXBwZW5kKFUmJik7Ci0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVT4gdm9pZCB1bmNoZWNrZWRBcHBlbmQoVSYmIHZhbCk7CisKKyAgICB2b2lkIHVuY2hl
Y2tlZEFwcGVuZChWYWx1ZVR5cGUmJiB2YWx1ZSkgeyB1bmNoZWNrZWRBcHBlbmQ8VmFsdWVUeXBl
PihzdGQ6OmZvcndhcmQ8VmFsdWVUeXBlPih2YWx1ZSkpOyB9CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVT4gdm9pZCB1bmNoZWNrZWRBcHBlbmQoVSYmKTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFU+IHZvaWQgYXBwZW5kKGNvbnN0IFUqLCBzaXplX3QpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFUsIHNpemVfdCBvdGhlckNhcGFjaXR5PiB2b2lkIGFwcGVuZFZlY3Rvcihjb25zdCBWZWN0b3I8
VSwgb3RoZXJDYXBhY2l0eT4mKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBib29sIHRyeUFw
cGVuZChjb25zdCBVKiwgc2l6ZV90KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4
dC9TdHJpbmdWaWV3LmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1ZpZXcuaAppbmRleCAz
NTYwZGYwMTdiN2RmOGM0NTc4MWZhZTU1ZGM3NDIwNzEwMWUzMTJiLi42NjJkYTg3OWUyMWQ5NWIy
N2VjMGQ2ZDQ1ZmQyODRkMmJmNTMzODM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0
L1N0cmluZ1ZpZXcuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1ZpZXcuaApAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MDks
MTkgKzQwOSwyMyBAQCBpbmxpbmUgYm9vbCBTdHJpbmdWaWV3Ojpjb250YWlucyhVQ2hhciBjaGFy
YWN0ZXIpIGNvbnN0CiBpbmxpbmUgdm9pZCBTdHJpbmdWaWV3OjpnZXRDaGFyYWN0ZXJzV2l0aFVw
Y29udmVydChMQ2hhciogZGVzdGluYXRpb24pIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzOEJpdCgp
KTsKLSAgICBtZW1jcHkoZGVzdGluYXRpb24sIGNoYXJhY3RlcnM4KCksIGxlbmd0aCgpKTsKKyAg
ICBhdXRvIGNoYXJhY3RlcnM4ID0gdGhpcy0+Y2hhcmFjdGVyczgoKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9sZW5ndGg7ICsraSkKKyAgICAgICAgZGVzdGluYXRpb25baV0gPSBj
aGFyYWN0ZXJzOFtpXTsKIH0KIAogaW5saW5lIHZvaWQgU3RyaW5nVmlldzo6Z2V0Q2hhcmFjdGVy
c1dpdGhVcGNvbnZlcnQoVUNoYXIqIGRlc3RpbmF0aW9uKSBjb25zdAogewogICAgIGlmIChpczhC
aXQoKSkgewotICAgICAgICBjb25zdCBMQ2hhciogY2hhcmFjdGVyczggPSB0aGlzLT5jaGFyYWN0
ZXJzOCgpOwotICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzLT5sZW5ndGgoKTsKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQorICAgICAgICBhdXRvIGNo
YXJhY3RlcnM4ID0gdGhpcy0+Y2hhcmFjdGVyczgoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fbGVuZ3RoOyArK2kpCiAgICAgICAgICAgICBkZXN0aW5hdGlvbltpXSA9IGNo
YXJhY3RlcnM4W2ldOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIG1lbWNweShkZXN0aW5h
dGlvbiwgY2hhcmFjdGVyczE2KCksIGxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKSk7CisgICAgYXV0
byBjaGFyYWN0ZXJzMTYgPSB0aGlzLT5jaGFyYWN0ZXJzMTYoKTsKKyAgICB1bnNpZ25lZCBsZW5n
dGggPSB0aGlzLT5sZW5ndGgoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3Ro
OyArK2kpCisgICAgICAgIGRlc3RpbmF0aW9uW2ldID0gY2hhcmFjdGVyczE2W2ldOwogfQogCiBp
bmxpbmUgU3RyaW5nVmlldzo6VXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOjpVcGNvbnZlcnRlZENoYXJh
Y3RlcnMoY29uc3QgU3RyaW5nVmlldyYgc3RyaW5nKQpAQCAtNDMxLDcgKzQzNSw3IEBAIGlubGlu
ZSBTdHJpbmdWaWV3OjpVcGNvbnZlcnRlZENoYXJhY3RlcnM6OlVwY29udmVydGVkQ2hhcmFjdGVy
cyhjb25zdCBTdHJpbmdWaWV3CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY29uc3QgTENo
YXIqIGNoYXJhY3RlcnM4ID0gc3RyaW5nLmNoYXJhY3RlcnM4KCk7Ci0gICAgdW5zaWduZWQgbGVu
Z3RoID0gc3RyaW5nLmxlbmd0aCgpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZy5tX2xl
bmd0aDsKICAgICBtX3VwY29udmVydGVkQ2hhcmFjdGVycy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KGxlbmd0aCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQogICAg
ICAgICBtX3VwY29udmVydGVkQ2hhcmFjdGVycy51bmNoZWNrZWRBcHBlbmQoY2hhcmFjdGVyczhb
aV0pOwpAQCAtNDQxLDM1ICs0NDUsMzUgQEAgaW5saW5lIFN0cmluZ1ZpZXc6OlVwY29udmVydGVk
Q2hhcmFjdGVyczo6VXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKGNvbnN0IFN0cmluZ1ZpZXcKIGlubGlu
ZSBTdHJpbmcgU3RyaW5nVmlldzo6dG9TdHJpbmcoKSBjb25zdAogewogICAgIGlmIChpczhCaXQo
KSkKLSAgICAgICAgcmV0dXJuIFN0cmluZyhjaGFyYWN0ZXJzOCgpLCBsZW5ndGgoKSk7CisgICAg
ICAgIHJldHVybiBTdHJpbmcoY2hhcmFjdGVyczgoKSwgbV9sZW5ndGgpOwogICAgIHJldHVybiBT
dHJpbmcoY2hhcmFjdGVyczE2KCksIGxlbmd0aCgpKTsKIH0KIAogaW5saW5lIGZsb2F0IFN0cmlu
Z1ZpZXc6OnRvRmxvYXQoYm9vbCYgaXNWYWxpZCkgY29uc3QKIHsKICAgICBpZiAoaXM4Qml0KCkp
Ci0gICAgICAgIHJldHVybiBjaGFyYWN0ZXJzVG9GbG9hdChjaGFyYWN0ZXJzOCgpLCBsZW5ndGgo
KSwgJmlzVmFsaWQpOworICAgICAgICByZXR1cm4gY2hhcmFjdGVyc1RvRmxvYXQoY2hhcmFjdGVy
czgoKSwgbV9sZW5ndGgsICZpc1ZhbGlkKTsKICAgICByZXR1cm4gY2hhcmFjdGVyc1RvRmxvYXQo
Y2hhcmFjdGVyczE2KCksIGxlbmd0aCgpLCAmaXNWYWxpZCk7CiB9CiAKIGlubGluZSBpbnQgU3Ry
aW5nVmlldzo6dG9JbnQoYm9vbCYgaXNWYWxpZCkgY29uc3QKIHsKICAgICBpZiAoaXM4Qml0KCkp
Ci0gICAgICAgIHJldHVybiBjaGFyYWN0ZXJzVG9JbnQoY2hhcmFjdGVyczgoKSwgbGVuZ3RoKCks
ICZpc1ZhbGlkKTsKKyAgICAgICAgcmV0dXJuIGNoYXJhY3RlcnNUb0ludChjaGFyYWN0ZXJzOCgp
LCBtX2xlbmd0aCwgJmlzVmFsaWQpOwogICAgIHJldHVybiBjaGFyYWN0ZXJzVG9JbnQoY2hhcmFj
dGVyczE2KCksIGxlbmd0aCgpLCAmaXNWYWxpZCk7CiB9CiAKIGlubGluZSBTdHJpbmcgU3RyaW5n
Vmlldzo6dG9TdHJpbmdXaXRob3V0Q29weWluZygpIGNvbnN0CiB7CiAgICAgaWYgKGlzOEJpdCgp
KQotICAgICAgICByZXR1cm4gU3RyaW5nSW1wbDo6Y3JlYXRlV2l0aG91dENvcHlpbmcoY2hhcmFj
dGVyczgoKSwgbGVuZ3RoKCkpOworICAgICAgICByZXR1cm4gU3RyaW5nSW1wbDo6Y3JlYXRlV2l0
aG91dENvcHlpbmcoY2hhcmFjdGVyczgoKSwgbV9sZW5ndGgpOwogICAgIHJldHVybiBTdHJpbmdJ
bXBsOjpjcmVhdGVXaXRob3V0Q29weWluZyhjaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoKCkpOwogfQog
CiBpbmxpbmUgc2l6ZV90IFN0cmluZ1ZpZXc6OmZpbmQoVUNoYXIgY2hhcmFjdGVyLCB1bnNpZ25l
ZCBzdGFydCkgY29uc3QKIHsKICAgICBpZiAoaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBXVEY6
OmZpbmQoY2hhcmFjdGVyczgoKSwgbGVuZ3RoKCksIGNoYXJhY3Rlciwgc3RhcnQpOworICAgICAg
ICByZXR1cm4gV1RGOjpmaW5kKGNoYXJhY3RlcnM4KCksIG1fbGVuZ3RoLCBjaGFyYWN0ZXIsIHN0
YXJ0KTsKICAgICByZXR1cm4gV1RGOjpmaW5kKGNoYXJhY3RlcnMxNigpLCBsZW5ndGgoKSwgY2hh
cmFjdGVyLCBzdGFydCk7CiB9CiAK
</data>
<flag name="review"
          id="280472"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>