<?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>188728</bug_id>
          
          <creation_ts>2018-08-18 17:06:11 -0700</creation_ts>
          <short_desc>Various IndexDB tests abandon documents</short_desc>
          <delta_ts>2018-09-04 17:03: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>DOM</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=188937</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=188938</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=189018</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>186214</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="youenn fablet">youennf</assigned_to>
          <cc>achristensen</cc>
    
    <cc>alecflett</cc>
    
    <cc>ap</cc>
    
    <cc>beidson</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>jsbell</cc>
    
    <cc>sihui_liu</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tsavell</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1451433</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-08-18 17:06:11 -0700</bug_when>
    <thetext>Tests like imported/w3c/IndexedDB-private-browsing/cursor-overloads.html, imported/w3c/IndexedDB-private-browsing/idbcursor_advance_index.html, and others abandon the main document (bug 186214). I don&apos;t see any suspicious-looking retain stacks in C++, so I suspect this might be a GC-world issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1452830</commentid>
    <comment_count>1</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-08-22 15:17:49 -0700</bug_when>
    <thetext>A bit confused by this one. The Document is released in MiniBrowser (by an EventHandler being GC&apos;d), but never in WebKitTestRunner even when followed by other tests and GCing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1452931</commentid>
    <comment_count>2</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-08-22 18:51:03 -0700</bug_when>
    <thetext>GC heap inspector to the rescue:

HTMLDocument cell 0x42775c060 wrapped 0x42c202400 “http://localhost:8800/IndexedDB/value.htm”Show all paths—3 steps from IDBOpenDBRequest cell 0x42775c3f0 wrapped 0x42d97c3d0 (GC root—Weak sets, ActiveDOMObject with pending activity)
IDBOpenDBRequest cell 0x42775c3f0 wrapped 0x42d97c3d0 (GC root—Weak sets, ActiveDOMObject with pending activity)Internal 0
Structure cell 0x42d7a0500 “IDBOpenDBRequest”Internal 0
Window cell 0x4277d8fb0 Variable document
HTMLDocument cell 0x42775c060 wrapped 0x42c202400 “http://localhost:8800/IndexedDB/value.htm”</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1452938</commentid>
    <comment_count>3</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-08-22 19:08:19 -0700</bug_when>
    <thetext>The IDBRequest that is always active is a &quot;blocked&quot; event.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1452943</commentid>
    <comment_count>4</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-08-22 19:39:07 -0700</bug_when>
    <thetext>The test triggers the call to IDBConnectionToServer::deleteDatabase(), but we never get the IDBConnectionToServer::didDeleteDatabase() message back (unlike in MiniBrowser).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1452955</commentid>
    <comment_count>5</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-08-22 20:54:29 -0700</bug_when>
    <thetext>I think what&apos;s happening here is this:

1. The test runs, and says it&apos;s done, but there are still a bunch of DB operations pending.
2. In WebKtTestRunner, we immediately load about:blank. This load causes us to call IDBRequest::stop() on several IDB requests:

1   0x1f1621f75 WebCore::IDBRequest::stop()
2   0x1f219fbd5 auto WebCore::ScriptExecutionContext::stopActiveDOMObjects()::$_5::operator()&lt;WebCore::ActiveDOMObject&gt;(WebCore::ActiveDOMObject&amp;) const
3   0x1f219fb84 WTF::Function&lt;WebCore::ScriptExecutionContext::ShouldContinue (WebCore::ActiveDOMObject&amp;)&gt;::CallableWrapper&lt;WebCore::ScriptExecutionContext::stopActiveDOMObjects()::$_5&gt;::call(WebCore::ActiveDOMObject&amp;)
4   0x1f2187060 WTF::Function&lt;WebCore::ScriptExecutionContext::ShouldContinue (WebCore::ActiveDOMObject&amp;)&gt;::operator()(WebCore::ActiveDOMObject&amp;) const
5   0x1f2186cb3 WebCore::ScriptExecutionContext::forEachActiveDOMObject(WTF::Function&lt;WebCore::ScriptExecutionContext::ShouldContinue (WebCore::ActiveDOMObject&amp;)&gt; const&amp;) const
6   0x1f2187294 WebCore::ScriptExecutionContext::stopActiveDOMObjects()
7   0x1f1fea655 WebCore::Document::stopActiveDOMObjects()
8   0x1f1fe9e8c WebCore::Document::prepareForDestruction()
9   0x1f2a0d620 WebCore::Frame::setView(WTF::RefPtr&lt;WebCore::FrameView, WTF::DumbPtrTraits&lt;WebCore::FrameView&gt; &gt;&amp;&amp;)
10  0x1f2a1194b WebCore::Frame::createView(WebCore::IntSize const&amp;, WebCore::Color const&amp;, bool, WebCore::IntSize const&amp;, WebCore::IntRect const&amp;, bool, WebCore::ScrollbarMode, bool, WebCore::ScrollbarMode, bool)
11  0x10b9039da WebKit::WebFrameLoaderClient::transitionToCommittedForNewPage()
12  0x1f2846955 WebCore::FrameLoader::transitionToCommitted(WebCore::CachedPage*)
13  0x1f2845990 WebCore::FrameLoader::commitProvisionalLoad()
14  0x1f27ea8bc WebCore::DocumentLoader::commitIfReady()

3. We get to IDBConnectionToServer::didDeleteDatabase() with IDBResultType::DeleteDatabaseSuccess, but m_contextStopped is true, so we never enqueue a &quot;success&quot; event.

This leaves us in a state where a &quot;blocked&quot; event is never cleared, and we have an ActiveDOMObject which remains active, which keeps the Document alive.

Maybe IDBRequest::stop() should set m_hasPendingActivity to false?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1453139</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-08-23 11:30:06 -0700</bug_when>
    <thetext>&lt;rdar://problem/43651095&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1453151</commentid>
    <comment_count>7</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-08-23 11:57:15 -0700</bug_when>
    <thetext>How to reproduce in MiniBrowser:
1. Apply this patch to the test:
diff --git a/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/value.htm b/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/value.htm
index 36e8339524852590d52ce2275a9f0c0f372f6d31..397ca733f74360321db7dd4ae042ad718615d923 100644
--- a/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/value.htm
+++ b/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/value.htm
@@ -27,6 +27,7 @@ function value(value, _instanceof) {
             {
                 assert_true(e.target.result instanceof _instanceof, &quot;instanceof&quot;)
                 t.done();
+                window.location.href = &apos;about:blank&apos;;
             });
         });
     };

2. Start the http server: ./Tools/Scripts/run-webkit-httpd
3. Load the test in MiniBrowser: http://localhost:8800/IndexedDB/value.htm
4. Fire a memory warning (in Terminal: &quot;notifyutil -p org.WebKit.lowMemory&quot;)
5. Dump the list of live documents (in Terminal: &quot;notifyutil -p com.apple.WebKit.showAllDocuments&quot;)

http://localhost:8800/IndexedDB/value.htm will be listed there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1453248</commentid>
    <comment_count>8</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2018-08-23 15:24:04 -0700</bug_when>
    <thetext>Several IDB objects implement hasPendingActivity.
IDBRequest and IDBCursor at least may still returning true to hasPendingActivity even when stopped. This should probably not be the case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1453470</commentid>
    <comment_count>9</comment_count>
      <attachid>348018</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2018-08-24 09:52:36 -0700</bug_when>
    <thetext>Created attachment 348018
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1453475</commentid>
    <comment_count>10</comment_count>
      <attachid>348018</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-08-24 10:11:10 -0700</bug_when>
    <thetext>Comment on attachment 348018
Patch

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

&gt; Source/WebCore/testing/Internals.idl:668
&gt; +    sequence&lt;DOMString&gt; documentURLs();

I don&apos;t think you need to add this. Instead, use:

    unsigned long long documentIdentifier(Document document);
    boolean isDocumentAlive(unsigned long long documentIdentifier);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1453481</commentid>
    <comment_count>11</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2018-08-24 10:36:33 -0700</bug_when>
    <thetext>Doing some more code inspection, I can see several reasons why IDBRequest::m_hasPendingActivity would remain true:
1. IDBOpenDBRequest::requestCompleted is called after the request is stopped. We then never set back m_hasPendingActivity to false since we do not want to call enqueueEvent. This could be fixed by adding something like a IDBRequest::requestCompletedAfterContextStopped to do the cleanup.
2. IDBRequest::dispatchEvent has a code path where it will reset m_hasPendingActivity to true (in case of upgrade needed or blocked event). I do not see how in that case we can ensure that a new transaction will be created so that IDBRequest::dispatchEvent would be called again to set m_hasPendingActivity to false again.

The fact that m_hasPendingActivity is true by default is also a potential source of issue but from what I see, we are always creating a request and then doing some transaction, so this does not seem to be a possible cause now.

There is the context of a TransactionOperation that has a ref to a IDBRequest.
Maybe IDBRequest::m_hasPendingActivity should be true as long as a TransactionOperation holds a ref to it.
That would require to better understand case 2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1453482</commentid>
    <comment_count>12</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2018-08-24 10:36:55 -0700</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #10)
&gt; Comment on attachment 348018 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=348018&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/testing/Internals.idl:668
&gt; &gt; +    sequence&lt;DOMString&gt; documentURLs();
&gt; 
&gt; I don&apos;t think you need to add this. Instead, use:
&gt; 
&gt;     unsigned long long documentIdentifier(Document document);
&gt;     boolean isDocumentAlive(unsigned long long documentIdentifier);

ok, will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1453484</commentid>
    <comment_count>13</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2018-08-24 10:42:20 -0700</bug_when>
    <thetext>To make code more robust, we could envision to make all ActiveDOMObjects be collectable once their context is stopped/preparing for destruction. That could be done in the binding generator, JSXXOwner::isReachableFromOpaqueRoots.

Looking at all ActiveDOMObject reimplementing hasPendingActivity, they seem to follow this strategy.
For the other ActiveDOMObjects, they usually rely on setPendingActivity/unsetPendingActivity so need to make sure they mirror setPendingActivity calls with un setPendingActivity calls.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1453491</commentid>
    <comment_count>14</comment_count>
      <attachid>348023</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2018-08-24 10:57:11 -0700</bug_when>
    <thetext>Created attachment 348023
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1453515</commentid>
    <comment_count>15</comment_count>
      <attachid>348031</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2018-08-24 11:51:49 -0700</bug_when>
    <thetext>Created attachment 348031
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1453544</commentid>
    <comment_count>16</comment_count>
      <attachid>348031</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-08-24 12:54:14 -0700</bug_when>
    <thetext>Comment on attachment 348031
Patch

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

&gt; Source/WebCore/ChangeLog:9
&gt; +        Some IDB objects implement hasPendingActivity but there are some possibilities that they continue returning true after being stopped. 

I think you should explain these scenarios in more detail here.

&gt; Source/WebCore/ChangeLog:11
&gt; +        This ensures that they can be garbage collected once their document is preparing for destruction.

The dependency is the other way around: they have to be GC&apos;d before the Document can be destroyed.

&gt; Source/WebCore/Modules/indexeddb/IDBCursor.cpp:372
&gt; +    return !m_contextStopped &amp;&amp; m_outstandingRequestCount;

Don&apos;t we need to wait for outstanding requests to complete (either after finishing, or being canceled)? I&apos;m worried that allowing IDBCursor&apos;s to be GC&apos;d while things are still happening could corrupt databases.

&gt; Source/WebCore/Modules/indexeddb/IDBRequest.cpp:269
&gt; +    return !m_contextStopped &amp;&amp; m_hasPendingActivity;

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1453565</commentid>
    <comment_count>17</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2018-08-24 13:51:25 -0700</bug_when>
    <thetext>&gt; &gt; Source/WebCore/ChangeLog:9
&gt; &gt; +        Some IDB objects implement hasPendingActivity but there are some possibilities that they continue returning true after being stopped. 
&gt; 
&gt; I think you should explain these scenarios in more detail here.

OK

&gt; &gt; Source/WebCore/ChangeLog:11
&gt; &gt; +        This ensures that they can be garbage collected once their document is preparing for destruction.
&gt; 
&gt; The dependency is the other way around: they have to be GC&apos;d before the
&gt; Document can be destroyed.

I was meaning Document::prepareForDestruction, not Document destructor.

&gt; &gt; Source/WebCore/Modules/indexeddb/IDBCursor.cpp:372
&gt; &gt; +    return !m_contextStopped &amp;&amp; m_outstandingRequestCount;
&gt; 
&gt; Don&apos;t we need to wait for outstanding requests to complete (either after
&gt; finishing, or being canceled)? I&apos;m worried that allowing IDBCursor&apos;s to be
&gt; GC&apos;d while things are still happening could corrupt databases.

AFAIUI, the point of hasPendingActivity implementation here is that the objects will not be GCed so that we can dispatch their events properly. Since there is no point in dispatching events after they are stopped, the change seems fine to me.

IDBCursor and IDBRequest hasPendingActivity implementation is not to ensure objects get not deallocated.
For that purpose, other objects are taking Ref to these objects.
For instance, nobody is storing a raw reference/pointer to IDBCursor.
IDBCursor does take a raw pointer to IDBRequest but this gets cleared in IDBRequest destructor.

In general, I do not think we should count on GC to keep the objects alive when we are waiting for some async task.
Instead, the async task should take a Ref until being completed.

In the case of IDBCursor, we could try to stick with m_outstandingRequestCount only although I do not see a huge benefit there.
We would probably just need to clear IDBRequest::m_cursorRequestNotifier in IDBRequest::stop.
We could add an ASSERT to make sure that m_outstandingRequestCount is 0 once stopped.

&gt; &gt; Source/WebCore/Modules/indexeddb/IDBRequest.cpp:269
&gt; &gt; +    return !m_contextStopped &amp;&amp; m_hasPendingActivity;
&gt; 
&gt; Ditto.

For this one, I do not have a better plan right now.
I do not understand IDB enough yet to see why m_hasPendingActivity can be set back to true in IDBRequest::dispatchEvent.
Again, my interpretation is that it only has to do with event dispatching, not keeping the C++ object alive.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1453886</commentid>
    <comment_count>18</comment_count>
      <attachid>348031</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-08-27 08:47:19 -0700</bug_when>
    <thetext>Comment on attachment 348031
Patch

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

&gt;&gt; Source/WebCore/Modules/indexeddb/IDBCursor.cpp:372
&gt;&gt; +    return !m_contextStopped &amp;&amp; m_outstandingRequestCount;
&gt; 
&gt; Don&apos;t we need to wait for outstanding requests to complete (either after finishing, or being canceled)? I&apos;m worried that allowing IDBCursor&apos;s to be GC&apos;d while things are still happening could corrupt databases.

This needs a new patch after making IDBCursor no longer an ActiveDOMObject</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1454033</commentid>
    <comment_count>19</comment_count>
      <attachid>348188</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2018-08-27 12:36:42 -0700</bug_when>
    <thetext>Created attachment 348188
Rebased</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1454059</commentid>
    <comment_count>20</comment_count>
      <attachid>348188</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2018-08-27 13:35:40 -0700</bug_when>
    <thetext>Comment on attachment 348188
Rebased

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

&gt; Source/WebCore/ChangeLog:11
&gt; +        This is also the case for requests that emits upgradenneeded or blocked events.

Nit - upgradenneeded!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1454160</commentid>
    <comment_count>21</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2018-08-27 15:55:27 -0700</bug_when>
    <thetext>Doing some more tests, IDBDatabase also has a similar risk, let&apos;s handle it in a separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1454164</commentid>
    <comment_count>22</comment_count>
      <attachid>348226</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2018-08-27 15:59:45 -0700</bug_when>
    <thetext>Created attachment 348226
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1454209</commentid>
    <comment_count>23</comment_count>
      <attachid>348226</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-08-27 16:41:19 -0700</bug_when>
    <thetext>Comment on attachment 348226
Patch for landing

Clearing flags on attachment: 348226

Committed r235410: &lt;https://trac.webkit.org/changeset/235410&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1454210</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-08-27 16:41:21 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1456537</commentid>
    <comment_count>25</comment_count>
    <who name="Truitt Savell">tsavell</who>
    <bug_when>2018-09-04 17:03:49 -0700</bug_when>
    <thetext>Looks like the test
http/tests/IndexedDB/collect-IDB-objects.https.html

introduced in https://trac.webkit.org/changeset/235410/webkit

has been flakey from the start

Test History:
http://webkit-test-results.webkit.org/dashboards/flakiness_dashboard.html#showAllRuns=true&amp;tests=http%2Ftests%2FIndexedDB%2Fcollect-IDB-objects.https.html

Diff:
--- /Volumes/Data/slave/highsierra-release-tests-wk1/build/layout-test-results/http/tests/IndexedDB/collect-IDB-objects.https-expected.txt
+++ /Volumes/Data/slave/highsierra-release-tests-wk1/build/layout-test-results/http/tests/IndexedDB/collect-IDB-objects.https-actual.txt
@@ -1,4 +1,4 @@
 
 
-PASS Ensuring frame document gets collected after being stopped in the middle of IDB operations 
+FAIL Ensuring frame document gets collected after being stopped in the middle of IDB operations promise_test: Unhandled rejection with value: &quot;Test failed&quot;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>348018</attachid>
            <date>2018-08-24 09:52:36 -0700</date>
            <delta_ts>2018-08-24 10:57:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-188728-20180824095235.patch</filename>
            <type>text/plain</type>
            <size>17322</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM1MjMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGRlM2EzODJlYmQ5NTY0
NmFhNWYzYjczODc5NmU4Mzk0ZWUxNDM3MS4uNGM5ZDU3MjdkZWZjY2QzNzNhYWI0NjQwMGZhNzg1
ZDkxMWUxNDMwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDE4LTA4LTI0ICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBWYXJpb3VzIEluZGV4REIg
dGVzdHMgYWJhbmRvbiBkb2N1bWVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE4ODcyOAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNDM2NTEwOTU+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU29tZSBJ
REIgb2JqZWN0cyBpbXBsZW1lbnQgaGFzUGVuZGluZ0FjdGl2aXR5IGJ1dCB0aGVyZSBhcmUgc29t
ZSBwb3NzaWJpbGl0aWVzIHRoYXQgdGhleSBjb250aW51ZSByZXR1cm5pbmcgdHJ1ZSBhZnRlciBi
ZWluZyBzdG9wcGVkLiAKKyAgICAgICAgRW5mb3JjZSB0aGF0IHRoZXNlIG9iamVjdHMgcmV0dXJu
IGZhbHNlIHRvIGhhc1BlbmRpbmdBY3Rpdml0eSBvbmNlIGJlaW5nIHN0b3BwZWQuCisgICAgICAg
IFRoaXMgZW5zdXJlcyB0aGF0IHRoZXkgY2FuIGJlIGdhcmJhZ2UgY29sbGVjdGVkIG9uY2UgdGhl
aXIgZG9jdW1lbnQgaXMgcHJlcGFyaW5nIGZvciBkZXN0cnVjdGlvbi4KKworICAgICAgICBBZGQg
YW4gaW50ZXJuYWxzIEFQSSB0byBhY2Nlc3MgdG8gZXhpc3RpbmcgZG9jdW1lbnRzIG9mIGEgcHJv
Y2Vzcy4KKyAgICAgICAgVGhpcyBhbGxvd3MgdmVyaWZ5aW5nIHRoYXQgZG9jdW1lbnRzIGRvIGdl
dCBkZXN0cm95ZWQgd2hlbiBzdG9wcGluZyBJREIgcmVxdWVzdHMgaW4gdGhlIG1pZGRsZSBvZiBh
IHBlbmRpbmcgYWN0aXZpdHkuXCAKKworICAgICAgICBUZXN0OiBodHRwL3Rlc3RzL0luZGV4ZWRE
Qi92YWx1ZS5odHRwcy5odG1sCisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJz
b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yOjpoYXNQZW5kaW5nQWN0aXZpdHkg
Y29uc3QpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oOgorICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklE
QkluZGV4OjpoYXNQZW5kaW5nQWN0aXZpdHkgY29uc3QpOgorICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0
b3JlOjpoYXNQZW5kaW5nQWN0aXZpdHkgY29uc3QpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQlJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6aGFzUGVu
ZGluZ0FjdGl2aXR5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OmVucXVl
dWVFdmVudCk6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW50ZXJuYWxzOjpkb2N1bWVudFVSTHMpOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJu
YWxzLmg6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuaWRsOgorCiAyMDE4LTA4LTIzICBZ
b3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBVcGRhdGUgbGlid2Vi
cnRjIHVwIHRvIDk4NGYxYTgwYzAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkN1cnNvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJDdXJzb3IuY3BwCmluZGV4IDA1ZGI4MzQxN2U1YzAxYzk1NjdhNTJjMDJiMjlkYzI3NjBh
MzcwYzAuLjcxMzAzYTFlOGNiYmYyZjNhYzk4N2U0ZjI0YTlhZjVhY2Y1NzE4YmEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcApAQCAtMzY5LDcg
KzM2OSw3IEBAIGJvb2wgSURCQ3Vyc29yOjpjYW5TdXNwZW5kRm9yRG9jdW1lbnRTdXNwZW5zaW9u
KCkgY29uc3QKIAogYm9vbCBJREJDdXJzb3I6Omhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIG1fb3V0c3RhbmRpbmdSZXF1ZXN0Q291bnQ7CisgICAgcmV0dXJuICFtX2Nv
bnRleHRTdG9wcGVkICYmIG1fb3V0c3RhbmRpbmdSZXF1ZXN0Q291bnQ7CiB9CiAKIHZvaWQgSURC
Q3Vyc29yOjpkZWNyZW1lbnRPdXRzdGFuZGluZ1JlcXVlc3RDb3VudCgpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oCmluZGV4IDQ5MDMwNTY5OTExYTc3OTc5
ZWFkZGQ5MzRhZTA0ODBjNDI4NDE4ODYuLmQ3ZTY1ZTQ3Y2Q1M2YzNDdhZmU0OWVkNTNlMDFkYjM4
MTQ4ZWFlNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkN1cnNvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNv
ci5oCkBAIC04NSw2ICs4NSw3IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgY29uc3QgY2hh
ciogYWN0aXZlRE9NT2JqZWN0TmFtZSgpIGNvbnN0IGZpbmFsOwogICAgIGJvb2wgY2FuU3VzcGVu
ZEZvckRvY3VtZW50U3VzcGVuc2lvbigpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgc3RvcCgpIGZp
bmFsIHsgbV9jb250ZXh0U3RvcHBlZCA9IHRydWU7IH0KIAogICAgIGJvb2wgc291cmNlc0RlbGV0
ZWQoKSBjb25zdDsKICAgICBJREJPYmplY3RTdG9yZSYgZWZmZWN0aXZlT2JqZWN0U3RvcmUoKSBj
b25zdDsKQEAgLTEwMSw2ICsxMDIsNyBAQCBwcml2YXRlOgogICAgIElEQlJlcXVlc3QqIG1fcmVx
dWVzdCB7IG51bGxwdHIgfTsKIAogICAgIGJvb2wgbV9nb3RWYWx1ZSB7IGZhbHNlIH07CisgICAg
Ym9vbCBtX2NvbnRleHRTdG9wcGVkIHsgZmFsc2UgfTsKIAogICAgIElEQktleURhdGEgbV9jdXJy
ZW50S2V5RGF0YTsKICAgICBJREJLZXlEYXRhIG1fY3VycmVudFByaW1hcnlLZXlEYXRhOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguY3BwCmluZGV4IDE5MTll
NDY5NDE4YzA1YzhhZTc3MjNlZDY2MTExZDlhM2U0NTUxNmIuLjlkMWY4MzkzNzczN2FlODAxMTBi
MDIwZWE5OTgzYjY4ZDgwM2Y2N2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkluZGV4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJJbmRleC5jcHAKQEAgLTY5LDcgKzY5LDcgQEAgYm9vbCBJREJJbmRleDo6Y2FuU3Vz
cGVuZEZvckRvY3VtZW50U3VzcGVuc2lvbigpIGNvbnN0CiAKIGJvb2wgSURCSW5kZXg6Omhhc1Bl
bmRpbmdBY3Rpdml0eSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICFtX29iamVjdFN0b3JlLnRyYW5z
YWN0aW9uKCkuaXNGaW5pc2hlZCgpOworICAgIHJldHVybiBtX29iamVjdFN0b3JlLnRyYW5zYWN0
aW9uKCkuaGFzUGVuZGluZ0FjdGl2aXR5KCk7CiB9CiAKIGNvbnN0IFN0cmluZyYgSURCSW5kZXg6
Om5hbWUoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCT2JqZWN0U3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmUuY3BwCmluZGV4IDNjNTBlYmNkNjliN2EzYzNmYjg0YTZhM2E0ZDMxNWFk
NjJkNDM2MTIuLmYwOGM5ZTUyODUzZjMwYjA4NzhlZWZmZDBkYjVkMTcwMmYyMzFmMTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5j
cHAKQEAgLTgyLDcgKzgyLDcgQEAgYm9vbCBJREJPYmplY3RTdG9yZTo6Y2FuU3VzcGVuZEZvckRv
Y3VtZW50U3VzcGVuc2lvbigpIGNvbnN0CiAKIGJvb2wgSURCT2JqZWN0U3RvcmU6Omhhc1BlbmRp
bmdBY3Rpdml0eSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICFtX3RyYW5zYWN0aW9uLmlzRmluaXNo
ZWQoKTsKKyAgICByZXR1cm4gbV90cmFuc2FjdGlvbi5oYXNQZW5kaW5nQWN0aXZpdHkoKTsKIH0K
IAogY29uc3QgU3RyaW5nJiBJREJPYmplY3RTdG9yZTo6bmFtZSgpIGNvbnN0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwCmluZGV4IDJjMjdkZmQ1
ZjgwNjA0NTVlZjE3NzFiMWRjOThkOTMzYTE0YjlhNjEuLjAzMWViYzFlZGIyMzU2MTU5ODFhZjVh
YmNlOGU4NDg1MmZmZWEwZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQlJlcXVlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQlJlcXVlc3QuY3BwCkBAIC0yNjYsNyArMjY2LDcgQEAgYm9vbCBJREJSZXF1ZXN0Ojpj
YW5TdXNwZW5kRm9yRG9jdW1lbnRTdXNwZW5zaW9uKCkgY29uc3QKIGJvb2wgSURCUmVxdWVzdDo6
aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKIHsKICAgICBBU1NFUlQoJm9yaWdpblRocmVhZCgp
ID09ICZUaHJlYWQ6OmN1cnJlbnQoKSB8fCBtYXlCZUdDVGhyZWFkKCkpOwotICAgIHJldHVybiBt
X2hhc1BlbmRpbmdBY3Rpdml0eTsKKyAgICByZXR1cm4gIW1fY29udGV4dFN0b3BwZWQgJiYgbV9o
YXNQZW5kaW5nQWN0aXZpdHk7CiB9CiAKIHZvaWQgSURCUmVxdWVzdDo6c3RvcCgpCkBAIC0yODks
NyArMjg5LDcgQEAgdm9pZCBJREJSZXF1ZXN0OjpjYW5jZWxGb3JTdG9wKCkKIHZvaWQgSURCUmVx
dWVzdDo6ZW5xdWV1ZUV2ZW50KFJlZjxFdmVudD4mJiBldmVudCkKIHsKICAgICBBU1NFUlQoJm9y
aWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7Ci0gICAgaWYgKCFzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkgfHwgbV9jb250ZXh0U3RvcHBlZCkKKyAgICBpZiAobV9jb250ZXh0U3Rv
cHBlZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgZXZlbnQtPnNldFRhcmdldCh0aGlzKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAppbmRleCA5YmExZDI3NGEyYWRkNjNhZDViNjIz
ZDJhYmRjMDM4MWUyODlkZWU3Li40MjUzMmFlNTBjZWY5ZGVmYTdlN2MxYjEyYzIwOWE5NGRhMjA0
NjY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCkBAIC00NzA2LDYgKzQ3MDYs
MTQgQEAgc2l6ZV90IEludGVybmFsczo6cGx1Z2luQ291bnQoKQogICAgIHJldHVybiBjb250ZXh0
RG9jdW1lbnQoKS0+cGFnZSgpLT5wbHVnaW5EYXRhKCkud2ViVmlzaWJsZVBsdWdpbnMoKS5zaXpl
KCk7CiB9CiAKK1ZlY3RvcjxTdHJpbmc+IEludGVybmFsczo6ZG9jdW1lbnRVUkxzKCkKK3sKKyAg
ICBWZWN0b3I8U3RyaW5nPiB1cmxzOworICAgIGZvciAoY29uc3QgYXV0byogZG9jdW1lbnQgOiBE
b2N1bWVudDo6YWxsRG9jdW1lbnRzKCkpCisgICAgICAgIHVybHMuYXBwZW5kKGRvY3VtZW50LT51
cmwoKS5zdHJpbmcoKSk7CisgICAgcmV0dXJuIHVybHM7Cit9CisKIHZvaWQgSW50ZXJuYWxzOjpu
b3RpZnlSZXNvdXJjZUxvYWRPYnNlcnZlcigpCiB7CiAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZCgpLm5vdGlmeU9ic2VydmVyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL0ludGVybmFscy5oIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaApp
bmRleCA4MTk5ZWE0YzY3ZDI0ZTQ0NTZjZDdkM2QyYzViNGIwZjczMmMyMGQ5Li5lZmRjOGRlYzQ1
MWVmMWU5OGE5YmQxNDExYmE0YmNjM2FkYjIxYTk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL0ludGVybmFscy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJu
YWxzLmgKQEAgLTczMCw2ICs3MzAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRVc2VTeXN0ZW1B
cHBlYXJhbmNlKGJvb2wpOwogCiAgICAgc2l6ZV90IHBsdWdpbkNvdW50KCk7CisgICAgVmVjdG9y
PFN0cmluZz4gZG9jdW1lbnRVUkxzKCk7CiAKICAgICB2b2lkIG5vdGlmeVJlc291cmNlTG9hZE9i
c2VydmVyKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmlkbCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAppbmRleCAwNGY3N2Fj
N2ZjOWM2N2M2YjMyNzlhM2MyNDQxZTA4YWU0MGIwNDFiLi44ZTUzZDc1NWRkZDdlODkyMzljYWY5
ZWVjNmU3OGZiNjhiZGMyZDA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0lu
dGVybmFscy5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCkBA
IC02NjUsNiArNjY1LDcgQEAgZW51bSBDb21wb3NpdGluZ1BvbGljeSB7CiAgICAgdm9pZCBzZXRV
c2VTeXN0ZW1BcHBlYXJhbmNlKGJvb2xlYW4gdmFsdWUpOwogCiAgICAgdW5zaWduZWQgbG9uZyBw
bHVnaW5Db3VudCgpOworICAgIHNlcXVlbmNlPERPTVN0cmluZz4gZG9jdW1lbnRVUkxzKCk7CiAK
ICAgICB2b2lkIG5vdGlmeVJlc291cmNlTG9hZE9ic2VydmVyKCk7CiB9OwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGFlNzNl
MzEyNGFiNTI1YmJlYjM1YWU2MGFkYjZhYjMzMzM4MTBiNjEuLjZkZGNiYTlkMjA4N2NhN2VmY2My
ZmVlNTE3YzdmZjNlYWQ0NTJlZGMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZwor
KysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxOC0wOC0yNCAg
WW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisKKyAgICAgICAgVmFyaW91cyBJbmRl
eERCIHRlc3RzIGFiYW5kb24gZG9jdW1lbnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xODg3MjgKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQzNjUx
MDk1PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
aHR0cC90ZXN0cy9JbmRleGVkREIvcmVzb3VyY2VzL215aWRiZnJhbWUuaHRtOiBBZGRlZC4KKyAg
ICAgICAgKiBodHRwL3Rlc3RzL0luZGV4ZWREQi9yZXNvdXJjZXMvc3VwcG9ydC5qczogQWRkZWQu
CisgICAgICAgICogaHR0cC90ZXN0cy9JbmRleGVkREIvdmFsdWUuaHR0cHMtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL0luZGV4ZWREQi92YWx1ZS5odHRwcy5odG1s
OiBBZGRlZC4KKwogMjAxOC0wOC0yMyAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+
CiAKICAgICAgICAgVXBkYXRlIGxpYndlYnJ0YyB1cCB0byA5ODRmMWE4MGMwCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL0luZGV4ZWREQi9yZXNvdXJjZXMvbXlpZGJmcmFtZS5o
dG0gYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL0luZGV4ZWREQi9yZXNvdXJjZXMvbXlpZGJmcmFt
ZS5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZjkwN2Y3Mjk3YWY5NjBmNjJhZmYyMTg1NTU5MTE3OTZmNGJmMDFl
YQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvSW5kZXhlZERCL3Jl
c291cmNlcy9teWlkYmZyYW1lLmh0bQpAQCAtMCwwICsxLDI2IEBACis8IURPQ1RZUEUgaHRtbD4K
KzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9InN1cHBvcnQuanMiPjwvc2NyaXB0PgorCis8c2NyaXB0PgordmFyIHQgPSBh
c3luY190ZXN0KCk7CitjcmVhdGVkYih0KS5vbnVwZ3JhZGVuZWVkZWQgPSBmdW5jdGlvbihlKSB7
CisgICAgZS50YXJnZXQucmVzdWx0CisgICAgICAgICAgICAuY3JlYXRlT2JqZWN0U3RvcmUoInN0
b3JlIikKKyAgICAgICAgICAgIC5hZGQobmV3IERhdGUoKSwgMSk7CisKKyAgICBlLnRhcmdldC5v
bnN1Y2Nlc3MgPSB0LnN0ZXBfZnVuYyhmdW5jdGlvbihlKSB7CisgICAgICAgIGUudGFyZ2V0LnJl
c3VsdAorICAgICAgICAgICAgICAgIC50cmFuc2FjdGlvbigic3RvcmUiKQorICAgICAgICAgICAg
ICAgIC5vYmplY3RTdG9yZSgic3RvcmUiKQorICAgICAgICAgICAgICAgIC5nZXQoMSkKKyAgICAg
ICAgICAgICAgICAub25zdWNjZXNzID0gdC5zdGVwX2Z1bmMoZnVuY3Rpb24oZSkKKyAgICAgICAg
eworICAgICAgICAgICAgdC5kb25lKCk7CisgICAgICAgICAgICBwYXJlbnQuZG9uZSgpOworICAg
ICAgICB9KTsKKyAgICB9KTsKK307Cis8L3NjcmlwdD4KKworPGRpdiBpZD0ibG9nIj48L2Rpdj4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvSW5kZXhlZERCL3Jlc291cmNlcy9z
dXBwb3J0LmpzIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9JbmRleGVkREIvcmVzb3VyY2VzL3N1
cHBvcnQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNWVkYmRhY2JjYzdkMGNmMjdkMGUzMzMwMTk4YjU1ZDUwNTQw
MzQ1ZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvSW5kZXhlZERC
L3Jlc291cmNlcy9zdXBwb3J0LmpzCkBAIC0wLDAgKzEsMTk0IEBACit2YXIgZGF0YWJhc2VOYW1l
ID0gImRhdGFiYXNlIjsKK3ZhciBkYXRhYmFzZVZlcnNpb24gPSAxOworCisvKiBEZWxldGUgY3Jl
YXRlZCBkYXRhYmFzZXMKKyAqCisgKiBHbyB0aHJvdWdoIGVhY2ggZmluaXNoZWQgdGVzdCwgc2Vl
IGlmIGl0IGhhcyBhbiBhc3NvY2lhdGVkIGRhdGFiYXNlLiBDbG9zZQorICogdGhhdCBhbmQgZGVs
ZXRlIHRoZSBkYXRhYmFzZS4gKi8KK2FkZF9jb21wbGV0aW9uX2NhbGxiYWNrKGZ1bmN0aW9uKHRl
c3RzKQoreworICAgIGZvciAodmFyIGkgaW4gdGVzdHMpCisgICAgeworICAgICAgICBpZih0ZXN0
c1tpXS5kYikKKyAgICAgICAgeworICAgICAgICAgICAgdGVzdHNbaV0uZGIuY2xvc2UoKTsKKyAg
ICAgICAgICAgIHNlbGYuaW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlKHRlc3RzW2ldLmRiLm5hbWUp
OworICAgICAgICB9CisgICAgfQorfSk7CisKK2Z1bmN0aW9uIGZhaWwodGVzdCwgZGVzYykgewor
ICAgIHJldHVybiB0ZXN0LnN0ZXBfZnVuYyhmdW5jdGlvbihlKSB7CisgICAgICAgIGlmIChlICYm
IGUubWVzc2FnZSAmJiBlLnRhcmdldC5lcnJvcikKKyAgICAgICAgICAgIGFzc2VydF91bnJlYWNo
ZWQoZGVzYyArICIgKCIgKyBlLnRhcmdldC5lcnJvci5uYW1lICsgIjogIiArIGUubWVzc2FnZSAr
ICIpIik7CisgICAgICAgIGVsc2UgaWYgKGUgJiYgZS5tZXNzYWdlKQorICAgICAgICAgICAgYXNz
ZXJ0X3VucmVhY2hlZChkZXNjICsgIiAoIiArIGUubWVzc2FnZSArICIpIik7CisgICAgICAgIGVs
c2UgaWYgKGUgJiYgZS50YXJnZXQucmVhZHlTdGF0ZSA9PT0gJ2RvbmUnICYmIGUudGFyZ2V0LmVy
cm9yKQorICAgICAgICAgICAgYXNzZXJ0X3VucmVhY2hlZChkZXNjICsgIiAoIiArIGUudGFyZ2V0
LmVycm9yLm5hbWUgKyAiKSIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBhc3NlcnRfdW5y
ZWFjaGVkKGRlc2MpOworICAgIH0pOworfQorCitmdW5jdGlvbiBjcmVhdGVkYih0ZXN0LCBkYm5h
bWUsIHZlcnNpb24pCit7CisgICAgdmFyIHJxX29wZW4gPSBjcmVhdGVkYl9mb3JfbXVsdGlwbGVf
dGVzdHMoZGJuYW1lLCB2ZXJzaW9uKTsKKyAgICByZXR1cm4gcnFfb3Blbi5zZXRUZXN0KHRlc3Qp
OworfQorCitmdW5jdGlvbiBjcmVhdGVkYl9mb3JfbXVsdGlwbGVfdGVzdHMoZGJuYW1lLCB2ZXJz
aW9uKSB7CisgICAgdmFyIHJxX29wZW4sCisgICAgICAgIGZha2Vfb3BlbiA9IHt9LAorICAgICAg
ICB0ZXN0ID0gbnVsbCwKKyAgICAgICAgZGJuYW1lID0gKGRibmFtZSA/IGRibmFtZSA6ICJ0ZXN0
ZGItIiArIG5ldyBEYXRlKCkuZ2V0VGltZSgpICsgTWF0aC5yYW5kb20oKSApOworCisgICAgaWYg
KHZlcnNpb24pCisgICAgICAgIHJxX29wZW4gPSBzZWxmLmluZGV4ZWREQi5vcGVuKGRibmFtZSwg
dmVyc2lvbik7CisgICAgZWxzZQorICAgICAgICBycV9vcGVuID0gc2VsZi5pbmRleGVkREIub3Bl
bihkYm5hbWUpOworCisgICAgZnVuY3Rpb24gYXV0b19mYWlsKGV2dCwgY3VycmVudF90ZXN0KSB7
CisgICAgICAgIC8qIEZhaWwgaGFuZGxlcnMsIGlmIHdlIGhhdmVuJ3Qgc2V0IG9uL3doYXRldmVy
LywgZG9uJ3QKKyAgICAgICAgICogZXhwZWN0IHRvIGdldCBldmVudCB3aGF0ZXZlci4gKi8KKyAg
ICAgICAgcnFfb3Blbi5tYW51YWxseV9oYW5kbGVkID0ge307CisKKyAgICAgICAgcnFfb3Blbi5h
ZGRFdmVudExpc3RlbmVyKGV2dCwgZnVuY3Rpb24oZSkgeworICAgICAgICAgICAgaWYgKGN1cnJl
bnRfdGVzdCAhPT0gdGVzdCkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgdGVzdC5zdGVwKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAg
IGlmICghcnFfb3Blbi5tYW51YWxseV9oYW5kbGVkW2V2dF0pIHsKKyAgICAgICAgICAgICAgICAg
ICAgYXNzZXJ0X3VucmVhY2hlZCgidW5leHBlY3RlZCBvcGVuLiIgKyBldnQgKyAiIGV2ZW50Iik7
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGUudGFyZ2V0LnJlc3Vs
dCArICcnID09ICdbb2JqZWN0IElEQkRhdGFiYXNlXScgJiYKKyAgICAgICAgICAgICAgICAgICAg
IXRoaXMuZGIpIHsKKyAgICAgICAgICAgICAgICAgIHRoaXMuZGIgPSBlLnRhcmdldC5yZXN1bHQ7
CisKKyAgICAgICAgICAgICAgICAgIHRoaXMuZGIub25lcnJvciA9IGZhaWwodGVzdCwgJ3VuZXhw
ZWN0ZWQgZGIuZXJyb3InKTsKKyAgICAgICAgICAgICAgICAgIHRoaXMuZGIub25hYm9ydCA9IGZh
aWwodGVzdCwgJ3VuZXhwZWN0ZWQgZGIuYWJvcnQnKTsKKyAgICAgICAgICAgICAgICAgIHRoaXMu
ZGIub252ZXJzaW9uY2hhbmdlID0KKyAgICAgICAgICAgICAgICAgICAgICBmYWlsKHRlc3QsICd1
bmV4cGVjdGVkIGRiLnZlcnNpb25jaGFuZ2UnKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgICAgIHJxX29wZW4uX19kZWZpbmVTZXR0ZXJfXygi
b24iICsgZXZ0LCBmdW5jdGlvbihoKSB7CisgICAgICAgICAgICBycV9vcGVuLm1hbnVhbGx5X2hh
bmRsZWRbZXZ0XSA9IHRydWU7CisgICAgICAgICAgICBpZiAoIWgpCisgICAgICAgICAgICAgICAg
cnFfb3Blbi5hZGRFdmVudExpc3RlbmVyKGV2dCwgZnVuY3Rpb24oKSB7fSk7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgcnFfb3Blbi5hZGRFdmVudExpc3RlbmVyKGV2dCwgdGVz
dC5zdGVwX2Z1bmMoaCkpOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBhZGQgYSAuc2V0
VGVzdCBtZXRob2QgdG8gdGhlIElEQk9wZW5EQlJlcXVlc3Qgb2JqZWN0CisgICAgT2JqZWN0LmRl
ZmluZVByb3BlcnR5KHJxX29wZW4sICdzZXRUZXN0JywgeworICAgICAgICBlbnVtZXJhYmxlOiBm
YWxzZSwKKyAgICAgICAgdmFsdWU6IGZ1bmN0aW9uKHQpIHsKKyAgICAgICAgICAgIHRlc3QgPSB0
OworCisgICAgICAgICAgICBhdXRvX2ZhaWwoInVwZ3JhZGVuZWVkZWQiLCB0ZXN0KTsKKyAgICAg
ICAgICAgIGF1dG9fZmFpbCgic3VjY2VzcyIsIHRlc3QpOworICAgICAgICAgICAgYXV0b19mYWls
KCJibG9ja2VkIiwgdGVzdCk7CisgICAgICAgICAgICBhdXRvX2ZhaWwoImVycm9yIiwgdGVzdCk7
CisKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgfSk7CisKKyAgICBy
ZXR1cm4gcnFfb3BlbjsKK30KKworZnVuY3Rpb24gYXNzZXJ0X2tleV9lcXVhbHMoYWN0dWFsLCBl
eHBlY3RlZCwgZGVzY3JpcHRpb24pIHsKKyAgYXNzZXJ0X2VxdWFscyhpbmRleGVkREIuY21wKGFj
dHVhbCwgZXhwZWN0ZWQpLCAwLCBkZXNjcmlwdGlvbik7Cit9CisKK2Z1bmN0aW9uIGluZGV4ZWRk
Yl90ZXN0KHVwZ3JhZGVfZnVuYywgb3Blbl9mdW5jLCBkZXNjcmlwdGlvbiwgb3B0aW9ucykgewor
ICBhc3luY190ZXN0KGZ1bmN0aW9uKHQpIHsKKyAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7
dXBncmFkZV93aWxsX2Fib3J0OiBmYWxzZX0sIG9wdGlvbnMpOworICAgIHZhciBkYm5hbWUgPSBs
b2NhdGlvbiArICctJyArIHQubmFtZTsKKyAgICB2YXIgZGVsID0gaW5kZXhlZERCLmRlbGV0ZURh
dGFiYXNlKGRibmFtZSk7CisgICAgZGVsLm9uZXJyb3IgPSB0LnVucmVhY2hlZF9mdW5jKCdkZWxl
dGVEYXRhYmFzZSBzaG91bGQgc3VjY2VlZCcpOworICAgIHZhciBvcGVuID0gaW5kZXhlZERCLm9w
ZW4oZGJuYW1lLCAxKTsKKyAgICBvcGVuLm9udXBncmFkZW5lZWRlZCA9IHQuc3RlcF9mdW5jKGZ1
bmN0aW9uKCkgeworICAgICAgdmFyIGRiID0gb3Blbi5yZXN1bHQ7CisgICAgICB0LmFkZF9jbGVh
bnVwKGZ1bmN0aW9uKCkgeworICAgICAgICAvLyBJZiBvcGVuIGRpZG4ndCBzdWNjZWVkIGFscmVh
ZHksIGlnbm9yZSB0aGUgZXJyb3IuCisgICAgICAgIG9wZW4ub25lcnJvciA9IGZ1bmN0aW9uKGUp
IHsKKyAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgIH07CisgICAgICAgIGRi
LmNsb3NlKCk7CisgICAgICAgIGluZGV4ZWREQi5kZWxldGVEYXRhYmFzZShkYi5uYW1lKTsKKyAg
ICAgIH0pOworICAgICAgdmFyIHR4ID0gb3Blbi50cmFuc2FjdGlvbjsKKyAgICAgIHVwZ3JhZGVf
ZnVuYyh0LCBkYiwgdHgsIG9wZW4pOworICAgIH0pOworICAgIGlmIChvcHRpb25zLnVwZ3JhZGVf
d2lsbF9hYm9ydCkgeworICAgICAgb3Blbi5vbnN1Y2Nlc3MgPSB0LnVucmVhY2hlZF9mdW5jKCdv
cGVuIHNob3VsZCBub3Qgc3VjY2VlZCcpOworICAgIH0gZWxzZSB7CisgICAgICBvcGVuLm9uZXJy
b3IgPSB0LnVucmVhY2hlZF9mdW5jKCdvcGVuIHNob3VsZCBzdWNjZWVkJyk7CisgICAgICBvcGVu
Lm9uc3VjY2VzcyA9IHQuc3RlcF9mdW5jKGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgZGIgPSBv
cGVuLnJlc3VsdDsKKyAgICAgICAgaWYgKG9wZW5fZnVuYykKKyAgICAgICAgICBvcGVuX2Z1bmMo
dCwgZGIsIG9wZW4pOworICAgICAgfSk7CisgICAgfQorICB9LCBkZXNjcmlwdGlvbik7Cit9CisK
Ky8vIENhbGwgd2l0aCBhIFRlc3QgYW5kIGFuIGFycmF5IG9mIGV4cGVjdGVkIHJlc3VsdHMgaW4g
b3JkZXIuIFJldHVybnMKKy8vIGEgZnVuY3Rpb247IGNhbGwgdGhlIGZ1bmN0aW9uIHdoZW4gYSBy
ZXN1bHQgYXJyaXZlcyBhbmQgd2hlbiB0aGUKKy8vIGV4cGVjdGVkIG51bWJlciBhcHBlYXIgdGhl
IG9yZGVyIHdpbGwgYmUgYXNzZXJ0ZWQgYW5kIHRlc3QKKy8vIGNvbXBsZXRlZC4KK2Z1bmN0aW9u
IGV4cGVjdCh0LCBleHBlY3RlZCkgeworICB2YXIgcmVzdWx0cyA9IFtdOworICByZXR1cm4gcmVz
dWx0ID0+IHsKKyAgICByZXN1bHRzLnB1c2gocmVzdWx0KTsKKyAgICBpZiAocmVzdWx0cy5sZW5n
dGggPT09IGV4cGVjdGVkLmxlbmd0aCkgeworICAgICAgYXNzZXJ0X2FycmF5X2VxdWFscyhyZXN1
bHRzLCBleHBlY3RlZCk7CisgICAgICB0LmRvbmUoKTsKKyAgICB9CisgIH07Cit9CisKKy8vIENo
ZWNrcyB0byBzZWUgaWYgdGhlIHBhc3NlZCB0cmFuc2FjdGlvbiBpcyBhY3RpdmUgKGJ5IG1ha2lu
ZworLy8gcmVxdWVzdHMgYWdhaW5zdCB0aGUgbmFtZWQgc3RvcmUpLgorZnVuY3Rpb24gaXNfdHJh
bnNhY3Rpb25fYWN0aXZlKHR4LCBzdG9yZV9uYW1lKSB7CisgIHRyeSB7CisgICAgY29uc3QgcmVx
dWVzdCA9IHR4Lm9iamVjdFN0b3JlKHN0b3JlX25hbWUpLmdldCgwKTsKKyAgICByZXF1ZXN0Lm9u
ZXJyb3IgPSBlID0+IHsKKyAgICAgIGUucHJldmVudERlZmF1bHQoKTsKKyAgICAgIGUuc3RvcFBy
b3BhZ2F0aW9uKCk7CisgICAgfTsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfSBjYXRjaCAoZXgpIHsK
KyAgICBhc3NlcnRfZXF1YWxzKGV4Lm5hbWUsICdUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3InLAor
ICAgICAgICAgICAgICAgICAgJ0FjdGl2ZSBjaGVjayBzaG91bGQgZWl0aGVyIG5vdCB0aHJvdyBh
bnl0aGluZywgb3IgdGhyb3cgJyArCisgICAgICAgICAgICAgICAgICAnVHJhbnNhY3Rpb25JbmFj
dGl2ZUVycm9yJyk7CisgICAgcmV0dXJuIGZhbHNlOworICB9Cit9CisKKy8vIEtlZXAgdGhlIHBh
c3NlZCB0cmFuc2FjdGlvbiBhbGl2ZSBpbmRlZmluaXRlbHkgKGJ5IG1ha2luZyByZXF1ZXN0cwor
Ly8gYWdhaW5zdCB0aGUgbmFtZWQgc3RvcmUpLiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdG8gbGV0
IHRoZQorLy8gdHJhbnNhY3Rpb24gZmluaXNoLCBhbmQgYXNzZXJ0cyB0aGF0IHRoZSB0cmFuc2Fj
dGlvbiBpcyBub3QgeWV0CisvLyBmaW5pc2hlZC4KK2Z1bmN0aW9uIGtlZXBfYWxpdmUodHgsIHN0
b3JlX25hbWUpIHsKKyAgbGV0IGNvbXBsZXRlZCA9IGZhbHNlOworICB0eC5hZGRFdmVudExpc3Rl
bmVyKCdjb21wbGV0ZScsICgpID0+IHsgY29tcGxldGVkID0gdHJ1ZTsgfSk7CisKKyAgbGV0IHBp
biA9IHRydWU7CisKKyAgZnVuY3Rpb24gc3BpbigpIHsKKyAgICBpZiAoIXBpbikKKyAgICAgIHJl
dHVybjsKKyAgICB0eC5vYmplY3RTdG9yZShzdG9yZV9uYW1lKS5nZXQoMCkub25zdWNjZXNzID0g
c3BpbjsKKyAgfQorICBzcGluKCk7CisKKyAgcmV0dXJuICgpID0+IHsKKyAgICBhc3NlcnRfZmFs
c2UoY29tcGxldGVkLCAnVHJhbnNhY3Rpb24gY29tcGxldGVkIHdoaWxlIGtlcHQgYWxpdmUnKTsK
KyAgICBwaW4gPSBmYWxzZTsKKyAgfTsKK30KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAv
dGVzdHMvSW5kZXhlZERCL3ZhbHVlLmh0dHBzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2h0
dHAvdGVzdHMvSW5kZXhlZERCL3ZhbHVlLmh0dHBzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5l
YzAzNTg3ZDJjM2U2OTM0ZWU3YmM5MGZjOTY1ZDFjN2RmNDRmZGZhCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9JbmRleGVkREIvdmFsdWUuaHR0cHMtZXhwZWN0ZWQu
dHh0CkBAIC0wLDAgKzEsNCBAQAorCisKK1BBU1MgRW5zdXJpbmcgZnJhbWUgZG9jdW1lbnQgZ2V0
cyBjb2xsZWN0ZWQgYWZ0ZXIgYmVpbmcgc3RvcHBlZCBpbiB0aGUgbW1pZGRsZSBvZiBJREIgb3Bl
cmF0aW9ucyAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9JbmRleGVkREIv
dmFsdWUuaHR0cHMuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvSW5kZXhlZERCL3ZhbHVl
Lmh0dHBzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWQ0MDA4ZGNkMjU2YzNmMjE0ZWExMTZmMzY5NWVhYjY1
N2ZkM2YyYgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvSW5kZXhl
ZERCL3ZhbHVlLmh0dHBzLmh0bWwKQEAgLTAsMCArMSw0NyBAQAorPCFET0NUWVBFIGh0bWw+Cis8
bWV0YSBjaGFyc2V0PSJ1dGYtOCI+Cis8dGl0bGU+VmFsdWVzPC90aXRsZT4KKzxsaW5rIHJlbD0i
YXV0aG9yIiBocmVmPSJtYWlsdG86b2RpbmhvQG9wZXJhLmNvbSIgdGl0bGU9Ik9kaW4gSMO4cnRo
ZSBPbWRhbCI+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2djLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0PgordmFyIHJlc29sdmVDYWxsYmFjaywgcmVqZWN0Q2FsbGJhY2s7Cit2YXIgcHJvbWlzZSA9
IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsKKyAgICByZXNvbHZlQ2FsbGJhY2sg
PSByZXNvbHZlOworICAgIHJlamVjdENhbGxiYWNrID0gcmVqZWN0OworfSk7CisKK2Z1bmN0aW9u
IHdhaXRGb3IoZHVyYXRpb24pCit7CisgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9
PiBzZXRUaW1lb3V0KHJlc29sdmUsIGR1cmF0aW9uKSk7Cit9CisKK2FzeW5jIGZ1bmN0aW9uIGRv
bmUoKQoreworICAgIHRyeSB7CisgICAgICAgIGlmcmFtZS5zcmMgPSAibm9uLWV4aXN0ZW50LWZy
YW1lIjsKKyAgICAgICAgbGV0IGNvdW50ZXIgPSAwOworICAgICAgICB3aGlsZSAoKytjb3VudGVy
IDwgMTApIHsKKyAgICAgICAgICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzLmRvY3VtZW50VVJMcygp
LmpvaW4oJyAnKS5pbmRleE9mKCdteWlkYmZyYW1lLmh0bScpID09PSAtMSkgeworICAgICAgICAg
ICAgICAgIHJlc29sdmVDYWxsYmFjaygpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmICh3aW5kb3cuR0NDb250cm9sbGVyKQorICAgICAgICAg
ICAgICAgIEdDQ29udHJvbGxlci5jb2xsZWN0KCk7CisKKyAgICAgICAgICAgIGF3YWl0IHdhaXRG
b3IoNTApOworICAgICAgICB9CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgcmVqZWN0Q2FsbGJh
Y2soIlRlc3QgZmFpbGVkIik7CisgICAgfQorfQorCitwcm9taXNlX3Rlc3QoKHRlc3QpID0+IHsK
KyAgICBpZiAoIXdpbmRvdy5pbnRlcm5hbHMpCisgICAgICAgIHJlamVjdENhbGxiYWNrKCJUZXN0
IHJlcXVpcmUgaW50ZXJuYWxzIEFQSSIpOworICAgIHJldHVybiBwcm9taXNlOworfSwgIkVuc3Vy
aW5nIGZyYW1lIGRvY3VtZW50IGdldHMgY29sbGVjdGVkIGFmdGVyIGJlaW5nIHN0b3BwZWQgaW4g
dGhlIG1taWRkbGUgb2YgSURCIG9wZXJhdGlvbnMiKTsKKworPC9zY3JpcHQ+Cis8aWZyYW1lIHNy
Yz0icmVzb3VyY2VzL215aWRiZnJhbWUuaHRtIiBpZD0iaWZyYW1lIj48L2lmcmFtZT4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>348023</attachid>
            <date>2018-08-24 10:57:11 -0700</date>
            <delta_ts>2018-08-24 11:51:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-188728-20180824105710.patch</filename>
            <type>text/plain</type>
            <size>15357</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM1MjMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGRlM2EzODJlYmQ5NTY0
NmFhNWYzYjczODc5NmU4Mzk0ZWUxNDM3MS4uMGFjODExM2FlNDcwOGQxYWZhNmM1NWUwZTlhNWNk
NmJjOGJiMzUxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDE4LTA4LTI0ICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBWYXJpb3VzIEluZGV4REIg
dGVzdHMgYWJhbmRvbiBkb2N1bWVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE4ODcyOAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNDM2NTEwOTU+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU29tZSBJ
REIgb2JqZWN0cyBpbXBsZW1lbnQgaGFzUGVuZGluZ0FjdGl2aXR5IGJ1dCB0aGVyZSBhcmUgc29t
ZSBwb3NzaWJpbGl0aWVzIHRoYXQgdGhleSBjb250aW51ZSByZXR1cm5pbmcgdHJ1ZSBhZnRlciBi
ZWluZyBzdG9wcGVkLiAKKyAgICAgICAgRW5mb3JjZSB0aGF0IHRoZXNlIG9iamVjdHMgcmV0dXJu
IGZhbHNlIHRvIGhhc1BlbmRpbmdBY3Rpdml0eSBvbmNlIGJlaW5nIHN0b3BwZWQuCisgICAgICAg
IFRoaXMgZW5zdXJlcyB0aGF0IHRoZXkgY2FuIGJlIGdhcmJhZ2UgY29sbGVjdGVkIG9uY2UgdGhl
aXIgZG9jdW1lbnQgaXMgcHJlcGFyaW5nIGZvciBkZXN0cnVjdGlvbi4KKworICAgICAgICBUZXN0
OiBodHRwL3Rlc3RzL0luZGV4ZWREQi9jb2xsZWN0LUlEQi1vYmplY3RzLmh0dHBzLmh0bWwKKwor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJREJDdXJzb3I6Omhhc1BlbmRpbmdBY3Rpdml0eSBjb25zdCk6CisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmg6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
SURCSW5kZXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6Omhhc1BlbmRpbmdBY3Rp
dml0eSBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6Omhhc1BlbmRpbmdBY3Rpdml0
eSBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpoYXNQZW5kaW5nQWN0aXZpdHkgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6ZW5xdWV1ZUV2ZW50KToKKwogMjAxOC0wOC0y
MyAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgVXBkYXRlIGxp
YndlYnJ0YyB1cCB0byA5ODRmMWE4MGMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCQ3Vyc29yLmNwcAppbmRleCAwNWRiODM0MTdlNWMwMWM5NTY3YTUyYzAyYjI5ZGMy
NzYwYTM3MGMwLi43MTMwM2ExZThjYmJmMmYzYWM5ODdlNGYyNGE5YWY1YWNmNTcxOGJhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHAKQEAgLTM2
OSw3ICszNjksNyBAQCBib29sIElEQkN1cnNvcjo6Y2FuU3VzcGVuZEZvckRvY3VtZW50U3VzcGVu
c2lvbigpIGNvbnN0CiAKIGJvb2wgSURCQ3Vyc29yOjpoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25z
dAogewotICAgIHJldHVybiBtX291dHN0YW5kaW5nUmVxdWVzdENvdW50OworICAgIHJldHVybiAh
bV9jb250ZXh0U3RvcHBlZCAmJiBtX291dHN0YW5kaW5nUmVxdWVzdENvdW50OwogfQogCiB2b2lk
IElEQkN1cnNvcjo6ZGVjcmVtZW50T3V0c3RhbmRpbmdSZXF1ZXN0Q291bnQoKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaAppbmRleCA0OTAzMDU2OTkxMWE3
Nzk3OWVhZGRkOTM0YWUwNDgwYzQyODQxODg2Li5kN2U2NWU0N2NkNTNmMzQ3YWZlNDllZDUzZTAx
ZGIzODE0OGVhZTc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJDdXJzb3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJD
dXJzb3IuaApAQCAtODUsNiArODUsNyBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIGNvbnN0
IGNoYXIqIGFjdGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdCBmaW5hbDsKICAgICBib29sIGNhblN1
c3BlbmRGb3JEb2N1bWVudFN1c3BlbnNpb24oKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIHN0b3Ao
KSBmaW5hbCB7IG1fY29udGV4dFN0b3BwZWQgPSB0cnVlOyB9CiAKICAgICBib29sIHNvdXJjZXNE
ZWxldGVkKCkgY29uc3Q7CiAgICAgSURCT2JqZWN0U3RvcmUmIGVmZmVjdGl2ZU9iamVjdFN0b3Jl
KCkgY29uc3Q7CkBAIC0xMDEsNiArMTAyLDcgQEAgcHJpdmF0ZToKICAgICBJREJSZXF1ZXN0KiBt
X3JlcXVlc3QgeyBudWxscHRyIH07CiAKICAgICBib29sIG1fZ290VmFsdWUgeyBmYWxzZSB9Owor
ICAgIGJvb2wgbV9jb250ZXh0U3RvcHBlZCB7IGZhbHNlIH07CiAKICAgICBJREJLZXlEYXRhIG1f
Y3VycmVudEtleURhdGE7CiAgICAgSURCS2V5RGF0YSBtX2N1cnJlbnRQcmltYXJ5S2V5RGF0YTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmNwcAppbmRleCAx
OTE5ZTQ2OTQxOGMwNWM4YWU3NzIzZWQ2NjExMWQ5YTNlNDU1MTZiLi45ZDFmODM5Mzc3MzdhZTgw
MTEwYjAyMGVhOTk4M2I2OGQ4MDNmNjdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJJbmRleC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCSW5kZXguY3BwCkBAIC02OSw3ICs2OSw3IEBAIGJvb2wgSURCSW5kZXg6OmNh
blN1c3BlbmRGb3JEb2N1bWVudFN1c3BlbnNpb24oKSBjb25zdAogCiBib29sIElEQkluZGV4Ojpo
YXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdAogewotICAgIHJldHVybiAhbV9vYmplY3RTdG9yZS50
cmFuc2FjdGlvbigpLmlzRmluaXNoZWQoKTsKKyAgICByZXR1cm4gbV9vYmplY3RTdG9yZS50cmFu
c2FjdGlvbigpLmhhc1BlbmRpbmdBY3Rpdml0eSgpOwogfQogCiBjb25zdCBTdHJpbmcmIElEQklu
ZGV4OjpuYW1lKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQk9iamVjdFN0b3JlLmNwcAppbmRleCAzYzUwZWJjZDY5YjdhM2MzZmI4NGE2YTNhNGQz
MTVhZDYyZDQzNjEyLi5mMDhjOWU1Mjg1M2YzMGIwODc4ZWVmZmQwZGI1ZDE3MDJmMjMxZjEwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9y
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3Rv
cmUuY3BwCkBAIC04Miw3ICs4Miw3IEBAIGJvb2wgSURCT2JqZWN0U3RvcmU6OmNhblN1c3BlbmRG
b3JEb2N1bWVudFN1c3BlbnNpb24oKSBjb25zdAogCiBib29sIElEQk9iamVjdFN0b3JlOjpoYXNQ
ZW5kaW5nQWN0aXZpdHkoKSBjb25zdAogewotICAgIHJldHVybiAhbV90cmFuc2FjdGlvbi5pc0Zp
bmlzaGVkKCk7CisgICAgcmV0dXJuIG1fdHJhbnNhY3Rpb24uaGFzUGVuZGluZ0FjdGl2aXR5KCk7
CiB9CiAKIGNvbnN0IFN0cmluZyYgSURCT2JqZWN0U3RvcmU6Om5hbWUoKSBjb25zdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcAppbmRleCAyYzI3
ZGZkNWY4MDYwNDU1ZWYxNzcxYjFkYzk4ZDkzM2ExNGI5YTYxLi4wMzFlYmMxZWRiMjM1NjE1OTgx
YWY1YWJjZThlODQ4NTJmZmVhMGY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcApAQCAtMjY2LDcgKzI2Niw3IEBAIGJvb2wgSURCUmVxdWVz
dDo6Y2FuU3VzcGVuZEZvckRvY3VtZW50U3VzcGVuc2lvbigpIGNvbnN0CiBib29sIElEQlJlcXVl
c3Q6Omhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCZvcmlnaW5UaHJl
YWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkgfHwgbWF5QmVHQ1RocmVhZCgpKTsKLSAgICByZXR1
cm4gbV9oYXNQZW5kaW5nQWN0aXZpdHk7CisgICAgcmV0dXJuICFtX2NvbnRleHRTdG9wcGVkICYm
IG1faGFzUGVuZGluZ0FjdGl2aXR5OwogfQogCiB2b2lkIElEQlJlcXVlc3Q6OnN0b3AoKQpAQCAt
Mjg5LDcgKzI4OSw3IEBAIHZvaWQgSURCUmVxdWVzdDo6Y2FuY2VsRm9yU3RvcCgpCiB2b2lkIElE
QlJlcXVlc3Q6OmVucXVldWVFdmVudChSZWY8RXZlbnQ+JiYgZXZlbnQpCiB7CiAgICAgQVNTRVJU
KCZvcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOwotICAgIGlmICghc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpIHx8IG1fY29udGV4dFN0b3BwZWQpCisgICAgaWYgKG1fY29udGV4
dFN0b3BwZWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIGV2ZW50LT5zZXRUYXJnZXQodGhpcyk7
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKaW5kZXggYWU3M2UzMTI0YWI1MjViYmViMzVhZTYwYWRiNmFiMzMzMzgxMGI2MS4uMWQ1NWJl
MGY1NjY3NGVlZmFlODQ4YzdjYWJhZDMxMThhMThhNTgxNSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBA
CisyMDE4LTA4LTI0ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAg
ICBWYXJpb3VzIEluZGV4REIgdGVzdHMgYWJhbmRvbiBkb2N1bWVudHMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4ODcyOAorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vNDM2NTEwOTU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBodHRwL3Rlc3RzL0luZGV4ZWREQi9yZXNvdXJjZXMvbXlpZGJmcmFtZS5o
dG06IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvSW5kZXhlZERCL3Jlc291cmNlcy9zdXBw
b3J0LmpzOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL0luZGV4ZWREQi9jb2xsZWN0LUlE
Qi1vamVjdHMuaHR0cHMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3Rz
L0luZGV4ZWREQi9jb2xsZWN0LUlEQi1vamVjdHMuaHR0cHMuaHRtbDogQWRkZWQuCisKIDIwMTgt
MDgtMjMgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIFVwZGF0
ZSBsaWJ3ZWJydGMgdXAgdG8gOTg0ZjFhODBjMApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9JbmRleGVkREIvY29sbGVjdC1JREItb2JqZWN0cy5odHRwcy1leHBlY3RlZC50eHQg
Yi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL0luZGV4ZWREQi9jb2xsZWN0LUlEQi1vYmplY3RzLmh0
dHBzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lYzAzNTg3ZDJjM2U2OTM0ZWU3YmM5MGZjOTY1
ZDFjN2RmNDRmZGZhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9J
bmRleGVkREIvY29sbGVjdC1JREItb2JqZWN0cy5odHRwcy1leHBlY3RlZC50eHQKQEAgLTAsMCAr
MSw0IEBACisKKworUEFTUyBFbnN1cmluZyBmcmFtZSBkb2N1bWVudCBnZXRzIGNvbGxlY3RlZCBh
ZnRlciBiZWluZyBzdG9wcGVkIGluIHRoZSBtbWlkZGxlIG9mIElEQiBvcGVyYXRpb25zIAorCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL0luZGV4ZWREQi9jb2xsZWN0LUlEQi1v
YmplY3RzLmh0dHBzLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL0luZGV4ZWREQi9jb2xs
ZWN0LUlEQi1vYmplY3RzLmh0dHBzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDdkZGE4ZGVlNGNiNTNmYzYz
ZTUxMGQ5ZjU1NzA1MDRmOGQ3MzNhMQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0
dHAvdGVzdHMvSW5kZXhlZERCL2NvbGxlY3QtSURCLW9iamVjdHMuaHR0cHMuaHRtbApAQCAtMCww
ICsxLDQ1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKzxzY3Jp
cHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Citm
dW5jdGlvbiB3YWl0Rm9yKGR1cmF0aW9uKQoreworICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVz
b2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBkdXJhdGlvbikpOworfQorCit2YXIgcmVzb2x2
ZUNhbGxiYWNrLCByZWplY3RDYWxsYmFjazsKK3ZhciBwcm9taXNlID0gbmV3IFByb21pc2UoKHJl
c29sdmUsIHJlamVjdCkgPT4geworICAgIHJlc29sdmVDYWxsYmFjayA9IHJlc29sdmU7CisgICAg
cmVqZWN0Q2FsbGJhY2sgPSByZWplY3Q7Cit9KTsKKworYXN5bmMgZnVuY3Rpb24gZG9uZSgpCit7
CisgICAgdHJ5IHsKKyAgICAgICAgY29uc3QgZnJhbWVJZGVudGlmaWVyID0gaW50ZXJuYWxzLmRv
Y3VtZW50SWRlbnRpZmllcihpZnJhbWUuY29udGVudERvY3VtZW50KTsKKyAgICAgICAgaWZyYW1l
LnNyYyA9ICJub24tZXhpc3RlbnQtZnJhbWUiOworICAgICAgICBsZXQgY291bnRlciA9IDA7Cisg
ICAgICAgIHdoaWxlICgrK2NvdW50ZXIgPCAxMCkgeworICAgICAgICAgICAgaWYgKCFpbnRlcm5h
bHMuaXNEb2N1bWVudEFsaXZlKGZyYW1lSWRlbnRpZmllcikpIHsKKyAgICAgICAgICAgICAgICBy
ZXNvbHZlQ2FsbGJhY2soKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAod2luZG93LkdDQ29udHJvbGxlcikKKyAgICAgICAgICAgICAgICBH
Q0NvbnRyb2xsZXIuY29sbGVjdCgpOworCisgICAgICAgICAgICBhd2FpdCB3YWl0Rm9yKDUwKTsK
KyAgICAgICAgfQorICAgIH0gZmluYWxseSB7CisgICAgICAgIHJlamVjdENhbGxiYWNrKCJUZXN0
IGZhaWxlZCIpOworICAgIH0KK30KKworcHJvbWlzZV90ZXN0KCh0ZXN0KSA9PiB7CisgICAgaWYg
KCF3aW5kb3cuaW50ZXJuYWxzKQorICAgICAgICByZWplY3RDYWxsYmFjaygiVGVzdCByZXF1aXJl
IGludGVybmFscyBBUEkiKTsKKyAgICByZXR1cm4gcHJvbWlzZTsKK30sICJFbnN1cmluZyBmcmFt
ZSBkb2N1bWVudCBnZXRzIGNvbGxlY3RlZCBhZnRlciBiZWluZyBzdG9wcGVkIGluIHRoZSBtbWlk
ZGxlIG9mIElEQiBvcGVyYXRpb25zIik7CisKKzwvc2NyaXB0PgorPGlmcmFtZSBzcmM9InJlc291
cmNlcy9teWlkYmZyYW1lLmh0bSIgaWQ9ImlmcmFtZSI+PC9pZnJhbWU+CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL0luZGV4ZWREQi9yZXNvdXJjZXMvbXlpZGJmcmFtZS5odG0g
Yi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL0luZGV4ZWREQi9yZXNvdXJjZXMvbXlpZGJmcmFtZS5o
dG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZjkwN2Y3Mjk3YWY5NjBmNjJhZmYyMTg1NTU5MTE3OTZmNGJmMDFlYQot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvSW5kZXhlZERCL3Jlc291
cmNlcy9teWlkYmZyYW1lLmh0bQpAQCAtMCwwICsxLDI2IEBACis8IURPQ1RZUEUgaHRtbD4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9InN1cHBvcnQuanMiPjwvc2NyaXB0PgorCis8c2NyaXB0PgordmFyIHQgPSBhc3lu
Y190ZXN0KCk7CitjcmVhdGVkYih0KS5vbnVwZ3JhZGVuZWVkZWQgPSBmdW5jdGlvbihlKSB7Cisg
ICAgZS50YXJnZXQucmVzdWx0CisgICAgICAgICAgICAuY3JlYXRlT2JqZWN0U3RvcmUoInN0b3Jl
IikKKyAgICAgICAgICAgIC5hZGQobmV3IERhdGUoKSwgMSk7CisKKyAgICBlLnRhcmdldC5vbnN1
Y2Nlc3MgPSB0LnN0ZXBfZnVuYyhmdW5jdGlvbihlKSB7CisgICAgICAgIGUudGFyZ2V0LnJlc3Vs
dAorICAgICAgICAgICAgICAgIC50cmFuc2FjdGlvbigic3RvcmUiKQorICAgICAgICAgICAgICAg
IC5vYmplY3RTdG9yZSgic3RvcmUiKQorICAgICAgICAgICAgICAgIC5nZXQoMSkKKyAgICAgICAg
ICAgICAgICAub25zdWNjZXNzID0gdC5zdGVwX2Z1bmMoZnVuY3Rpb24oZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgdC5kb25lKCk7CisgICAgICAgICAgICBwYXJlbnQuZG9uZSgpOworICAgICAg
ICB9KTsKKyAgICB9KTsKK307Cis8L3NjcmlwdD4KKworPGRpdiBpZD0ibG9nIj48L2Rpdj4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvSW5kZXhlZERCL3Jlc291cmNlcy9zdXBw
b3J0LmpzIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9JbmRleGVkREIvcmVzb3VyY2VzL3N1cHBv
cnQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNWVkYmRhY2JjYzdkMGNmMjdkMGUzMzMwMTk4YjU1ZDUwNTQwMzQ1
ZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvSW5kZXhlZERCL3Jl
c291cmNlcy9zdXBwb3J0LmpzCkBAIC0wLDAgKzEsMTk0IEBACit2YXIgZGF0YWJhc2VOYW1lID0g
ImRhdGFiYXNlIjsKK3ZhciBkYXRhYmFzZVZlcnNpb24gPSAxOworCisvKiBEZWxldGUgY3JlYXRl
ZCBkYXRhYmFzZXMKKyAqCisgKiBHbyB0aHJvdWdoIGVhY2ggZmluaXNoZWQgdGVzdCwgc2VlIGlm
IGl0IGhhcyBhbiBhc3NvY2lhdGVkIGRhdGFiYXNlLiBDbG9zZQorICogdGhhdCBhbmQgZGVsZXRl
IHRoZSBkYXRhYmFzZS4gKi8KK2FkZF9jb21wbGV0aW9uX2NhbGxiYWNrKGZ1bmN0aW9uKHRlc3Rz
KQoreworICAgIGZvciAodmFyIGkgaW4gdGVzdHMpCisgICAgeworICAgICAgICBpZih0ZXN0c1tp
XS5kYikKKyAgICAgICAgeworICAgICAgICAgICAgdGVzdHNbaV0uZGIuY2xvc2UoKTsKKyAgICAg
ICAgICAgIHNlbGYuaW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlKHRlc3RzW2ldLmRiLm5hbWUpOwor
ICAgICAgICB9CisgICAgfQorfSk7CisKK2Z1bmN0aW9uIGZhaWwodGVzdCwgZGVzYykgeworICAg
IHJldHVybiB0ZXN0LnN0ZXBfZnVuYyhmdW5jdGlvbihlKSB7CisgICAgICAgIGlmIChlICYmIGUu
bWVzc2FnZSAmJiBlLnRhcmdldC5lcnJvcikKKyAgICAgICAgICAgIGFzc2VydF91bnJlYWNoZWQo
ZGVzYyArICIgKCIgKyBlLnRhcmdldC5lcnJvci5uYW1lICsgIjogIiArIGUubWVzc2FnZSArICIp
Iik7CisgICAgICAgIGVsc2UgaWYgKGUgJiYgZS5tZXNzYWdlKQorICAgICAgICAgICAgYXNzZXJ0
X3VucmVhY2hlZChkZXNjICsgIiAoIiArIGUubWVzc2FnZSArICIpIik7CisgICAgICAgIGVsc2Ug
aWYgKGUgJiYgZS50YXJnZXQucmVhZHlTdGF0ZSA9PT0gJ2RvbmUnICYmIGUudGFyZ2V0LmVycm9y
KQorICAgICAgICAgICAgYXNzZXJ0X3VucmVhY2hlZChkZXNjICsgIiAoIiArIGUudGFyZ2V0LmVy
cm9yLm5hbWUgKyAiKSIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBhc3NlcnRfdW5yZWFj
aGVkKGRlc2MpOworICAgIH0pOworfQorCitmdW5jdGlvbiBjcmVhdGVkYih0ZXN0LCBkYm5hbWUs
IHZlcnNpb24pCit7CisgICAgdmFyIHJxX29wZW4gPSBjcmVhdGVkYl9mb3JfbXVsdGlwbGVfdGVz
dHMoZGJuYW1lLCB2ZXJzaW9uKTsKKyAgICByZXR1cm4gcnFfb3Blbi5zZXRUZXN0KHRlc3QpOwor
fQorCitmdW5jdGlvbiBjcmVhdGVkYl9mb3JfbXVsdGlwbGVfdGVzdHMoZGJuYW1lLCB2ZXJzaW9u
KSB7CisgICAgdmFyIHJxX29wZW4sCisgICAgICAgIGZha2Vfb3BlbiA9IHt9LAorICAgICAgICB0
ZXN0ID0gbnVsbCwKKyAgICAgICAgZGJuYW1lID0gKGRibmFtZSA/IGRibmFtZSA6ICJ0ZXN0ZGIt
IiArIG5ldyBEYXRlKCkuZ2V0VGltZSgpICsgTWF0aC5yYW5kb20oKSApOworCisgICAgaWYgKHZl
cnNpb24pCisgICAgICAgIHJxX29wZW4gPSBzZWxmLmluZGV4ZWREQi5vcGVuKGRibmFtZSwgdmVy
c2lvbik7CisgICAgZWxzZQorICAgICAgICBycV9vcGVuID0gc2VsZi5pbmRleGVkREIub3Blbihk
Ym5hbWUpOworCisgICAgZnVuY3Rpb24gYXV0b19mYWlsKGV2dCwgY3VycmVudF90ZXN0KSB7Cisg
ICAgICAgIC8qIEZhaWwgaGFuZGxlcnMsIGlmIHdlIGhhdmVuJ3Qgc2V0IG9uL3doYXRldmVyLywg
ZG9uJ3QKKyAgICAgICAgICogZXhwZWN0IHRvIGdldCBldmVudCB3aGF0ZXZlci4gKi8KKyAgICAg
ICAgcnFfb3Blbi5tYW51YWxseV9oYW5kbGVkID0ge307CisKKyAgICAgICAgcnFfb3Blbi5hZGRF
dmVudExpc3RlbmVyKGV2dCwgZnVuY3Rpb24oZSkgeworICAgICAgICAgICAgaWYgKGN1cnJlbnRf
dGVzdCAhPT0gdGVzdCkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgdGVzdC5zdGVwKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGlm
ICghcnFfb3Blbi5tYW51YWxseV9oYW5kbGVkW2V2dF0pIHsKKyAgICAgICAgICAgICAgICAgICAg
YXNzZXJ0X3VucmVhY2hlZCgidW5leHBlY3RlZCBvcGVuLiIgKyBldnQgKyAiIGV2ZW50Iik7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGUudGFyZ2V0LnJlc3VsdCAr
ICcnID09ICdbb2JqZWN0IElEQkRhdGFiYXNlXScgJiYKKyAgICAgICAgICAgICAgICAgICAgIXRo
aXMuZGIpIHsKKyAgICAgICAgICAgICAgICAgIHRoaXMuZGIgPSBlLnRhcmdldC5yZXN1bHQ7CisK
KyAgICAgICAgICAgICAgICAgIHRoaXMuZGIub25lcnJvciA9IGZhaWwodGVzdCwgJ3VuZXhwZWN0
ZWQgZGIuZXJyb3InKTsKKyAgICAgICAgICAgICAgICAgIHRoaXMuZGIub25hYm9ydCA9IGZhaWwo
dGVzdCwgJ3VuZXhwZWN0ZWQgZGIuYWJvcnQnKTsKKyAgICAgICAgICAgICAgICAgIHRoaXMuZGIu
b252ZXJzaW9uY2hhbmdlID0KKyAgICAgICAgICAgICAgICAgICAgICBmYWlsKHRlc3QsICd1bmV4
cGVjdGVkIGRiLnZlcnNpb25jaGFuZ2UnKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9KTsKKyAgICAgICAgfSk7CisgICAgICAgIHJxX29wZW4uX19kZWZpbmVTZXR0ZXJfXygib24i
ICsgZXZ0LCBmdW5jdGlvbihoKSB7CisgICAgICAgICAgICBycV9vcGVuLm1hbnVhbGx5X2hhbmRs
ZWRbZXZ0XSA9IHRydWU7CisgICAgICAgICAgICBpZiAoIWgpCisgICAgICAgICAgICAgICAgcnFf
b3Blbi5hZGRFdmVudExpc3RlbmVyKGV2dCwgZnVuY3Rpb24oKSB7fSk7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgcnFfb3Blbi5hZGRFdmVudExpc3RlbmVyKGV2dCwgdGVzdC5z
dGVwX2Z1bmMoaCkpOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBhZGQgYSAuc2V0VGVz
dCBtZXRob2QgdG8gdGhlIElEQk9wZW5EQlJlcXVlc3Qgb2JqZWN0CisgICAgT2JqZWN0LmRlZmlu
ZVByb3BlcnR5KHJxX29wZW4sICdzZXRUZXN0JywgeworICAgICAgICBlbnVtZXJhYmxlOiBmYWxz
ZSwKKyAgICAgICAgdmFsdWU6IGZ1bmN0aW9uKHQpIHsKKyAgICAgICAgICAgIHRlc3QgPSB0Owor
CisgICAgICAgICAgICBhdXRvX2ZhaWwoInVwZ3JhZGVuZWVkZWQiLCB0ZXN0KTsKKyAgICAgICAg
ICAgIGF1dG9fZmFpbCgic3VjY2VzcyIsIHRlc3QpOworICAgICAgICAgICAgYXV0b19mYWlsKCJi
bG9ja2VkIiwgdGVzdCk7CisgICAgICAgICAgICBhdXRvX2ZhaWwoImVycm9yIiwgdGVzdCk7CisK
KyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgfSk7CisKKyAgICByZXR1
cm4gcnFfb3BlbjsKK30KKworZnVuY3Rpb24gYXNzZXJ0X2tleV9lcXVhbHMoYWN0dWFsLCBleHBl
Y3RlZCwgZGVzY3JpcHRpb24pIHsKKyAgYXNzZXJ0X2VxdWFscyhpbmRleGVkREIuY21wKGFjdHVh
bCwgZXhwZWN0ZWQpLCAwLCBkZXNjcmlwdGlvbik7Cit9CisKK2Z1bmN0aW9uIGluZGV4ZWRkYl90
ZXN0KHVwZ3JhZGVfZnVuYywgb3Blbl9mdW5jLCBkZXNjcmlwdGlvbiwgb3B0aW9ucykgeworICBh
c3luY190ZXN0KGZ1bmN0aW9uKHQpIHsKKyAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7dXBn
cmFkZV93aWxsX2Fib3J0OiBmYWxzZX0sIG9wdGlvbnMpOworICAgIHZhciBkYm5hbWUgPSBsb2Nh
dGlvbiArICctJyArIHQubmFtZTsKKyAgICB2YXIgZGVsID0gaW5kZXhlZERCLmRlbGV0ZURhdGFi
YXNlKGRibmFtZSk7CisgICAgZGVsLm9uZXJyb3IgPSB0LnVucmVhY2hlZF9mdW5jKCdkZWxldGVE
YXRhYmFzZSBzaG91bGQgc3VjY2VlZCcpOworICAgIHZhciBvcGVuID0gaW5kZXhlZERCLm9wZW4o
ZGJuYW1lLCAxKTsKKyAgICBvcGVuLm9udXBncmFkZW5lZWRlZCA9IHQuc3RlcF9mdW5jKGZ1bmN0
aW9uKCkgeworICAgICAgdmFyIGRiID0gb3Blbi5yZXN1bHQ7CisgICAgICB0LmFkZF9jbGVhbnVw
KGZ1bmN0aW9uKCkgeworICAgICAgICAvLyBJZiBvcGVuIGRpZG4ndCBzdWNjZWVkIGFscmVhZHks
IGlnbm9yZSB0aGUgZXJyb3IuCisgICAgICAgIG9wZW4ub25lcnJvciA9IGZ1bmN0aW9uKGUpIHsK
KyAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgIH07CisgICAgICAgIGRiLmNs
b3NlKCk7CisgICAgICAgIGluZGV4ZWREQi5kZWxldGVEYXRhYmFzZShkYi5uYW1lKTsKKyAgICAg
IH0pOworICAgICAgdmFyIHR4ID0gb3Blbi50cmFuc2FjdGlvbjsKKyAgICAgIHVwZ3JhZGVfZnVu
Yyh0LCBkYiwgdHgsIG9wZW4pOworICAgIH0pOworICAgIGlmIChvcHRpb25zLnVwZ3JhZGVfd2ls
bF9hYm9ydCkgeworICAgICAgb3Blbi5vbnN1Y2Nlc3MgPSB0LnVucmVhY2hlZF9mdW5jKCdvcGVu
IHNob3VsZCBub3Qgc3VjY2VlZCcpOworICAgIH0gZWxzZSB7CisgICAgICBvcGVuLm9uZXJyb3Ig
PSB0LnVucmVhY2hlZF9mdW5jKCdvcGVuIHNob3VsZCBzdWNjZWVkJyk7CisgICAgICBvcGVuLm9u
c3VjY2VzcyA9IHQuc3RlcF9mdW5jKGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgZGIgPSBvcGVu
LnJlc3VsdDsKKyAgICAgICAgaWYgKG9wZW5fZnVuYykKKyAgICAgICAgICBvcGVuX2Z1bmModCwg
ZGIsIG9wZW4pOworICAgICAgfSk7CisgICAgfQorICB9LCBkZXNjcmlwdGlvbik7Cit9CisKKy8v
IENhbGwgd2l0aCBhIFRlc3QgYW5kIGFuIGFycmF5IG9mIGV4cGVjdGVkIHJlc3VsdHMgaW4gb3Jk
ZXIuIFJldHVybnMKKy8vIGEgZnVuY3Rpb247IGNhbGwgdGhlIGZ1bmN0aW9uIHdoZW4gYSByZXN1
bHQgYXJyaXZlcyBhbmQgd2hlbiB0aGUKKy8vIGV4cGVjdGVkIG51bWJlciBhcHBlYXIgdGhlIG9y
ZGVyIHdpbGwgYmUgYXNzZXJ0ZWQgYW5kIHRlc3QKKy8vIGNvbXBsZXRlZC4KK2Z1bmN0aW9uIGV4
cGVjdCh0LCBleHBlY3RlZCkgeworICB2YXIgcmVzdWx0cyA9IFtdOworICByZXR1cm4gcmVzdWx0
ID0+IHsKKyAgICByZXN1bHRzLnB1c2gocmVzdWx0KTsKKyAgICBpZiAocmVzdWx0cy5sZW5ndGgg
PT09IGV4cGVjdGVkLmxlbmd0aCkgeworICAgICAgYXNzZXJ0X2FycmF5X2VxdWFscyhyZXN1bHRz
LCBleHBlY3RlZCk7CisgICAgICB0LmRvbmUoKTsKKyAgICB9CisgIH07Cit9CisKKy8vIENoZWNr
cyB0byBzZWUgaWYgdGhlIHBhc3NlZCB0cmFuc2FjdGlvbiBpcyBhY3RpdmUgKGJ5IG1ha2luZwor
Ly8gcmVxdWVzdHMgYWdhaW5zdCB0aGUgbmFtZWQgc3RvcmUpLgorZnVuY3Rpb24gaXNfdHJhbnNh
Y3Rpb25fYWN0aXZlKHR4LCBzdG9yZV9uYW1lKSB7CisgIHRyeSB7CisgICAgY29uc3QgcmVxdWVz
dCA9IHR4Lm9iamVjdFN0b3JlKHN0b3JlX25hbWUpLmdldCgwKTsKKyAgICByZXF1ZXN0Lm9uZXJy
b3IgPSBlID0+IHsKKyAgICAgIGUucHJldmVudERlZmF1bHQoKTsKKyAgICAgIGUuc3RvcFByb3Bh
Z2F0aW9uKCk7CisgICAgfTsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfSBjYXRjaCAoZXgpIHsKKyAg
ICBhc3NlcnRfZXF1YWxzKGV4Lm5hbWUsICdUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3InLAorICAg
ICAgICAgICAgICAgICAgJ0FjdGl2ZSBjaGVjayBzaG91bGQgZWl0aGVyIG5vdCB0aHJvdyBhbnl0
aGluZywgb3IgdGhyb3cgJyArCisgICAgICAgICAgICAgICAgICAnVHJhbnNhY3Rpb25JbmFjdGl2
ZUVycm9yJyk7CisgICAgcmV0dXJuIGZhbHNlOworICB9Cit9CisKKy8vIEtlZXAgdGhlIHBhc3Nl
ZCB0cmFuc2FjdGlvbiBhbGl2ZSBpbmRlZmluaXRlbHkgKGJ5IG1ha2luZyByZXF1ZXN0cworLy8g
YWdhaW5zdCB0aGUgbmFtZWQgc3RvcmUpLiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdG8gbGV0IHRo
ZQorLy8gdHJhbnNhY3Rpb24gZmluaXNoLCBhbmQgYXNzZXJ0cyB0aGF0IHRoZSB0cmFuc2FjdGlv
biBpcyBub3QgeWV0CisvLyBmaW5pc2hlZC4KK2Z1bmN0aW9uIGtlZXBfYWxpdmUodHgsIHN0b3Jl
X25hbWUpIHsKKyAgbGV0IGNvbXBsZXRlZCA9IGZhbHNlOworICB0eC5hZGRFdmVudExpc3RlbmVy
KCdjb21wbGV0ZScsICgpID0+IHsgY29tcGxldGVkID0gdHJ1ZTsgfSk7CisKKyAgbGV0IHBpbiA9
IHRydWU7CisKKyAgZnVuY3Rpb24gc3BpbigpIHsKKyAgICBpZiAoIXBpbikKKyAgICAgIHJldHVy
bjsKKyAgICB0eC5vYmplY3RTdG9yZShzdG9yZV9uYW1lKS5nZXQoMCkub25zdWNjZXNzID0gc3Bp
bjsKKyAgfQorICBzcGluKCk7CisKKyAgcmV0dXJuICgpID0+IHsKKyAgICBhc3NlcnRfZmFsc2Uo
Y29tcGxldGVkLCAnVHJhbnNhY3Rpb24gY29tcGxldGVkIHdoaWxlIGtlcHQgYWxpdmUnKTsKKyAg
ICBwaW4gPSBmYWxzZTsKKyAgfTsKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>348031</attachid>
            <date>2018-08-24 11:51:49 -0700</date>
            <delta_ts>2018-08-27 12:36:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-188728-20180824115149.patch</filename>
            <type>text/plain</type>
            <size>16204</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM1MjMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGRlM2EzODJlYmQ5NTY0
NmFhNWYzYjczODc5NmU4Mzk0ZWUxNDM3MS4uYWJlMWFhN2FhYTUzODQ0Mzc1NWNiZjFlNWNmMDIx
MDlmYzJlOTRiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDE4LTA4LTI0ICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBWYXJpb3VzIEluZGV4REIg
dGVzdHMgYWJhbmRvbiBkb2N1bWVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE4ODcyOAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNDM2NTEwOTU+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU29tZSBJ
REIgb2JqZWN0cyBpbXBsZW1lbnQgaGFzUGVuZGluZ0FjdGl2aXR5IGJ1dCB0aGVyZSBhcmUgc29t
ZSBwb3NzaWJpbGl0aWVzIHRoYXQgdGhleSBjb250aW51ZSByZXR1cm5pbmcgdHJ1ZSBhZnRlciBi
ZWluZyBzdG9wcGVkLiAKKyAgICAgICAgRW5mb3JjZSB0aGF0IHRoZXNlIG9iamVjdHMgcmV0dXJu
IGZhbHNlIHRvIGhhc1BlbmRpbmdBY3Rpdml0eSBvbmNlIGJlaW5nIHN0b3BwZWQuCisgICAgICAg
IFRoaXMgZW5zdXJlcyB0aGF0IHRoZXkgY2FuIGJlIGdhcmJhZ2UgY29sbGVjdGVkIG9uY2UgdGhl
aXIgZG9jdW1lbnQgaXMgcHJlcGFyaW5nIGZvciBkZXN0cnVjdGlvbi4KKworICAgICAgICBUZXN0
OiBodHRwL3Rlc3RzL0luZGV4ZWREQi9jb2xsZWN0LUlEQi1vYmplY3RzLmh0dHBzLmh0bWwKKwor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJREJDdXJzb3I6Omhhc1BlbmRpbmdBY3Rpdml0eSBjb25zdCk6CisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmg6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
SURCSW5kZXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6Omhhc1BlbmRpbmdBY3Rp
dml0eSBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6Omhhc1BlbmRpbmdBY3Rpdml0
eSBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpoYXNQZW5kaW5nQWN0aXZpdHkgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6ZW5xdWV1ZUV2ZW50KToKKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
REJUcmFuc2FjdGlvbjo6bm90aWZ5RGlkQWJvcnQpOiBJbiBjYXNlIHRoZSBjb250ZXh0IGlzIHN0
b3BwZWQsCisgICAgICAgIElEQlRyYW5zYWN0aW9uIHNob3VsZCBub3QgYXNrIElEQlJlcXVlc3Qg
dG8gZmlyZSBhbiBldmVudC4KKwogMjAxOC0wOC0yMyAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBh
cHBsZS5jb20+CiAKICAgICAgICAgVXBkYXRlIGxpYndlYnJ0YyB1cCB0byA5ODRmMWE4MGMwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcAppbmRleCAw
NWRiODM0MTdlNWMwMWM5NTY3YTUyYzAyYjI5ZGMyNzYwYTM3MGMwLi43MTMwM2ExZThjYmJmMmYz
YWM5ODdlNGYyNGE5YWY1YWNmNTcxOGJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkN1cnNvci5jcHAKQEAgLTM2OSw3ICszNjksNyBAQCBib29sIElEQkN1cnNv
cjo6Y2FuU3VzcGVuZEZvckRvY3VtZW50U3VzcGVuc2lvbigpIGNvbnN0CiAKIGJvb2wgSURCQ3Vy
c29yOjpoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdAogewotICAgIHJldHVybiBtX291dHN0YW5k
aW5nUmVxdWVzdENvdW50OworICAgIHJldHVybiAhbV9jb250ZXh0U3RvcHBlZCAmJiBtX291dHN0
YW5kaW5nUmVxdWVzdENvdW50OwogfQogCiB2b2lkIElEQkN1cnNvcjo6ZGVjcmVtZW50T3V0c3Rh
bmRpbmdSZXF1ZXN0Q291bnQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCQ3Vyc29yLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJDdXJzb3IuaAppbmRleCA0OTAzMDU2OTkxMWE3Nzk3OWVhZGRkOTM0YWUwNDgwYzQyODQxODg2
Li5kN2U2NWU0N2NkNTNmMzQ3YWZlNDllZDUzZTAxZGIzODE0OGVhZTc5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaApAQCAtODUsNiArODUsNyBAQCBw
cm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIGNvbnN0IGNoYXIqIGFjdGl2ZURPTU9iamVjdE5hbWUo
KSBjb25zdCBmaW5hbDsKICAgICBib29sIGNhblN1c3BlbmRGb3JEb2N1bWVudFN1c3BlbnNpb24o
KSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIHN0b3AoKSBmaW5hbCB7IG1fY29udGV4dFN0b3BwZWQg
PSB0cnVlOyB9CiAKICAgICBib29sIHNvdXJjZXNEZWxldGVkKCkgY29uc3Q7CiAgICAgSURCT2Jq
ZWN0U3RvcmUmIGVmZmVjdGl2ZU9iamVjdFN0b3JlKCkgY29uc3Q7CkBAIC0xMDEsNiArMTAyLDcg
QEAgcHJpdmF0ZToKICAgICBJREJSZXF1ZXN0KiBtX3JlcXVlc3QgeyBudWxscHRyIH07CiAKICAg
ICBib29sIG1fZ290VmFsdWUgeyBmYWxzZSB9OworICAgIGJvb2wgbV9jb250ZXh0U3RvcHBlZCB7
IGZhbHNlIH07CiAKICAgICBJREJLZXlEYXRhIG1fY3VycmVudEtleURhdGE7CiAgICAgSURCS2V5
RGF0YSBtX2N1cnJlbnRQcmltYXJ5S2V5RGF0YTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkluZGV4LmNwcAppbmRleCAxOTE5ZTQ2OTQxOGMwNWM4YWU3NzIzZWQ2NjEx
MWQ5YTNlNDU1MTZiLi45ZDFmODM5Mzc3MzdhZTgwMTEwYjAyMGVhOTk4M2I2OGQ4MDNmNjdmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguY3BwCkBAIC02
OSw3ICs2OSw3IEBAIGJvb2wgSURCSW5kZXg6OmNhblN1c3BlbmRGb3JEb2N1bWVudFN1c3BlbnNp
b24oKSBjb25zdAogCiBib29sIElEQkluZGV4OjpoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdAog
ewotICAgIHJldHVybiAhbV9vYmplY3RTdG9yZS50cmFuc2FjdGlvbigpLmlzRmluaXNoZWQoKTsK
KyAgICByZXR1cm4gbV9vYmplY3RTdG9yZS50cmFuc2FjdGlvbigpLmhhc1BlbmRpbmdBY3Rpdml0
eSgpOwogfQogCiBjb25zdCBTdHJpbmcmIElEQkluZGV4OjpuYW1lKCkgY29uc3QKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAppbmRl
eCAzYzUwZWJjZDY5YjdhM2MzZmI4NGE2YTNhNGQzMTVhZDYyZDQzNjEyLi5mMDhjOWU1Mjg1M2Yz
MGIwODc4ZWVmZmQwZGI1ZDE3MDJmMjMxZjEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCkBAIC04Miw3ICs4Miw3IEBAIGJv
b2wgSURCT2JqZWN0U3RvcmU6OmNhblN1c3BlbmRGb3JEb2N1bWVudFN1c3BlbnNpb24oKSBjb25z
dAogCiBib29sIElEQk9iamVjdFN0b3JlOjpoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdAogewot
ICAgIHJldHVybiAhbV90cmFuc2FjdGlvbi5pc0ZpbmlzaGVkKCk7CisgICAgcmV0dXJuIG1fdHJh
bnNhY3Rpb24uaGFzUGVuZGluZ0FjdGl2aXR5KCk7CiB9CiAKIGNvbnN0IFN0cmluZyYgSURCT2Jq
ZWN0U3RvcmU6Om5hbWUoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJSZXF1ZXN0LmNwcAppbmRleCAyYzI3ZGZkNWY4MDYwNDU1ZWYxNzcxYjFkYzk4ZDkz
M2ExNGI5YTYxLi4wMzFlYmMxZWRiMjM1NjE1OTgxYWY1YWJjZThlODQ4NTJmZmVhMGY1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcApAQCAt
MjY2LDcgKzI2Niw3IEBAIGJvb2wgSURCUmVxdWVzdDo6Y2FuU3VzcGVuZEZvckRvY3VtZW50U3Vz
cGVuc2lvbigpIGNvbnN0CiBib29sIElEQlJlcXVlc3Q6Omhhc1BlbmRpbmdBY3Rpdml0eSgpIGNv
bnN0CiB7CiAgICAgQVNTRVJUKCZvcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkg
fHwgbWF5QmVHQ1RocmVhZCgpKTsKLSAgICByZXR1cm4gbV9oYXNQZW5kaW5nQWN0aXZpdHk7Cisg
ICAgcmV0dXJuICFtX2NvbnRleHRTdG9wcGVkICYmIG1faGFzUGVuZGluZ0FjdGl2aXR5OwogfQog
CiB2b2lkIElEQlJlcXVlc3Q6OnN0b3AoKQpAQCAtMjg5LDcgKzI4OSw3IEBAIHZvaWQgSURCUmVx
dWVzdDo6Y2FuY2VsRm9yU3RvcCgpCiB2b2lkIElEQlJlcXVlc3Q6OmVucXVldWVFdmVudChSZWY8
RXZlbnQ+JiYgZXZlbnQpCiB7CiAgICAgQVNTRVJUKCZvcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFk
OjpjdXJyZW50KCkpOwotICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIHx8IG1fY29u
dGV4dFN0b3BwZWQpCisgICAgaWYgKG1fY29udGV4dFN0b3BwZWQpCiAgICAgICAgIHJldHVybjsK
IAogICAgIGV2ZW50LT5zZXRUYXJnZXQodGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAKaW5kZXggNDgxMWM3Y2FkZmE2MGU1
NDQxY2I1MTI1MThhYmE3MWY1YTk2NDBlNy4uMjhhODU3MGM0NjAzMzE5OTM0ZjNkOTE3YmMzMTU1
ZjM3NTZlYWQzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCVHJhbnNhY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQlRyYW5zYWN0aW9uLmNwcApAQCAtNTUxLDcgKzU1MSw3IEBAIHZvaWQgSURCVHJhbnNhY3Rp
b246Om5vdGlmeURpZEFib3J0KGNvbnN0IElEQkVycm9yJiBlcnJvcikKICAgICBtX2lkYkVycm9y
ID0gZXJyb3I7CiAgICAgZmlyZU9uQWJvcnQoKTsKIAotICAgIGlmIChpc1ZlcnNpb25DaGFuZ2Uo
KSkgeworICAgIGlmIChpc1ZlcnNpb25DaGFuZ2UoKSAmJiAhbV9jb250ZXh0U3RvcHBlZCkgewog
ICAgICAgICBBU1NFUlQobV9vcGVuREJSZXF1ZXN0KTsKICAgICAgICAgbV9vcGVuREJSZXF1ZXN0
LT5maXJlRXJyb3JBZnRlclZlcnNpb25DaGFuZ2VDb21wbGV0aW9uKCk7CiAgICAgfQpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4
IGFlNzNlMzEyNGFiNTI1YmJlYjM1YWU2MGFkYjZhYjMzMzM4MTBiNjEuLjFkNTViZTBmNTY2NzRl
ZWZhZTg0OGM3Y2FiYWQzMTE4YTE4YTU4MTUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxOC0w
OC0yNCAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisKKyAgICAgICAgVmFyaW91
cyBJbmRleERCIHRlc3RzIGFiYW5kb24gZG9jdW1lbnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODg3MjgKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
LzQzNjUxMDk1PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogaHR0cC90ZXN0cy9JbmRleGVkREIvcmVzb3VyY2VzL215aWRiZnJhbWUuaHRtOiBBZGRl
ZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL0luZGV4ZWREQi9yZXNvdXJjZXMvc3VwcG9ydC5qczog
QWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9JbmRleGVkREIvY29sbGVjdC1JREItb2plY3Rz
Lmh0dHBzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9JbmRleGVk
REIvY29sbGVjdC1JREItb2plY3RzLmh0dHBzLmh0bWw6IEFkZGVkLgorCiAyMDE4LTA4LTIzICBZ
b3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBVcGRhdGUgbGlid2Vi
cnRjIHVwIHRvIDk4NGYxYTgwYzAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMv
SW5kZXhlZERCL2NvbGxlY3QtSURCLW9iamVjdHMuaHR0cHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9JbmRleGVkREIvY29sbGVjdC1JREItb2JqZWN0cy5odHRwcy1leHBl
Y3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZWMwMzU4N2QyYzNlNjkzNGVlN2JjOTBmYzk2NWQxYzdkZjQ0
ZmRmYQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvSW5kZXhlZERC
L2NvbGxlY3QtSURCLW9iamVjdHMuaHR0cHMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNCBAQAor
CisKK1BBU1MgRW5zdXJpbmcgZnJhbWUgZG9jdW1lbnQgZ2V0cyBjb2xsZWN0ZWQgYWZ0ZXIgYmVp
bmcgc3RvcHBlZCBpbiB0aGUgbW1pZGRsZSBvZiBJREIgb3BlcmF0aW9ucyAKKwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9JbmRleGVkREIvY29sbGVjdC1JREItb2JqZWN0cy5o
dHRwcy5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9JbmRleGVkREIvY29sbGVjdC1JREIt
b2JqZWN0cy5odHRwcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ3ZGRhOGRlZTRjYjUzZmM2M2U1MTBkOWY1
NTcwNTA0ZjhkNzMzYTEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L0luZGV4ZWREQi9jb2xsZWN0LUlEQi1vYmplY3RzLmh0dHBzLmh0bWwKQEAgLTAsMCArMSw0NSBA
QAorPCFET0NUWVBFIGh0bWw+Cis8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+Cis8c2NyaXB0IHNyYz0i
L3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291
cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorZnVuY3Rpb24g
d2FpdEZvcihkdXJhdGlvbikKK3sKKyAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+
IHNldFRpbWVvdXQocmVzb2x2ZSwgZHVyYXRpb24pKTsKK30KKwordmFyIHJlc29sdmVDYWxsYmFj
aywgcmVqZWN0Q2FsbGJhY2s7Cit2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCBy
ZWplY3QpID0+IHsKKyAgICByZXNvbHZlQ2FsbGJhY2sgPSByZXNvbHZlOworICAgIHJlamVjdENh
bGxiYWNrID0gcmVqZWN0OworfSk7CisKK2FzeW5jIGZ1bmN0aW9uIGRvbmUoKQoreworICAgIHRy
eSB7CisgICAgICAgIGNvbnN0IGZyYW1lSWRlbnRpZmllciA9IGludGVybmFscy5kb2N1bWVudElk
ZW50aWZpZXIoaWZyYW1lLmNvbnRlbnREb2N1bWVudCk7CisgICAgICAgIGlmcmFtZS5zcmMgPSAi
bm9uLWV4aXN0ZW50LWZyYW1lIjsKKyAgICAgICAgbGV0IGNvdW50ZXIgPSAwOworICAgICAgICB3
aGlsZSAoKytjb3VudGVyIDwgMTApIHsKKyAgICAgICAgICAgIGlmICghaW50ZXJuYWxzLmlzRG9j
dW1lbnRBbGl2ZShmcmFtZUlkZW50aWZpZXIpKSB7CisgICAgICAgICAgICAgICAgcmVzb2x2ZUNh
bGxiYWNrKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKHdpbmRvdy5HQ0NvbnRyb2xsZXIpCisgICAgICAgICAgICAgICAgR0NDb250cm9s
bGVyLmNvbGxlY3QoKTsKKworICAgICAgICAgICAgYXdhaXQgd2FpdEZvcig1MCk7CisgICAgICAg
IH0KKyAgICB9IGZpbmFsbHkgeworICAgICAgICByZWplY3RDYWxsYmFjaygiVGVzdCBmYWlsZWQi
KTsKKyAgICB9Cit9CisKK3Byb21pc2VfdGVzdCgodGVzdCkgPT4geworICAgIGlmICghd2luZG93
LmludGVybmFscykKKyAgICAgICAgcmVqZWN0Q2FsbGJhY2soIlRlc3QgcmVxdWlyZSBpbnRlcm5h
bHMgQVBJIik7CisgICAgcmV0dXJuIHByb21pc2U7Cit9LCAiRW5zdXJpbmcgZnJhbWUgZG9jdW1l
bnQgZ2V0cyBjb2xsZWN0ZWQgYWZ0ZXIgYmVpbmcgc3RvcHBlZCBpbiB0aGUgbW1pZGRsZSBvZiBJ
REIgb3BlcmF0aW9ucyIpOworCis8L3NjcmlwdD4KKzxpZnJhbWUgc3JjPSJyZXNvdXJjZXMvbXlp
ZGJmcmFtZS5odG0iIGlkPSJpZnJhbWUiPjwvaWZyYW1lPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9JbmRleGVkREIvcmVzb3VyY2VzL215aWRiZnJhbWUuaHRtIGIvTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9JbmRleGVkREIvcmVzb3VyY2VzL215aWRiZnJhbWUuaHRtCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmY5MDdmNzI5N2FmOTYwZjYyYWZmMjE4NTU1OTExNzk2ZjRiZjAxZWEKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL0luZGV4ZWREQi9yZXNvdXJjZXMvbXlp
ZGJmcmFtZS5odG0KQEAgLTAsMCArMSwyNiBAQAorPCFET0NUWVBFIGh0bWw+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSJzdXBwb3J0LmpzIj48L3NjcmlwdD4KKworPHNjcmlwdD4KK3ZhciB0ID0gYXN5bmNfdGVzdCgp
OworY3JlYXRlZGIodCkub251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24oZSkgeworICAgIGUudGFy
Z2V0LnJlc3VsdAorICAgICAgICAgICAgLmNyZWF0ZU9iamVjdFN0b3JlKCJzdG9yZSIpCisgICAg
ICAgICAgICAuYWRkKG5ldyBEYXRlKCksIDEpOworCisgICAgZS50YXJnZXQub25zdWNjZXNzID0g
dC5zdGVwX2Z1bmMoZnVuY3Rpb24oZSkgeworICAgICAgICBlLnRhcmdldC5yZXN1bHQKKyAgICAg
ICAgICAgICAgICAudHJhbnNhY3Rpb24oInN0b3JlIikKKyAgICAgICAgICAgICAgICAub2JqZWN0
U3RvcmUoInN0b3JlIikKKyAgICAgICAgICAgICAgICAuZ2V0KDEpCisgICAgICAgICAgICAgICAg
Lm9uc3VjY2VzcyA9IHQuc3RlcF9mdW5jKGZ1bmN0aW9uKGUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHQuZG9uZSgpOworICAgICAgICAgICAgcGFyZW50LmRvbmUoKTsKKyAgICAgICAgfSk7Cisg
ICAgfSk7Cit9OworPC9zY3JpcHQ+CisKKzxkaXYgaWQ9ImxvZyI+PC9kaXY+CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL0luZGV4ZWREQi9yZXNvdXJjZXMvc3VwcG9ydC5qcyBi
L0xheW91dFRlc3RzL2h0dHAvdGVzdHMvSW5kZXhlZERCL3Jlc291cmNlcy9zdXBwb3J0LmpzCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjVlZGJkYWNiY2M3ZDBjZjI3ZDBlMzMzMDE5OGI1NWQ1MDU0MDM0NWUKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL0luZGV4ZWREQi9yZXNvdXJjZXMv
c3VwcG9ydC5qcwpAQCAtMCwwICsxLDE5NCBAQAordmFyIGRhdGFiYXNlTmFtZSA9ICJkYXRhYmFz
ZSI7Cit2YXIgZGF0YWJhc2VWZXJzaW9uID0gMTsKKworLyogRGVsZXRlIGNyZWF0ZWQgZGF0YWJh
c2VzCisgKgorICogR28gdGhyb3VnaCBlYWNoIGZpbmlzaGVkIHRlc3QsIHNlZSBpZiBpdCBoYXMg
YW4gYXNzb2NpYXRlZCBkYXRhYmFzZS4gQ2xvc2UKKyAqIHRoYXQgYW5kIGRlbGV0ZSB0aGUgZGF0
YWJhc2UuICovCithZGRfY29tcGxldGlvbl9jYWxsYmFjayhmdW5jdGlvbih0ZXN0cykKK3sKKyAg
ICBmb3IgKHZhciBpIGluIHRlc3RzKQorICAgIHsKKyAgICAgICAgaWYodGVzdHNbaV0uZGIpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHRlc3RzW2ldLmRiLmNsb3NlKCk7CisgICAgICAgICAgICBz
ZWxmLmluZGV4ZWREQi5kZWxldGVEYXRhYmFzZSh0ZXN0c1tpXS5kYi5uYW1lKTsKKyAgICAgICAg
fQorICAgIH0KK30pOworCitmdW5jdGlvbiBmYWlsKHRlc3QsIGRlc2MpIHsKKyAgICByZXR1cm4g
dGVzdC5zdGVwX2Z1bmMoZnVuY3Rpb24oZSkgeworICAgICAgICBpZiAoZSAmJiBlLm1lc3NhZ2Ug
JiYgZS50YXJnZXQuZXJyb3IpCisgICAgICAgICAgICBhc3NlcnRfdW5yZWFjaGVkKGRlc2MgKyAi
ICgiICsgZS50YXJnZXQuZXJyb3IubmFtZSArICI6ICIgKyBlLm1lc3NhZ2UgKyAiKSIpOworICAg
ICAgICBlbHNlIGlmIChlICYmIGUubWVzc2FnZSkKKyAgICAgICAgICAgIGFzc2VydF91bnJlYWNo
ZWQoZGVzYyArICIgKCIgKyBlLm1lc3NhZ2UgKyAiKSIpOworICAgICAgICBlbHNlIGlmIChlICYm
IGUudGFyZ2V0LnJlYWR5U3RhdGUgPT09ICdkb25lJyAmJiBlLnRhcmdldC5lcnJvcikKKyAgICAg
ICAgICAgIGFzc2VydF91bnJlYWNoZWQoZGVzYyArICIgKCIgKyBlLnRhcmdldC5lcnJvci5uYW1l
ICsgIikiKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYXNzZXJ0X3VucmVhY2hlZChkZXNj
KTsKKyAgICB9KTsKK30KKworZnVuY3Rpb24gY3JlYXRlZGIodGVzdCwgZGJuYW1lLCB2ZXJzaW9u
KQoreworICAgIHZhciBycV9vcGVuID0gY3JlYXRlZGJfZm9yX211bHRpcGxlX3Rlc3RzKGRibmFt
ZSwgdmVyc2lvbik7CisgICAgcmV0dXJuIHJxX29wZW4uc2V0VGVzdCh0ZXN0KTsKK30KKworZnVu
Y3Rpb24gY3JlYXRlZGJfZm9yX211bHRpcGxlX3Rlc3RzKGRibmFtZSwgdmVyc2lvbikgeworICAg
IHZhciBycV9vcGVuLAorICAgICAgICBmYWtlX29wZW4gPSB7fSwKKyAgICAgICAgdGVzdCA9IG51
bGwsCisgICAgICAgIGRibmFtZSA9IChkYm5hbWUgPyBkYm5hbWUgOiAidGVzdGRiLSIgKyBuZXcg
RGF0ZSgpLmdldFRpbWUoKSArIE1hdGgucmFuZG9tKCkgKTsKKworICAgIGlmICh2ZXJzaW9uKQor
ICAgICAgICBycV9vcGVuID0gc2VsZi5pbmRleGVkREIub3BlbihkYm5hbWUsIHZlcnNpb24pOwor
ICAgIGVsc2UKKyAgICAgICAgcnFfb3BlbiA9IHNlbGYuaW5kZXhlZERCLm9wZW4oZGJuYW1lKTsK
KworICAgIGZ1bmN0aW9uIGF1dG9fZmFpbChldnQsIGN1cnJlbnRfdGVzdCkgeworICAgICAgICAv
KiBGYWlsIGhhbmRsZXJzLCBpZiB3ZSBoYXZlbid0IHNldCBvbi93aGF0ZXZlci8sIGRvbid0Cisg
ICAgICAgICAqIGV4cGVjdCB0byBnZXQgZXZlbnQgd2hhdGV2ZXIuICovCisgICAgICAgIHJxX29w
ZW4ubWFudWFsbHlfaGFuZGxlZCA9IHt9OworCisgICAgICAgIHJxX29wZW4uYWRkRXZlbnRMaXN0
ZW5lcihldnQsIGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgICAgIGlmIChjdXJyZW50X3Rlc3QgIT09
IHRlc3QpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIHRlc3Quc3RlcChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXJxX29w
ZW4ubWFudWFsbHlfaGFuZGxlZFtldnRdKSB7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydF91
bnJlYWNoZWQoInVuZXhwZWN0ZWQgb3Blbi4iICsgZXZ0ICsgIiBldmVudCIpOworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChlLnRhcmdldC5yZXN1bHQgKyAnJyA9PSAn
W29iamVjdCBJREJEYXRhYmFzZV0nICYmCisgICAgICAgICAgICAgICAgICAgICF0aGlzLmRiKSB7
CisgICAgICAgICAgICAgICAgICB0aGlzLmRiID0gZS50YXJnZXQucmVzdWx0OworCisgICAgICAg
ICAgICAgICAgICB0aGlzLmRiLm9uZXJyb3IgPSBmYWlsKHRlc3QsICd1bmV4cGVjdGVkIGRiLmVy
cm9yJyk7CisgICAgICAgICAgICAgICAgICB0aGlzLmRiLm9uYWJvcnQgPSBmYWlsKHRlc3QsICd1
bmV4cGVjdGVkIGRiLmFib3J0Jyk7CisgICAgICAgICAgICAgICAgICB0aGlzLmRiLm9udmVyc2lv
bmNoYW5nZSA9CisgICAgICAgICAgICAgICAgICAgICAgZmFpbCh0ZXN0LCAndW5leHBlY3RlZCBk
Yi52ZXJzaW9uY2hhbmdlJyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7Cisg
ICAgICAgIH0pOworICAgICAgICBycV9vcGVuLl9fZGVmaW5lU2V0dGVyX18oIm9uIiArIGV2dCwg
ZnVuY3Rpb24oaCkgeworICAgICAgICAgICAgcnFfb3Blbi5tYW51YWxseV9oYW5kbGVkW2V2dF0g
PSB0cnVlOworICAgICAgICAgICAgaWYgKCFoKQorICAgICAgICAgICAgICAgIHJxX29wZW4uYWRk
RXZlbnRMaXN0ZW5lcihldnQsIGZ1bmN0aW9uKCkge30pOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIHJxX29wZW4uYWRkRXZlbnRMaXN0ZW5lcihldnQsIHRlc3Quc3RlcF9mdW5j
KGgpKTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgLy8gYWRkIGEgLnNldFRlc3QgbWV0aG9k
IHRvIHRoZSBJREJPcGVuREJSZXF1ZXN0IG9iamVjdAorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShycV9vcGVuLCAnc2V0VGVzdCcsIHsKKyAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsCisgICAg
ICAgIHZhbHVlOiBmdW5jdGlvbih0KSB7CisgICAgICAgICAgICB0ZXN0ID0gdDsKKworICAgICAg
ICAgICAgYXV0b19mYWlsKCJ1cGdyYWRlbmVlZGVkIiwgdGVzdCk7CisgICAgICAgICAgICBhdXRv
X2ZhaWwoInN1Y2Nlc3MiLCB0ZXN0KTsKKyAgICAgICAgICAgIGF1dG9fZmFpbCgiYmxvY2tlZCIs
IHRlc3QpOworICAgICAgICAgICAgYXV0b19mYWlsKCJlcnJvciIsIHRlc3QpOworCisgICAgICAg
ICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorICAgIH0pOworCisgICAgcmV0dXJuIHJxX29w
ZW47Cit9CisKK2Z1bmN0aW9uIGFzc2VydF9rZXlfZXF1YWxzKGFjdHVhbCwgZXhwZWN0ZWQsIGRl
c2NyaXB0aW9uKSB7CisgIGFzc2VydF9lcXVhbHMoaW5kZXhlZERCLmNtcChhY3R1YWwsIGV4cGVj
dGVkKSwgMCwgZGVzY3JpcHRpb24pOworfQorCitmdW5jdGlvbiBpbmRleGVkZGJfdGVzdCh1cGdy
YWRlX2Z1bmMsIG9wZW5fZnVuYywgZGVzY3JpcHRpb24sIG9wdGlvbnMpIHsKKyAgYXN5bmNfdGVz
dChmdW5jdGlvbih0KSB7CisgICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe3VwZ3JhZGVfd2ls
bF9hYm9ydDogZmFsc2V9LCBvcHRpb25zKTsKKyAgICB2YXIgZGJuYW1lID0gbG9jYXRpb24gKyAn
LScgKyB0Lm5hbWU7CisgICAgdmFyIGRlbCA9IGluZGV4ZWREQi5kZWxldGVEYXRhYmFzZShkYm5h
bWUpOworICAgIGRlbC5vbmVycm9yID0gdC51bnJlYWNoZWRfZnVuYygnZGVsZXRlRGF0YWJhc2Ug
c2hvdWxkIHN1Y2NlZWQnKTsKKyAgICB2YXIgb3BlbiA9IGluZGV4ZWREQi5vcGVuKGRibmFtZSwg
MSk7CisgICAgb3Blbi5vbnVwZ3JhZGVuZWVkZWQgPSB0LnN0ZXBfZnVuYyhmdW5jdGlvbigpIHsK
KyAgICAgIHZhciBkYiA9IG9wZW4ucmVzdWx0OworICAgICAgdC5hZGRfY2xlYW51cChmdW5jdGlv
bigpIHsKKyAgICAgICAgLy8gSWYgb3BlbiBkaWRuJ3Qgc3VjY2VlZCBhbHJlYWR5LCBpZ25vcmUg
dGhlIGVycm9yLgorICAgICAgICBvcGVuLm9uZXJyb3IgPSBmdW5jdGlvbihlKSB7CisgICAgICAg
ICAgZS5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICB9OworICAgICAgICBkYi5jbG9zZSgpOwor
ICAgICAgICBpbmRleGVkREIuZGVsZXRlRGF0YWJhc2UoZGIubmFtZSk7CisgICAgICB9KTsKKyAg
ICAgIHZhciB0eCA9IG9wZW4udHJhbnNhY3Rpb247CisgICAgICB1cGdyYWRlX2Z1bmModCwgZGIs
IHR4LCBvcGVuKTsKKyAgICB9KTsKKyAgICBpZiAob3B0aW9ucy51cGdyYWRlX3dpbGxfYWJvcnQp
IHsKKyAgICAgIG9wZW4ub25zdWNjZXNzID0gdC51bnJlYWNoZWRfZnVuYygnb3BlbiBzaG91bGQg
bm90IHN1Y2NlZWQnKTsKKyAgICB9IGVsc2UgeworICAgICAgb3Blbi5vbmVycm9yID0gdC51bnJl
YWNoZWRfZnVuYygnb3BlbiBzaG91bGQgc3VjY2VlZCcpOworICAgICAgb3Blbi5vbnN1Y2Nlc3Mg
PSB0LnN0ZXBfZnVuYyhmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGRiID0gb3Blbi5yZXN1bHQ7
CisgICAgICAgIGlmIChvcGVuX2Z1bmMpCisgICAgICAgICAgb3Blbl9mdW5jKHQsIGRiLCBvcGVu
KTsKKyAgICAgIH0pOworICAgIH0KKyAgfSwgZGVzY3JpcHRpb24pOworfQorCisvLyBDYWxsIHdp
dGggYSBUZXN0IGFuZCBhbiBhcnJheSBvZiBleHBlY3RlZCByZXN1bHRzIGluIG9yZGVyLiBSZXR1
cm5zCisvLyBhIGZ1bmN0aW9uOyBjYWxsIHRoZSBmdW5jdGlvbiB3aGVuIGEgcmVzdWx0IGFycml2
ZXMgYW5kIHdoZW4gdGhlCisvLyBleHBlY3RlZCBudW1iZXIgYXBwZWFyIHRoZSBvcmRlciB3aWxs
IGJlIGFzc2VydGVkIGFuZCB0ZXN0CisvLyBjb21wbGV0ZWQuCitmdW5jdGlvbiBleHBlY3QodCwg
ZXhwZWN0ZWQpIHsKKyAgdmFyIHJlc3VsdHMgPSBbXTsKKyAgcmV0dXJuIHJlc3VsdCA9PiB7Cisg
ICAgcmVzdWx0cy5wdXNoKHJlc3VsdCk7CisgICAgaWYgKHJlc3VsdHMubGVuZ3RoID09PSBleHBl
Y3RlZC5sZW5ndGgpIHsKKyAgICAgIGFzc2VydF9hcnJheV9lcXVhbHMocmVzdWx0cywgZXhwZWN0
ZWQpOworICAgICAgdC5kb25lKCk7CisgICAgfQorICB9OworfQorCisvLyBDaGVja3MgdG8gc2Vl
IGlmIHRoZSBwYXNzZWQgdHJhbnNhY3Rpb24gaXMgYWN0aXZlIChieSBtYWtpbmcKKy8vIHJlcXVl
c3RzIGFnYWluc3QgdGhlIG5hbWVkIHN0b3JlKS4KK2Z1bmN0aW9uIGlzX3RyYW5zYWN0aW9uX2Fj
dGl2ZSh0eCwgc3RvcmVfbmFtZSkgeworICB0cnkgeworICAgIGNvbnN0IHJlcXVlc3QgPSB0eC5v
YmplY3RTdG9yZShzdG9yZV9uYW1lKS5nZXQoMCk7CisgICAgcmVxdWVzdC5vbmVycm9yID0gZSA9
PiB7CisgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CisgICAgICBlLnN0b3BQcm9wYWdhdGlvbigp
OworICAgIH07CisgICAgcmV0dXJuIHRydWU7CisgIH0gY2F0Y2ggKGV4KSB7CisgICAgYXNzZXJ0
X2VxdWFscyhleC5uYW1lLCAnVHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yJywKKyAgICAgICAgICAg
ICAgICAgICdBY3RpdmUgY2hlY2sgc2hvdWxkIGVpdGhlciBub3QgdGhyb3cgYW55dGhpbmcsIG9y
IHRocm93ICcgKworICAgICAgICAgICAgICAgICAgJ1RyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcicp
OworICAgIHJldHVybiBmYWxzZTsKKyAgfQorfQorCisvLyBLZWVwIHRoZSBwYXNzZWQgdHJhbnNh
Y3Rpb24gYWxpdmUgaW5kZWZpbml0ZWx5IChieSBtYWtpbmcgcmVxdWVzdHMKKy8vIGFnYWluc3Qg
dGhlIG5hbWVkIHN0b3JlKS4gUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHRvIGxldCB0aGUKKy8vIHRy
YW5zYWN0aW9uIGZpbmlzaCwgYW5kIGFzc2VydHMgdGhhdCB0aGUgdHJhbnNhY3Rpb24gaXMgbm90
IHlldAorLy8gZmluaXNoZWQuCitmdW5jdGlvbiBrZWVwX2FsaXZlKHR4LCBzdG9yZV9uYW1lKSB7
CisgIGxldCBjb21wbGV0ZWQgPSBmYWxzZTsKKyAgdHguYWRkRXZlbnRMaXN0ZW5lcignY29tcGxl
dGUnLCAoKSA9PiB7IGNvbXBsZXRlZCA9IHRydWU7IH0pOworCisgIGxldCBwaW4gPSB0cnVlOwor
CisgIGZ1bmN0aW9uIHNwaW4oKSB7CisgICAgaWYgKCFwaW4pCisgICAgICByZXR1cm47CisgICAg
dHgub2JqZWN0U3RvcmUoc3RvcmVfbmFtZSkuZ2V0KDApLm9uc3VjY2VzcyA9IHNwaW47CisgIH0K
KyAgc3BpbigpOworCisgIHJldHVybiAoKSA9PiB7CisgICAgYXNzZXJ0X2ZhbHNlKGNvbXBsZXRl
ZCwgJ1RyYW5zYWN0aW9uIGNvbXBsZXRlZCB3aGlsZSBrZXB0IGFsaXZlJyk7CisgICAgcGluID0g
ZmFsc2U7CisgIH07Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>348188</attachid>
            <date>2018-08-27 12:36:42 -0700</date>
            <delta_ts>2018-08-27 15:59:43 -0700</delta_ts>
            <desc>Rebased</desc>
            <filename>bug-188728-20180827123641.patch</filename>
            <type>text/plain</type>
            <size>14929</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM1MzY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzc4MWE1MzU1MjZiZWE5
NWQzOGIxODVmNDU5YjNmMWQwYTgxMmI1OS4uMzc2MTM1Y2E0MTE5NTFkYTc1YTI0Y2U1MWQ0ZmNi
ZjUzNjg0NDgxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDE4LTA4LTI3ICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBWYXJpb3VzIEluZGV4REIg
dGVzdHMgYWJhbmRvbiBkb2N1bWVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE4ODcyOAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNDM2NTEwOTU+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU29tZSBJ
REIgb2JqZWN0cyBpbXBsZW1lbnQgaGFzUGVuZGluZ0FjdGl2aXR5IGJ1dCB0aGVyZSBhcmUgc29t
ZSBwb3NzaWJpbGl0aWVzIHRoYXQgdGhleSBjb250aW51ZSByZXR1cm5pbmcgdHJ1ZSBhZnRlciBi
ZWluZyBzdG9wcGVkLgorICAgICAgICBUaGlzIGlzIHRoZSBjYXNlIGZvciByZXF1ZXN0cyB0aGF0
IGdldCBzdG9wcGVkIHdoaWxlIHN0aWxsIHdhaXRpbmcgZm9yIHNvbWUgcGVuZGluZyBhY3Rpdml0
eS4KKyAgICAgICAgVGhpcyBpcyBhbHNvIHRoZSBjYXNlIGZvciByZXF1ZXN0cyB0aGF0IGVtaXRz
IHVwZ3JhZGVubmVlZGVkIG9yIGJsb2NrZWQgZXZlbnRzLgorCisgICAgICAgIEVuZm9yY2UgdGhh
dCB0aGVzZSBvYmplY3RzIHJldHVybiBmYWxzZSB0byBoYXNQZW5kaW5nQWN0aXZpdHkgb25jZSBi
ZWluZyBzdG9wcGVkLgorICAgICAgICBUaGlzIGVuc3VyZXMgdGhhdCB0aGV5IGNhbiBiZSBnYXJi
YWdlIGNvbGxlY3RlZCBvbmNlIHRoZWlyIGNvbnRleHQgaXMgcHJlcGFyaW5nIGZvciBkZXN0cnVj
dGlvbiBsaWtlIGluIERvY3VtZW50OjpwcmVwYXJlRm9yRGVzdHJ1Y3Rpb24uCisKKyAgICAgICAg
VGVzdDogaHR0cC90ZXN0cy9JbmRleGVkREIvY29sbGVjdC1JREItb2JqZWN0cy5odHRwcy5odG1s
CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJREJJbmRleDo6aGFzUGVuZGluZ0FjdGl2aXR5IGNvbnN0KToKKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
REJPYmplY3RTdG9yZTo6aGFzUGVuZGluZ0FjdGl2aXR5IGNvbnN0KToKKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVl
c3Q6Omhhc1BlbmRpbmdBY3Rpdml0eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1
ZXN0OjplbnF1ZXVlRXZlbnQpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5z
YWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpub3RpZnlEaWRB
Ym9ydCk6CisgICAgICAgIEluIGNhc2UgdGhlIGNvbnRleHQgaXMgc3RvcHBlZCwgSURCVHJhbnNh
Y3Rpb24gc2hvdWxkIG5vdCBhc2sgSURCUmVxdWVzdCB0byBmaXJlIGFuIGV2ZW50LgorCiAyMDE4
LTA4LTI3ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAg
ICAgICAgRml4IElPU01BQyBidWlsZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCSW5kZXguY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCSW5kZXguY3BwCmluZGV4IDE5MTllNDY5NDE4YzA1YzhhZTc3MjNlZDY2MTExZDlhM2U0
NTUxNmIuLjlkMWY4MzkzNzczN2FlODAxMTBiMDIwZWE5OTgzYjY4ZDgwM2Y2N2YgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5jcHAKQEAgLTY5LDcgKzY5
LDcgQEAgYm9vbCBJREJJbmRleDo6Y2FuU3VzcGVuZEZvckRvY3VtZW50U3VzcGVuc2lvbigpIGNv
bnN0CiAKIGJvb2wgSURCSW5kZXg6Omhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuICFtX29iamVjdFN0b3JlLnRyYW5zYWN0aW9uKCkuaXNGaW5pc2hlZCgpOworICAgIHJl
dHVybiBtX29iamVjdFN0b3JlLnRyYW5zYWN0aW9uKCkuaGFzUGVuZGluZ0FjdGl2aXR5KCk7CiB9
CiAKIGNvbnN0IFN0cmluZyYgSURCSW5kZXg6Om5hbWUoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCmluZGV4IDNjNTBl
YmNkNjliN2EzYzNmYjg0YTZhM2E0ZDMxNWFkNjJkNDM2MTIuLmYwOGM5ZTUyODUzZjMwYjA4Nzhl
ZWZmZDBkYjVkMTcwMmYyMzFmMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKQEAgLTgyLDcgKzgyLDcgQEAgYm9vbCBJREJP
YmplY3RTdG9yZTo6Y2FuU3VzcGVuZEZvckRvY3VtZW50U3VzcGVuc2lvbigpIGNvbnN0CiAKIGJv
b2wgSURCT2JqZWN0U3RvcmU6Omhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuICFtX3RyYW5zYWN0aW9uLmlzRmluaXNoZWQoKTsKKyAgICByZXR1cm4gbV90cmFuc2FjdGlv
bi5oYXNQZW5kaW5nQWN0aXZpdHkoKTsKIH0KIAogY29uc3QgU3RyaW5nJiBJREJPYmplY3RTdG9y
ZTo6bmFtZSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QlJlcXVlc3QuY3BwCmluZGV4IDM1OTMyODYwYTU3ZWY4ZDYyYWZkMTUyMzc3MDhkYWY1MGQ1MzA2
NjIuLjZmNWNlMGU5NzI2NTNmNjU3M2FkNWRiNzZhNGZjY2Q0OWYyMmRhOWIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwCkBAIC0yNjEsNyAr
MjYxLDcgQEAgYm9vbCBJREJSZXF1ZXN0OjpjYW5TdXNwZW5kRm9yRG9jdW1lbnRTdXNwZW5zaW9u
KCkgY29uc3QKIGJvb2wgSURCUmVxdWVzdDo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKIHsK
ICAgICBBU1NFUlQoJm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSB8fCBtYXlC
ZUdDVGhyZWFkKCkpOwotICAgIHJldHVybiBtX2hhc1BlbmRpbmdBY3Rpdml0eTsKKyAgICByZXR1
cm4gIW1fY29udGV4dFN0b3BwZWQgJiYgbV9oYXNQZW5kaW5nQWN0aXZpdHk7CiB9CiAKIHZvaWQg
SURCUmVxdWVzdDo6c3RvcCgpCkBAIC0yODQsNyArMjg0LDcgQEAgdm9pZCBJREJSZXF1ZXN0Ojpj
YW5jZWxGb3JTdG9wKCkKIHZvaWQgSURCUmVxdWVzdDo6ZW5xdWV1ZUV2ZW50KFJlZjxFdmVudD4m
JiBldmVudCkKIHsKICAgICBBU1NFUlQoJm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJl
bnQoKSk7Ci0gICAgaWYgKCFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgfHwgbV9jb250ZXh0U3Rv
cHBlZCkKKyAgICBpZiAobV9jb250ZXh0U3RvcHBlZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
ZXZlbnQtPnNldFRhcmdldCh0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAppbmRleCA2MTIxNTg0M2ExMzI2NTkwNGI3M2Qz
MTBiZjRmM2ZmZWM5YmJhMDgwLi44Y2YwNjJiNTE0ZTFkNzQzYWM4MjFmYWRjOTYwMGZiMzRlYTFk
OGE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFu
c2FjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJh
bnNhY3Rpb24uY3BwCkBAIC01NTEsNyArNTUxLDcgQEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6bm90
aWZ5RGlkQWJvcnQoY29uc3QgSURCRXJyb3ImIGVycm9yKQogICAgIG1faWRiRXJyb3IgPSBlcnJv
cjsKICAgICBmaXJlT25BYm9ydCgpOwogCi0gICAgaWYgKGlzVmVyc2lvbkNoYW5nZSgpKSB7Cisg
ICAgaWYgKGlzVmVyc2lvbkNoYW5nZSgpICYmICFtX2NvbnRleHRTdG9wcGVkKSB7CiAgICAgICAg
IEFTU0VSVChtX29wZW5EQlJlcXVlc3QpOwogICAgICAgICBtX29wZW5EQlJlcXVlc3QtPmZpcmVF
cnJvckFmdGVyVmVyc2lvbkNoYW5nZUNvbXBsZXRpb24oKTsKICAgICB9CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggY2QxMmM4
ZDc3ZmFiY2I5ZDM5MmM4NjVjMzNjZTZlM2NhYzExZDU0Yy4uNmRkZWY1YzIzMzI0NTYwMjVjNTMy
MmZjOTBhOTg5MDkxNmM3MTRlZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisr
KyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDE4LTA4LTI3ICBZ
b3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBWYXJpb3VzIEluZGV4
REIgdGVzdHMgYWJhbmRvbiBkb2N1bWVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE4ODcyOAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNDM2NTEw
OTU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBo
dHRwL3Rlc3RzL0luZGV4ZWREQi9jb2xsZWN0LUlEQi1vYmplY3RzLmh0dHBzLWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9JbmRleGVkREIvY29sbGVjdC1JREItb2Jq
ZWN0cy5odHRwcy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL0luZGV4ZWREQi9y
ZXNvdXJjZXMvbXlpZGJmcmFtZS5odG06IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvSW5k
ZXhlZERCL3Jlc291cmNlcy9zdXBwb3J0LmpzOiBBZGRlZC4KKwogMjAxOC0wOC0yNyAgUGVyIEFy
bmUgVm9sbGFuICA8cHZvbGxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgTGF5b3V0IFRlc3QgZmFz
dC9ldmVudHMvZGJsY2xpY2stZXZlbnQtZ2V0TW9kaWZpZXJTdGF0ZS5odG1sIGlzIGZhaWxpbmcK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvSW5kZXhlZERCL2NvbGxlY3QtSURC
LW9iamVjdHMuaHR0cHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9JbmRl
eGVkREIvY29sbGVjdC1JREItb2JqZWN0cy5odHRwcy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZWMwMzU4N2QyYzNlNjkzNGVlN2JjOTBmYzk2NWQxYzdkZjQ0ZmRmYQotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvSW5kZXhlZERCL2NvbGxlY3QtSURCLW9iamVjdHMu
aHR0cHMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNCBAQAorCisKK1BBU1MgRW5zdXJpbmcgZnJh
bWUgZG9jdW1lbnQgZ2V0cyBjb2xsZWN0ZWQgYWZ0ZXIgYmVpbmcgc3RvcHBlZCBpbiB0aGUgbW1p
ZGRsZSBvZiBJREIgb3BlcmF0aW9ucyAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9JbmRleGVkREIvY29sbGVjdC1JREItb2JqZWN0cy5odHRwcy5odG1sIGIvTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9JbmRleGVkREIvY29sbGVjdC1JREItb2JqZWN0cy5odHRwcy5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjQ3ZGRhOGRlZTRjYjUzZmM2M2U1MTBkOWY1NTcwNTA0ZjhkNzMzYTEKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL0luZGV4ZWREQi9jb2xsZWN0LUlE
Qi1vYmplY3RzLmh0dHBzLmh0bWwKQEAgLTAsMCArMSw0NSBAQAorPCFET0NUWVBFIGh0bWw+Cis8
bWV0YSBjaGFyc2V0PSJ1dGYtOCI+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVz
cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9y
dC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorZnVuY3Rpb24gd2FpdEZvcihkdXJhdGlvbikKK3sK
KyAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwg
ZHVyYXRpb24pKTsKK30KKwordmFyIHJlc29sdmVDYWxsYmFjaywgcmVqZWN0Q2FsbGJhY2s7Cit2
YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsKKyAgICByZXNv
bHZlQ2FsbGJhY2sgPSByZXNvbHZlOworICAgIHJlamVjdENhbGxiYWNrID0gcmVqZWN0OworfSk7
CisKK2FzeW5jIGZ1bmN0aW9uIGRvbmUoKQoreworICAgIHRyeSB7CisgICAgICAgIGNvbnN0IGZy
YW1lSWRlbnRpZmllciA9IGludGVybmFscy5kb2N1bWVudElkZW50aWZpZXIoaWZyYW1lLmNvbnRl
bnREb2N1bWVudCk7CisgICAgICAgIGlmcmFtZS5zcmMgPSAibm9uLWV4aXN0ZW50LWZyYW1lIjsK
KyAgICAgICAgbGV0IGNvdW50ZXIgPSAwOworICAgICAgICB3aGlsZSAoKytjb3VudGVyIDwgMTAp
IHsKKyAgICAgICAgICAgIGlmICghaW50ZXJuYWxzLmlzRG9jdW1lbnRBbGl2ZShmcmFtZUlkZW50
aWZpZXIpKSB7CisgICAgICAgICAgICAgICAgcmVzb2x2ZUNhbGxiYWNrKCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHdpbmRvdy5HQ0Nv
bnRyb2xsZXIpCisgICAgICAgICAgICAgICAgR0NDb250cm9sbGVyLmNvbGxlY3QoKTsKKworICAg
ICAgICAgICAgYXdhaXQgd2FpdEZvcig1MCk7CisgICAgICAgIH0KKyAgICB9IGZpbmFsbHkgewor
ICAgICAgICByZWplY3RDYWxsYmFjaygiVGVzdCBmYWlsZWQiKTsKKyAgICB9Cit9CisKK3Byb21p
c2VfdGVzdCgodGVzdCkgPT4geworICAgIGlmICghd2luZG93LmludGVybmFscykKKyAgICAgICAg
cmVqZWN0Q2FsbGJhY2soIlRlc3QgcmVxdWlyZSBpbnRlcm5hbHMgQVBJIik7CisgICAgcmV0dXJu
IHByb21pc2U7Cit9LCAiRW5zdXJpbmcgZnJhbWUgZG9jdW1lbnQgZ2V0cyBjb2xsZWN0ZWQgYWZ0
ZXIgYmVpbmcgc3RvcHBlZCBpbiB0aGUgbW1pZGRsZSBvZiBJREIgb3BlcmF0aW9ucyIpOworCis8
L3NjcmlwdD4KKzxpZnJhbWUgc3JjPSJyZXNvdXJjZXMvbXlpZGJmcmFtZS5odG0iIGlkPSJpZnJh
bWUiPjwvaWZyYW1lPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9JbmRleGVk
REIvcmVzb3VyY2VzL215aWRiZnJhbWUuaHRtIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9JbmRl
eGVkREIvcmVzb3VyY2VzL215aWRiZnJhbWUuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY5MDdmNzI5N2FmOTYw
ZjYyYWZmMjE4NTU1OTExNzk2ZjRiZjAxZWEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL0luZGV4ZWREQi9yZXNvdXJjZXMvbXlpZGJmcmFtZS5odG0KQEAgLTAsMCAr
MSwyNiBAQAorPCFET0NUWVBFIGh0bWw+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3Rl
c3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzdXBwb3J0LmpzIj48L3Njcmlw
dD4KKworPHNjcmlwdD4KK3ZhciB0ID0gYXN5bmNfdGVzdCgpOworY3JlYXRlZGIodCkub251cGdy
YWRlbmVlZGVkID0gZnVuY3Rpb24oZSkgeworICAgIGUudGFyZ2V0LnJlc3VsdAorICAgICAgICAg
ICAgLmNyZWF0ZU9iamVjdFN0b3JlKCJzdG9yZSIpCisgICAgICAgICAgICAuYWRkKG5ldyBEYXRl
KCksIDEpOworCisgICAgZS50YXJnZXQub25zdWNjZXNzID0gdC5zdGVwX2Z1bmMoZnVuY3Rpb24o
ZSkgeworICAgICAgICBlLnRhcmdldC5yZXN1bHQKKyAgICAgICAgICAgICAgICAudHJhbnNhY3Rp
b24oInN0b3JlIikKKyAgICAgICAgICAgICAgICAub2JqZWN0U3RvcmUoInN0b3JlIikKKyAgICAg
ICAgICAgICAgICAuZ2V0KDEpCisgICAgICAgICAgICAgICAgLm9uc3VjY2VzcyA9IHQuc3RlcF9m
dW5jKGZ1bmN0aW9uKGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHQuZG9uZSgpOworICAgICAg
ICAgICAgcGFyZW50LmRvbmUoKTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9OworPC9zY3JpcHQ+
CisKKzxkaXYgaWQ9ImxvZyI+PC9kaXY+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL0luZGV4ZWREQi9yZXNvdXJjZXMvc3VwcG9ydC5qcyBiL0xheW91dFRlc3RzL2h0dHAvdGVz
dHMvSW5kZXhlZERCL3Jlc291cmNlcy9zdXBwb3J0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVlZGJkYWNiY2M3
ZDBjZjI3ZDBlMzMzMDE5OGI1NWQ1MDU0MDM0NWUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL0luZGV4ZWREQi9yZXNvdXJjZXMvc3VwcG9ydC5qcwpAQCAtMCwwICsx
LDE5NCBAQAordmFyIGRhdGFiYXNlTmFtZSA9ICJkYXRhYmFzZSI7Cit2YXIgZGF0YWJhc2VWZXJz
aW9uID0gMTsKKworLyogRGVsZXRlIGNyZWF0ZWQgZGF0YWJhc2VzCisgKgorICogR28gdGhyb3Vn
aCBlYWNoIGZpbmlzaGVkIHRlc3QsIHNlZSBpZiBpdCBoYXMgYW4gYXNzb2NpYXRlZCBkYXRhYmFz
ZS4gQ2xvc2UKKyAqIHRoYXQgYW5kIGRlbGV0ZSB0aGUgZGF0YWJhc2UuICovCithZGRfY29tcGxl
dGlvbl9jYWxsYmFjayhmdW5jdGlvbih0ZXN0cykKK3sKKyAgICBmb3IgKHZhciBpIGluIHRlc3Rz
KQorICAgIHsKKyAgICAgICAgaWYodGVzdHNbaV0uZGIpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHRlc3RzW2ldLmRiLmNsb3NlKCk7CisgICAgICAgICAgICBzZWxmLmluZGV4ZWREQi5kZWxldGVE
YXRhYmFzZSh0ZXN0c1tpXS5kYi5uYW1lKTsKKyAgICAgICAgfQorICAgIH0KK30pOworCitmdW5j
dGlvbiBmYWlsKHRlc3QsIGRlc2MpIHsKKyAgICByZXR1cm4gdGVzdC5zdGVwX2Z1bmMoZnVuY3Rp
b24oZSkgeworICAgICAgICBpZiAoZSAmJiBlLm1lc3NhZ2UgJiYgZS50YXJnZXQuZXJyb3IpCisg
ICAgICAgICAgICBhc3NlcnRfdW5yZWFjaGVkKGRlc2MgKyAiICgiICsgZS50YXJnZXQuZXJyb3Iu
bmFtZSArICI6ICIgKyBlLm1lc3NhZ2UgKyAiKSIpOworICAgICAgICBlbHNlIGlmIChlICYmIGUu
bWVzc2FnZSkKKyAgICAgICAgICAgIGFzc2VydF91bnJlYWNoZWQoZGVzYyArICIgKCIgKyBlLm1l
c3NhZ2UgKyAiKSIpOworICAgICAgICBlbHNlIGlmIChlICYmIGUudGFyZ2V0LnJlYWR5U3RhdGUg
PT09ICdkb25lJyAmJiBlLnRhcmdldC5lcnJvcikKKyAgICAgICAgICAgIGFzc2VydF91bnJlYWNo
ZWQoZGVzYyArICIgKCIgKyBlLnRhcmdldC5lcnJvci5uYW1lICsgIikiKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgYXNzZXJ0X3VucmVhY2hlZChkZXNjKTsKKyAgICB9KTsKK30KKworZnVu
Y3Rpb24gY3JlYXRlZGIodGVzdCwgZGJuYW1lLCB2ZXJzaW9uKQoreworICAgIHZhciBycV9vcGVu
ID0gY3JlYXRlZGJfZm9yX211bHRpcGxlX3Rlc3RzKGRibmFtZSwgdmVyc2lvbik7CisgICAgcmV0
dXJuIHJxX29wZW4uc2V0VGVzdCh0ZXN0KTsKK30KKworZnVuY3Rpb24gY3JlYXRlZGJfZm9yX211
bHRpcGxlX3Rlc3RzKGRibmFtZSwgdmVyc2lvbikgeworICAgIHZhciBycV9vcGVuLAorICAgICAg
ICBmYWtlX29wZW4gPSB7fSwKKyAgICAgICAgdGVzdCA9IG51bGwsCisgICAgICAgIGRibmFtZSA9
IChkYm5hbWUgPyBkYm5hbWUgOiAidGVzdGRiLSIgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKSArIE1h
dGgucmFuZG9tKCkgKTsKKworICAgIGlmICh2ZXJzaW9uKQorICAgICAgICBycV9vcGVuID0gc2Vs
Zi5pbmRleGVkREIub3BlbihkYm5hbWUsIHZlcnNpb24pOworICAgIGVsc2UKKyAgICAgICAgcnFf
b3BlbiA9IHNlbGYuaW5kZXhlZERCLm9wZW4oZGJuYW1lKTsKKworICAgIGZ1bmN0aW9uIGF1dG9f
ZmFpbChldnQsIGN1cnJlbnRfdGVzdCkgeworICAgICAgICAvKiBGYWlsIGhhbmRsZXJzLCBpZiB3
ZSBoYXZlbid0IHNldCBvbi93aGF0ZXZlci8sIGRvbid0CisgICAgICAgICAqIGV4cGVjdCB0byBn
ZXQgZXZlbnQgd2hhdGV2ZXIuICovCisgICAgICAgIHJxX29wZW4ubWFudWFsbHlfaGFuZGxlZCA9
IHt9OworCisgICAgICAgIHJxX29wZW4uYWRkRXZlbnRMaXN0ZW5lcihldnQsIGZ1bmN0aW9uKGUp
IHsKKyAgICAgICAgICAgIGlmIChjdXJyZW50X3Rlc3QgIT09IHRlc3QpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRlc3Quc3RlcChmdW5j
dGlvbigpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXJxX29wZW4ubWFudWFsbHlfaGFuZGxlZFtl
dnRdKSB7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydF91bnJlYWNoZWQoInVuZXhwZWN0ZWQg
b3Blbi4iICsgZXZ0ICsgIiBldmVudCIpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIGlmIChlLnRhcmdldC5yZXN1bHQgKyAnJyA9PSAnW29iamVjdCBJREJEYXRhYmFzZV0n
ICYmCisgICAgICAgICAgICAgICAgICAgICF0aGlzLmRiKSB7CisgICAgICAgICAgICAgICAgICB0
aGlzLmRiID0gZS50YXJnZXQucmVzdWx0OworCisgICAgICAgICAgICAgICAgICB0aGlzLmRiLm9u
ZXJyb3IgPSBmYWlsKHRlc3QsICd1bmV4cGVjdGVkIGRiLmVycm9yJyk7CisgICAgICAgICAgICAg
ICAgICB0aGlzLmRiLm9uYWJvcnQgPSBmYWlsKHRlc3QsICd1bmV4cGVjdGVkIGRiLmFib3J0Jyk7
CisgICAgICAgICAgICAgICAgICB0aGlzLmRiLm9udmVyc2lvbmNoYW5nZSA9CisgICAgICAgICAg
ICAgICAgICAgICAgZmFpbCh0ZXN0LCAndW5leHBlY3RlZCBkYi52ZXJzaW9uY2hhbmdlJyk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgICAgICBy
cV9vcGVuLl9fZGVmaW5lU2V0dGVyX18oIm9uIiArIGV2dCwgZnVuY3Rpb24oaCkgeworICAgICAg
ICAgICAgcnFfb3Blbi5tYW51YWxseV9oYW5kbGVkW2V2dF0gPSB0cnVlOworICAgICAgICAgICAg
aWYgKCFoKQorICAgICAgICAgICAgICAgIHJxX29wZW4uYWRkRXZlbnRMaXN0ZW5lcihldnQsIGZ1
bmN0aW9uKCkge30pOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJxX29wZW4u
YWRkRXZlbnRMaXN0ZW5lcihldnQsIHRlc3Quc3RlcF9mdW5jKGgpKTsKKyAgICAgICAgfSk7Cisg
ICAgfQorCisgICAgLy8gYWRkIGEgLnNldFRlc3QgbWV0aG9kIHRvIHRoZSBJREJPcGVuREJSZXF1
ZXN0IG9iamVjdAorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShycV9vcGVuLCAnc2V0VGVzdCcs
IHsKKyAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsCisgICAgICAgIHZhbHVlOiBmdW5jdGlvbih0
KSB7CisgICAgICAgICAgICB0ZXN0ID0gdDsKKworICAgICAgICAgICAgYXV0b19mYWlsKCJ1cGdy
YWRlbmVlZGVkIiwgdGVzdCk7CisgICAgICAgICAgICBhdXRvX2ZhaWwoInN1Y2Nlc3MiLCB0ZXN0
KTsKKyAgICAgICAgICAgIGF1dG9fZmFpbCgiYmxvY2tlZCIsIHRlc3QpOworICAgICAgICAgICAg
YXV0b19mYWlsKCJlcnJvciIsIHRlc3QpOworCisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAg
ICAgICAgfQorICAgIH0pOworCisgICAgcmV0dXJuIHJxX29wZW47Cit9CisKK2Z1bmN0aW9uIGFz
c2VydF9rZXlfZXF1YWxzKGFjdHVhbCwgZXhwZWN0ZWQsIGRlc2NyaXB0aW9uKSB7CisgIGFzc2Vy
dF9lcXVhbHMoaW5kZXhlZERCLmNtcChhY3R1YWwsIGV4cGVjdGVkKSwgMCwgZGVzY3JpcHRpb24p
OworfQorCitmdW5jdGlvbiBpbmRleGVkZGJfdGVzdCh1cGdyYWRlX2Z1bmMsIG9wZW5fZnVuYywg
ZGVzY3JpcHRpb24sIG9wdGlvbnMpIHsKKyAgYXN5bmNfdGVzdChmdW5jdGlvbih0KSB7CisgICAg
b3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe3VwZ3JhZGVfd2lsbF9hYm9ydDogZmFsc2V9LCBvcHRp
b25zKTsKKyAgICB2YXIgZGJuYW1lID0gbG9jYXRpb24gKyAnLScgKyB0Lm5hbWU7CisgICAgdmFy
IGRlbCA9IGluZGV4ZWREQi5kZWxldGVEYXRhYmFzZShkYm5hbWUpOworICAgIGRlbC5vbmVycm9y
ID0gdC51bnJlYWNoZWRfZnVuYygnZGVsZXRlRGF0YWJhc2Ugc2hvdWxkIHN1Y2NlZWQnKTsKKyAg
ICB2YXIgb3BlbiA9IGluZGV4ZWREQi5vcGVuKGRibmFtZSwgMSk7CisgICAgb3Blbi5vbnVwZ3Jh
ZGVuZWVkZWQgPSB0LnN0ZXBfZnVuYyhmdW5jdGlvbigpIHsKKyAgICAgIHZhciBkYiA9IG9wZW4u
cmVzdWx0OworICAgICAgdC5hZGRfY2xlYW51cChmdW5jdGlvbigpIHsKKyAgICAgICAgLy8gSWYg
b3BlbiBkaWRuJ3Qgc3VjY2VlZCBhbHJlYWR5LCBpZ25vcmUgdGhlIGVycm9yLgorICAgICAgICBv
cGVuLm9uZXJyb3IgPSBmdW5jdGlvbihlKSB7CisgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgp
OworICAgICAgICB9OworICAgICAgICBkYi5jbG9zZSgpOworICAgICAgICBpbmRleGVkREIuZGVs
ZXRlRGF0YWJhc2UoZGIubmFtZSk7CisgICAgICB9KTsKKyAgICAgIHZhciB0eCA9IG9wZW4udHJh
bnNhY3Rpb247CisgICAgICB1cGdyYWRlX2Z1bmModCwgZGIsIHR4LCBvcGVuKTsKKyAgICB9KTsK
KyAgICBpZiAob3B0aW9ucy51cGdyYWRlX3dpbGxfYWJvcnQpIHsKKyAgICAgIG9wZW4ub25zdWNj
ZXNzID0gdC51bnJlYWNoZWRfZnVuYygnb3BlbiBzaG91bGQgbm90IHN1Y2NlZWQnKTsKKyAgICB9
IGVsc2UgeworICAgICAgb3Blbi5vbmVycm9yID0gdC51bnJlYWNoZWRfZnVuYygnb3BlbiBzaG91
bGQgc3VjY2VlZCcpOworICAgICAgb3Blbi5vbnN1Y2Nlc3MgPSB0LnN0ZXBfZnVuYyhmdW5jdGlv
bigpIHsKKyAgICAgICAgdmFyIGRiID0gb3Blbi5yZXN1bHQ7CisgICAgICAgIGlmIChvcGVuX2Z1
bmMpCisgICAgICAgICAgb3Blbl9mdW5jKHQsIGRiLCBvcGVuKTsKKyAgICAgIH0pOworICAgIH0K
KyAgfSwgZGVzY3JpcHRpb24pOworfQorCisvLyBDYWxsIHdpdGggYSBUZXN0IGFuZCBhbiBhcnJh
eSBvZiBleHBlY3RlZCByZXN1bHRzIGluIG9yZGVyLiBSZXR1cm5zCisvLyBhIGZ1bmN0aW9uOyBj
YWxsIHRoZSBmdW5jdGlvbiB3aGVuIGEgcmVzdWx0IGFycml2ZXMgYW5kIHdoZW4gdGhlCisvLyBl
eHBlY3RlZCBudW1iZXIgYXBwZWFyIHRoZSBvcmRlciB3aWxsIGJlIGFzc2VydGVkIGFuZCB0ZXN0
CisvLyBjb21wbGV0ZWQuCitmdW5jdGlvbiBleHBlY3QodCwgZXhwZWN0ZWQpIHsKKyAgdmFyIHJl
c3VsdHMgPSBbXTsKKyAgcmV0dXJuIHJlc3VsdCA9PiB7CisgICAgcmVzdWx0cy5wdXNoKHJlc3Vs
dCk7CisgICAgaWYgKHJlc3VsdHMubGVuZ3RoID09PSBleHBlY3RlZC5sZW5ndGgpIHsKKyAgICAg
IGFzc2VydF9hcnJheV9lcXVhbHMocmVzdWx0cywgZXhwZWN0ZWQpOworICAgICAgdC5kb25lKCk7
CisgICAgfQorICB9OworfQorCisvLyBDaGVja3MgdG8gc2VlIGlmIHRoZSBwYXNzZWQgdHJhbnNh
Y3Rpb24gaXMgYWN0aXZlIChieSBtYWtpbmcKKy8vIHJlcXVlc3RzIGFnYWluc3QgdGhlIG5hbWVk
IHN0b3JlKS4KK2Z1bmN0aW9uIGlzX3RyYW5zYWN0aW9uX2FjdGl2ZSh0eCwgc3RvcmVfbmFtZSkg
eworICB0cnkgeworICAgIGNvbnN0IHJlcXVlc3QgPSB0eC5vYmplY3RTdG9yZShzdG9yZV9uYW1l
KS5nZXQoMCk7CisgICAgcmVxdWVzdC5vbmVycm9yID0gZSA9PiB7CisgICAgICBlLnByZXZlbnRE
ZWZhdWx0KCk7CisgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOworICAgIH07CisgICAgcmV0dXJu
IHRydWU7CisgIH0gY2F0Y2ggKGV4KSB7CisgICAgYXNzZXJ0X2VxdWFscyhleC5uYW1lLCAnVHJh
bnNhY3Rpb25JbmFjdGl2ZUVycm9yJywKKyAgICAgICAgICAgICAgICAgICdBY3RpdmUgY2hlY2sg
c2hvdWxkIGVpdGhlciBub3QgdGhyb3cgYW55dGhpbmcsIG9yIHRocm93ICcgKworICAgICAgICAg
ICAgICAgICAgJ1RyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcicpOworICAgIHJldHVybiBmYWxzZTsK
KyAgfQorfQorCisvLyBLZWVwIHRoZSBwYXNzZWQgdHJhbnNhY3Rpb24gYWxpdmUgaW5kZWZpbml0
ZWx5IChieSBtYWtpbmcgcmVxdWVzdHMKKy8vIGFnYWluc3QgdGhlIG5hbWVkIHN0b3JlKS4gUmV0
dXJucyBhIGZ1bmN0aW9uIHRvIHRvIGxldCB0aGUKKy8vIHRyYW5zYWN0aW9uIGZpbmlzaCwgYW5k
IGFzc2VydHMgdGhhdCB0aGUgdHJhbnNhY3Rpb24gaXMgbm90IHlldAorLy8gZmluaXNoZWQuCitm
dW5jdGlvbiBrZWVwX2FsaXZlKHR4LCBzdG9yZV9uYW1lKSB7CisgIGxldCBjb21wbGV0ZWQgPSBm
YWxzZTsKKyAgdHguYWRkRXZlbnRMaXN0ZW5lcignY29tcGxldGUnLCAoKSA9PiB7IGNvbXBsZXRl
ZCA9IHRydWU7IH0pOworCisgIGxldCBwaW4gPSB0cnVlOworCisgIGZ1bmN0aW9uIHNwaW4oKSB7
CisgICAgaWYgKCFwaW4pCisgICAgICByZXR1cm47CisgICAgdHgub2JqZWN0U3RvcmUoc3RvcmVf
bmFtZSkuZ2V0KDApLm9uc3VjY2VzcyA9IHNwaW47CisgIH0KKyAgc3BpbigpOworCisgIHJldHVy
biAoKSA9PiB7CisgICAgYXNzZXJ0X2ZhbHNlKGNvbXBsZXRlZCwgJ1RyYW5zYWN0aW9uIGNvbXBs
ZXRlZCB3aGlsZSBrZXB0IGFsaXZlJyk7CisgICAgcGluID0gZmFsc2U7CisgIH07Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>348226</attachid>
            <date>2018-08-27 15:59:45 -0700</date>
            <delta_ts>2018-08-27 16:55:57 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-188728-20180827155944.patch</filename>
            <type>text/plain</type>
            <size>15019</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM1MzkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjgwZjQ3MWUyYTJjOGQx
N2VlNGJmNDNlNTYzMzQ4YmRiODc1MjI3ZS4uMjkwNTQ0OGFjMWY5NWU1YjBhYTk3NWI4ZmRmNmYw
NTM3Njc3OTFkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDE4LTA4LTI3ICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBWYXJpb3VzIEluZGV4REIg
dGVzdHMgYWJhbmRvbiBkb2N1bWVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE4ODcyOAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNDM2NTEwOTU+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWxleCBDaHJpc3RlbnNlbi4KKworICAgICAgICBTb21l
IElEQiBvYmplY3RzIGltcGxlbWVudCBoYXNQZW5kaW5nQWN0aXZpdHkgYnV0IHRoZXJlIGFyZSBz
b21lIHBvc3NpYmlsaXRpZXMgdGhhdCB0aGV5IGNvbnRpbnVlIHJldHVybmluZyB0cnVlIGFmdGVy
IGJlaW5nIHN0b3BwZWQuCisgICAgICAgIFRoaXMgaXMgdGhlIGNhc2UgZm9yIHJlcXVlc3RzIHRo
YXQgZ2V0IHN0b3BwZWQgd2hpbGUgc3RpbGwgd2FpdGluZyBmb3Igc29tZSBwZW5kaW5nIGFjdGl2
aXR5LgorICAgICAgICBUaGlzIGlzIGFsc28gdGhlIGNhc2UgZm9yIHJlcXVlc3RzIHRoYXQgZW1p
dHMgdXBncmFkZW5lZWRlZCBvciBibG9ja2VkIGV2ZW50cy4KKworICAgICAgICBFbmZvcmNlIHRo
YXQgdGhlc2Ugb2JqZWN0cyByZXR1cm4gZmFsc2UgdG8gaGFzUGVuZGluZ0FjdGl2aXR5IG9uY2Ug
YmVpbmcgc3RvcHBlZC4KKyAgICAgICAgVGhpcyBlbnN1cmVzIHRoYXQgdGhleSBjYW4gYmUgZ2Fy
YmFnZSBjb2xsZWN0ZWQgb25jZSB0aGVpciBjb250ZXh0IGlzIHByZXBhcmluZyBmb3IgZGVzdHJ1
Y3Rpb24gbGlrZSBpbiBEb2N1bWVudDo6cHJlcGFyZUZvckRlc3RydWN0aW9uLgorCisgICAgICAg
IFRlc3Q6IGh0dHAvdGVzdHMvSW5kZXhlZERCL2NvbGxlY3QtSURCLW9iamVjdHMuaHR0cHMuaHRt
bAorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SURCSW5kZXg6Omhhc1BlbmRpbmdBY3Rpdml0eSBjb25zdCk6CisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SURCT2JqZWN0U3RvcmU6Omhhc1BlbmRpbmdBY3Rpdml0eSBjb25zdCk6CisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1
ZXN0OjpoYXNQZW5kaW5nQWN0aXZpdHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVx
dWVzdDo6ZW5xdWV1ZUV2ZW50KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFu
c2FjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6bm90aWZ5RGlk
QWJvcnQpOgorICAgICAgICBJbiBjYXNlIHRoZSBjb250ZXh0IGlzIHN0b3BwZWQsIElEQlRyYW5z
YWN0aW9uIHNob3VsZCBub3QgYXNrIElEQlJlcXVlc3QgdG8gZmlyZSBhbiBldmVudC4KKwogMjAx
OC0wOC0yNyAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAg
ICBbQ29jb2FdIEV4Y2VwdGlvbiAoZmlsZVR5cGUgJ2R5bi5hZ3E4dScgaXMgbm90IGEgdmFsaWQg
VVRJKSByYWlzZWQgd2hlbiBkcmFnZ2luZyBhbiBhdHRhY2htZW50IHdob3NlIGZpbGUgd3JhcHBl
ciBpcyBhIGRpcmVjdG9yeQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCSW5kZXguY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
SW5kZXguY3BwCmluZGV4IDE5MTllNDY5NDE4YzA1YzhhZTc3MjNlZDY2MTExZDlhM2U0NTUxNmIu
LjlkMWY4MzkzNzczN2FlODAxMTBiMDIwZWE5OTgzYjY4ZDgwM2Y2N2YgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5jcHAKQEAgLTY5LDcgKzY5LDcgQEAg
Ym9vbCBJREJJbmRleDo6Y2FuU3VzcGVuZEZvckRvY3VtZW50U3VzcGVuc2lvbigpIGNvbnN0CiAK
IGJvb2wgSURCSW5kZXg6Omhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
ICFtX29iamVjdFN0b3JlLnRyYW5zYWN0aW9uKCkuaXNGaW5pc2hlZCgpOworICAgIHJldHVybiBt
X29iamVjdFN0b3JlLnRyYW5zYWN0aW9uKCkuaGFzUGVuZGluZ0FjdGl2aXR5KCk7CiB9CiAKIGNv
bnN0IFN0cmluZyYgSURCSW5kZXg6Om5hbWUoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCmluZGV4IDNjNTBlYmNkNjli
N2EzYzNmYjg0YTZhM2E0ZDMxNWFkNjJkNDM2MTIuLmYwOGM5ZTUyODUzZjMwYjA4NzhlZWZmZDBk
YjVkMTcwMmYyMzFmMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQk9iamVjdFN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKQEAgLTgyLDcgKzgyLDcgQEAgYm9vbCBJREJPYmplY3RT
dG9yZTo6Y2FuU3VzcGVuZEZvckRvY3VtZW50U3VzcGVuc2lvbigpIGNvbnN0CiAKIGJvb2wgSURC
T2JqZWN0U3RvcmU6Omhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICFt
X3RyYW5zYWN0aW9uLmlzRmluaXNoZWQoKTsKKyAgICByZXR1cm4gbV90cmFuc2FjdGlvbi5oYXNQ
ZW5kaW5nQWN0aXZpdHkoKTsKIH0KIAogY29uc3QgU3RyaW5nJiBJREJPYmplY3RTdG9yZTo6bmFt
ZSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVl
c3QuY3BwCmluZGV4IDM1OTMyODYwYTU3ZWY4ZDYyYWZkMTUyMzc3MDhkYWY1MGQ1MzA2NjIuLjZm
NWNlMGU5NzI2NTNmNjU3M2FkNWRiNzZhNGZjY2Q0OWYyMmRhOWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwCkBAIC0yNjEsNyArMjYxLDcg
QEAgYm9vbCBJREJSZXF1ZXN0OjpjYW5TdXNwZW5kRm9yRG9jdW1lbnRTdXNwZW5zaW9uKCkgY29u
c3QKIGJvb2wgSURCUmVxdWVzdDo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKIHsKICAgICBB
U1NFUlQoJm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSB8fCBtYXlCZUdDVGhy
ZWFkKCkpOwotICAgIHJldHVybiBtX2hhc1BlbmRpbmdBY3Rpdml0eTsKKyAgICByZXR1cm4gIW1f
Y29udGV4dFN0b3BwZWQgJiYgbV9oYXNQZW5kaW5nQWN0aXZpdHk7CiB9CiAKIHZvaWQgSURCUmVx
dWVzdDo6c3RvcCgpCkBAIC0yODQsNyArMjg0LDcgQEAgdm9pZCBJREJSZXF1ZXN0OjpjYW5jZWxG
b3JTdG9wKCkKIHZvaWQgSURCUmVxdWVzdDo6ZW5xdWV1ZUV2ZW50KFJlZjxFdmVudD4mJiBldmVu
dCkKIHsKICAgICBBU1NFUlQoJm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7
Ci0gICAgaWYgKCFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgfHwgbV9jb250ZXh0U3RvcHBlZCkK
KyAgICBpZiAobV9jb250ZXh0U3RvcHBlZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgZXZlbnQt
PnNldFRhcmdldCh0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAppbmRleCA2MTIxNTg0M2ExMzI2NTkwNGI3M2QzMTBiZjRm
M2ZmZWM5YmJhMDgwLi44Y2YwNjJiNTE0ZTFkNzQzYWM4MjFmYWRjOTYwMGZiMzRlYTFkOGE3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlv
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rp
b24uY3BwCkBAIC01NTEsNyArNTUxLDcgQEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6bm90aWZ5RGlk
QWJvcnQoY29uc3QgSURCRXJyb3ImIGVycm9yKQogICAgIG1faWRiRXJyb3IgPSBlcnJvcjsKICAg
ICBmaXJlT25BYm9ydCgpOwogCi0gICAgaWYgKGlzVmVyc2lvbkNoYW5nZSgpKSB7CisgICAgaWYg
KGlzVmVyc2lvbkNoYW5nZSgpICYmICFtX2NvbnRleHRTdG9wcGVkKSB7CiAgICAgICAgIEFTU0VS
VChtX29wZW5EQlJlcXVlc3QpOwogICAgICAgICBtX29wZW5EQlJlcXVlc3QtPmZpcmVFcnJvckFm
dGVyVmVyc2lvbkNoYW5nZUNvbXBsZXRpb24oKTsKICAgICB9CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggY2M0YWRlZTkyYjk5
MDMyMDdkYjQ0YWI3ZmYwNjRkMTcxMDg3NDJhMC4uNGZlMzQ3MGRjMzY1MDkyODU3Mjc0NWE3N2Y0
ZjhhYzE0NmIyZjc3NCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDE4LTA4LTI3ICBZb3Vlbm4g
RmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBWYXJpb3VzIEluZGV4REIgdGVz
dHMgYWJhbmRvbiBkb2N1bWVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE4ODcyOAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNDM2NTEwOTU+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgQWxleCBDaHJpc3RlbnNlbi4KKworICAgICAgICAqIGh0dHAv
dGVzdHMvSW5kZXhlZERCL2NvbGxlY3QtSURCLW9iamVjdHMuaHR0cHMtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL0luZGV4ZWREQi9jb2xsZWN0LUlEQi1vYmplY3Rz
Lmh0dHBzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvSW5kZXhlZERCL3Jlc291
cmNlcy9teWlkYmZyYW1lLmh0bTogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9JbmRleGVk
REIvcmVzb3VyY2VzL3N1cHBvcnQuanM6IEFkZGVkLgorCiAyMDE4LTA4LTI3ICBBbmR5IEVzdGVz
ICA8YWVzdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBbUGF5bWVudCBSZXF1ZXN0XSBVcGRhdGUg
cGF5bWVudC1yZXF1ZXN0IHdlYiBwbGF0Zm9ybSB0ZXN0cwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9JbmRleGVkREIvY29sbGVjdC1JREItb2JqZWN0cy5odHRwcy1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL0luZGV4ZWREQi9jb2xsZWN0LUlEQi1vYmpl
Y3RzLmh0dHBzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZTEwMDFlYzNiMmZjNmFlY2Q3Y2E4
NmZlM2Q5OTZiOTVjOTJmMThiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9JbmRleGVkREIvY29sbGVjdC1JREItb2JqZWN0cy5odHRwcy1leHBlY3RlZC50eHQKQEAg
LTAsMCArMSw0IEBACisKKworUEFTUyBFbnN1cmluZyBmcmFtZSBkb2N1bWVudCBnZXRzIGNvbGxl
Y3RlZCBhZnRlciBiZWluZyBzdG9wcGVkIGluIHRoZSBtaWRkbGUgb2YgSURCIG9wZXJhdGlvbnMg
CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvSW5kZXhlZERCL2NvbGxlY3Qt
SURCLW9iamVjdHMuaHR0cHMuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvSW5kZXhlZERC
L2NvbGxlY3QtSURCLW9iamVjdHMuaHR0cHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMTQyZjI2NDUwZjhm
ZGVlNWVjZDVhY2MyZmM0ODI5YjkyZGVjYTczCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9JbmRleGVkREIvY29sbGVjdC1JREItb2JqZWN0cy5odHRwcy5odG1sCkBA
IC0wLDAgKzEsNDUgQEAKKzwhRE9DVFlQRSBodG1sPgorPG1ldGEgY2hhcnNldD0idXRmLTgiPgor
PHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlw
dD4KK2Z1bmN0aW9uIHdhaXRGb3IoZHVyYXRpb24pCit7CisgICAgcmV0dXJuIG5ldyBQcm9taXNl
KChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIGR1cmF0aW9uKSk7Cit9CisKK3ZhciBy
ZXNvbHZlQ2FsbGJhY2ssIHJlamVjdENhbGxiYWNrOwordmFyIHByb21pc2UgPSBuZXcgUHJvbWlz
ZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CisgICAgcmVzb2x2ZUNhbGxiYWNrID0gcmVzb2x2ZTsK
KyAgICByZWplY3RDYWxsYmFjayA9IHJlamVjdDsKK30pOworCithc3luYyBmdW5jdGlvbiBkb25l
KCkKK3sKKyAgICB0cnkgeworICAgICAgICBjb25zdCBmcmFtZUlkZW50aWZpZXIgPSBpbnRlcm5h
bHMuZG9jdW1lbnRJZGVudGlmaWVyKGlmcmFtZS5jb250ZW50RG9jdW1lbnQpOworICAgICAgICBp
ZnJhbWUuc3JjID0gIm5vbi1leGlzdGVudC1mcmFtZSI7CisgICAgICAgIGxldCBjb3VudGVyID0g
MDsKKyAgICAgICAgd2hpbGUgKCsrY291bnRlciA8IDEwKSB7CisgICAgICAgICAgICBpZiAoIWlu
dGVybmFscy5pc0RvY3VtZW50QWxpdmUoZnJhbWVJZGVudGlmaWVyKSkgeworICAgICAgICAgICAg
ICAgIHJlc29sdmVDYWxsYmFjaygpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmICh3aW5kb3cuR0NDb250cm9sbGVyKQorICAgICAgICAgICAg
ICAgIEdDQ29udHJvbGxlci5jb2xsZWN0KCk7CisKKyAgICAgICAgICAgIGF3YWl0IHdhaXRGb3Io
NTApOworICAgICAgICB9CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgcmVqZWN0Q2FsbGJhY2so
IlRlc3QgZmFpbGVkIik7CisgICAgfQorfQorCitwcm9taXNlX3Rlc3QoKHRlc3QpID0+IHsKKyAg
ICBpZiAoIXdpbmRvdy5pbnRlcm5hbHMpCisgICAgICAgIHJlamVjdENhbGxiYWNrKCJUZXN0IHJl
cXVpcmUgaW50ZXJuYWxzIEFQSSIpOworICAgIHJldHVybiBwcm9taXNlOworfSwgIkVuc3VyaW5n
IGZyYW1lIGRvY3VtZW50IGdldHMgY29sbGVjdGVkIGFmdGVyIGJlaW5nIHN0b3BwZWQgaW4gdGhl
IG1pZGRsZSBvZiBJREIgb3BlcmF0aW9ucyIpOworCis8L3NjcmlwdD4KKzxpZnJhbWUgc3JjPSJy
ZXNvdXJjZXMvbXlpZGJmcmFtZS5odG0iIGlkPSJpZnJhbWUiPjwvaWZyYW1lPgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9JbmRleGVkREIvcmVzb3VyY2VzL215aWRiZnJhbWUu
aHRtIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9JbmRleGVkREIvcmVzb3VyY2VzL215aWRiZnJh
bWUuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmY5MDdmNzI5N2FmOTYwZjYyYWZmMjE4NTU1OTExNzk2ZjRiZjAx
ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL0luZGV4ZWREQi9y
ZXNvdXJjZXMvbXlpZGJmcmFtZS5odG0KQEAgLTAsMCArMSwyNiBAQAorPCFET0NUWVBFIGh0bWw+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSJzdXBwb3J0LmpzIj48L3NjcmlwdD4KKworPHNjcmlwdD4KK3ZhciB0ID0g
YXN5bmNfdGVzdCgpOworY3JlYXRlZGIodCkub251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24oZSkg
eworICAgIGUudGFyZ2V0LnJlc3VsdAorICAgICAgICAgICAgLmNyZWF0ZU9iamVjdFN0b3JlKCJz
dG9yZSIpCisgICAgICAgICAgICAuYWRkKG5ldyBEYXRlKCksIDEpOworCisgICAgZS50YXJnZXQu
b25zdWNjZXNzID0gdC5zdGVwX2Z1bmMoZnVuY3Rpb24oZSkgeworICAgICAgICBlLnRhcmdldC5y
ZXN1bHQKKyAgICAgICAgICAgICAgICAudHJhbnNhY3Rpb24oInN0b3JlIikKKyAgICAgICAgICAg
ICAgICAub2JqZWN0U3RvcmUoInN0b3JlIikKKyAgICAgICAgICAgICAgICAuZ2V0KDEpCisgICAg
ICAgICAgICAgICAgLm9uc3VjY2VzcyA9IHQuc3RlcF9mdW5jKGZ1bmN0aW9uKGUpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHQuZG9uZSgpOworICAgICAgICAgICAgcGFyZW50LmRvbmUoKTsKKyAg
ICAgICAgfSk7CisgICAgfSk7Cit9OworPC9zY3JpcHQ+CisKKzxkaXYgaWQ9ImxvZyI+PC9kaXY+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL0luZGV4ZWREQi9yZXNvdXJjZXMv
c3VwcG9ydC5qcyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvSW5kZXhlZERCL3Jlc291cmNlcy9z
dXBwb3J0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVlZGJkYWNiY2M3ZDBjZjI3ZDBlMzMzMDE5OGI1NWQ1MDU0
MDM0NWUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL0luZGV4ZWRE
Qi9yZXNvdXJjZXMvc3VwcG9ydC5qcwpAQCAtMCwwICsxLDE5NCBAQAordmFyIGRhdGFiYXNlTmFt
ZSA9ICJkYXRhYmFzZSI7Cit2YXIgZGF0YWJhc2VWZXJzaW9uID0gMTsKKworLyogRGVsZXRlIGNy
ZWF0ZWQgZGF0YWJhc2VzCisgKgorICogR28gdGhyb3VnaCBlYWNoIGZpbmlzaGVkIHRlc3QsIHNl
ZSBpZiBpdCBoYXMgYW4gYXNzb2NpYXRlZCBkYXRhYmFzZS4gQ2xvc2UKKyAqIHRoYXQgYW5kIGRl
bGV0ZSB0aGUgZGF0YWJhc2UuICovCithZGRfY29tcGxldGlvbl9jYWxsYmFjayhmdW5jdGlvbih0
ZXN0cykKK3sKKyAgICBmb3IgKHZhciBpIGluIHRlc3RzKQorICAgIHsKKyAgICAgICAgaWYodGVz
dHNbaV0uZGIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRlc3RzW2ldLmRiLmNsb3NlKCk7Cisg
ICAgICAgICAgICBzZWxmLmluZGV4ZWREQi5kZWxldGVEYXRhYmFzZSh0ZXN0c1tpXS5kYi5uYW1l
KTsKKyAgICAgICAgfQorICAgIH0KK30pOworCitmdW5jdGlvbiBmYWlsKHRlc3QsIGRlc2MpIHsK
KyAgICByZXR1cm4gdGVzdC5zdGVwX2Z1bmMoZnVuY3Rpb24oZSkgeworICAgICAgICBpZiAoZSAm
JiBlLm1lc3NhZ2UgJiYgZS50YXJnZXQuZXJyb3IpCisgICAgICAgICAgICBhc3NlcnRfdW5yZWFj
aGVkKGRlc2MgKyAiICgiICsgZS50YXJnZXQuZXJyb3IubmFtZSArICI6ICIgKyBlLm1lc3NhZ2Ug
KyAiKSIpOworICAgICAgICBlbHNlIGlmIChlICYmIGUubWVzc2FnZSkKKyAgICAgICAgICAgIGFz
c2VydF91bnJlYWNoZWQoZGVzYyArICIgKCIgKyBlLm1lc3NhZ2UgKyAiKSIpOworICAgICAgICBl
bHNlIGlmIChlICYmIGUudGFyZ2V0LnJlYWR5U3RhdGUgPT09ICdkb25lJyAmJiBlLnRhcmdldC5l
cnJvcikKKyAgICAgICAgICAgIGFzc2VydF91bnJlYWNoZWQoZGVzYyArICIgKCIgKyBlLnRhcmdl
dC5lcnJvci5uYW1lICsgIikiKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYXNzZXJ0X3Vu
cmVhY2hlZChkZXNjKTsKKyAgICB9KTsKK30KKworZnVuY3Rpb24gY3JlYXRlZGIodGVzdCwgZGJu
YW1lLCB2ZXJzaW9uKQoreworICAgIHZhciBycV9vcGVuID0gY3JlYXRlZGJfZm9yX211bHRpcGxl
X3Rlc3RzKGRibmFtZSwgdmVyc2lvbik7CisgICAgcmV0dXJuIHJxX29wZW4uc2V0VGVzdCh0ZXN0
KTsKK30KKworZnVuY3Rpb24gY3JlYXRlZGJfZm9yX211bHRpcGxlX3Rlc3RzKGRibmFtZSwgdmVy
c2lvbikgeworICAgIHZhciBycV9vcGVuLAorICAgICAgICBmYWtlX29wZW4gPSB7fSwKKyAgICAg
ICAgdGVzdCA9IG51bGwsCisgICAgICAgIGRibmFtZSA9IChkYm5hbWUgPyBkYm5hbWUgOiAidGVz
dGRiLSIgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKSArIE1hdGgucmFuZG9tKCkgKTsKKworICAgIGlm
ICh2ZXJzaW9uKQorICAgICAgICBycV9vcGVuID0gc2VsZi5pbmRleGVkREIub3BlbihkYm5hbWUs
IHZlcnNpb24pOworICAgIGVsc2UKKyAgICAgICAgcnFfb3BlbiA9IHNlbGYuaW5kZXhlZERCLm9w
ZW4oZGJuYW1lKTsKKworICAgIGZ1bmN0aW9uIGF1dG9fZmFpbChldnQsIGN1cnJlbnRfdGVzdCkg
eworICAgICAgICAvKiBGYWlsIGhhbmRsZXJzLCBpZiB3ZSBoYXZlbid0IHNldCBvbi93aGF0ZXZl
ci8sIGRvbid0CisgICAgICAgICAqIGV4cGVjdCB0byBnZXQgZXZlbnQgd2hhdGV2ZXIuICovCisg
ICAgICAgIHJxX29wZW4ubWFudWFsbHlfaGFuZGxlZCA9IHt9OworCisgICAgICAgIHJxX29wZW4u
YWRkRXZlbnRMaXN0ZW5lcihldnQsIGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgICAgIGlmIChjdXJy
ZW50X3Rlc3QgIT09IHRlc3QpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHRlc3Quc3RlcChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoIXJxX29wZW4ubWFudWFsbHlfaGFuZGxlZFtldnRdKSB7CisgICAgICAgICAgICAgICAg
ICAgIGFzc2VydF91bnJlYWNoZWQoInVuZXhwZWN0ZWQgb3Blbi4iICsgZXZ0ICsgIiBldmVudCIp
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChlLnRhcmdldC5yZXN1
bHQgKyAnJyA9PSAnW29iamVjdCBJREJEYXRhYmFzZV0nICYmCisgICAgICAgICAgICAgICAgICAg
ICF0aGlzLmRiKSB7CisgICAgICAgICAgICAgICAgICB0aGlzLmRiID0gZS50YXJnZXQucmVzdWx0
OworCisgICAgICAgICAgICAgICAgICB0aGlzLmRiLm9uZXJyb3IgPSBmYWlsKHRlc3QsICd1bmV4
cGVjdGVkIGRiLmVycm9yJyk7CisgICAgICAgICAgICAgICAgICB0aGlzLmRiLm9uYWJvcnQgPSBm
YWlsKHRlc3QsICd1bmV4cGVjdGVkIGRiLmFib3J0Jyk7CisgICAgICAgICAgICAgICAgICB0aGlz
LmRiLm9udmVyc2lvbmNoYW5nZSA9CisgICAgICAgICAgICAgICAgICAgICAgZmFpbCh0ZXN0LCAn
dW5leHBlY3RlZCBkYi52ZXJzaW9uY2hhbmdlJyk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfSk7CisgICAgICAgIH0pOworICAgICAgICBycV9vcGVuLl9fZGVmaW5lU2V0dGVyX18o
Im9uIiArIGV2dCwgZnVuY3Rpb24oaCkgeworICAgICAgICAgICAgcnFfb3Blbi5tYW51YWxseV9o
YW5kbGVkW2V2dF0gPSB0cnVlOworICAgICAgICAgICAgaWYgKCFoKQorICAgICAgICAgICAgICAg
IHJxX29wZW4uYWRkRXZlbnRMaXN0ZW5lcihldnQsIGZ1bmN0aW9uKCkge30pOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIHJxX29wZW4uYWRkRXZlbnRMaXN0ZW5lcihldnQsIHRl
c3Quc3RlcF9mdW5jKGgpKTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgLy8gYWRkIGEgLnNl
dFRlc3QgbWV0aG9kIHRvIHRoZSBJREJPcGVuREJSZXF1ZXN0IG9iamVjdAorICAgIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShycV9vcGVuLCAnc2V0VGVzdCcsIHsKKyAgICAgICAgZW51bWVyYWJsZTog
ZmFsc2UsCisgICAgICAgIHZhbHVlOiBmdW5jdGlvbih0KSB7CisgICAgICAgICAgICB0ZXN0ID0g
dDsKKworICAgICAgICAgICAgYXV0b19mYWlsKCJ1cGdyYWRlbmVlZGVkIiwgdGVzdCk7CisgICAg
ICAgICAgICBhdXRvX2ZhaWwoInN1Y2Nlc3MiLCB0ZXN0KTsKKyAgICAgICAgICAgIGF1dG9fZmFp
bCgiYmxvY2tlZCIsIHRlc3QpOworICAgICAgICAgICAgYXV0b19mYWlsKCJlcnJvciIsIHRlc3Qp
OworCisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorICAgIH0pOworCisgICAg
cmV0dXJuIHJxX29wZW47Cit9CisKK2Z1bmN0aW9uIGFzc2VydF9rZXlfZXF1YWxzKGFjdHVhbCwg
ZXhwZWN0ZWQsIGRlc2NyaXB0aW9uKSB7CisgIGFzc2VydF9lcXVhbHMoaW5kZXhlZERCLmNtcChh
Y3R1YWwsIGV4cGVjdGVkKSwgMCwgZGVzY3JpcHRpb24pOworfQorCitmdW5jdGlvbiBpbmRleGVk
ZGJfdGVzdCh1cGdyYWRlX2Z1bmMsIG9wZW5fZnVuYywgZGVzY3JpcHRpb24sIG9wdGlvbnMpIHsK
KyAgYXN5bmNfdGVzdChmdW5jdGlvbih0KSB7CisgICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24o
e3VwZ3JhZGVfd2lsbF9hYm9ydDogZmFsc2V9LCBvcHRpb25zKTsKKyAgICB2YXIgZGJuYW1lID0g
bG9jYXRpb24gKyAnLScgKyB0Lm5hbWU7CisgICAgdmFyIGRlbCA9IGluZGV4ZWREQi5kZWxldGVE
YXRhYmFzZShkYm5hbWUpOworICAgIGRlbC5vbmVycm9yID0gdC51bnJlYWNoZWRfZnVuYygnZGVs
ZXRlRGF0YWJhc2Ugc2hvdWxkIHN1Y2NlZWQnKTsKKyAgICB2YXIgb3BlbiA9IGluZGV4ZWREQi5v
cGVuKGRibmFtZSwgMSk7CisgICAgb3Blbi5vbnVwZ3JhZGVuZWVkZWQgPSB0LnN0ZXBfZnVuYyhm
dW5jdGlvbigpIHsKKyAgICAgIHZhciBkYiA9IG9wZW4ucmVzdWx0OworICAgICAgdC5hZGRfY2xl
YW51cChmdW5jdGlvbigpIHsKKyAgICAgICAgLy8gSWYgb3BlbiBkaWRuJ3Qgc3VjY2VlZCBhbHJl
YWR5LCBpZ25vcmUgdGhlIGVycm9yLgorICAgICAgICBvcGVuLm9uZXJyb3IgPSBmdW5jdGlvbihl
KSB7CisgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICB9OworICAgICAgICBk
Yi5jbG9zZSgpOworICAgICAgICBpbmRleGVkREIuZGVsZXRlRGF0YWJhc2UoZGIubmFtZSk7Cisg
ICAgICB9KTsKKyAgICAgIHZhciB0eCA9IG9wZW4udHJhbnNhY3Rpb247CisgICAgICB1cGdyYWRl
X2Z1bmModCwgZGIsIHR4LCBvcGVuKTsKKyAgICB9KTsKKyAgICBpZiAob3B0aW9ucy51cGdyYWRl
X3dpbGxfYWJvcnQpIHsKKyAgICAgIG9wZW4ub25zdWNjZXNzID0gdC51bnJlYWNoZWRfZnVuYygn
b3BlbiBzaG91bGQgbm90IHN1Y2NlZWQnKTsKKyAgICB9IGVsc2UgeworICAgICAgb3Blbi5vbmVy
cm9yID0gdC51bnJlYWNoZWRfZnVuYygnb3BlbiBzaG91bGQgc3VjY2VlZCcpOworICAgICAgb3Bl
bi5vbnN1Y2Nlc3MgPSB0LnN0ZXBfZnVuYyhmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGRiID0g
b3Blbi5yZXN1bHQ7CisgICAgICAgIGlmIChvcGVuX2Z1bmMpCisgICAgICAgICAgb3Blbl9mdW5j
KHQsIGRiLCBvcGVuKTsKKyAgICAgIH0pOworICAgIH0KKyAgfSwgZGVzY3JpcHRpb24pOworfQor
CisvLyBDYWxsIHdpdGggYSBUZXN0IGFuZCBhbiBhcnJheSBvZiBleHBlY3RlZCByZXN1bHRzIGlu
IG9yZGVyLiBSZXR1cm5zCisvLyBhIGZ1bmN0aW9uOyBjYWxsIHRoZSBmdW5jdGlvbiB3aGVuIGEg
cmVzdWx0IGFycml2ZXMgYW5kIHdoZW4gdGhlCisvLyBleHBlY3RlZCBudW1iZXIgYXBwZWFyIHRo
ZSBvcmRlciB3aWxsIGJlIGFzc2VydGVkIGFuZCB0ZXN0CisvLyBjb21wbGV0ZWQuCitmdW5jdGlv
biBleHBlY3QodCwgZXhwZWN0ZWQpIHsKKyAgdmFyIHJlc3VsdHMgPSBbXTsKKyAgcmV0dXJuIHJl
c3VsdCA9PiB7CisgICAgcmVzdWx0cy5wdXNoKHJlc3VsdCk7CisgICAgaWYgKHJlc3VsdHMubGVu
Z3RoID09PSBleHBlY3RlZC5sZW5ndGgpIHsKKyAgICAgIGFzc2VydF9hcnJheV9lcXVhbHMocmVz
dWx0cywgZXhwZWN0ZWQpOworICAgICAgdC5kb25lKCk7CisgICAgfQorICB9OworfQorCisvLyBD
aGVja3MgdG8gc2VlIGlmIHRoZSBwYXNzZWQgdHJhbnNhY3Rpb24gaXMgYWN0aXZlIChieSBtYWtp
bmcKKy8vIHJlcXVlc3RzIGFnYWluc3QgdGhlIG5hbWVkIHN0b3JlKS4KK2Z1bmN0aW9uIGlzX3Ry
YW5zYWN0aW9uX2FjdGl2ZSh0eCwgc3RvcmVfbmFtZSkgeworICB0cnkgeworICAgIGNvbnN0IHJl
cXVlc3QgPSB0eC5vYmplY3RTdG9yZShzdG9yZV9uYW1lKS5nZXQoMCk7CisgICAgcmVxdWVzdC5v
bmVycm9yID0gZSA9PiB7CisgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CisgICAgICBlLnN0b3BQ
cm9wYWdhdGlvbigpOworICAgIH07CisgICAgcmV0dXJuIHRydWU7CisgIH0gY2F0Y2ggKGV4KSB7
CisgICAgYXNzZXJ0X2VxdWFscyhleC5uYW1lLCAnVHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yJywK
KyAgICAgICAgICAgICAgICAgICdBY3RpdmUgY2hlY2sgc2hvdWxkIGVpdGhlciBub3QgdGhyb3cg
YW55dGhpbmcsIG9yIHRocm93ICcgKworICAgICAgICAgICAgICAgICAgJ1RyYW5zYWN0aW9uSW5h
Y3RpdmVFcnJvcicpOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorfQorCisvLyBLZWVwIHRoZSBw
YXNzZWQgdHJhbnNhY3Rpb24gYWxpdmUgaW5kZWZpbml0ZWx5IChieSBtYWtpbmcgcmVxdWVzdHMK
Ky8vIGFnYWluc3QgdGhlIG5hbWVkIHN0b3JlKS4gUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHRvIGxl
dCB0aGUKKy8vIHRyYW5zYWN0aW9uIGZpbmlzaCwgYW5kIGFzc2VydHMgdGhhdCB0aGUgdHJhbnNh
Y3Rpb24gaXMgbm90IHlldAorLy8gZmluaXNoZWQuCitmdW5jdGlvbiBrZWVwX2FsaXZlKHR4LCBz
dG9yZV9uYW1lKSB7CisgIGxldCBjb21wbGV0ZWQgPSBmYWxzZTsKKyAgdHguYWRkRXZlbnRMaXN0
ZW5lcignY29tcGxldGUnLCAoKSA9PiB7IGNvbXBsZXRlZCA9IHRydWU7IH0pOworCisgIGxldCBw
aW4gPSB0cnVlOworCisgIGZ1bmN0aW9uIHNwaW4oKSB7CisgICAgaWYgKCFwaW4pCisgICAgICBy
ZXR1cm47CisgICAgdHgub2JqZWN0U3RvcmUoc3RvcmVfbmFtZSkuZ2V0KDApLm9uc3VjY2VzcyA9
IHNwaW47CisgIH0KKyAgc3BpbigpOworCisgIHJldHVybiAoKSA9PiB7CisgICAgYXNzZXJ0X2Zh
bHNlKGNvbXBsZXRlZCwgJ1RyYW5zYWN0aW9uIGNvbXBsZXRlZCB3aGlsZSBrZXB0IGFsaXZlJyk7
CisgICAgcGluID0gZmFsc2U7CisgIH07Cit9Cg==
</data>
<flag name="commit-queue"
          id="365902"
          type_id="3"
          status="+"
          setter="youennf"
    />
          </attachment>
      

    </bug>

</bugzilla>