<?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>48266</bug_id>
          
          <creation_ts>2010-10-25 14:28:13 -0700</creation_ts>
          <short_desc>Fix IndexedDB crashes</short_desc>
          <delta_ts>2010-10-26 10:04:27 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>48067</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jeremy Orlow">jorlow</reporter>
          <assigned_to name="Jeremy Orlow">jorlow</assigned_to>
          <cc>andreip</cc>
    
    <cc>hans</cc>
    
    <cc>steveblock</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>299106</commentid>
    <comment_count>0</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-10-25 14:28:13 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299392</commentid>
    <comment_count>1</comment_count>
      <attachid>71866</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-10-26 05:17:21 -0700</bug_when>
    <thetext>Created attachment 71866
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299410</commentid>
    <comment_count>2</comment_count>
      <attachid>71866</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-10-26 06:52:30 -0700</bug_when>
    <thetext>Comment on attachment 71866
patch

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

&gt; LayoutTests/storage/indexeddb/keyrange.html:49
&gt; +    shouldBe(&quot;rightFlags&quot;, openRight ? &quot;keyRange.RIGHT_OPEN | keyRange.RIGHT_BOUND&quot; : &quot;keyRange.RIGHT_BOUND&quot;); 

Intentional change?

&gt; LayoutTests/storage/indexeddb/objectstore-basics.html:50
&gt; +    debug(&quot;creatObjectStore():&quot;);

createObjectStore()

&gt; LayoutTests/storage/indexeddb/objectstore-basics.html:68
&gt; +    }

Seem to be some spurious diffs throughout this change. Is there any way you can remove them to make clear what&apos;s going on?

&gt; WebCore/ChangeLog:11
&gt; +        This is just a stop-gap move until we get it figured out upstream.

What do you mean by upstream?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299420</commentid>
    <comment_count>3</comment_count>
      <attachid>71866</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-10-26 07:06:22 -0700</bug_when>
    <thetext>Comment on attachment 71866
patch

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

&gt;&gt; LayoutTests/storage/indexeddb/keyrange.html:49
&gt;&gt; +    shouldBe(&quot;rightFlags&quot;, openRight ? &quot;keyRange.RIGHT_OPEN | keyRange.RIGHT_BOUND&quot; : &quot;keyRange.RIGHT_BOUND&quot;); 
&gt; 
&gt; Intentional change?

no

&gt;&gt; LayoutTests/storage/indexeddb/objectstore-basics.html:50
&gt;&gt; +    debug(&quot;creatObjectStore():&quot;);
&gt; 
&gt; createObjectStore()

done

&gt;&gt; LayoutTests/storage/indexeddb/objectstore-basics.html:68
&gt;&gt; +    }
&gt; 
&gt; Seem to be some spurious diffs throughout this change. Is there any way you can remove them to make clear what&apos;s going on?

I think Andrei introduced white space changes which my editor is fighting.  Sorry about that.  I&apos;ll try generating a diff without white spaces.

&gt;&gt; WebCore/ChangeLog:11
&gt;&gt; +        This is just a stop-gap move until we get it figured out upstream.
&gt; 
&gt; What do you mean by upstream?

In standards.  Changed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299421</commentid>
    <comment_count>4</comment_count>
      <attachid>71874</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-10-26 07:08:16 -0700</bug_when>
    <thetext>Created attachment 71874
fixed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299440</commentid>
    <comment_count>5</comment_count>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2010-10-26 07:37:28 -0700</bug_when>
    <thetext>
&gt; window.upper = testData.length-1;

here and below: add spaces around &apos;-&apos;


&gt; if (m_transaction)
&gt; IDBPendingTransactionMonitor::removePendingTransaction(m_transaction.get());

Why this change?

&gt; while (!queue.isEmpty() &amp;&amp; m_state != Finished) {

When can the state change to Finished during the loop below?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299446</commentid>
    <comment_count>6</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-10-26 07:47:47 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; &gt; window.upper = testData.length-1;
&gt; 
&gt; here and below: add spaces around &apos;-&apos;

Will do.

&gt; &gt; if (m_transaction)
&gt; &gt; IDBPendingTransactionMonitor::removePendingTransaction(m_transaction.get());
&gt; 
&gt; Why this change?
&gt; 
&gt; &gt; while (!queue.isEmpty() &amp;&amp; m_state != Finished) {
&gt; 
&gt; When can the state change to Finished during the loop below?

These are both described in the change log.

The former is because the whole page can shut down in the middle of a transaction and thus IDBRequest is deleted before the transaction finishes (but we should still make sure it&apos;s balanced).

The latter happens if it&apos;s aborted in between tasks.

Both have been seen in real life but couldn&apos;t be reliably reproduced, but seemed to go away when changed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299460</commentid>
    <comment_count>7</comment_count>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2010-10-26 08:05:13 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; &gt; window.upper = testData.length-1;
&gt; &gt; 
&gt; &gt; here and below: add spaces around &apos;-&apos;
&gt; 
&gt; Will do.
&gt; 
&gt; &gt; &gt; if (m_transaction)
&gt; &gt; &gt; IDBPendingTransactionMonitor::removePendingTransaction(m_transaction.get());
&gt; &gt; 
&gt; &gt; Why this change?
&gt; &gt; 
&gt; &gt; &gt; while (!queue.isEmpty() &amp;&amp; m_state != Finished) {
&gt; &gt; 
&gt; &gt; When can the state change to Finished during the loop below?
&gt; 
&gt; These are both described in the change log.
&gt; 
&gt; The former is because the whole page can shut down in the middle of a transaction and thus IDBRequest is deleted before the transaction finishes (but we should still make sure it&apos;s balanced).
&gt; 

But IDBRequest isn&apos;t just deleted. The GC will simply unref it. I think we should make sure that our previous assumption was really wrong and we&apos;re not keeping the request object alive while we have active transactions. 


&gt; The latter happens if it&apos;s aborted in between tasks.
&gt; 

When exactly can that happen? We&apos;re running a tight loop, so the only possibility is that one of the tasks calls abort() synchronously, but I can&apos;t think of any such case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299466</commentid>
    <comment_count>8</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-10-26 08:11:14 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; (In reply to comment #5)
&gt; &gt; &gt; &gt; window.upper = testData.length-1;
&gt; &gt; &gt; 
&gt; &gt; &gt; here and below: add spaces around &apos;-&apos;
&gt; &gt; 
&gt; &gt; Will do.
&gt; &gt; 
&gt; &gt; &gt; &gt; if (m_transaction)
&gt; &gt; &gt; &gt; IDBPendingTransactionMonitor::removePendingTransaction(m_transaction.get());
&gt; &gt; &gt; 
&gt; &gt; &gt; Why this change?
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; while (!queue.isEmpty() &amp;&amp; m_state != Finished) {
&gt; &gt; &gt; 
&gt; &gt; &gt; When can the state change to Finished during the loop below?
&gt; &gt; 
&gt; &gt; These are both described in the change log.
&gt; &gt; 
&gt; &gt; The former is because the whole page can shut down in the middle of a transaction and thus IDBRequest is deleted before the transaction finishes (but we should still make sure it&apos;s balanced).
&gt; &gt; 
&gt; 
&gt; But IDBRequest isn&apos;t just deleted. The GC will simply unref it. I think we should make sure that our previous assumption was really wrong and we&apos;re not keeping the request object alive while we have active transactions. 

Yes, and when the last ref goes away, it&apos;ll be deleted.  What would be keeping it alive?

I love ASSERTs.  I don&apos;t think there&apos;s any way for us to do such a check though (especially in Chromium cause we&apos;re in different processes).  That&apos;s why we had that DCHECK to begin with.


&gt; &gt; The latter happens if it&apos;s aborted in between tasks.
&gt; &gt; 
&gt; 
&gt; When exactly can that happen? We&apos;re running a tight loop, so the only possibility is that one of the tasks calls abort() synchronously, but I can&apos;t think of any such case.

We do when we exceed quota or hit an error that&apos;d leave things in an inconsistent state.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299471</commentid>
    <comment_count>9</comment_count>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2010-10-26 08:19:22 -0700</bug_when>
    <thetext>LGTM

(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; (In reply to comment #6)
&gt; &gt; &gt; (In reply to comment #5)
&gt; &gt; &gt; &gt; &gt; window.upper = testData.length-1;
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; here and below: add spaces around &apos;-&apos;
&gt; &gt; &gt; 
&gt; &gt; &gt; Will do.
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; if (m_transaction)
&gt; &gt; &gt; &gt; &gt; IDBPendingTransactionMonitor::removePendingTransaction(m_transaction.get());
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Why this change?
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; while (!queue.isEmpty() &amp;&amp; m_state != Finished) {
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; When can the state change to Finished during the loop below?
&gt; &gt; &gt; 
&gt; &gt; &gt; These are both described in the change log.
&gt; &gt; &gt; 
&gt; &gt; &gt; The former is because the whole page can shut down in the middle of a transaction and thus IDBRequest is deleted before the transaction finishes (but we should still make sure it&apos;s balanced).
&gt; &gt; &gt; 
&gt; &gt; 
&gt; &gt; But IDBRequest isn&apos;t just deleted. The GC will simply unref it. I think we should make sure that our previous assumption was really wrong and we&apos;re not keeping the request object alive while we have active transactions. 
&gt; 
&gt; Yes, and when the last ref goes away, it&apos;ll be deleted.  What would be keeping it alive?
&gt;

Ok, I just wanted to make sure there&apos;s nothing that would be keeping it alive. It there isn&apos;t, it&apos;s ok to remove the assert.

 
&gt; I love ASSERTs.  I don&apos;t think there&apos;s any way for us to do such a check though (especially in Chromium cause we&apos;re in different processes).  That&apos;s why we had that DCHECK to begin with.
&gt; 

Er, which DCHECK?


&gt; 
&gt; &gt; &gt; The latter happens if it&apos;s aborted in between tasks.
&gt; &gt; &gt; 
&gt; &gt; 
&gt; &gt; When exactly can that happen? We&apos;re running a tight loop, so the only possibility is that one of the tasks calls abort() synchronously, but I can&apos;t think of any such case.
&gt; 
&gt; We do when we exceed quota or hit an error that&apos;d leave things in an inconsistent state.

Oh, I see, we added that after we wrote the code for the transaction task processing. Makes sense.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299477</commentid>
    <comment_count>10</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-10-26 08:25:46 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; LGTM
&gt; 
&gt; (In reply to comment #8)
&gt; &gt; (In reply to comment #7)
&gt; &gt; &gt; (In reply to comment #6)
&gt; &gt; &gt; &gt; (In reply to comment #5)
&gt; &gt; &gt; &gt; &gt; &gt; window.upper = testData.length-1;
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; here and below: add spaces around &apos;-&apos;
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Will do.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; if (m_transaction)
&gt; &gt; &gt; &gt; &gt; &gt; IDBPendingTransactionMonitor::removePendingTransaction(m_transaction.get());
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; Why this change?
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; while (!queue.isEmpty() &amp;&amp; m_state != Finished) {
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; When can the state change to Finished during the loop below?
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; These are both described in the change log.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; The former is because the whole page can shut down in the middle of a transaction and thus IDBRequest is deleted before the transaction finishes (but we should still make sure it&apos;s balanced).
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; But IDBRequest isn&apos;t just deleted. The GC will simply unref it. I think we should make sure that our previous assumption was really wrong and we&apos;re not keeping the request object alive while we have active transactions. 
&gt; &gt; 
&gt; &gt; Yes, and when the last ref goes away, it&apos;ll be deleted.  What would be keeping it alive?
&gt; &gt;
&gt; 
&gt; Ok, I just wanted to make sure there&apos;s nothing that would be keeping it alive. It there isn&apos;t, it&apos;s ok to remove the assert.

Note that the assert wasn&apos;t just removed: it was replaced by logic that does the correct thing in such cases.

&gt; &gt; I love ASSERTs.  I don&apos;t think there&apos;s any way for us to do such a check though (especially in Chromium cause we&apos;re in different processes).  That&apos;s why we had that DCHECK to begin with.
&gt; &gt; 
&gt; 
&gt; Er, which DCHECK?

Err...assert:  ASSERT(!m_transaction);

&gt; &gt; &gt; &gt; The latter happens if it&apos;s aborted in between tasks.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; When exactly can that happen? We&apos;re running a tight loop, so the only possibility is that one of the tasks calls abort() synchronously, but I can&apos;t think of any such case.
&gt; &gt; 
&gt; &gt; We do when we exceed quota or hit an error that&apos;d leave things in an inconsistent state.
&gt; 
&gt; Oh, I see, we added that after we wrote the code for the transaction task processing. Makes sense.

Yup.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299501</commentid>
    <comment_count>11</comment_count>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2010-10-26 08:59:04 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; LGTM
&gt; &gt; 
&gt; &gt; (In reply to comment #8)
&gt; &gt; &gt; (In reply to comment #7)
&gt; &gt; &gt; &gt; (In reply to comment #6)
&gt; &gt; &gt; &gt; &gt; (In reply to comment #5)
&gt; &gt; &gt; &gt; &gt; &gt; &gt; window.upper = testData.length-1;
&gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; here and below: add spaces around &apos;-&apos;
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; Will do.
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; &gt; if (m_transaction)
&gt; &gt; &gt; &gt; &gt; &gt; &gt; IDBPendingTransactionMonitor::removePendingTransaction(m_transaction.get());
&gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; Why this change?
&gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; &gt; while (!queue.isEmpty() &amp;&amp; m_state != Finished) {
&gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; When can the state change to Finished during the loop below?
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; These are both described in the change log.
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; The former is because the whole page can shut down in the middle of a transaction and thus IDBRequest is deleted before the transaction finishes (but we should still make sure it&apos;s balanced).
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; But IDBRequest isn&apos;t just deleted. The GC will simply unref it. I think we should make sure that our previous assumption was really wrong and we&apos;re not keeping the request object alive while we have active transactions. 
&gt; &gt; &gt; 
&gt; &gt; &gt; Yes, and when the last ref goes away, it&apos;ll be deleted.  What would be keeping it alive?
&gt; &gt; &gt;
&gt; &gt; 
&gt; &gt; Ok, I just wanted to make sure there&apos;s nothing that would be keeping it alive. It there isn&apos;t, it&apos;s ok to remove the assert.
&gt; 
&gt; Note that the assert wasn&apos;t just removed: it was replaced by logic that does the correct thing in such cases.
&gt; 

Actually, thinking about this, I think this logic isn&apos;t right. The transaction isn&apos;t pending anymore so the code you added will probably be a no-op. Instead you should just do m_transaction-&gt;abort().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299505</commentid>
    <comment_count>12</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-10-26 09:06:58 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; (In reply to comment #9)
&gt; &gt; &gt; LGTM
&gt; &gt; &gt; 
&gt; &gt; &gt; (In reply to comment #8)
&gt; &gt; &gt; &gt; (In reply to comment #7)
&gt; &gt; &gt; &gt; &gt; (In reply to comment #6)
&gt; &gt; &gt; &gt; &gt; &gt; (In reply to comment #5)
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; window.upper = testData.length-1;
&gt; &gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; &gt; here and below: add spaces around &apos;-&apos;
&gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; Will do.
&gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; if (m_transaction)
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; IDBPendingTransactionMonitor::removePendingTransaction(m_transaction.get());
&gt; &gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; &gt; Why this change?
&gt; &gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; while (!queue.isEmpty() &amp;&amp; m_state != Finished) {
&gt; &gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; &gt; When can the state change to Finished during the loop below?
&gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; These are both described in the change log.
&gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; The former is because the whole page can shut down in the middle of a transaction and thus IDBRequest is deleted before the transaction finishes (but we should still make sure it&apos;s balanced).
&gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; But IDBRequest isn&apos;t just deleted. The GC will simply unref it. I think we should make sure that our previous assumption was really wrong and we&apos;re not keeping the request object alive while we have active transactions. 
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Yes, and when the last ref goes away, it&apos;ll be deleted.  What would be keeping it alive?
&gt; &gt; &gt; &gt;
&gt; &gt; &gt; 
&gt; &gt; &gt; Ok, I just wanted to make sure there&apos;s nothing that would be keeping it alive. It there isn&apos;t, it&apos;s ok to remove the assert.
&gt; &gt; 
&gt; &gt; Note that the assert wasn&apos;t just removed: it was replaced by logic that does the correct thing in such cases.
&gt; &gt; 
&gt; 
&gt; Actually, thinking about this, I think this logic isn&apos;t right. The transaction isn&apos;t pending anymore so the code you added will probably be a no-op. Instead you should just do m_transaction-&gt;abort().

As we discussed, abort is not the right course of action, but neither is removePendingTransaction.  What we really want is didCompletePendingTasks.  Will change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299511</commentid>
    <comment_count>13</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-10-26 09:17:57 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #11)
&gt; &gt; (In reply to comment #10)
&gt; &gt; &gt; (In reply to comment #9)
&gt; &gt; &gt; &gt; LGTM
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; (In reply to comment #8)
&gt; &gt; &gt; &gt; &gt; (In reply to comment #7)
&gt; &gt; &gt; &gt; &gt; &gt; (In reply to comment #6)
&gt; &gt; &gt; &gt; &gt; &gt; &gt; (In reply to comment #5)
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; window.upper = testData.length-1;
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; here and below: add spaces around &apos;-&apos;
&gt; &gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; &gt; Will do.
&gt; &gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; if (m_transaction)
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; IDBPendingTransactionMonitor::removePendingTransaction(m_transaction.get());
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; Why this change?
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; while (!queue.isEmpty() &amp;&amp; m_state != Finished) {
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; When can the state change to Finished during the loop below?
&gt; &gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; &gt; These are both described in the change log.
&gt; &gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; &gt; The former is because the whole page can shut down in the middle of a transaction and thus IDBRequest is deleted before the transaction finishes (but we should still make sure it&apos;s balanced).
&gt; &gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; But IDBRequest isn&apos;t just deleted. The GC will simply unref it. I think we should make sure that our previous assumption was really wrong and we&apos;re not keeping the request object alive while we have active transactions. 
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; Yes, and when the last ref goes away, it&apos;ll be deleted.  What would be keeping it alive?
&gt; &gt; &gt; &gt; &gt;
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Ok, I just wanted to make sure there&apos;s nothing that would be keeping it alive. It there isn&apos;t, it&apos;s ok to remove the assert.
&gt; &gt; &gt; 
&gt; &gt; &gt; Note that the assert wasn&apos;t just removed: it was replaced by logic that does the correct thing in such cases.
&gt; &gt; &gt; 
&gt; &gt; 
&gt; &gt; Actually, thinking about this, I think this logic isn&apos;t right. The transaction isn&apos;t pending anymore so the code you added will probably be a no-op. Instead you should just do m_transaction-&gt;abort().
&gt; 
&gt; As we discussed, abort is not the right course of action, but neither is removePendingTransaction.  What we really want is didCompletePendingTasks.  Will change.

Crap....that&apos;s not true either.

I just realized what&apos;s triggering this: it happens when we create IDBRequest objects but then never use them because the backend immediately throws.  Thus I think this comment+assert is completely invalid and there&apos;s no simple way to handle these checks.  I think we should probably just remove it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299513</commentid>
    <comment_count>14</comment_count>
      <attachid>71899</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-10-26 09:19:47 -0700</bug_when>
    <thetext>Created attachment 71899
another fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299533</commentid>
    <comment_count>15</comment_count>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2010-10-26 09:55:49 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; Created an attachment (id=71899) [details]
&gt; another fix

(In reply to comment #13)
&gt; (In reply to comment #12)
&gt; &gt; (In reply to comment #11)
&gt; &gt; &gt; (In reply to comment #10)
&gt; &gt; &gt; &gt; (In reply to comment #9)
&gt; &gt; &gt; &gt; &gt; LGTM
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; (In reply to comment #8)
&gt; &gt; &gt; &gt; &gt; &gt; (In reply to comment #7)
&gt; &gt; &gt; &gt; &gt; &gt; &gt; (In reply to comment #6)
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; (In reply to comment #5)
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; window.upper = testData.length-1;
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; here and below: add spaces around &apos;-&apos;
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; Will do.
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; if (m_transaction)
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; IDBPendingTransactionMonitor::removePendingTransaction(m_transaction.get());
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; Why this change?
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; while (!queue.isEmpty() &amp;&amp; m_state != Finished) {
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; When can the state change to Finished during the loop below?
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; These are both described in the change log.
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; The former is because the whole page can shut down in the middle of a transaction and thus IDBRequest is deleted before the transaction finishes (but we should still make sure it&apos;s balanced).
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; &gt; But IDBRequest isn&apos;t just deleted. The GC will simply unref it. I think we should make sure that our previous assumption was really wrong and we&apos;re not keeping the request object alive while we have active transactions. 
&gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; Yes, and when the last ref goes away, it&apos;ll be deleted.  What would be keeping it alive?
&gt; &gt; &gt; &gt; &gt; &gt;
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; Ok, I just wanted to make sure there&apos;s nothing that would be keeping it alive. It there isn&apos;t, it&apos;s ok to remove the assert.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Note that the assert wasn&apos;t just removed: it was replaced by logic that does the correct thing in such cases.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; Actually, thinking about this, I think this logic isn&apos;t right. The transaction isn&apos;t pending anymore so the code you added will probably be a no-op. Instead you should just do m_transaction-&gt;abort().
&gt; &gt; 
&gt; &gt; As we discussed, abort is not the right course of action, but neither is removePendingTransaction.  What we really want is didCompletePendingTasks.  Will change.
&gt; 
&gt; Crap....that&apos;s not true either.
&gt; 
&gt; I just realized what&apos;s triggering this: it happens when we create IDBRequest objects but then never use them because the backend immediately throws.  Thus I think this comment+assert is completely invalid and there&apos;s no simple way to handle these checks.  I think we should probably just remove it.

Yeah...I guess one way to handle it would be to somehow notify the IDBRequest object at the point where the backend throws. Not sure if it&apos;s worth doing...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299536</commentid>
    <comment_count>16</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-10-26 09:59:12 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #14)
&gt; &gt; Created an attachment (id=71899) [details] [details]
&gt; &gt; another fix
&gt; 
&gt; (In reply to comment #13)
&gt; &gt; (In reply to comment #12)
&gt; &gt; &gt; (In reply to comment #11)
&gt; &gt; &gt; &gt; (In reply to comment #10)
&gt; &gt; &gt; &gt; &gt; (In reply to comment #9)
&gt; &gt; &gt; &gt; &gt; &gt; LGTM
&gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; (In reply to comment #8)
&gt; &gt; &gt; &gt; &gt; &gt; &gt; (In reply to comment #7)
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; (In reply to comment #6)
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; (In reply to comment #5)
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; window.upper = testData.length-1;
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; here and below: add spaces around &apos;-&apos;
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; Will do.
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; if (m_transaction)
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; IDBPendingTransactionMonitor::removePendingTransaction(m_transaction.get());
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; Why this change?
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; while (!queue.isEmpty() &amp;&amp; m_state != Finished) {
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; When can the state change to Finished during the loop below?
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; These are both described in the change log.
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; The former is because the whole page can shut down in the middle of a transaction and thus IDBRequest is deleted before the transaction finishes (but we should still make sure it&apos;s balanced).
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; But IDBRequest isn&apos;t just deleted. The GC will simply unref it. I think we should make sure that our previous assumption was really wrong and we&apos;re not keeping the request object alive while we have active transactions. 
&gt; &gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; &gt; Yes, and when the last ref goes away, it&apos;ll be deleted.  What would be keeping it alive?
&gt; &gt; &gt; &gt; &gt; &gt; &gt;
&gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; Ok, I just wanted to make sure there&apos;s nothing that would be keeping it alive. It there isn&apos;t, it&apos;s ok to remove the assert.
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; Note that the assert wasn&apos;t just removed: it was replaced by logic that does the correct thing in such cases.
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Actually, thinking about this, I think this logic isn&apos;t right. The transaction isn&apos;t pending anymore so the code you added will probably be a no-op. Instead you should just do m_transaction-&gt;abort().
&gt; &gt; &gt; 
&gt; &gt; &gt; As we discussed, abort is not the right course of action, but neither is removePendingTransaction.  What we really want is didCompletePendingTasks.  Will change.
&gt; &gt; 
&gt; &gt; Crap....that&apos;s not true either.
&gt; &gt; 
&gt; &gt; I just realized what&apos;s triggering this: it happens when we create IDBRequest objects but then never use them because the backend immediately throws.  Thus I think this comment+assert is completely invalid and there&apos;s no simple way to handle these checks.  I think we should probably just remove it.
&gt; 
&gt; Yeah...I guess one way to handle it would be to somehow notify the IDBRequest object at the point where the backend throws. Not sure if it&apos;s worth doing...

Doing this from the backend would be messy and require a lot of plumbing or do things differently in Chromium and normal WebKit--neither of which I want to do if possible.

The best thing I can think of is to do it from the frontend (have it check for exceptions and tell the IDBRequest it happened).  This seems like a lot of ugly boilerplate code.

At the end of the day, all we&apos;re losing is an ASSERT.  Is that really worth the effort?  If so, maybe we should instead think of how to fundamentally re-architect this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299538</commentid>
    <comment_count>17</comment_count>
      <attachid>71899</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-10-26 10:00:28 -0700</bug_when>
    <thetext>Comment on attachment 71899
another fix

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299541</commentid>
    <comment_count>18</comment_count>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2010-10-26 10:04:02 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #15)
&gt; &gt; (In reply to comment #14)
&gt; &gt; &gt; Created an attachment (id=71899) [details] [details] [details]
&gt; &gt; &gt; another fix
&gt; &gt; 
&gt; &gt; (In reply to comment #13)
&gt; &gt; &gt; (In reply to comment #12)
&gt; &gt; &gt; &gt; (In reply to comment #11)
&gt; &gt; &gt; &gt; &gt; (In reply to comment #10)
&gt; &gt; &gt; &gt; &gt; &gt; (In reply to comment #9)
&gt; &gt; &gt; &gt; &gt; &gt; &gt; LGTM
&gt; &gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; &gt; (In reply to comment #8)
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; (In reply to comment #7)
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; (In reply to comment #6)
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; (In reply to comment #5)
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; window.upper = testData.length-1;
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; here and below: add spaces around &apos;-&apos;
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; Will do.
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; if (m_transaction)
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; IDBPendingTransactionMonitor::removePendingTransaction(m_transaction.get());
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; Why this change?
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; while (!queue.isEmpty() &amp;&amp; m_state != Finished) {
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; When can the state change to Finished during the loop below?
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; These are both described in the change log.
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; The former is because the whole page can shut down in the middle of a transaction and thus IDBRequest is deleted before the transaction finishes (but we should still make sure it&apos;s balanced).
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; But IDBRequest isn&apos;t just deleted. The GC will simply unref it. I think we should make sure that our previous assumption was really wrong and we&apos;re not keeping the request object alive while we have active transactions. 
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt; Yes, and when the last ref goes away, it&apos;ll be deleted.  What would be keeping it alive?
&gt; &gt; &gt; &gt; &gt; &gt; &gt; &gt;
&gt; &gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; &gt; Ok, I just wanted to make sure there&apos;s nothing that would be keeping it alive. It there isn&apos;t, it&apos;s ok to remove the assert.
&gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; Note that the assert wasn&apos;t just removed: it was replaced by logic that does the correct thing in such cases.
&gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; Actually, thinking about this, I think this logic isn&apos;t right. The transaction isn&apos;t pending anymore so the code you added will probably be a no-op. Instead you should just do m_transaction-&gt;abort().
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; As we discussed, abort is not the right course of action, but neither is removePendingTransaction.  What we really want is didCompletePendingTasks.  Will change.
&gt; &gt; &gt; 
&gt; &gt; &gt; Crap....that&apos;s not true either.
&gt; &gt; &gt; 
&gt; &gt; &gt; I just realized what&apos;s triggering this: it happens when we create IDBRequest objects but then never use them because the backend immediately throws.  Thus I think this comment+assert is completely invalid and there&apos;s no simple way to handle these checks.  I think we should probably just remove it.
&gt; &gt; 
&gt; &gt; Yeah...I guess one way to handle it would be to somehow notify the IDBRequest object at the point where the backend throws. Not sure if it&apos;s worth doing...
&gt; 
&gt; Doing this from the backend would be messy and require a lot of plumbing or do things differently in Chromium and normal WebKit--neither of which I want to do if possible.
&gt; 
&gt; The best thing I can think of is to do it from the frontend (have it check for exceptions and tell the IDBRequest it happened).  This seems like a lot of ugly boilerplate code.
&gt; 
&gt; At the end of the day, all we&apos;re losing is an ASSERT.  Is that really worth the effort? 

Probably not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299542</commentid>
    <comment_count>19</comment_count>
      <attachid>71899</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-10-26 10:04:17 -0700</bug_when>
    <thetext>Comment on attachment 71899
another fix

Clearing flags on attachment: 71899

Committed r70531: &lt;http://trac.webkit.org/changeset/70531&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299543</commentid>
    <comment_count>20</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-10-26 10:04:27 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71866</attachid>
            <date>2010-10-26 05:17:21 -0700</date>
            <delta_ts>2010-10-26 07:08:16 -0700</delta_ts>
            <desc>patch</desc>
            <filename>a</filename>
            <type>text/plain</type>
            <size>35729</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA4NzcxMTQ5Li45NWJiMThhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMTAtMTAt
MjYgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4IEluZGV4ZWREQiBjcmFzaGVzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00ODI2NgorCisg
ICAgICAgIFRlc3QgYWxsIHRoZSBjaGFuZ2VzIG1hZGUgaW4gV2ViQ29yZS4KKworICAgICAgICAq
IHN0b3JhZ2UvaW5kZXhlZGRiL2NvbnN0YW50cy1leHBlY3RlZC50eHQ6CisgICAgICAgICogc3Rv
cmFnZS9pbmRleGVkZGIvY29uc3RhbnRzLmh0bWw6CisgICAgICAgICogc3RvcmFnZS9pbmRleGVk
ZGIvZGF0YWJhc2UtcXVvdGEtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHN0b3JhZ2UvaW5kZXhl
ZGRiL2luZGV4LWJhc2ljcy1leHBlY3RlZC50eHQ6CisgICAgICAgICogc3RvcmFnZS9pbmRleGVk
ZGIvaW5kZXgtYmFzaWNzLmh0bWw6CisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvaW5kZXgt
Y3Vyc29yLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9pbmRleC1j
dXJzb3IuaHRtbDoKKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9rZXlyYW5nZS1leHBlY3Rl
ZC50eHQ6CisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIva2V5cmFuZ2UuaHRtbDoKKyAgICAg
ICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9vYmplY3RzdG9yZS1iYXNpY3MtZXhwZWN0ZWQudHh0Ogor
ICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL29iamVjdHN0b3JlLWJhc2ljcy5odG1sOgorICAg
ICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL29iamVjdHN0b3JlLWN1cnNvci1leHBlY3RlZC50eHQ6
CisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvb2JqZWN0c3RvcmUtY3Vyc29yLmh0bWw6Cisg
ICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvb3Blbi1jdXJzb3ItZXhwZWN0ZWQudHh0OgorICAg
ICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL29wZW4tY3Vyc29yLmh0bWw6CisKIDIwMTAtMTAtMjEg
IEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4
ZWRkYi9jb25zdGFudHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVk
ZGIvY29uc3RhbnRzLWV4cGVjdGVkLnR4dAppbmRleCAxNWEyZGY3Li44ZjUzYjU2IDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9jb25zdGFudHMtZXhwZWN0ZWQudHh0
CisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2NvbnN0YW50cy1leHBlY3RlZC50
eHQKQEAgLTgsNyArOCw3IEBAIFBBU1Mgd2Via2l0SURCS2V5UmFuZ2UuTEVGVF9PUEVOIGlzIDEK
IFBBU1Mgd2Via2l0SURCS2V5UmFuZ2UuUklHSFRfT1BFTiBpcyAyCiBQQVNTIHdlYmtpdElEQktl
eVJhbmdlLkxFRlRfQk9VTkQgaXMgNAogUEFTUyB3ZWJraXRJREJLZXlSYW5nZS5SSUdIVF9CT1VO
RCBpcyA4Ci1QQVNTIHdlYmtpdElEQkRhdGFiYXNlRXhjZXB0aW9uLlVOS05PV05fRVJSIGlzIDAK
K1BBU1Mgd2Via2l0SURCRGF0YWJhc2VFeGNlcHRpb24uVU5LTk9XTl9FUlIgaXMgMQogUEFTUyB3
ZWJraXRJREJEYXRhYmFzZUV4Y2VwdGlvbi5OT05fVFJBTlNJRU5UX0VSUiBpcyAxCiBQQVNTIHdl
YmtpdElEQkRhdGFiYXNlRXhjZXB0aW9uLk5PVF9GT1VORF9FUlIgaXMgMgogUEFTUyB3ZWJraXRJ
REJEYXRhYmFzZUV4Y2VwdGlvbi5DT05TVFJBSU5UX0VSUiBpcyAzCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9jb25zdGFudHMuaHRtbCBiL0xheW91dFRlc3RzL3N0
b3JhZ2UvaW5kZXhlZGRiL2NvbnN0YW50cy5odG1sCmluZGV4IDgxM2ZlN2EuLjljZGY0YzQgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2NvbnN0YW50cy5odG1sCisr
KyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2NvbnN0YW50cy5odG1sCkBAIC0yMiw3
ICsyMiw3IEBAIGZ1bmN0aW9uIHRlc3QoKQogICAgIHNob3VsZEJlKCJ3ZWJraXRJREJLZXlSYW5n
ZS5MRUZUX0JPVU5EIiwgIjQiKTsKICAgICBzaG91bGRCZSgid2Via2l0SURCS2V5UmFuZ2UuUklH
SFRfQk9VTkQiLCAiOCIpOwogCi0gICAgc2hvdWxkQmUoIndlYmtpdElEQkRhdGFiYXNlRXhjZXB0
aW9uLlVOS05PV05fRVJSIiwgIjAiKTsKKyAgICBzaG91bGRCZSgid2Via2l0SURCRGF0YWJhc2VF
eGNlcHRpb24uVU5LTk9XTl9FUlIiLCAiMSIpOwogICAgIHNob3VsZEJlKCJ3ZWJraXRJREJEYXRh
YmFzZUV4Y2VwdGlvbi5OT05fVFJBTlNJRU5UX0VSUiIsICIxIik7CiAgICAgc2hvdWxkQmUoIndl
YmtpdElEQkRhdGFiYXNlRXhjZXB0aW9uLk5PVF9GT1VORF9FUlIiLCAiMiIpOwogICAgIHNob3Vs
ZEJlKCJ3ZWJraXRJREJEYXRhYmFzZUV4Y2VwdGlvbi5DT05TVFJBSU5UX0VSUiIsICIzIik7CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9kYXRhYmFzZS1xdW90YS1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9kYXRhYmFzZS1xdW90
YS1leHBlY3RlZC50eHQKaW5kZXggNmMyNDVkNC4uOTFkM2FjNyAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZGF0YWJhc2UtcXVvdGEtZXhwZWN0ZWQudHh0CisrKyBi
L0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2RhdGFiYXNlLXF1b3RhLWV4cGVjdGVkLnR4
dApAQCAtNjgsNyArNjgsNyBAQCB0cmFucyA9IGRiLnRyYW5zYWN0aW9uKCkKIENyZWF0aW5nICdk
YXRhJyB3aGljaCBjb250YWlucyA2NEsgb2YgZGF0YQogUEFTUyBkYXRhLmxlbmd0aCBpcyA2NTUz
Ngogc3RvcmUgPSB0cmFucy5vYmplY3RTdG9yZSgndGVzdDEyMycpCi1FcnJvciBmdW5jdGlvbiBj
YWxsZWQ6ICgwKSBFcnJvciB3cml0aW5nIGRhdGEgdG8gc3RhYmxlIHN0b3JhZ2UuCitFcnJvciBm
dW5jdGlvbiBjYWxsZWQ6ICgxKSBFcnJvciB3cml0aW5nIGRhdGEgdG8gc3RhYmxlIHN0b3JhZ2Uu
CiBFcnJvciBldmVudCBmaXJlZDoKIFBBU1MgJ3Jlc3VsdCcgaW4gZXZlbnQgaXMgZmFsc2UKIFBB
U1MgJ2NvZGUnIGluIGV2ZW50IGlzIHRydWUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3Jh
Z2UvaW5kZXhlZGRiL2luZGV4LWJhc2ljcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdG9y
YWdlL2luZGV4ZWRkYi9pbmRleC1iYXNpY3MtZXhwZWN0ZWQudHh0CmluZGV4IDA4NjlkOTUuLmY4
ODZhMTkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2luZGV4LWJh
c2ljcy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvaW5k
ZXgtYmFzaWNzLWV4cGVjdGVkLnR4dApAQCAtMzAwLDYgKzMwMCwxMCBAQCBQQVNTICdyZWFkeVN0
YXRlJyBpbiBldmVudC50YXJnZXQgaXMgdHJ1ZQogUEFTUyBldmVudC50YXJnZXQucmVhZHlTdGF0
ZSBpcyBldmVudC50YXJnZXQuRE9ORQogCiBQQVNTIGV2ZW50LnJlc3VsdCA9PT0gbnVsbCBpcyB0
cnVlCitQYXNzaW5nIGFuIGludmFsaWQga2V5IGludG8gaW5kZXhPYmplY3QuZ2V0KCkuCitQQVNT
IENhdWdodCBleGNlcHRpb246IEVycm9yOiBUWVBFX01JU01BVENIX0VSUjogRE9NIEV4Y2VwdGlv
biAxNworUGFzc2luZyBhbiBpbnZhbGlkIGtleSBpbnRvIGluZGV4T2JqZWN0LmdldEtleSgpLgor
UEFTUyBDYXVnaHQgZXhjZXB0aW9uOiBFcnJvcjogVFlQRV9NSVNNQVRDSF9FUlI6IERPTSBFeGNl
cHRpb24gMTcKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIAogVEVTVCBDT01QTEVU
RQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvaW5kZXgtYmFzaWNz
Lmh0bWwgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9pbmRleC1iYXNpY3MuaHRtbApp
bmRleCBmNzI1N2YxLi43YTE2YzNhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2lu
ZGV4ZWRkYi9pbmRleC1iYXNpY3MuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4
ZWRkYi9pbmRleC1iYXNpY3MuaHRtbApAQCAtMjE5LDYgKzIxOSwyMSBAQCBmdW5jdGlvbiBsYXN0
KCkKICAgICB2ZXJpZnlTdWNjZXNzRXZlbnQoZXZlbnQpOwogICAgIHNob3VsZEJlVHJ1ZSgiZXZl
bnQucmVzdWx0ID09PSBudWxsIik7CiAKKyAgICB0cnkgeworICAgICAgICBkZWJ1ZygiUGFzc2lu
ZyBhbiBpbnZhbGlkIGtleSBpbnRvIGluZGV4T2JqZWN0LmdldCgpLiIpOworICAgICAgICBpbmRl
eE9iamVjdC5nZXQoW10pOworICAgICAgICB0ZXN0RmFpbGVkKCJObyBleGNlcHRpb24gdGhyb3du
Iik7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICB0ZXN0UGFzc2VkKCJDYXVnaHQgZXhjZXB0
aW9uOiAiICsgZS50b1N0cmluZygpKTsKKyAgICB9CisKKyAgICB0cnkgeworICAgICAgICBkZWJ1
ZygiUGFzc2luZyBhbiBpbnZhbGlkIGtleSBpbnRvIGluZGV4T2JqZWN0LmdldEtleSgpLiIpOwor
ICAgICAgICBpbmRleE9iamVjdC5nZXRLZXkoW10pOworICAgICAgICB0ZXN0RmFpbGVkKCJObyBl
eGNlcHRpb24gdGhyb3duIik7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICB0ZXN0UGFzc2Vk
KCJDYXVnaHQgZXhjZXB0aW9uOiAiICsgZS50b1N0cmluZygpKTsKKyAgICB9CiAgICAgZG9uZSgp
OwogfQogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9pbmRleC1j
dXJzb3ItZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvaW5kZXgt
Y3Vyc29yLWV4cGVjdGVkLnR4dAppbmRleCA4OGI5NmZmLi5iYzAxMDcwIDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9pbmRleC1jdXJzb3ItZXhwZWN0ZWQudHh0Cisr
KyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2luZGV4LWN1cnNvci1leHBlY3RlZC50
eHQKQEAgLTIwNTgsNiArMjA1OCw0NCBAQCBQQVNTIGV2ZW50LnJlc3VsdC5rZXkgaXMgdGVzdERh
dGFbN10KIFBBU1MgZXZlbnQucmVzdWx0LnZhbHVlIGlzIGV4cGVjdGVkSW5kZXgKIFBBU1MgZXZl
bnQucmVzdWx0LmtleSBpcyB0ZXN0RGF0YVs2XQogUEFTUyBldmVudC5yZXN1bHQgaXMgbnVsbAor
CitOZXh0IHRlc3Q6IG51bGwga2V5IHBhdGggc29ydGVkIGFzY2VuZGluZy4KK1BBU1MgZXZlbnQu
cmVzdWx0LnZhbHVlIGlzIGV4cGVjdGVkSW5kZXgKK1BBU1MgZXZlbnQucmVzdWx0LmtleSBpcyB0
ZXN0RGF0YVswXQorUEFTUyBldmVudC5yZXN1bHQudmFsdWUgaXMgZXhwZWN0ZWRJbmRleAorUEFT
UyBldmVudC5yZXN1bHQua2V5IGlzIHRlc3REYXRhWzFdCitQQVNTIGV2ZW50LnJlc3VsdC52YWx1
ZSBpcyBleHBlY3RlZEluZGV4CitQQVNTIGV2ZW50LnJlc3VsdC5rZXkgaXMgdGVzdERhdGFbMl0K
K1BBU1MgZXZlbnQucmVzdWx0LnZhbHVlIGlzIGV4cGVjdGVkSW5kZXgKK1BBU1MgZXZlbnQucmVz
dWx0LmtleSBpcyB0ZXN0RGF0YVszXQorUEFTUyBldmVudC5yZXN1bHQudmFsdWUgaXMgZXhwZWN0
ZWRJbmRleAorUEFTUyBldmVudC5yZXN1bHQua2V5IGlzIHRlc3REYXRhWzRdCitQQVNTIGV2ZW50
LnJlc3VsdC52YWx1ZSBpcyBleHBlY3RlZEluZGV4CitQQVNTIGV2ZW50LnJlc3VsdC5rZXkgaXMg
dGVzdERhdGFbNV0KK1BBU1MgZXZlbnQucmVzdWx0LnZhbHVlIGlzIGV4cGVjdGVkSW5kZXgKK1BB
U1MgZXZlbnQucmVzdWx0LmtleSBpcyB0ZXN0RGF0YVs2XQorUEFTUyBldmVudC5yZXN1bHQudmFs
dWUgaXMgZXhwZWN0ZWRJbmRleAorUEFTUyBldmVudC5yZXN1bHQua2V5IGlzIHRlc3REYXRhWzdd
CitQQVNTIGV2ZW50LnJlc3VsdCBpcyBudWxsCisKK05leHQgdGVzdDogbnVsbCBrZXkgcGF0aCBz
b3J0ZWQgZGVzY2VuZGluZy4KK1BBU1MgZXZlbnQucmVzdWx0LnZhbHVlIGlzIGV4cGVjdGVkSW5k
ZXgKK1BBU1MgZXZlbnQucmVzdWx0LmtleSBpcyB0ZXN0RGF0YVs3XQorUEFTUyBldmVudC5yZXN1
bHQudmFsdWUgaXMgZXhwZWN0ZWRJbmRleAorUEFTUyBldmVudC5yZXN1bHQua2V5IGlzIHRlc3RE
YXRhWzZdCitQQVNTIGV2ZW50LnJlc3VsdC52YWx1ZSBpcyBleHBlY3RlZEluZGV4CitQQVNTIGV2
ZW50LnJlc3VsdC5rZXkgaXMgdGVzdERhdGFbNV0KK1BBU1MgZXZlbnQucmVzdWx0LnZhbHVlIGlz
IGV4cGVjdGVkSW5kZXgKK1BBU1MgZXZlbnQucmVzdWx0LmtleSBpcyB0ZXN0RGF0YVs0XQorUEFT
UyBldmVudC5yZXN1bHQudmFsdWUgaXMgZXhwZWN0ZWRJbmRleAorUEFTUyBldmVudC5yZXN1bHQu
a2V5IGlzIHRlc3REYXRhWzNdCitQQVNTIGV2ZW50LnJlc3VsdC52YWx1ZSBpcyBleHBlY3RlZElu
ZGV4CitQQVNTIGV2ZW50LnJlc3VsdC5rZXkgaXMgdGVzdERhdGFbMl0KK1BBU1MgZXZlbnQucmVz
dWx0LnZhbHVlIGlzIGV4cGVjdGVkSW5kZXgKK1BBU1MgZXZlbnQucmVzdWx0LmtleSBpcyB0ZXN0
RGF0YVsxXQorUEFTUyBldmVudC5yZXN1bHQudmFsdWUgaXMgZXhwZWN0ZWRJbmRleAorUEFTUyBl
dmVudC5yZXN1bHQua2V5IGlzIHRlc3REYXRhWzBdCitQQVNTIGV2ZW50LnJlc3VsdCBpcyBudWxs
CiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2luZGV4LWN1cnNvci5odG1sIGIv
TGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvaW5kZXgtY3Vyc29yLmh0bWwKaW5kZXggNWFh
YjRmOC4uMGYyOGNiNiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIv
aW5kZXgtY3Vyc29yLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvaW5k
ZXgtY3Vyc29yLmh0bWwKQEAgLTEwNyw3ICsxMDcsNyBAQCBmdW5jdGlvbiBzY2hlZHVsZVRlc3Rz
KCkKIGZ1bmN0aW9uIHJ1bk5leHRUZXN0KCkKIHsKICAgICBpZiAoIXNjaGVkdWxlZFRlc3RzLmxl
bmd0aCkgewotICAgICAgICBkb25lKCk7CisgICAgICAgIHRlc3ROdWxsS2V5UmFuZ2UoKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAKQEAgLTIyNSw2ICsyMjUsMzggQEAgZnVuY3Rpb24gY3Vy
c29ySXRlcmF0aW9uKCkKIAogICAgIGV2ZW50LnJlc3VsdC5jb250aW51ZSgpOwogfQorCit3aW5k
b3cubnVsbEtleVJhbmdlU3RlcCA9IDA7CitmdW5jdGlvbiB0ZXN0TnVsbEtleVJhbmdlKCkKK3sK
KyAgICB3aW5kb3cubG93ZXIgPSAwOworICAgIHdpbmRvdy5sb3dlcklzT3BlbiA9IGZhbHNlOwor
ICAgIHdpbmRvdy51cHBlciA9IHRlc3REYXRhLmxlbmd0aC0xOworICAgIHdpbmRvdy51cHBlcklz
T3BlbiA9IGZhbHNlOworCisgICAgc3RyID0gIk5leHQgdGVzdDogbnVsbCBrZXkgcGF0aCAiOwor
ICAgIGlmICh3aW5kb3cubnVsbEtleVJhbmdlU3RlcCA9PSAwKSB7CisgICAgICAgIHN0ciArPSAi
c29ydGVkIGFzY2VuZGluZy4iOworICAgICAgICB3aW5kb3cuYXNjZW5kaW5nID0gdHJ1ZTsKKyAg
ICAgICAgd2luZG93LmV4cGVjdGVkSW5kZXggPSBsb3dlcjsKKyAgICAgICAgd2luZG93Lm51bGxL
ZXlSYW5nZVN0ZXAgPSAxOworICAgIH0gZWxzZSBpZiAod2luZG93Lm51bGxLZXlSYW5nZVN0ZXAg
PT0gMSkgeworICAgICAgICBzdHIgKz0gInNvcnRlZCBkZXNjZW5kaW5nLiI7CisgICAgICAgIHdp
bmRvdy5hc2NlbmRpbmcgPSBmYWxzZTsKKyAgICAgICAgd2luZG93LmV4cGVjdGVkSW5kZXggPSB1
cHBlcjsKKyAgICAgICAgd2luZG93Lm51bGxLZXlSYW5nZVN0ZXAgPSAyOworICAgIH0gZWxzZSB7
CisgICAgICAgIGRvbmUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGRlYnVnKCIi
KTsKKyAgICBkZWJ1ZyhzdHIpOworIAorICAgIHZhciByZXF1ZXN0ID0gaW5kZXhPYmplY3Qub3Bl
bktleUN1cnNvcihudWxsLCBhc2NlbmRpbmcgPyB3ZWJraXRJREJDdXJzb3IuTkVYVCA6IHdlYmtp
dElEQkN1cnNvci5QUkVWKTsKKyAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGN1cnNvckl0ZXJhdGlv
bjsKKyAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKK30KICAK
IG9wZW5EYXRhYmFzZSgpOyAvLyBUaGUgZmlyc3Qgc3RlcC4KIHZhciBzdWNjZXNzZnVsbHlQYXJz
ZWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIva2V5
cmFuZ2UtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIva2V5cmFu
Z2UtZXhwZWN0ZWQudHh0CmluZGV4IDhkNmJmODYuLjFhN2RmZmYgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2tleXJhbmdlLWV4cGVjdGVkLnR4dAorKysgYi9MYXlv
dXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9rZXlyYW5nZS1leHBlY3RlZC50eHQKQEAgLTE0MSw2
ICsxNDEsMTggQEAgUEFTUyBrZXlSYW5nZS5sZWZ0IGlzICdhYWYnCiBQQVNTIGtleVJhbmdlLnJp
Z2h0IGlzICdhYmYnCiBQQVNTIGxlZnRGbGFncyBpcyBrZXlSYW5nZS5MRUZUX09QRU4gfCBrZXlS
YW5nZS5MRUZUX0JPVU5ECiBQQVNTIHJpZ2h0RmxhZ3MgaXMga2V5UmFuZ2UuUklHSFRfT1BFTiB8
IGtleVJhbmdlLlJJR0hUX0JPVU5ECitQYXNzaW5nIGFuIGludmFsaWQga2V5IGludG8gb25seShb
XSkKK1BBU1MgQ2F1Z2h0IGV4Y2VwdGlvbjogRXJyb3I6IFRZUEVfTUlTTUFUQ0hfRVJSOiBET00g
RXhjZXB0aW9uIDE3CitQYXNzaW5nIGFuIGludmFsaWQga2V5IGludG8gcmlnaHRCb3VuZChbXSkK
K1BBU1MgQ2F1Z2h0IGV4Y2VwdGlvbjogRXJyb3I6IFRZUEVfTUlTTUFUQ0hfRVJSOiBET00gRXhj
ZXB0aW9uIDE3CitQYXNzaW5nIGFuIGludmFsaWQga2V5IGludG8gbGVmdEJvdW5kKFtdKQorUEFT
UyBDYXVnaHQgZXhjZXB0aW9uOiBFcnJvcjogVFlQRV9NSVNNQVRDSF9FUlI6IERPTSBFeGNlcHRp
b24gMTcKK1Bhc3NpbmcgYW4gaW52YWxpZCBrZXkgaW50byBib3VuZChudWxsLCBbXSkKK1BBU1Mg
Q2F1Z2h0IGV4Y2VwdGlvbjogRXJyb3I6IFRZUEVfTUlTTUFUQ0hfRVJSOiBET00gRXhjZXB0aW9u
IDE3CitQYXNzaW5nIGFuIGludmFsaWQga2V5IGludG8gYm91bmQoW10sbnVsbCkKK1BBU1MgQ2F1
Z2h0IGV4Y2VwdGlvbjogRXJyb3I6IFRZUEVfTUlTTUFUQ0hfRVJSOiBET00gRXhjZXB0aW9uIDE3
CitQYXNzaW5nIGFuIGludmFsaWQga2V5IGludG8gYm91bmQoW10sIFtdKQorUEFTUyBDYXVnaHQg
ZXhjZXB0aW9uOiBFcnJvcjogVFlQRV9NSVNNQVRDSF9FUlI6IERPTSBFeGNlcHRpb24gMTcKIFBB
U1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIAogVEVTVCBDT01QTEVURQpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIva2V5cmFuZ2UuaHRtbCBiL0xheW91dFRl
c3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2tleXJhbmdlLmh0bWwKaW5kZXggYzM4ODVmYy4uZTVhM2U1
NSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIva2V5cmFuZ2UuaHRt
bAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9rZXlyYW5nZS5odG1sCkBAIC00
Niw3ICs0Niw3IEBAIGZ1bmN0aW9uIGNoZWNrQm91bmRLZXlSYW5nZShsZWZ0LCByaWdodCwgb3Bl
bkxlZnQsIG9wZW5SaWdodCkKICAgICBsZWZ0RmxhZ3MgPSBrZXlSYW5nZS5mbGFncyAmIChrZXlS
YW5nZS5MRUZUX09QRU4gfCBrZXlSYW5nZS5MRUZUX0JPVU5EKTsKICAgICBzaG91bGRCZSgibGVm
dEZsYWdzIiwgb3BlbkxlZnQgPyAia2V5UmFuZ2UuTEVGVF9PUEVOIHwga2V5UmFuZ2UuTEVGVF9C
T1VORCIgOiAia2V5UmFuZ2UuTEVGVF9CT1VORCIpOwogICAgIHJpZ2h0RmxhZ3MgPSBrZXlSYW5n
ZS5mbGFncyAmIChrZXlSYW5nZS5SSUdIVF9PUEVOIHwga2V5UmFuZ2UuUklHSFRfQk9VTkQpOwot
ICAgIHNob3VsZEJlKCJyaWdodEZsYWdzIiwgb3BlblJpZ2h0ID8gImtleVJhbmdlLlJJR0hUX09Q
RU4gfCBrZXlSYW5nZS5SSUdIVF9CT1VORCIgOiAia2V5UmFuZ2UuUklHSFRfQk9VTkQiKTsKKyAg
ICBzaG91bGRCZSgicmlnaHRGbGFncyIsIG9wZW5SaWdodCA/ICJrZXlSYW5nZS5SSUdIVF9PUEVO
IHwga2V5UmFuZ2UuUklHSFRfQk9VTkQiIDogImtleVJhbmdlLlJJR0hUX0JPVU5EIik7IAogfQog
CiBmdW5jdGlvbiB0ZXN0KCkKQEAgLTExMiw2ICsxMTIsNTMgQEAgZnVuY3Rpb24gdGVzdCgpCiAg
ICAgY2hlY2tCb3VuZEtleVJhbmdlKCInYWFlJyIsICInYWJlJyIsIHRydWUsIGZhbHNlKTsKICAg
ICBjaGVja0JvdW5kS2V5UmFuZ2UoIidhYWYnIiwgIidhYmYnIiwgdHJ1ZSwgdHJ1ZSk7CiAKKyAg
ICB0cnkgeworICAgICAgICBkZWJ1ZygiUGFzc2luZyBhbiBpbnZhbGlkIGtleSBpbnRvIG9ubHko
W10pIik7CisgICAgICAgIHdlYmtpdElEQktleVJhbmdlLm9ubHkoW10pOworICAgICAgICB0ZXN0
RmFpbGVkKCJObyBleGNlcHRpb24gdGhyb3duIik7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAg
ICB0ZXN0UGFzc2VkKCJDYXVnaHQgZXhjZXB0aW9uOiAiICsgZS50b1N0cmluZygpKTsKKyAgICB9
CisKKyAgICB0cnkgeworICAgICAgICBkZWJ1ZygiUGFzc2luZyBhbiBpbnZhbGlkIGtleSBpbnRv
IHJpZ2h0Qm91bmQoW10pIik7CisgICAgICAgIHdlYmtpdElEQktleVJhbmdlLnJpZ2h0Qm91bmQo
W10pOworICAgICAgICB0ZXN0RmFpbGVkKCJObyBleGNlcHRpb24gdGhyb3duIik7CisgICAgfSBj
YXRjaCAoZSkgeworICAgICAgICB0ZXN0UGFzc2VkKCJDYXVnaHQgZXhjZXB0aW9uOiAiICsgZS50
b1N0cmluZygpKTsKKyAgICB9CisgCisgICAgdHJ5IHsKKyAgICAgICAgZGVidWcoIlBhc3Npbmcg
YW4gaW52YWxpZCBrZXkgaW50byBsZWZ0Qm91bmQoW10pIik7CisgICAgICAgIHdlYmtpdElEQktl
eVJhbmdlLmxlZnRCb3VuZChbXSk7CisgICAgICAgIHRlc3RGYWlsZWQoIk5vIGV4Y2VwdGlvbiB0
aHJvd24iKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIHRlc3RQYXNzZWQoIkNhdWdodCBl
eGNlcHRpb246ICIgKyBlLnRvU3RyaW5nKCkpOworICAgIH0KKworICAgIHRyeSB7CisgICAgICAg
IGRlYnVnKCJQYXNzaW5nIGFuIGludmFsaWQga2V5IGludG8gYm91bmQobnVsbCwgW10pIik7Cisg
ICAgICAgIHdlYmtpdElEQktleVJhbmdlLmJvdW5kKG51bGwsIFtdKTsKKyAgICAgICAgdGVzdEZh
aWxlZCgiTm8gZXhjZXB0aW9uIHRocm93biIpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAg
dGVzdFBhc3NlZCgiQ2F1Z2h0IGV4Y2VwdGlvbjogIiArIGUudG9TdHJpbmcoKSk7CisgICAgfQor
CisgICAgdHJ5IHsKKyAgICAgICAgZGVidWcoIlBhc3NpbmcgYW4gaW52YWxpZCBrZXkgaW50byBi
b3VuZChbXSxudWxsKSIpOworICAgICAgICB3ZWJraXRJREJLZXlSYW5nZS5ib3VuZChbXSwgbnVs
bCk7CisgICAgICAgIHRlc3RGYWlsZWQoIk5vIGV4Y2VwdGlvbiB0aHJvd24iKTsKKyAgICB9IGNh
dGNoIChlKSB7CisgICAgICAgIHRlc3RQYXNzZWQoIkNhdWdodCBleGNlcHRpb246ICIgKyBlLnRv
U3RyaW5nKCkpOworICAgIH0KKworICAgIHRyeSB7CisgICAgICAgIGRlYnVnKCJQYXNzaW5nIGFu
IGludmFsaWQga2V5IGludG8gYm91bmQoW10sIFtdKSIpOworICAgICAgICB3ZWJraXRJREJLZXlS
YW5nZS5ib3VuZChbXSwgW10pOworICAgICAgICB0ZXN0RmFpbGVkKCJObyBleGNlcHRpb24gdGhy
b3duIik7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICB0ZXN0UGFzc2VkKCJDYXVnaHQgZXhj
ZXB0aW9uOiAiICsgZS50b1N0cmluZygpKTsKKyAgICB9CiB9CiAKIHRlc3QoKTsKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL29iamVjdHN0b3JlLWJhc2ljcy1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9vYmplY3RzdG9yZS1iYXNp
Y3MtZXhwZWN0ZWQudHh0CmluZGV4IGQyMmU2ZjAuLmEwOTdjY2YgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL29iamVjdHN0b3JlLWJhc2ljcy1leHBlY3RlZC50eHQK
KysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvb2JqZWN0c3RvcmUtYmFzaWNzLWV4
cGVjdGVkLnR4dApAQCAtMTc2LDYgKzE3NiwxNSBAQCBQQVNTICdyZWFkeVN0YXRlJyBpbiBldmVu
dC50YXJnZXQgaXMgdHJ1ZQogUEFTUyBldmVudC50YXJnZXQucmVhZHlTdGF0ZSBpcyBldmVudC50
YXJnZXQuRE9ORQogCiBQQVNTIGV2ZW50LnJlc3VsdCBpcyBudWxsCitzdG9yZSA9IGV2ZW50LnNv
dXJjZQorUGFzc2luZyBhbiBpbnZhbGlkIGtleSBpbnRvIHN0b3JlLmdldCgpLgorUEFTUyBDYXVn
aHQgZXhjZXB0aW9uOiBFcnJvcjogVFlQRV9NSVNNQVRDSF9FUlI6IERPTSBFeGNlcHRpb24gMTcK
K1Bhc3NpbmcgYW4gaW52YWxpZCBrZXkgaW50byBzdG9yZS5yZW1vdmUoKS4KK1BBU1MgQ2F1Z2h0
IGV4Y2VwdGlvbjogRXJyb3I6IFRZUEVfTUlTTUFUQ0hfRVJSOiBET00gRXhjZXB0aW9uIDE3CitQ
YXNzaW5nIGFuIGludmFsaWQga2V5IGludG8gc3RvcmUuYWRkKCkuCitQQVNTIENhdWdodCBleGNl
cHRpb246IEVycm9yOiBUWVBFX01JU01BVENIX0VSUjogRE9NIEV4Y2VwdGlvbiAxNworUGFzc2lu
ZyBhbiBpbnZhbGlkIGtleSBpbnRvIHN0b3JlLnB1dCgpLgorUEFTUyBDYXVnaHQgZXhjZXB0aW9u
OiBFcnJvcjogVFlQRV9NSVNNQVRDSF9FUlI6IERPTSBFeGNlcHRpb24gMTcKIFBBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKIAogVEVTVCBDT01QTEVURQpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvb2JqZWN0c3RvcmUtYmFzaWNzLmh0bWwgYi9MYXlvdXRU
ZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9vYmplY3RzdG9yZS1iYXNpY3MuaHRtbAppbmRleCA5NTdk
ZmFhLi42OTY5NDc5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9v
YmplY3RzdG9yZS1iYXNpY3MuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRk
Yi9vYmplY3RzdG9yZS1iYXNpY3MuaHRtbApAQCAtNDQsMTAgKzQ0LDEwIEBAIGZ1bmN0aW9uIHNl
dFZlcnNpb25TdWNjZXNzKCkKIAogICAgIGRlbGV0ZUFsbE9iamVjdFN0b3JlcyhkYiwgY3JlYXRl
T2JqZWN0U3RvcmUpOwogfQotDQorCiBmdW5jdGlvbiBjcmVhdGVPYmplY3RTdG9yZSgpCi17DQot
ICAgIGRlYnVnKCJjcmVhdE9iamVjdFN0b3JlKCk6Iik7DQoreworICAgIGRlYnVnKCJjcmVhdE9i
amVjdFN0b3JlKCk6Iik7CiAgICAgd2luZG93LnN0b3JlID0gZXZhbEFuZExvZygic3RvcmUgPSBk
Yi5jcmVhdGVPYmplY3RTdG9yZSgnc3RvcmVOYW1lJywgbnVsbCkiKTsKICAgICB2YXIgc3RvcmVO
YW1lcyA9IGV2YWxBbmRMb2coInN0b3JlTmFtZXMgPSBkYi5vYmplY3RTdG9yZXMiKTsKIApAQCAt
NjUsMTkgKzY1LDE5IEBAIGZ1bmN0aW9uIGNyZWF0ZU9iamVjdFN0b3JlKCkKICAgICB9IGNhdGNo
IChlcnIpIHsKICAgICAgICAgdGVzdFBhc3NlZCgiRXhjZXB0aW9uIHRocm93bi4iKTsKICAgICAg
ICAgLy8gRklYTUU6IFZlcmlmeSB0aGUgY29ycmVjdCBleGNlcHRpb24gdGhyb3duLgotICAgIH0N
Ci0NCisgICAgfQorCiAgICAgY3JlYXRlSW5kZXgoKTsKLX0NCi0NCi1mdW5jdGlvbiBjcmVhdGVJ
bmRleCgpDQotew0KLSAgICBkZWJ1ZygiY3JlYXRlSW5kZXgoKToiKTsNCi0gICAgdmFyIGluZGV4
ID0gZXZhbEFuZExvZygiaW5kZXggPSBzdG9yZS5jcmVhdGVJbmRleCgnaW5kZXhOYW1lJywgJ3gn
LCB0cnVlKSIpOyAvLyB0cnVlID09IHVuaXF1ZSByZXF1aXJlbWVudC4NCi0gICAgc2hvdWxkQmVU
cnVlKCJpbmRleCAhPT0gbnVsbCIpOw0KLSAgICBzaG91bGRCZVRydWUoInN0b3JlLmluZGV4TmFt
ZXMuY29udGFpbnMoJ2luZGV4TmFtZScpIik7DQotICAgIGluZGV4ID0gZXZhbEFuZExvZygiaW5k
ZXggPSBzdG9yZS5pbmRleCgnaW5kZXhOYW1lJykiKTsNCi0gICAgc2hvdWxkQmVUcnVlKCJpbmRl
eCAhPT0gbnVsbCIpOw0KK30KKworZnVuY3Rpb24gY3JlYXRlSW5kZXgoKQoreworICAgIGRlYnVn
KCJjcmVhdGVJbmRleCgpOiIpOworICAgIHZhciBpbmRleCA9IGV2YWxBbmRMb2coImluZGV4ID0g
c3RvcmUuY3JlYXRlSW5kZXgoJ2luZGV4TmFtZScsICd4JywgdHJ1ZSkiKTsgLy8gdHJ1ZSA9PSB1
bmlxdWUgcmVxdWlyZW1lbnQuCisgICAgc2hvdWxkQmVUcnVlKCJpbmRleCAhPT0gbnVsbCIpOwor
ICAgIHNob3VsZEJlVHJ1ZSgic3RvcmUuaW5kZXhOYW1lcy5jb250YWlucygnaW5kZXhOYW1lJyki
KTsKKyAgICBpbmRleCA9IGV2YWxBbmRMb2coImluZGV4ID0gc3RvcmUuaW5kZXgoJ2luZGV4TmFt
ZScpIik7CisgICAgc2hvdWxkQmVUcnVlKCJpbmRleCAhPT0gbnVsbCIpOwogIAogICAgIGRlYnVn
KCJBc2sgZm9yIGFuIGluZGV4IHRoYXQgZG9lc24ndCBleGlzdDoiKTsKICAgICB0cnkgewpAQCAt
ODksNTcgKzg5LDU3IEBAIGZ1bmN0aW9uIGNyZWF0ZUluZGV4KCkKICAgICAgICAgLy8gRklYTUU6
IFZlcmlmeSB0aGUgY29ycmVjdCBleGNlcHRpb24gdGhyb3duLgogICAgIH0KIAotICAgIGNvbW1p
dEFuZENvbnRpbnVlKCk7ICAgIA0KKyAgICBjb21taXRBbmRDb250aW51ZSgpOyAgICAKK30KKwor
ZnVuY3Rpb24gY29tbWl0QW5kQ29udGludWUoKQoreworICAgIHdpbmRvdy5zZXRUaW1lb3V0KHRl
c3RTZXRWZXJzaW9uQWJvcnQsIDApOwogfQogCi1mdW5jdGlvbiBjb21taXRBbmRDb250aW51ZSgp
DQotew0KLSAgICB3aW5kb3cuc2V0VGltZW91dCh0ZXN0U2V0VmVyc2lvbkFib3J0LCAwKTsNCitm
dW5jdGlvbiB0ZXN0U2V0VmVyc2lvbkFib3J0KCkKK3sKKyAgICByZXN1bHQgPSBldmFsQW5kTG9n
KCdkYi5zZXRWZXJzaW9uKCJ2ZXJzaW9uIGZhaWwiKScpOworICAgIHZlcmlmeVJlc3VsdChyZXN1
bHQpOworICAgIHJlc3VsdC5vbnN1Y2Nlc3MgPSBjcmVhdGVBbm90aGVySW5kZXg7CisgICAgcmVz
dWx0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKIH0KIAotZnVuY3Rpb24gdGVz
dFNldFZlcnNpb25BYm9ydCgpDQotew0KLSAgICByZXN1bHQgPSBldmFsQW5kTG9nKCdkYi5zZXRW
ZXJzaW9uKCJ2ZXJzaW9uIGZhaWwiKScpOw0KLSAgICB2ZXJpZnlSZXN1bHQocmVzdWx0KTsNCi0g
ICAgcmVzdWx0Lm9uc3VjY2VzcyA9IGNyZWF0ZUFub3RoZXJJbmRleDsNCi0gICAgcmVzdWx0Lm9u
ZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsNCi19DQotDQotZnVuY3Rpb24gY3JlYXRl
QW5vdGhlckluZGV4KCkNCi17DQotICAgIHZlcmlmeVN1Y2Nlc3NFdmVudChldmVudCk7DQotICAg
IHNob3VsZEJlRXF1YWxUb1N0cmluZygiZGIudmVyc2lvbiIsICJ2ZXJzaW9uIGZhaWwiKTsNCi0N
Ci0gICAgdmFyIHNldFZlcnNpb25UcmFucyA9IGV2YWxBbmRMb2coInNldFZlcnNpb25UcmFucyA9
IGV2ZW50LnJlc3VsdCIpOw0KLSAgICBzaG91bGRCZVRydWUoInNldFZlcnNpb25UcmFucyAhPT0g
bnVsbCIpOw0KLSAgICBzZXRWZXJzaW9uVHJhbnMub25jb21wbGV0ZSA9IHVuZXhwZWN0ZWRDb21w
bGV0ZUNhbGxiYWNrOw0KLSAgICBzZXRWZXJzaW9uVHJhbnMub25hYm9ydCA9IGNoZWNrTWV0YWRh
dGE7DQotICAgIHdpbmRvdy5zdG9yZSA9IGV2YWxBbmRMb2coInN0b3JlID0gc2V0VmVyc2lvblRy
YW5zLm9iamVjdFN0b3JlKCdzdG9yZU5hbWUnKSIpOw0KLSAgICB2YXIgaW5kZXggPSBldmFsQW5k
TG9nKCJpbmRleCA9IHN0b3JlLmNyZWF0ZUluZGV4KCdpbmRleEZhaWwnLCAneCcpIik7DQotDQot
ICAgIHNldFZlcnNpb25UcmFucy5hYm9ydCgpOw0KLX0NCi0NCi1mdW5jdGlvbiBjaGVja01ldGFk
YXRhKCkNCi17DQotICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygiZGIudmVyc2lvbiIsICJuZXcg
dmVyc2lvbiIpOw0KLSAgICBzaG91bGRCZSgic3RvcmUuaW5kZXhOYW1lcyIsICJbJ2luZGV4TmFt
ZSddIik7DQotICAgIHNob3VsZEJlKCJzdG9yZS5pbmRleE5hbWVzLmxlbmd0aCIsICIxIik7DQot
ICAgIHNob3VsZEJlKCJzdG9yZS5pbmRleE5hbWVzLmNvbnRhaW5zKCcnKSIsICJmYWxzZSIpOw0K
LSAgICBzaG91bGRCZSgic3RvcmUuaW5kZXhOYW1lcy5jb250YWlucygnaW5kZXhGYWlsJykiLCAi
ZmFsc2UiKTsNCi0gICAgc2hvdWxkQmUoInN0b3JlLmluZGV4TmFtZXMuY29udGFpbnMoJ2luZGV4
TmFtZScpIiwgInRydWUiKTsNCitmdW5jdGlvbiBjcmVhdGVBbm90aGVySW5kZXgoKQoreworICAg
IHZlcmlmeVN1Y2Nlc3NFdmVudChldmVudCk7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJk
Yi52ZXJzaW9uIiwgInZlcnNpb24gZmFpbCIpOworCisgICAgdmFyIHNldFZlcnNpb25UcmFucyA9
IGV2YWxBbmRMb2coInNldFZlcnNpb25UcmFucyA9IGV2ZW50LnJlc3VsdCIpOworICAgIHNob3Vs
ZEJlVHJ1ZSgic2V0VmVyc2lvblRyYW5zICE9PSBudWxsIik7CisgICAgc2V0VmVyc2lvblRyYW5z
Lm9uY29tcGxldGUgPSB1bmV4cGVjdGVkQ29tcGxldGVDYWxsYmFjazsKKyAgICBzZXRWZXJzaW9u
VHJhbnMub25hYm9ydCA9IGNoZWNrTWV0YWRhdGE7CisgICAgd2luZG93LnN0b3JlID0gZXZhbEFu
ZExvZygic3RvcmUgPSBzZXRWZXJzaW9uVHJhbnMub2JqZWN0U3RvcmUoJ3N0b3JlTmFtZScpIik7
CisgICAgdmFyIGluZGV4ID0gZXZhbEFuZExvZygiaW5kZXggPSBzdG9yZS5jcmVhdGVJbmRleCgn
aW5kZXhGYWlsJywgJ3gnKSIpOworCisgICAgc2V0VmVyc2lvblRyYW5zLmFib3J0KCk7Cit9CisK
K2Z1bmN0aW9uIGNoZWNrTWV0YWRhdGEoKQoreworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygi
ZGIudmVyc2lvbiIsICJuZXcgdmVyc2lvbiIpOworICAgIHNob3VsZEJlKCJzdG9yZS5pbmRleE5h
bWVzIiwgIlsnaW5kZXhOYW1lJ10iKTsKKyAgICBzaG91bGRCZSgic3RvcmUuaW5kZXhOYW1lcy5s
ZW5ndGgiLCAiMSIpOworICAgIHNob3VsZEJlKCJzdG9yZS5pbmRleE5hbWVzLmNvbnRhaW5zKCcn
KSIsICJmYWxzZSIpOworICAgIHNob3VsZEJlKCJzdG9yZS5pbmRleE5hbWVzLmNvbnRhaW5zKCdp
bmRleEZhaWwnKSIsICJmYWxzZSIpOworICAgIHNob3VsZEJlKCJzdG9yZS5pbmRleE5hbWVzLmNv
bnRhaW5zKCdpbmRleE5hbWUnKSIsICJ0cnVlIik7CiAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5n
KCJzdG9yZS5pbmRleE5hbWVzWzBdIiwgImluZGV4TmFtZSIpOwogICAgIHNob3VsZEJlTnVsbCgi
c3RvcmUuaW5kZXhOYW1lc1sxXSIpOwogICAgIHNob3VsZEJlTnVsbCgic3RvcmUuaW5kZXhOYW1l
c1sxMDBdIik7CiAgICAgc2hvdWxkQmVOdWxsKCJzdG9yZS5pbmRleE5hbWVzLml0ZW0oMSkiKTsK
ICAgICBzaG91bGRCZU51bGwoInN0b3JlLmluZGV4TmFtZXMuaXRlbSgxMDApIik7Ci0gICAgYWRk
RGF0YSgpOw0KLX0NCisgICAgYWRkRGF0YSgpOworfQogCiAKIGZ1bmN0aW9uIGFkZERhdGEoKQog
ewotICAgIHZhciB0cmFuc2FjdGlvbiA9IGV2YWxBbmRMb2coInRyYW5zYWN0aW9uID0gZGIudHJh
bnNhY3Rpb24oKSIpOw0KKyAgICB2YXIgdHJhbnNhY3Rpb24gPSBldmFsQW5kTG9nKCJ0cmFuc2Fj
dGlvbiA9IGRiLnRyYW5zYWN0aW9uKCkiKTsKICAgICB0cmFuc2FjdGlvbi5vbmFib3J0ID0gdW5l
eHBlY3RlZEFib3J0Q2FsbGJhY2s7CiAgICAgd2luZG93LnN0b3JlID0gZXZhbEFuZExvZygic3Rv
cmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgnc3RvcmVOYW1lJykiKTsKICAgICByZXN1bHQg
PSBldmFsQW5kTG9nKCJzdG9yZS5hZGQoe3g6ICd2YWx1ZSd9LCAna2V5JykiKTsKQEAgLTE5NSw2
ICsxOTUsNDAgQEAgZnVuY3Rpb24gcmVtb3ZlU3VjY2VzcygpCiAgICAgZGVidWcoInJlbW92ZVN1
Y2Nlc3MoKToiKTsKICAgICB2ZXJpZnlTdWNjZXNzRXZlbnQoZXZlbnQpOwogICAgIHNob3VsZEJl
TnVsbCgiZXZlbnQucmVzdWx0Iik7CisgICAgdmFyIHN0b3JlID0gZXZhbEFuZExvZygic3RvcmUg
PSBldmVudC5zb3VyY2UiKTsKKworICAgIHRyeSB7CisgICAgICAgIGRlYnVnKCJQYXNzaW5nIGFu
IGludmFsaWQga2V5IGludG8gc3RvcmUuZ2V0KCkuIik7CisgICAgICAgIHN0b3JlLmdldChbXSk7
CisgICAgICAgIHRlc3RGYWlsZWQoIk5vIGV4Y2VwdGlvbiB0aHJvd24iKTsKKyAgICB9IGNhdGNo
IChlKSB7CisgICAgICAgIHRlc3RQYXNzZWQoIkNhdWdodCBleGNlcHRpb246ICIgKyBlLnRvU3Ry
aW5nKCkpOworICAgIH0KKworICAgIHRyeSB7CisgICAgICAgIGRlYnVnKCJQYXNzaW5nIGFuIGlu
dmFsaWQga2V5IGludG8gc3RvcmUucmVtb3ZlKCkuIik7CisgICAgICAgIHN0b3JlLnJlbW92ZShb
XSk7CisgICAgICAgIHRlc3RGYWlsZWQoIk5vIGV4Y2VwdGlvbiB0aHJvd24iKTsKKyAgICB9IGNh
dGNoIChlKSB7CisgICAgICAgIHRlc3RQYXNzZWQoIkNhdWdodCBleGNlcHRpb246ICIgKyBlLnRv
U3RyaW5nKCkpOworICAgIH0KKworICAgIHRyeSB7CisgICAgICAgIGRlYnVnKCJQYXNzaW5nIGFu
IGludmFsaWQga2V5IGludG8gc3RvcmUuYWRkKCkuIik7CisgICAgICAgIHN0b3JlLmFkZChudWxs
LCBbXSk7CisgICAgICAgIHRlc3RGYWlsZWQoIk5vIGV4Y2VwdGlvbiB0aHJvd24iKTsKKyAgICB9
IGNhdGNoIChlKSB7CisgICAgICAgIHRlc3RQYXNzZWQoIkNhdWdodCBleGNlcHRpb246ICIgKyBl
LnRvU3RyaW5nKCkpOworICAgIH0KKworICAgIHRyeSB7CisgICAgICAgIGRlYnVnKCJQYXNzaW5n
IGFuIGludmFsaWQga2V5IGludG8gc3RvcmUucHV0KCkuIik7CisgICAgICAgIHN0b3JlLnB1dChu
dWxsLCBbXSk7CisgICAgICAgIHRlc3RGYWlsZWQoIk5vIGV4Y2VwdGlvbiB0aHJvd24iKTsKKyAg
ICB9IGNhdGNoIChlKSB7CisgICAgICAgIHRlc3RQYXNzZWQoIkNhdWdodCBleGNlcHRpb246ICIg
KyBlLnRvU3RyaW5nKCkpOworICAgIH0KKwogICAgIGRvbmUoKTsKIH0KIApkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvb2JqZWN0c3RvcmUtY3Vyc29yLWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL29iamVjdHN0b3JlLWN1cnNvci1l
eHBlY3RlZC50eHQKaW5kZXggODgxZmU5Mi4uMTQ5M2E4MCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvc3RvcmFnZS9pbmRleGVkZGIvb2JqZWN0c3RvcmUtY3Vyc29yLWV4cGVjdGVkLnR4dAorKysg
Yi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9vYmplY3RzdG9yZS1jdXJzb3ItZXhwZWN0
ZWQudHh0CkBAIC04NTQsNiArODU0LDI2IEBAIFBBU1MgZXZlbnQucmVzdWx0IGlzIG51bGwKIE5l
eHQgdGVzdDogbG93ZXIgYm91bmQgaXMgNjsgdXBwZXIgYm91bmQgaXMgNjsgc29ydGVkIGRlc2Nl
bmRpbmcuCiBQQVNTIGV2ZW50LnJlc3VsdC5rZXkgaXMgdGVzdERhdGFbNl0KIFBBU1MgZXZlbnQu
cmVzdWx0IGlzIG51bGwKKworTmV4dCB0ZXN0OiBudWxsIGtleSBwYXRoIHNvcnRlZCBhc2NlbmRp
bmcuCitQQVNTIGV2ZW50LnJlc3VsdC5rZXkgaXMgdGVzdERhdGFbMF0KK1BBU1MgZXZlbnQucmVz
dWx0LmtleSBpcyB0ZXN0RGF0YVsxXQorUEFTUyBldmVudC5yZXN1bHQua2V5IGlzIHRlc3REYXRh
WzJdCitQQVNTIGV2ZW50LnJlc3VsdC5rZXkgaXMgdGVzdERhdGFbM10KK1BBU1MgZXZlbnQucmVz
dWx0LmtleSBpcyB0ZXN0RGF0YVs0XQorUEFTUyBldmVudC5yZXN1bHQua2V5IGlzIHRlc3REYXRh
WzVdCitQQVNTIGV2ZW50LnJlc3VsdC5rZXkgaXMgdGVzdERhdGFbNl0KK1BBU1MgZXZlbnQucmVz
dWx0IGlzIG51bGwKKworTmV4dCB0ZXN0OiBudWxsIGtleSBwYXRoIHNvcnRlZCBkZXNjZW5kaW5n
LgorUEFTUyBldmVudC5yZXN1bHQua2V5IGlzIHRlc3REYXRhWzZdCitQQVNTIGV2ZW50LnJlc3Vs
dC5rZXkgaXMgdGVzdERhdGFbNV0KK1BBU1MgZXZlbnQucmVzdWx0LmtleSBpcyB0ZXN0RGF0YVs0
XQorUEFTUyBldmVudC5yZXN1bHQua2V5IGlzIHRlc3REYXRhWzNdCitQQVNTIGV2ZW50LnJlc3Vs
dC5rZXkgaXMgdGVzdERhdGFbMl0KK1BBU1MgZXZlbnQucmVzdWx0LmtleSBpcyB0ZXN0RGF0YVsx
XQorUEFTUyBldmVudC5yZXN1bHQua2V5IGlzIHRlc3REYXRhWzBdCitQQVNTIGV2ZW50LnJlc3Vs
dCBpcyBudWxsCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExF
VEUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL29iamVjdHN0b3Jl
LWN1cnNvci5odG1sIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvb2JqZWN0c3RvcmUt
Y3Vyc29yLmh0bWwKaW5kZXggZDlhZDgwNS4uNTRlYWVmYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvc3RvcmFnZS9pbmRleGVkZGIvb2JqZWN0c3RvcmUtY3Vyc29yLmh0bWwKKysrIGIvTGF5b3V0
VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvb2JqZWN0c3RvcmUtY3Vyc29yLmh0bWwKQEAgLTEwNSw3
ICsxMDUsNyBAQCBmdW5jdGlvbiBzY2hlZHVsZVRlc3RzKCkKIGZ1bmN0aW9uIHJ1bk5leHRUZXN0
KCkKIHsKICAgICBpZiAoIXNjaGVkdWxlZFRlc3RzLmxlbmd0aCkgewotICAgICAgICBkb25lKCk7
CisgICAgICAgIHRlc3ROdWxsS2V5UmFuZ2UoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAK
QEAgLTE2NCw4ICsxNjQsNyBAQCBmdW5jdGlvbiBydW5OZXh0VGVzdCgpCiAgICAgZWxzZQogICAg
ICAgICBrZXlSYW5nZSA9IHdlYmtpdElEQktleVJhbmdlLnJpZ2h0Qm91bmQodGVzdERhdGFbdXBw
ZXJdLCB1cHBlcklzT3Blbik7CiAgCi0gICAgLy8gRklYTUU6IFNob3VsZCBiZSB3ZWJraXRJREJD
dXJzb3IuTkVYVCA6IHdlYmtpdElEQkN1cnNvci5QUkVWLCBidXQgd2UgY2FuJ3QgZG8gdGhhdCB5
ZXQuCi0gICAgdmFyIHJlcXVlc3QgPSBvYmplY3RTdG9yZS5vcGVuQ3Vyc29yKGtleVJhbmdlLCBh
c2NlbmRpbmcgPyAwIDogMik7CisgICAgdmFyIHJlcXVlc3QgPSBvYmplY3RTdG9yZS5vcGVuQ3Vy
c29yKGtleVJhbmdlLCBhc2NlbmRpbmcgPyB3ZWJraXRJREJDdXJzb3IuTkVYVCA6IHdlYmtpdElE
QkN1cnNvci5QUkVWKTsKICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGN1cnNvckl0ZXJhdGlvbjsK
ICAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKIH0KQEAgLTIw
Myw2ICsyMDIsMzggQEAgZnVuY3Rpb24gY3Vyc29ySXRlcmF0aW9uKCkKIAogICAgIGV2ZW50LnJl
c3VsdC5jb250aW51ZSgpOwogfQorCit3aW5kb3cubnVsbEtleVJhbmdlU3RlcCA9IDA7CitmdW5j
dGlvbiB0ZXN0TnVsbEtleVJhbmdlKCkKK3sKKyAgICB3aW5kb3cubG93ZXIgPSAwOworICAgIHdp
bmRvdy5sb3dlcklzT3BlbiA9IGZhbHNlOworICAgIHdpbmRvdy51cHBlciA9IHRlc3REYXRhLmxl
bmd0aC0xOworICAgIHdpbmRvdy51cHBlcklzT3BlbiA9IGZhbHNlOworCisgICAgc3RyID0gIk5l
eHQgdGVzdDogbnVsbCBrZXkgcGF0aCAiOworICAgIGlmICh3aW5kb3cubnVsbEtleVJhbmdlU3Rl
cCA9PSAwKSB7CisgICAgICAgIHN0ciArPSAic29ydGVkIGFzY2VuZGluZy4iOworICAgICAgICB3
aW5kb3cuYXNjZW5kaW5nID0gdHJ1ZTsKKyAgICAgICAgd2luZG93LmV4cGVjdGVkSW5kZXggPSBs
b3dlcjsKKyAgICAgICAgd2luZG93Lm51bGxLZXlSYW5nZVN0ZXAgPSAxOworICAgIH0gZWxzZSBp
ZiAod2luZG93Lm51bGxLZXlSYW5nZVN0ZXAgPT0gMSkgeworICAgICAgICBzdHIgKz0gInNvcnRl
ZCBkZXNjZW5kaW5nLiI7CisgICAgICAgIHdpbmRvdy5hc2NlbmRpbmcgPSBmYWxzZTsKKyAgICAg
ICAgd2luZG93LmV4cGVjdGVkSW5kZXggPSB1cHBlcjsKKyAgICAgICAgd2luZG93Lm51bGxLZXlS
YW5nZVN0ZXAgPSAyOworICAgIH0gZWxzZSB7CisgICAgICAgIGRvbmUoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGRlYnVnKCIiKTsKKyAgICBkZWJ1ZyhzdHIpOworIAorICAgIHZh
ciByZXF1ZXN0ID0gb2JqZWN0U3RvcmUub3BlbkN1cnNvcihudWxsLCBhc2NlbmRpbmcgPyB3ZWJr
aXRJREJDdXJzb3IuTkVYVCA6IHdlYmtpdElEQkN1cnNvci5QUkVWKTsKKyAgICByZXF1ZXN0Lm9u
c3VjY2VzcyA9IGN1cnNvckl0ZXJhdGlvbjsKKyAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVj
dGVkRXJyb3JDYWxsYmFjazsKK30KICAKIG9wZW5EYXRhYmFzZSgpOyAvLyBUaGUgZmlyc3Qgc3Rl
cC4KIHZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvc3RvcmFnZS9pbmRleGVkZGIvb3Blbi1jdXJzb3ItZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvc3RvcmFnZS9pbmRleGVkZGIvb3Blbi1jdXJzb3ItZXhwZWN0ZWQudHh0CmluZGV4IDFiY2E1
MjcuLmMzYzFhOGQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL29w
ZW4tY3Vyc29yLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRk
Yi9vcGVuLWN1cnNvci1leHBlY3RlZC50eHQKQEAgLTcyLDYgKzcyLDkgQEAgUEFTUyBldmVudC5y
ZXN1bHQuZGlyZWN0aW9uIGlzIDAKIFBBU1MgZXZlbnQucmVzdWx0LmtleSBpcyAnbXlLZXknCiBQ
QVNTIGV2ZW50LnJlc3VsdC52YWx1ZSBpcyAnbXlWYWx1ZScKIAorUGFzc2luZyBhbiBpbnZhbGlk
IGtleSBpbnRvIC5jb250aW51ZSgpLgorUEFTUyBDYXVnaHQgZXhjZXB0aW9uOiBFcnJvcjogVFlQ
RV9NSVNNQVRDSF9FUlI6IERPTSBFeGNlcHRpb24gMTcKKwogT3BlbmluZyBhbiBlbXB0eSBjdXJz
b3IuCiBvYmplY3RTdG9yZS5vcGVuQ3Vyc29yKGtleVJhbmdlKQogUEFTUyAnb25zdWNjZXNzJyBp
biByZXN1bHQgaXMgdHJ1ZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVk
ZGIvb3Blbi1jdXJzb3IuaHRtbCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL29wZW4t
Y3Vyc29yLmh0bWwKaW5kZXggZWM2MmYyYy4uMDg1YWEzOSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvc3RvcmFnZS9pbmRleGVkZGIvb3Blbi1jdXJzb3IuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9z
dG9yYWdlL2luZGV4ZWRkYi9vcGVuLWN1cnNvci5odG1sCkBAIC00MSw2ICs0MSwxNCBAQCBmdW5j
dGlvbiBjdXJzb3JTdWNjZXNzKCkKICAgICBzaG91bGRCZSgiZXZlbnQucmVzdWx0LmtleSIsICIn
bXlLZXknIik7CiAgICAgc2hvdWxkQmUoImV2ZW50LnJlc3VsdC52YWx1ZSIsICInbXlWYWx1ZSci
KTsKICAgICBkZWJ1ZygiIik7CisgICAgdHJ5IHsKKyAgICAgICAgZGVidWcoIlBhc3NpbmcgYW4g
aW52YWxpZCBrZXkgaW50byAuY29udGludWUoKS4iKTsKKyAgICAgICAgZXZlbnQucmVzdWx0LmNv
bnRpbnVlKFtdKTsKKyAgICAgICAgdGVzdEZhaWxlZCgiTm8gZXhjZXB0aW9uIHRocm93biIpOwor
ICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgdGVzdFBhc3NlZCgiQ2F1Z2h0IGV4Y2VwdGlvbjog
IiArIGUudG9TdHJpbmcoKSk7CisgICAgfQorICAgIGRlYnVnKCIiKTsKICAgICBvcGVuRW1wdHlD
dXJzb3IoKTsKIH0KIApAQCAtNTIsMTAgKzYwLDEwIEBAIGZ1bmN0aW9uIG9wZW5DdXJzb3IoKQog
ICAgIHZlcmlmeVJlc3VsdChyZXN1bHQpOwogICAgIHJlc3VsdC5vbnN1Y2Nlc3MgPSBjdXJzb3JT
dWNjZXNzOwogICAgIHJlc3VsdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Ci19
DQotDQorfQorCiBmdW5jdGlvbiBjcmVhdGVBbmRQb3B1bGF0ZU9iamVjdFN0b3JlKCkgCi17DQor
ewogICAgIHZhciBvYmplY3RTdG9yZSA9IGV2YWxBbmRMb2coIm9iamVjdFN0b3JlID0gZGIuY3Jl
YXRlT2JqZWN0U3RvcmUoJ3Rlc3QnKSIpOwogICAgIHJlc3VsdCA9IGV2YWxBbmRMb2coIm9iamVj
dFN0b3JlLmFkZCgnbXlWYWx1ZScsICdteUtleScpIik7CiAgICAgdmVyaWZ5UmVzdWx0KHJlc3Vs
dCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmlu
ZGV4IDYwZjI2NTguLjA2YTk2NzEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDIgQEAKKzIwMTAtMTAtMjYgIEplcmVteSBP
cmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisgICAgICAgIEZpeCBJbmRleGVkREIgY3Jhc2hlcworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDgyNjYKKworICAgICAgICBJZiBJREJL
ZXkgcmV0dXJucyBudWxsLCB0eXBlIGNvbnZlcnNpb24gZmFpbGVkLiBIYW5kbGUgdGhpcyBjYXNl
CisgICAgICAgIGluIHRoZSBiaW5kaW5ncy4KKworICAgICAgICBDaGFuZ2UgVU5LTk9XTl9FUlIg
dG8gYmUgMSBzaW5jZSAwIGlzIGhhcmQgY29kZWQgdG8gbWVhbiBubyBlcnJvci4KKyAgICAgICAg
VGhpcyBpcyBqdXN0IGEgc3RvcC1nYXAgbW92ZSB1bnRpbCB3ZSBnZXQgaXQgZmlndXJlZCBvdXQg
dXBzdHJlYW0uCisKKyAgICAgICAgSURCT2JqZWN0U3RvcmUgbmVlZHMgdG8gaGFuZGxlIG51bGwg
cmFuZ2VzLgorCisgICAgICAgIEl0J3MgYWN0dWFsbHkgT0sgZm9yIG1fdHJhbnNhY3Rpb24gdG8g
YmUgbm9uLW51bGwgd2hlbiBoaXR0aW5nIHRoZQorICAgICAgICBkZXN0cnVjdG9yLiBXZSBqdXN0
IG5lZWQgdG8gdGhlbiByZW1vdmUgaXQgZnJvbSB0aGUgc2V0IG9mIHBlbmRpbmcKKyAgICAgICAg
dHJhbnNhY3Rpb25zLgorCisgICAgICAgIFRoZSB0cmFuc2FjdGlvbiBjYW4gYmVjb21lIGFib3J0
ZWQgaW4gdGhlIG1pZGRsZSBvZiBwcm9jZXNzaW5nIGEKKyAgICAgICAgbGlzdCBvZiB0YXNrcy4g
Rml4IHRoaXMuCisKKyAgICAgICAgQWxsIGNoYW5nZXMgKGV4Y2VwdCB0aGUgbGFzdCAyIHJhY2Vz
KSBhcmUgdGVzdGVkIGluIExheW91dFRlc3RzLgorICAgICAgICBJIGNvdWxkbid0IGZpbmQgYSB3
YXkgdG8gcmVsaWFibHkgcmVwcm9kdWNlIHRoZSByYWNlcy4KKworICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3RPYmouY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9iakludGVybmFs
OjppZGJLZXlDYWxsYmFjayk6CisgICAgICAgICogYmluZGluZ3MvdjgvSURCQmluZGluZ1V0aWxp
dGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVJREJLZXlGcm9tVmFsdWUpOgorICAg
ICAgICAqIHN0b3JhZ2UvSURCRGF0YWJhc2VFeGNlcHRpb24uaDoKKyAgICAgICAgKiBzdG9yYWdl
L0lEQkRhdGFiYXNlRXhjZXB0aW9uLmlkbDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQk9iamVjdFN0
b3JlQmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6b3BlbkN1cnNvckludGVybmFsKToKKyAgICAgICAgKiBzdG9yYWdlL0lEQlJlcXVl
c3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6fklEQlJlcXVlc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6dGltZXJGaXJlZCk6CisgICAgICAgICogc3RvcmFn
ZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw6OnRhc2tUaW1lckZpcmVkKToKKwogMjAxMC0xMC0yMSAgSmVy
ZW15IE9ybG93ICA8am9ybG93QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9yVjgucG0gYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4
LnBtCmluZGV4IDQ2ZDljZmEuLjQyM2NjNmIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JWOC5wbQpAQCAtMzAxMiw2ICszMDEyLDcgQEAgc3ViIFR5cGVDYW5GYWls
Q29udmVyc2lvbgogICAgICRpbXBsSW5jbHVkZXN7IkV4Y2VwdGlvbkNvZGUuaCJ9ID0gMSBpZiAk
dHlwZSBlcSAiQXR0ciI7CiAgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIkF0dHIiOwogICAgIHJl
dHVybiAxIGlmICR0eXBlIGVxICJWb2lkQ2FsbGJhY2siOworICAgIHJldHVybiAxIGlmICR0eXBl
IGVxICJJREJLZXkiOwogICAgIHJldHVybiBCYXNpY1R5cGVDYW5GYWlsQ29udmVyc2lvbigkc2ln
bmF0dXJlKTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VjgvVjhUZXN0T2JqLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVz
dE9iai5jcHAKaW5kZXggNDRmMGQzZS4uNGJlMTE3NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCkBAIC02NzgsOSArNjc4LDE5IEBAIHN0YXRp
YyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gaWRiS2V5Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50
cyYgYXJncykKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLmlkYktleSIpOwogICAgIFRl
c3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7Ci0gICAgRVhD
RVBUSU9OX0JMT0NLKFJlZlB0cjxJREJLZXk+LCBrZXksIGNyZWF0ZUlEQktleUZyb21WYWx1ZShh
cmdzWzBdKSk7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgeworICAgIFJlZlB0cjxJ
REJLZXk+IGtleSA9IGNyZWF0ZUlEQktleUZyb21WYWx1ZShhcmdzWzBdKTsKKyAgICBpZiAoVU5M
SUtFTFkoIWtleSkpIHsKKyAgICAgICAgZWMgPSBUWVBFX01JU01BVENIX0VSUjsKKyAgICAgICAg
Z290byBmYWlsOworICAgIH0KICAgICBpbXAtPmlkYktleShrZXkpOwogICAgIHJldHVybiB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4oKTsKKyAgICB9CisgICAgZmFpbDoKKyAgICBWOFByb3h5OjpzZXRE
T01FeGNlcHRpb24oZWMpOworICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKIH0K
IAogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBtZXRob2RXaXRoRXhjZXB0aW9uQ2FsbGJh
Y2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGlu
Z3MvdjgvSURCQmluZGluZ1V0aWxpdGllcy5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L0lEQkJp
bmRpbmdVdGlsaXRpZXMuY3BwCmluZGV4IDRhNTg4NTMuLjEyM2IxNWMgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvYmluZGluZ3MvdjgvSURCQmluZGluZ1V0aWxpdGllcy5jcHAKKysrIGIvV2ViQ29yZS9i
aW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcApAQCAtMjgsNiArMjgsNyBAQAogCiAj
aWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKKyNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2Vw
dGlvbi5oIgogI2luY2x1ZGUgIklEQktleS5oIgogI2luY2x1ZGUgIklEQktleVBhdGguaCIKICNp
bmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKQEAgLTQ1LDcgKzQ2LDggQEAgUGFzc1Jl
ZlB0cjxJREJLZXk+IGNyZWF0ZUlEQktleUZyb21WYWx1ZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
dmFsdWUpCiAgICAgaWYgKHZhbHVlLT5Jc1N0cmluZygpKQogICAgICAgICByZXR1cm4gSURCS2V5
OjpjcmVhdGUodjhWYWx1ZVRvV2ViQ29yZVN0cmluZyh2YWx1ZSkpOwogICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgZGF0ZXMuCi0gICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gMDsgLy8gU2lnbmFs
cyB0eXBlIGVycm9yLgogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmggYi9XZWJDb3JlL3N0b3JhZ2UvSURC
RGF0YWJhc2VFeGNlcHRpb24uaAppbmRleCAyNTFjZmM5Li45NDU3NzNjIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VFeGNlcHRpb24uaAorKysgYi9XZWJDb3JlL3N0b3Jh
Z2UvSURCRGF0YWJhc2VFeGNlcHRpb24uaApAQCAtNDIsOSArNDIsOCBAQCBwdWJsaWM6CiAgICAg
fQogICAgIH5JREJEYXRhYmFzZUV4Y2VwdGlvbigpIHsgfQogCi0gICAgLy8gS2VlcCBpbiBzeW5j
IHdpdGggd2hhdCdzIGluIHRoZSAuaWRsIGZpbGUuCiAgICAgZW51bSBFcnJvckNvZGUgewotICAg
ICAgICBVTktOT1dOX0VSUiA9IDAsCisgICAgICAgIFVOS05PV05fRVJSID0gMSwKICAgICAgICAg
Tk9OX1RSQU5TSUVOVF9FUlIgPSAxLAogICAgICAgICBOT1RfRk9VTkRfRVJSID0gMiwKICAgICAg
ICAgQ09OU1RSQUlOVF9FUlIgPSAzLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0lEQkRh
dGFiYXNlRXhjZXB0aW9uLmlkbCBiL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUV4Y2VwdGlv
bi5pZGwKaW5kZXggODhlNmU3ZS4uMWYxNWZjMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdl
L0lEQkRhdGFiYXNlRXhjZXB0aW9uLmlkbAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJh
c2VFeGNlcHRpb24uaWRsCkBAIC0yOCw3ICsyOCw4IEBAIG1vZHVsZSBzdG9yYWdlIHsKICAgICBp
bnRlcmZhY2UgWwogICAgICAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFCiAgICAgXSBJ
REJEYXRhYmFzZUV4Y2VwdGlvbiB7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFVOS05P
V05fRVJSID0gMDsKKyAgICAgICAgLy8gRklYTUU6IFRoZXNlIGVycm9yIGNvZGVzIGNvbmZsaWN0
IHdpdGggb3RoZXJzLgorICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBVTktOT1dOX0VSUiA9
IDE7CiAgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IE5PTl9UUkFOU0lFTlRfRVJSID0gMTsK
ICAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgTk9UX0ZPVU5EX0VSUiA9IDI7CiAgICAgICAg
IGNvbnN0IHVuc2lnbmVkIHNob3J0IENPTlNUUkFJTlRfRVJSID0gMzsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcCBiL1dlYkNvcmUvc3Rv
cmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAppbmRleCA5ZWYxNDRkLi45N2Q4NGQy
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5j
cHAKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwCkBA
IC0zOTQsMTEgKzM5NCwxNCBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Om9wZW5D
dXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcHJwUmFuZ2UsIHVucwogCiB2b2lkIElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6Om9wZW5DdXJzb3JJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9y
ZSwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIHVuc2lnbmVkIHNob3J0IHRtcERpcmVj
dGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uKQogeworICAgIGJvb2wgbGVm
dEJvdW5kID0gcmFuZ2UgJiYgKHJhbmdlLT5mbGFncygpICYgSURCS2V5UmFuZ2U6OkxFRlRfQk9V
TkQgfHwgcmFuZ2UtPmZsYWdzKCkgPT0gSURCS2V5UmFuZ2U6OlNJTkdMRSk7CisgICAgYm9vbCBy
aWdodEJvdW5kID0gcmFuZ2UgJiYgKHJhbmdlLT5mbGFncygpICYgSURCS2V5UmFuZ2U6OlJJR0hU
X0JPVU5EIHx8IHJhbmdlLT5mbGFncygpID09IElEQktleVJhbmdlOjpTSU5HTEUpOworCiAgICAg
Ly8gU2V2ZXJhbCBmaWxlcyBkZXBlbmQgb24gdGhpcyBvcmRlciBvZiBzZWxlY3RzLgogICAgIFN0
cmluZyBzcWwgPSAiU0VMRUNUIGlkLCBrZXlTdHJpbmcsIGtleURhdGUsIGtleU51bWJlciwgdmFs
dWUgRlJPTSBPYmplY3RTdG9yZURhdGEgV0hFUkUgIjsKLSAgICBpZiAocmFuZ2UtPmZsYWdzKCkg
JiBJREJLZXlSYW5nZTo6TEVGVF9CT1VORCB8fCByYW5nZS0+ZmxhZ3MoKSA9PSBJREJLZXlSYW5n
ZTo6U0lOR0xFKQorICAgIGlmIChsZWZ0Qm91bmQpCiAgICAgICAgIHNxbCArPSByYW5nZS0+bGVm
dCgpLT5sZWZ0Q3Vyc29yV2hlcmVGcmFnbWVudChyYW5nZS0+bGVmdFdoZXJlQ2xhdXNlQ29tcGFy
aXNvbk9wZXJhdG9yKCkpOwotICAgIGlmIChyYW5nZS0+ZmxhZ3MoKSAmIElEQktleVJhbmdlOjpS
SUdIVF9CT1VORCB8fCByYW5nZS0+ZmxhZ3MoKSA9PSBJREJLZXlSYW5nZTo6U0lOR0xFKQorICAg
IGlmIChyaWdodEJvdW5kKQogICAgICAgICBzcWwgKz0gcmFuZ2UtPnJpZ2h0KCktPnJpZ2h0Q3Vy
c29yV2hlcmVGcmFnbWVudChyYW5nZS0+cmlnaHRXaGVyZUNsYXVzZUNvbXBhcmlzb25PcGVyYXRv
cigpKTsKICAgICBzcWwgKz0gIm9iamVjdFN0b3JlSWQgPSA/IE9SREVSIEJZICI7CiAKQEAgLTQx
Myw5ICs0MTYsOSBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Om9wZW5DdXJzb3JJ
bnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzcwogICAgIEFTU0VSVF9VTlVTRUQo
b2ssIG9rKTsgLy8gRklYTUU6IEJldHRlciBlcnJvciBoYW5kbGluZz8KIAogICAgIGludCBjdXJy
ZW50Q29sdW1uID0gMTsKLSAgICBpZiAocmFuZ2UtPmZsYWdzKCkgJiBJREJLZXlSYW5nZTo6TEVG
VF9CT1VORCB8fCByYW5nZS0+ZmxhZ3MoKSA9PSBJREJLZXlSYW5nZTo6U0lOR0xFKQorICAgIGlm
IChsZWZ0Qm91bmQpCiAgICAgICAgIGN1cnJlbnRDb2x1bW4gKz0gcmFuZ2UtPmxlZnQoKS0+Ymlu
ZCgqcXVlcnksIGN1cnJlbnRDb2x1bW4pOwotICAgIGlmIChyYW5nZS0+ZmxhZ3MoKSAmIElEQktl
eVJhbmdlOjpSSUdIVF9CT1VORCB8fCByYW5nZS0+ZmxhZ3MoKSA9PSBJREJLZXlSYW5nZTo6U0lO
R0xFKQorICAgIGlmIChyaWdodEJvdW5kKQogICAgICAgICBjdXJyZW50Q29sdW1uICs9IHJhbmdl
LT5yaWdodCgpLT5iaW5kKCpxdWVyeSwgY3VycmVudENvbHVtbik7CiAgICAgcXVlcnktPmJpbmRJ
bnQ2NChjdXJyZW50Q29sdW1uLCBvYmplY3RTdG9yZS0+aWQoKSk7CiAKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvc3RvcmFnZS9JREJSZXF1ZXN0LmNwcCBiL1dlYkNvcmUvc3RvcmFnZS9JREJSZXF1ZXN0
LmNwcAppbmRleCBjNjdlMzc5Li5iMGRhODZiIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0b3JhZ2Uv
SURCUmVxdWVzdC5jcHAKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0lEQlJlcXVlc3QuY3BwCkBAIC01
OSwxNSArNTksOCBAQCBJREJSZXF1ZXN0OjpJREJSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCQW55PiBzb3VyYwogCiBJREJSZXF1ZXN0Ojp+SURC
UmVxdWVzdCgpCiB7Ci0gICAgLy8gVGhlIHRyYW5zYWN0aW9uIHBvaW50ZXIgaXMgdXNlZCB0byBu
b3RpZnkgdGhlIHRyYW5zYWN0aW9uIG9uY2UgdGhlIEpTIGV2ZW50cyB3ZXJlCi0gICAgLy8gZGlz
cGF0Y2hlZCBieSB0aGlzIHJlcXVlc3Qgb2JqZWN0LiBJZiBubyBuZXcgdGFza3Mgd2VyZSBhZGRl
ZCBieSB0aGUgZXZlbnQgSlMgY2FsbGJhY2tzLAotICAgIC8vIHRoZSB0cmFuc2FjdGlvbiBjYW4g
Y29tbWl0LiBPdGhlcndpc2UsIGl0IGNhbiBjb250aW51ZSBleGVjdXRpbmcgdGhlIG5ldyB0YXNr
cy4KLSAgICAvLyBJdCBpcyBpbXBvcnRhbnQgdG8gZ3VhcmFudGVlIHRoYXQgdGhlIHRyYW5zYWN0
aW9uIGlzIG5vdGlmaWVkIGFmdGVyIHRoZSBldmVudHMgYXJlCi0gICAgLy8gZGlzcGF0Y2hlZCwg
YXMgdGhlIHRyYW5zYWN0aW9uIGNhbm5vdCBjb21taXQgb3IgZXhlY3V0ZSBuZXcgdGFza3MgaW4g
dGhlIGFic2VuY2UKLSAgICAvLyBvZiB0aGVzZSBub3RpZmljYXRpb25zLiBXZSBjbGVhciB0aGUg
dHJhbnNhY3Rpb24gcG9pbnRlciBvbmNlIHRoZSBldmVudHMgaGF2ZSBkaXNwYXRjaGVkLAotICAg
IC8vIHNvIGhhdmluZyBhIG5vbi16ZXJvIHBvaW50ZXIgYXQgSURCUmVxdWVzdCBkZXN0cnVjdGlv
biB0aW1lIHNob3dzIHRoYXQgdGhlIGV2ZW50cyBoYXZlIG5vdAotICAgIC8vIHlldCBmaXJlZCBh
bmQgdGhlcmUgaXMgYSB0cmFuc2FjdGlvbiB3YWl0aW5nIHRvIGJlIG5vdGlmaWVkLiBUaGlzIGlz
IGFuIGVycm9yLgotICAgIEFTU0VSVCghbV90cmFuc2FjdGlvbik7CisgICAgaWYgKG1fdHJhbnNh
Y3Rpb24pCisgICAgICAgIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3I6OnJlbW92ZVBlbmRp
bmdUcmFuc2FjdGlvbihtX3RyYW5zYWN0aW9uLmdldCgpKTsKIH0KIAogYm9vbCBJREJSZXF1ZXN0
OjpyZXNldFJlYWR5U3RhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2Fj
dGlvbikKQEAgLTE1OSw2ICsxNTIsNyBAQCB2b2lkIElEQlJlcXVlc3Q6OnRpbWVyRmlyZWQoVGlt
ZXI8SURCUmVxdWVzdD4qKQogewogICAgIEFTU0VSVChtX3NlbGZSZWYpOwogICAgIEFTU0VSVCht
X3BlbmRpbmdFdmVudHMuc2l6ZSgpKTsKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhhbmRsZSB0
aGUgc3RvcCBldmVudCBhbmQgc3RvcCBhbnkgdGltZXJzIHdoZW4gd2Ugc2VlIGl0LiBXZSBjYW4g
dGhlbiBhc3NlcnQgaGVyZSB0aGF0IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgaXMgbm9uLW51bGwu
CiAKICAgICAvLyBXZSBuZWVkIHRvIGtlZXAgc2VsZi1yZWZlcmVuY2luZyBvdXJzZWxmLCBvdGhl
cndpc2UgaXQncyBwb3NzaWJsZSB3ZSdsbCBiZSBkZWxldGVkLgogICAgIC8vIEJ1dCBpbiBzb21l
IGNhc2VzLCBzdXNwZW5kKCkgY291bGQgYmUgY2FsbGVkIHdoaWxlIHdlJ3JlIGRpc3BhdGNoaW5n
IGFuIGV2ZW50LCBzbyB3ZQpAQCAtMTcyLDYgKzE2NiwxMCBAQCB2b2lkIElEQlJlcXVlc3Q6OnRp
bWVyRmlyZWQoVGltZXI8SURCUmVxdWVzdD4qKQogICAgIFZlY3RvcjxQZW5kaW5nRXZlbnQ+IHBl
bmRpbmdFdmVudHM7CiAgICAgcGVuZGluZ0V2ZW50cy5zd2FwKG1fcGVuZGluZ0V2ZW50cyk7CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwZW5kaW5nRXZlbnRzLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIC8vIEl0J3MgcG9zc2libGUgd2UndmUgbmF2aWdhdGVkIGluIHdoaWNoIGNhc2Ugd2Un
bGwgY3Jhc2guCisgICAgICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQorICAgICAg
ICAgICAgcmV0dXJuOworCiAgICAgICAgIGlmIChwZW5kaW5nRXZlbnRzW2ldLm1fZXJyb3IpIHsK
ICAgICAgICAgICAgIEFTU0VSVCghcGVuZGluZ0V2ZW50c1tpXS5tX3Jlc3VsdCk7CiAgICAgICAg
ICAgICBkaXNwYXRjaEV2ZW50KElEQkVycm9yRXZlbnQ6OmNyZWF0ZShtX3NvdXJjZSwgKnBlbmRp
bmdFdmVudHNbaV0ubV9lcnJvcikpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0lEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGwuY3BwIGIvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGwuY3BwCmluZGV4IDUwMTZhM2YuLjJiMWY3MzIgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcAorKysgYi9XZWJDb3JlL3N0
b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAKQEAgLTE0Nyw3ICsxNDcsNyBAQCB2
b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnRhc2tUaW1lckZpcmVkKFRpbWVyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw+KgogCiAgICAgVGFza1F1ZXVlIHF1ZXVlOwogICAgIHF1ZXVl
LnN3YXAobV90YXNrUXVldWUpOwotICAgIHdoaWxlICghcXVldWUuaXNFbXB0eSgpKSB7CisgICAg
d2hpbGUgKCFxdWV1ZS5pc0VtcHR5KCkgJiYgbV9zdGF0ZSAhPSBGaW5pc2hlZCkgewogICAgICAg
ICBPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gdGFzayhxdWV1ZS5maXJzdCgp
LnJlbGVhc2UoKSk7CiAgICAgICAgIHF1ZXVlLnJlbW92ZUZpcnN0KCk7CiAgICAgICAgIG1fcGVu
ZGluZ0V2ZW50cysrOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggOTZhNWM2Yy4uYWU2ZDYwMyAxMDA2NDQKLS0t
IGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTAtMTAtMjYgIEplcmVteSBPcmxvdyAgPGpvcmxvd0Bj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgRml4IEluZGV4ZWREQiBjcmFzaGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD00ODI2NgorCisgICAgICAgIE1ha2UgV2ViSURCT2JqZWN0U3Rv
cmVJbXBsIG1hdGNoIHRoZSB3YXkgdGhhdCBXZWJJREJJbmRleEltcGwgcGFzc2VzCisgICAgICAg
IGluIGN1cnNvciBwYXJhbWV0ZXJzICh3aGljaCBpcyB0aGUgY29ycmVjdCB3YXkpLiBLZXlSYW5n
ZSBrbm93cyBob3cKKyAgICAgICAgdG8gY29udmVydCBpdHNlbGYgdG8gYSBXZWJDb3JlIHR5cGUt
LWV2ZW4gaWYgdGhlIHZhbHVlIGlzIG51bGwuCisKKyAgICAgICAgKiBzcmMvV2ViSURCT2JqZWN0
U3RvcmVJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViSURCT2JqZWN0U3RvcmVJbXBsOjpv
cGVuQ3Vyc29yKToKKwogMjAxMC0xMC0yMSAgSmVyZW15IE9ybG93ICA8am9ybG93QGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KZGlmZiAtLWdpdCBh
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCT2JqZWN0U3RvcmVJbXBsLmNwcCBiL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViSURCT2JqZWN0U3RvcmVJbXBsLmNwcAppbmRleCA5NjQ5NWZlLi41ZGQy
NjUyIDEwMDc1NQotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQk9iamVjdFN0b3JlSW1w
bC5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJPYmplY3RTdG9yZUltcGwuY3Bw
CkBAIC0xMDQsNyArMTA0LDcgQEAgdm9pZCBXZWJJREJPYmplY3RTdG9yZUltcGw6OnJlbW92ZUlu
ZGV4KGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2ViSURCVHJhbnMKIAogdm9pZCBXZWJJ
REJPYmplY3RTdG9yZUltcGw6Om9wZW5DdXJzb3IoY29uc3QgV2ViSURCS2V5UmFuZ2UmIGtleVJh
bmdlLCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIFdlYklEQkNhbGxiYWNrcyogY2FsbGJhY2tz
LCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIFdlYkV4Y2VwdGlvbkNvZGUm
IGVjKQogewotICAgIG1fb2JqZWN0U3RvcmUtPm9wZW5DdXJzb3IoSURCS2V5UmFuZ2U6OmNyZWF0
ZShrZXlSYW5nZS5sZWZ0KCksIGtleVJhbmdlLnJpZ2h0KCksIGtleVJhbmdlLmZsYWdzKCkpLCBk
aXJlY3Rpb24sIElEQkNhbGxiYWNrc1Byb3h5OjpjcmVhdGUoY2FsbGJhY2tzKSwgdHJhbnNhY3Rp
b24uZ2V0SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKCksIGVjKTsKKyAgICBtX29iamVj
dFN0b3JlLT5vcGVuQ3Vyc29yKGtleVJhbmdlLCBkaXJlY3Rpb24sIElEQkNhbGxiYWNrc1Byb3h5
OjpjcmVhdGUoY2FsbGJhY2tzKSwgdHJhbnNhY3Rpb24uZ2V0SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlKCksIGVjKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>
<flag name="review"
          id="62007"
          type_id="1"
          status="-"
          setter="jorlow"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71874</attachid>
            <date>2010-10-26 07:08:16 -0700</date>
            <delta_ts>2010-10-26 09:19:47 -0700</delta_ts>
            <desc>fixed</desc>
            <filename>a</filename>
            <type>text/plain</type>
            <size>30380</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA4NzcxMTQ5Li45NWJiMThhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMTAtMTAt
MjYgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4IEluZGV4ZWREQiBjcmFzaGVzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00ODI2NgorCisg
ICAgICAgIFRlc3QgYWxsIHRoZSBjaGFuZ2VzIG1hZGUgaW4gV2ViQ29yZS4KKworICAgICAgICAq
IHN0b3JhZ2UvaW5kZXhlZGRiL2NvbnN0YW50cy1leHBlY3RlZC50eHQ6CisgICAgICAgICogc3Rv
cmFnZS9pbmRleGVkZGIvY29uc3RhbnRzLmh0bWw6CisgICAgICAgICogc3RvcmFnZS9pbmRleGVk
ZGIvZGF0YWJhc2UtcXVvdGEtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHN0b3JhZ2UvaW5kZXhl
ZGRiL2luZGV4LWJhc2ljcy1leHBlY3RlZC50eHQ6CisgICAgICAgICogc3RvcmFnZS9pbmRleGVk
ZGIvaW5kZXgtYmFzaWNzLmh0bWw6CisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvaW5kZXgt
Y3Vyc29yLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9pbmRleC1j
dXJzb3IuaHRtbDoKKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9rZXlyYW5nZS1leHBlY3Rl
ZC50eHQ6CisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIva2V5cmFuZ2UuaHRtbDoKKyAgICAg
ICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9vYmplY3RzdG9yZS1iYXNpY3MtZXhwZWN0ZWQudHh0Ogor
ICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL29iamVjdHN0b3JlLWJhc2ljcy5odG1sOgorICAg
ICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL29iamVjdHN0b3JlLWN1cnNvci1leHBlY3RlZC50eHQ6
CisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvb2JqZWN0c3RvcmUtY3Vyc29yLmh0bWw6Cisg
ICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvb3Blbi1jdXJzb3ItZXhwZWN0ZWQudHh0OgorICAg
ICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL29wZW4tY3Vyc29yLmh0bWw6CisKIDIwMTAtMTAtMjEg
IEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4
ZWRkYi9jb25zdGFudHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVk
ZGIvY29uc3RhbnRzLWV4cGVjdGVkLnR4dAppbmRleCAxNWEyZGY3Li44ZjUzYjU2IDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9jb25zdGFudHMtZXhwZWN0ZWQudHh0
CisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2NvbnN0YW50cy1leHBlY3RlZC50
eHQKQEAgLTgsNyArOCw3IEBAIFBBU1Mgd2Via2l0SURCS2V5UmFuZ2UuTEVGVF9PUEVOIGlzIDEK
IFBBU1Mgd2Via2l0SURCS2V5UmFuZ2UuUklHSFRfT1BFTiBpcyAyCiBQQVNTIHdlYmtpdElEQktl
eVJhbmdlLkxFRlRfQk9VTkQgaXMgNAogUEFTUyB3ZWJraXRJREJLZXlSYW5nZS5SSUdIVF9CT1VO
RCBpcyA4Ci1QQVNTIHdlYmtpdElEQkRhdGFiYXNlRXhjZXB0aW9uLlVOS05PV05fRVJSIGlzIDAK
K1BBU1Mgd2Via2l0SURCRGF0YWJhc2VFeGNlcHRpb24uVU5LTk9XTl9FUlIgaXMgMQogUEFTUyB3
ZWJraXRJREJEYXRhYmFzZUV4Y2VwdGlvbi5OT05fVFJBTlNJRU5UX0VSUiBpcyAxCiBQQVNTIHdl
YmtpdElEQkRhdGFiYXNlRXhjZXB0aW9uLk5PVF9GT1VORF9FUlIgaXMgMgogUEFTUyB3ZWJraXRJ
REJEYXRhYmFzZUV4Y2VwdGlvbi5DT05TVFJBSU5UX0VSUiBpcyAzCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9jb25zdGFudHMuaHRtbCBiL0xheW91dFRlc3RzL3N0
b3JhZ2UvaW5kZXhlZGRiL2NvbnN0YW50cy5odG1sCmluZGV4IDgxM2ZlN2EuLjljZGY0YzQgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2NvbnN0YW50cy5odG1sCisr
KyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2NvbnN0YW50cy5odG1sCkBAIC0yMiw3
ICsyMiw3IEBAIGZ1bmN0aW9uIHRlc3QoKQogICAgIHNob3VsZEJlKCJ3ZWJraXRJREJLZXlSYW5n
ZS5MRUZUX0JPVU5EIiwgIjQiKTsKICAgICBzaG91bGRCZSgid2Via2l0SURCS2V5UmFuZ2UuUklH
SFRfQk9VTkQiLCAiOCIpOwogCi0gICAgc2hvdWxkQmUoIndlYmtpdElEQkRhdGFiYXNlRXhjZXB0
aW9uLlVOS05PV05fRVJSIiwgIjAiKTsKKyAgICBzaG91bGRCZSgid2Via2l0SURCRGF0YWJhc2VF
eGNlcHRpb24uVU5LTk9XTl9FUlIiLCAiMSIpOwogICAgIHNob3VsZEJlKCJ3ZWJraXRJREJEYXRh
YmFzZUV4Y2VwdGlvbi5OT05fVFJBTlNJRU5UX0VSUiIsICIxIik7CiAgICAgc2hvdWxkQmUoIndl
YmtpdElEQkRhdGFiYXNlRXhjZXB0aW9uLk5PVF9GT1VORF9FUlIiLCAiMiIpOwogICAgIHNob3Vs
ZEJlKCJ3ZWJraXRJREJEYXRhYmFzZUV4Y2VwdGlvbi5DT05TVFJBSU5UX0VSUiIsICIzIik7CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9kYXRhYmFzZS1xdW90YS1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9kYXRhYmFzZS1xdW90
YS1leHBlY3RlZC50eHQKaW5kZXggNmMyNDVkNC4uOTFkM2FjNyAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZGF0YWJhc2UtcXVvdGEtZXhwZWN0ZWQudHh0CisrKyBi
L0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2RhdGFiYXNlLXF1b3RhLWV4cGVjdGVkLnR4
dApAQCAtNjgsNyArNjgsNyBAQCB0cmFucyA9IGRiLnRyYW5zYWN0aW9uKCkKIENyZWF0aW5nICdk
YXRhJyB3aGljaCBjb250YWlucyA2NEsgb2YgZGF0YQogUEFTUyBkYXRhLmxlbmd0aCBpcyA2NTUz
Ngogc3RvcmUgPSB0cmFucy5vYmplY3RTdG9yZSgndGVzdDEyMycpCi1FcnJvciBmdW5jdGlvbiBj
YWxsZWQ6ICgwKSBFcnJvciB3cml0aW5nIGRhdGEgdG8gc3RhYmxlIHN0b3JhZ2UuCitFcnJvciBm
dW5jdGlvbiBjYWxsZWQ6ICgxKSBFcnJvciB3cml0aW5nIGRhdGEgdG8gc3RhYmxlIHN0b3JhZ2Uu
CiBFcnJvciBldmVudCBmaXJlZDoKIFBBU1MgJ3Jlc3VsdCcgaW4gZXZlbnQgaXMgZmFsc2UKIFBB
U1MgJ2NvZGUnIGluIGV2ZW50IGlzIHRydWUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3Jh
Z2UvaW5kZXhlZGRiL2luZGV4LWJhc2ljcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdG9y
YWdlL2luZGV4ZWRkYi9pbmRleC1iYXNpY3MtZXhwZWN0ZWQudHh0CmluZGV4IDA4NjlkOTUuLmY4
ODZhMTkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2luZGV4LWJh
c2ljcy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvaW5k
ZXgtYmFzaWNzLWV4cGVjdGVkLnR4dApAQCAtMzAwLDYgKzMwMCwxMCBAQCBQQVNTICdyZWFkeVN0
YXRlJyBpbiBldmVudC50YXJnZXQgaXMgdHJ1ZQogUEFTUyBldmVudC50YXJnZXQucmVhZHlTdGF0
ZSBpcyBldmVudC50YXJnZXQuRE9ORQogCiBQQVNTIGV2ZW50LnJlc3VsdCA9PT0gbnVsbCBpcyB0
cnVlCitQYXNzaW5nIGFuIGludmFsaWQga2V5IGludG8gaW5kZXhPYmplY3QuZ2V0KCkuCitQQVNT
IENhdWdodCBleGNlcHRpb246IEVycm9yOiBUWVBFX01JU01BVENIX0VSUjogRE9NIEV4Y2VwdGlv
biAxNworUGFzc2luZyBhbiBpbnZhbGlkIGtleSBpbnRvIGluZGV4T2JqZWN0LmdldEtleSgpLgor
UEFTUyBDYXVnaHQgZXhjZXB0aW9uOiBFcnJvcjogVFlQRV9NSVNNQVRDSF9FUlI6IERPTSBFeGNl
cHRpb24gMTcKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIAogVEVTVCBDT01QTEVU
RQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvaW5kZXgtYmFzaWNz
Lmh0bWwgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9pbmRleC1iYXNpY3MuaHRtbApp
bmRleCBmNzI1N2YxLi43YTE2YzNhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2lu
ZGV4ZWRkYi9pbmRleC1iYXNpY3MuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4
ZWRkYi9pbmRleC1iYXNpY3MuaHRtbApAQCAtMjE5LDYgKzIxOSwyMSBAQCBmdW5jdGlvbiBsYXN0
KCkKICAgICB2ZXJpZnlTdWNjZXNzRXZlbnQoZXZlbnQpOwogICAgIHNob3VsZEJlVHJ1ZSgiZXZl
bnQucmVzdWx0ID09PSBudWxsIik7CiAKKyAgICB0cnkgeworICAgICAgICBkZWJ1ZygiUGFzc2lu
ZyBhbiBpbnZhbGlkIGtleSBpbnRvIGluZGV4T2JqZWN0LmdldCgpLiIpOworICAgICAgICBpbmRl
eE9iamVjdC5nZXQoW10pOworICAgICAgICB0ZXN0RmFpbGVkKCJObyBleGNlcHRpb24gdGhyb3du
Iik7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICB0ZXN0UGFzc2VkKCJDYXVnaHQgZXhjZXB0
aW9uOiAiICsgZS50b1N0cmluZygpKTsKKyAgICB9CisKKyAgICB0cnkgeworICAgICAgICBkZWJ1
ZygiUGFzc2luZyBhbiBpbnZhbGlkIGtleSBpbnRvIGluZGV4T2JqZWN0LmdldEtleSgpLiIpOwor
ICAgICAgICBpbmRleE9iamVjdC5nZXRLZXkoW10pOworICAgICAgICB0ZXN0RmFpbGVkKCJObyBl
eGNlcHRpb24gdGhyb3duIik7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICB0ZXN0UGFzc2Vk
KCJDYXVnaHQgZXhjZXB0aW9uOiAiICsgZS50b1N0cmluZygpKTsKKyAgICB9CiAgICAgZG9uZSgp
OwogfQogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9pbmRleC1j
dXJzb3ItZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvaW5kZXgt
Y3Vyc29yLWV4cGVjdGVkLnR4dAppbmRleCA4OGI5NmZmLi5iYzAxMDcwIDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9pbmRleC1jdXJzb3ItZXhwZWN0ZWQudHh0Cisr
KyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2luZGV4LWN1cnNvci1leHBlY3RlZC50
eHQKQEAgLTIwNTgsNiArMjA1OCw0NCBAQCBQQVNTIGV2ZW50LnJlc3VsdC5rZXkgaXMgdGVzdERh
dGFbN10KIFBBU1MgZXZlbnQucmVzdWx0LnZhbHVlIGlzIGV4cGVjdGVkSW5kZXgKIFBBU1MgZXZl
bnQucmVzdWx0LmtleSBpcyB0ZXN0RGF0YVs2XQogUEFTUyBldmVudC5yZXN1bHQgaXMgbnVsbAor
CitOZXh0IHRlc3Q6IG51bGwga2V5IHBhdGggc29ydGVkIGFzY2VuZGluZy4KK1BBU1MgZXZlbnQu
cmVzdWx0LnZhbHVlIGlzIGV4cGVjdGVkSW5kZXgKK1BBU1MgZXZlbnQucmVzdWx0LmtleSBpcyB0
ZXN0RGF0YVswXQorUEFTUyBldmVudC5yZXN1bHQudmFsdWUgaXMgZXhwZWN0ZWRJbmRleAorUEFT
UyBldmVudC5yZXN1bHQua2V5IGlzIHRlc3REYXRhWzFdCitQQVNTIGV2ZW50LnJlc3VsdC52YWx1
ZSBpcyBleHBlY3RlZEluZGV4CitQQVNTIGV2ZW50LnJlc3VsdC5rZXkgaXMgdGVzdERhdGFbMl0K
K1BBU1MgZXZlbnQucmVzdWx0LnZhbHVlIGlzIGV4cGVjdGVkSW5kZXgKK1BBU1MgZXZlbnQucmVz
dWx0LmtleSBpcyB0ZXN0RGF0YVszXQorUEFTUyBldmVudC5yZXN1bHQudmFsdWUgaXMgZXhwZWN0
ZWRJbmRleAorUEFTUyBldmVudC5yZXN1bHQua2V5IGlzIHRlc3REYXRhWzRdCitQQVNTIGV2ZW50
LnJlc3VsdC52YWx1ZSBpcyBleHBlY3RlZEluZGV4CitQQVNTIGV2ZW50LnJlc3VsdC5rZXkgaXMg
dGVzdERhdGFbNV0KK1BBU1MgZXZlbnQucmVzdWx0LnZhbHVlIGlzIGV4cGVjdGVkSW5kZXgKK1BB
U1MgZXZlbnQucmVzdWx0LmtleSBpcyB0ZXN0RGF0YVs2XQorUEFTUyBldmVudC5yZXN1bHQudmFs
dWUgaXMgZXhwZWN0ZWRJbmRleAorUEFTUyBldmVudC5yZXN1bHQua2V5IGlzIHRlc3REYXRhWzdd
CitQQVNTIGV2ZW50LnJlc3VsdCBpcyBudWxsCisKK05leHQgdGVzdDogbnVsbCBrZXkgcGF0aCBz
b3J0ZWQgZGVzY2VuZGluZy4KK1BBU1MgZXZlbnQucmVzdWx0LnZhbHVlIGlzIGV4cGVjdGVkSW5k
ZXgKK1BBU1MgZXZlbnQucmVzdWx0LmtleSBpcyB0ZXN0RGF0YVs3XQorUEFTUyBldmVudC5yZXN1
bHQudmFsdWUgaXMgZXhwZWN0ZWRJbmRleAorUEFTUyBldmVudC5yZXN1bHQua2V5IGlzIHRlc3RE
YXRhWzZdCitQQVNTIGV2ZW50LnJlc3VsdC52YWx1ZSBpcyBleHBlY3RlZEluZGV4CitQQVNTIGV2
ZW50LnJlc3VsdC5rZXkgaXMgdGVzdERhdGFbNV0KK1BBU1MgZXZlbnQucmVzdWx0LnZhbHVlIGlz
IGV4cGVjdGVkSW5kZXgKK1BBU1MgZXZlbnQucmVzdWx0LmtleSBpcyB0ZXN0RGF0YVs0XQorUEFT
UyBldmVudC5yZXN1bHQudmFsdWUgaXMgZXhwZWN0ZWRJbmRleAorUEFTUyBldmVudC5yZXN1bHQu
a2V5IGlzIHRlc3REYXRhWzNdCitQQVNTIGV2ZW50LnJlc3VsdC52YWx1ZSBpcyBleHBlY3RlZElu
ZGV4CitQQVNTIGV2ZW50LnJlc3VsdC5rZXkgaXMgdGVzdERhdGFbMl0KK1BBU1MgZXZlbnQucmVz
dWx0LnZhbHVlIGlzIGV4cGVjdGVkSW5kZXgKK1BBU1MgZXZlbnQucmVzdWx0LmtleSBpcyB0ZXN0
RGF0YVsxXQorUEFTUyBldmVudC5yZXN1bHQudmFsdWUgaXMgZXhwZWN0ZWRJbmRleAorUEFTUyBl
dmVudC5yZXN1bHQua2V5IGlzIHRlc3REYXRhWzBdCitQQVNTIGV2ZW50LnJlc3VsdCBpcyBudWxs
CiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2luZGV4LWN1cnNvci5odG1sIGIv
TGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvaW5kZXgtY3Vyc29yLmh0bWwKaW5kZXggNWFh
YjRmOC4uMGYyOGNiNiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIv
aW5kZXgtY3Vyc29yLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvaW5k
ZXgtY3Vyc29yLmh0bWwKQEAgLTEwNyw3ICsxMDcsNyBAQCBmdW5jdGlvbiBzY2hlZHVsZVRlc3Rz
KCkKIGZ1bmN0aW9uIHJ1bk5leHRUZXN0KCkKIHsKICAgICBpZiAoIXNjaGVkdWxlZFRlc3RzLmxl
bmd0aCkgewotICAgICAgICBkb25lKCk7CisgICAgICAgIHRlc3ROdWxsS2V5UmFuZ2UoKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAKQEAgLTIyNiw2ICsyMjYsMzggQEAgZnVuY3Rpb24gY3Vy
c29ySXRlcmF0aW9uKCkKICAgICBldmVudC5yZXN1bHQuY29udGludWUoKTsKIH0KICAKK3dpbmRv
dy5udWxsS2V5UmFuZ2VTdGVwID0gMDsKK2Z1bmN0aW9uIHRlc3ROdWxsS2V5UmFuZ2UoKQorewor
ICAgIHdpbmRvdy5sb3dlciA9IDA7CisgICAgd2luZG93Lmxvd2VySXNPcGVuID0gZmFsc2U7Cisg
ICAgd2luZG93LnVwcGVyID0gdGVzdERhdGEubGVuZ3RoLTE7CisgICAgd2luZG93LnVwcGVySXNP
cGVuID0gZmFsc2U7CisKKyAgICBzdHIgPSAiTmV4dCB0ZXN0OiBudWxsIGtleSBwYXRoICI7Cisg
ICAgaWYgKHdpbmRvdy5udWxsS2V5UmFuZ2VTdGVwID09IDApIHsKKyAgICAgICAgc3RyICs9ICJz
b3J0ZWQgYXNjZW5kaW5nLiI7CisgICAgICAgIHdpbmRvdy5hc2NlbmRpbmcgPSB0cnVlOworICAg
ICAgICB3aW5kb3cuZXhwZWN0ZWRJbmRleCA9IGxvd2VyOworICAgICAgICB3aW5kb3cubnVsbEtl
eVJhbmdlU3RlcCA9IDE7CisgICAgfSBlbHNlIGlmICh3aW5kb3cubnVsbEtleVJhbmdlU3RlcCA9
PSAxKSB7CisgICAgICAgIHN0ciArPSAic29ydGVkIGRlc2NlbmRpbmcuIjsKKyAgICAgICAgd2lu
ZG93LmFzY2VuZGluZyA9IGZhbHNlOworICAgICAgICB3aW5kb3cuZXhwZWN0ZWRJbmRleCA9IHVw
cGVyOworICAgICAgICB3aW5kb3cubnVsbEtleVJhbmdlU3RlcCA9IDI7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgZG9uZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZGVidWcoIiIp
OworICAgIGRlYnVnKHN0cik7CisgCisgICAgdmFyIHJlcXVlc3QgPSBpbmRleE9iamVjdC5vcGVu
S2V5Q3Vyc29yKG51bGwsIGFzY2VuZGluZyA/IHdlYmtpdElEQkN1cnNvci5ORVhUIDogd2Via2l0
SURCQ3Vyc29yLlBSRVYpOworICAgIHJlcXVlc3Qub25zdWNjZXNzID0gY3Vyc29ySXRlcmF0aW9u
OworICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworfQorIAog
b3BlbkRhdGFiYXNlKCk7IC8vIFRoZSBmaXJzdCBzdGVwLgogdmFyIHN1Y2Nlc3NmdWxseVBhcnNl
ZCA9IHRydWU7CiAgCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9r
ZXlyYW5nZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9rZXly
YW5nZS1leHBlY3RlZC50eHQKaW5kZXggOGQ2YmY4Ni4uMWE3ZGZmZiAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIva2V5cmFuZ2UtZXhwZWN0ZWQudHh0CisrKyBiL0xh
eW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2tleXJhbmdlLWV4cGVjdGVkLnR4dApAQCAtMTQx
LDYgKzE0MSwxOCBAQCBQQVNTIGtleVJhbmdlLmxlZnQgaXMgJ2FhZicKIFBBU1Mga2V5UmFuZ2Uu
cmlnaHQgaXMgJ2FiZicKIFBBU1MgbGVmdEZsYWdzIGlzIGtleVJhbmdlLkxFRlRfT1BFTiB8IGtl
eVJhbmdlLkxFRlRfQk9VTkQKIFBBU1MgcmlnaHRGbGFncyBpcyBrZXlSYW5nZS5SSUdIVF9PUEVO
IHwga2V5UmFuZ2UuUklHSFRfQk9VTkQKK1Bhc3NpbmcgYW4gaW52YWxpZCBrZXkgaW50byBvbmx5
KFtdKQorUEFTUyBDYXVnaHQgZXhjZXB0aW9uOiBFcnJvcjogVFlQRV9NSVNNQVRDSF9FUlI6IERP
TSBFeGNlcHRpb24gMTcKK1Bhc3NpbmcgYW4gaW52YWxpZCBrZXkgaW50byByaWdodEJvdW5kKFtd
KQorUEFTUyBDYXVnaHQgZXhjZXB0aW9uOiBFcnJvcjogVFlQRV9NSVNNQVRDSF9FUlI6IERPTSBF
eGNlcHRpb24gMTcKK1Bhc3NpbmcgYW4gaW52YWxpZCBrZXkgaW50byBsZWZ0Qm91bmQoW10pCitQ
QVNTIENhdWdodCBleGNlcHRpb246IEVycm9yOiBUWVBFX01JU01BVENIX0VSUjogRE9NIEV4Y2Vw
dGlvbiAxNworUGFzc2luZyBhbiBpbnZhbGlkIGtleSBpbnRvIGJvdW5kKG51bGwsIFtdKQorUEFT
UyBDYXVnaHQgZXhjZXB0aW9uOiBFcnJvcjogVFlQRV9NSVNNQVRDSF9FUlI6IERPTSBFeGNlcHRp
b24gMTcKK1Bhc3NpbmcgYW4gaW52YWxpZCBrZXkgaW50byBib3VuZChbXSxudWxsKQorUEFTUyBD
YXVnaHQgZXhjZXB0aW9uOiBFcnJvcjogVFlQRV9NSVNNQVRDSF9FUlI6IERPTSBFeGNlcHRpb24g
MTcKK1Bhc3NpbmcgYW4gaW52YWxpZCBrZXkgaW50byBib3VuZChbXSwgW10pCitQQVNTIENhdWdo
dCBleGNlcHRpb246IEVycm9yOiBUWVBFX01JU01BVENIX0VSUjogRE9NIEV4Y2VwdGlvbiAxNwog
UEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9rZXlyYW5nZS5odG1sIGIvTGF5b3V0
VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIva2V5cmFuZ2UuaHRtbAppbmRleCBjMzg4NWZjLi40ODcw
OGQ5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9rZXlyYW5nZS5o
dG1sCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2tleXJhbmdlLmh0bWwKQEAg
LTExMiw2ICsxMTIsNTMgQEAgZnVuY3Rpb24gdGVzdCgpCiAgICAgY2hlY2tCb3VuZEtleVJhbmdl
KCInYWFlJyIsICInYWJlJyIsIHRydWUsIGZhbHNlKTsKICAgICBjaGVja0JvdW5kS2V5UmFuZ2Uo
IidhYWYnIiwgIidhYmYnIiwgdHJ1ZSwgdHJ1ZSk7CiAKKyAgICB0cnkgeworICAgICAgICBkZWJ1
ZygiUGFzc2luZyBhbiBpbnZhbGlkIGtleSBpbnRvIG9ubHkoW10pIik7CisgICAgICAgIHdlYmtp
dElEQktleVJhbmdlLm9ubHkoW10pOworICAgICAgICB0ZXN0RmFpbGVkKCJObyBleGNlcHRpb24g
dGhyb3duIik7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICB0ZXN0UGFzc2VkKCJDYXVnaHQg
ZXhjZXB0aW9uOiAiICsgZS50b1N0cmluZygpKTsKKyAgICB9CisKKyAgICB0cnkgeworICAgICAg
ICBkZWJ1ZygiUGFzc2luZyBhbiBpbnZhbGlkIGtleSBpbnRvIHJpZ2h0Qm91bmQoW10pIik7Cisg
ICAgICAgIHdlYmtpdElEQktleVJhbmdlLnJpZ2h0Qm91bmQoW10pOworICAgICAgICB0ZXN0RmFp
bGVkKCJObyBleGNlcHRpb24gdGhyb3duIik7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICB0
ZXN0UGFzc2VkKCJDYXVnaHQgZXhjZXB0aW9uOiAiICsgZS50b1N0cmluZygpKTsKKyAgICB9Cisg
CisgICAgdHJ5IHsKKyAgICAgICAgZGVidWcoIlBhc3NpbmcgYW4gaW52YWxpZCBrZXkgaW50byBs
ZWZ0Qm91bmQoW10pIik7CisgICAgICAgIHdlYmtpdElEQktleVJhbmdlLmxlZnRCb3VuZChbXSk7
CisgICAgICAgIHRlc3RGYWlsZWQoIk5vIGV4Y2VwdGlvbiB0aHJvd24iKTsKKyAgICB9IGNhdGNo
IChlKSB7CisgICAgICAgIHRlc3RQYXNzZWQoIkNhdWdodCBleGNlcHRpb246ICIgKyBlLnRvU3Ry
aW5nKCkpOworICAgIH0KKworICAgIHRyeSB7CisgICAgICAgIGRlYnVnKCJQYXNzaW5nIGFuIGlu
dmFsaWQga2V5IGludG8gYm91bmQobnVsbCwgW10pIik7CisgICAgICAgIHdlYmtpdElEQktleVJh
bmdlLmJvdW5kKG51bGwsIFtdKTsKKyAgICAgICAgdGVzdEZhaWxlZCgiTm8gZXhjZXB0aW9uIHRo
cm93biIpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgdGVzdFBhc3NlZCgiQ2F1Z2h0IGV4
Y2VwdGlvbjogIiArIGUudG9TdHJpbmcoKSk7CisgICAgfQorCisgICAgdHJ5IHsKKyAgICAgICAg
ZGVidWcoIlBhc3NpbmcgYW4gaW52YWxpZCBrZXkgaW50byBib3VuZChbXSxudWxsKSIpOworICAg
ICAgICB3ZWJraXRJREJLZXlSYW5nZS5ib3VuZChbXSwgbnVsbCk7CisgICAgICAgIHRlc3RGYWls
ZWQoIk5vIGV4Y2VwdGlvbiB0aHJvd24iKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIHRl
c3RQYXNzZWQoIkNhdWdodCBleGNlcHRpb246ICIgKyBlLnRvU3RyaW5nKCkpOworICAgIH0KKwor
ICAgIHRyeSB7CisgICAgICAgIGRlYnVnKCJQYXNzaW5nIGFuIGludmFsaWQga2V5IGludG8gYm91
bmQoW10sIFtdKSIpOworICAgICAgICB3ZWJraXRJREJLZXlSYW5nZS5ib3VuZChbXSwgW10pOwor
ICAgICAgICB0ZXN0RmFpbGVkKCJObyBleGNlcHRpb24gdGhyb3duIik7CisgICAgfSBjYXRjaCAo
ZSkgeworICAgICAgICB0ZXN0UGFzc2VkKCJDYXVnaHQgZXhjZXB0aW9uOiAiICsgZS50b1N0cmlu
ZygpKTsKKyAgICB9CiB9CiAKIHRlc3QoKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3Jh
Z2UvaW5kZXhlZGRiL29iamVjdHN0b3JlLWJhc2ljcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0
cy9zdG9yYWdlL2luZGV4ZWRkYi9vYmplY3RzdG9yZS1iYXNpY3MtZXhwZWN0ZWQudHh0CmluZGV4
IGQyMmU2ZjAuLmEwOTdjY2YgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhl
ZGRiL29iamVjdHN0b3JlLWJhc2ljcy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvc3Rv
cmFnZS9pbmRleGVkZGIvb2JqZWN0c3RvcmUtYmFzaWNzLWV4cGVjdGVkLnR4dApAQCAtMTc2LDYg
KzE3NiwxNSBAQCBQQVNTICdyZWFkeVN0YXRlJyBpbiBldmVudC50YXJnZXQgaXMgdHJ1ZQogUEFT
UyBldmVudC50YXJnZXQucmVhZHlTdGF0ZSBpcyBldmVudC50YXJnZXQuRE9ORQogCiBQQVNTIGV2
ZW50LnJlc3VsdCBpcyBudWxsCitzdG9yZSA9IGV2ZW50LnNvdXJjZQorUGFzc2luZyBhbiBpbnZh
bGlkIGtleSBpbnRvIHN0b3JlLmdldCgpLgorUEFTUyBDYXVnaHQgZXhjZXB0aW9uOiBFcnJvcjog
VFlQRV9NSVNNQVRDSF9FUlI6IERPTSBFeGNlcHRpb24gMTcKK1Bhc3NpbmcgYW4gaW52YWxpZCBr
ZXkgaW50byBzdG9yZS5yZW1vdmUoKS4KK1BBU1MgQ2F1Z2h0IGV4Y2VwdGlvbjogRXJyb3I6IFRZ
UEVfTUlTTUFUQ0hfRVJSOiBET00gRXhjZXB0aW9uIDE3CitQYXNzaW5nIGFuIGludmFsaWQga2V5
IGludG8gc3RvcmUuYWRkKCkuCitQQVNTIENhdWdodCBleGNlcHRpb246IEVycm9yOiBUWVBFX01J
U01BVENIX0VSUjogRE9NIEV4Y2VwdGlvbiAxNworUGFzc2luZyBhbiBpbnZhbGlkIGtleSBpbnRv
IHN0b3JlLnB1dCgpLgorUEFTUyBDYXVnaHQgZXhjZXB0aW9uOiBFcnJvcjogVFlQRV9NSVNNQVRD
SF9FUlI6IERPTSBFeGNlcHRpb24gMTcKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUK
IAogVEVTVCBDT01QTEVURQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVk
ZGIvb2JqZWN0c3RvcmUtYmFzaWNzLmh0bWwgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRk
Yi9vYmplY3RzdG9yZS1iYXNpY3MuaHRtbAppbmRleCA5NTdkZmFhLi4wMDUyNDdlIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9vYmplY3RzdG9yZS1iYXNpY3MuaHRt
bAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9vYmplY3RzdG9yZS1iYXNpY3Mu
aHRtbApAQCAtNDcsNyArNDcsNyBAQCBmdW5jdGlvbiBzZXRWZXJzaW9uU3VjY2VzcygpCiANCiBm
dW5jdGlvbiBjcmVhdGVPYmplY3RTdG9yZSgpCiB7DQotICAgIGRlYnVnKCJjcmVhdE9iamVjdFN0
b3JlKCk6Iik7DQorICAgIGRlYnVnKCJjcmVhdGVPYmplY3RTdG9yZSgpOiIpOwogICAgIHdpbmRv
dy5zdG9yZSA9IGV2YWxBbmRMb2coInN0b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3N0b3Jl
TmFtZScsIG51bGwpIik7CiAgICAgdmFyIHN0b3JlTmFtZXMgPSBldmFsQW5kTG9nKCJzdG9yZU5h
bWVzID0gZGIub2JqZWN0U3RvcmVzIik7CiAKQEAgLTE5NSw2ICsxOTUsNDAgQEAgZnVuY3Rpb24g
cmVtb3ZlU3VjY2VzcygpCiAgICAgZGVidWcoInJlbW92ZVN1Y2Nlc3MoKToiKTsKICAgICB2ZXJp
ZnlTdWNjZXNzRXZlbnQoZXZlbnQpOwogICAgIHNob3VsZEJlTnVsbCgiZXZlbnQucmVzdWx0Iik7
CisgICAgdmFyIHN0b3JlID0gZXZhbEFuZExvZygic3RvcmUgPSBldmVudC5zb3VyY2UiKTsKKwor
ICAgIHRyeSB7CisgICAgICAgIGRlYnVnKCJQYXNzaW5nIGFuIGludmFsaWQga2V5IGludG8gc3Rv
cmUuZ2V0KCkuIik7CisgICAgICAgIHN0b3JlLmdldChbXSk7CisgICAgICAgIHRlc3RGYWlsZWQo
Ik5vIGV4Y2VwdGlvbiB0aHJvd24iKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIHRlc3RQ
YXNzZWQoIkNhdWdodCBleGNlcHRpb246ICIgKyBlLnRvU3RyaW5nKCkpOworICAgIH0KKworICAg
IHRyeSB7CisgICAgICAgIGRlYnVnKCJQYXNzaW5nIGFuIGludmFsaWQga2V5IGludG8gc3RvcmUu
cmVtb3ZlKCkuIik7CisgICAgICAgIHN0b3JlLnJlbW92ZShbXSk7CisgICAgICAgIHRlc3RGYWls
ZWQoIk5vIGV4Y2VwdGlvbiB0aHJvd24iKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIHRl
c3RQYXNzZWQoIkNhdWdodCBleGNlcHRpb246ICIgKyBlLnRvU3RyaW5nKCkpOworICAgIH0KKwor
ICAgIHRyeSB7CisgICAgICAgIGRlYnVnKCJQYXNzaW5nIGFuIGludmFsaWQga2V5IGludG8gc3Rv
cmUuYWRkKCkuIik7CisgICAgICAgIHN0b3JlLmFkZChudWxsLCBbXSk7CisgICAgICAgIHRlc3RG
YWlsZWQoIk5vIGV4Y2VwdGlvbiB0aHJvd24iKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAg
IHRlc3RQYXNzZWQoIkNhdWdodCBleGNlcHRpb246ICIgKyBlLnRvU3RyaW5nKCkpOworICAgIH0K
KworICAgIHRyeSB7CisgICAgICAgIGRlYnVnKCJQYXNzaW5nIGFuIGludmFsaWQga2V5IGludG8g
c3RvcmUucHV0KCkuIik7CisgICAgICAgIHN0b3JlLnB1dChudWxsLCBbXSk7CisgICAgICAgIHRl
c3RGYWlsZWQoIk5vIGV4Y2VwdGlvbiB0aHJvd24iKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAg
ICAgIHRlc3RQYXNzZWQoIkNhdWdodCBleGNlcHRpb246ICIgKyBlLnRvU3RyaW5nKCkpOworICAg
IH0KKwogICAgIGRvbmUoKTsKIH0KIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9p
bmRleGVkZGIvb2JqZWN0c3RvcmUtY3Vyc29yLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3N0
b3JhZ2UvaW5kZXhlZGRiL29iamVjdHN0b3JlLWN1cnNvci1leHBlY3RlZC50eHQKaW5kZXggODgx
ZmU5Mi4uMTQ5M2E4MCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIv
b2JqZWN0c3RvcmUtY3Vyc29yLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdl
L2luZGV4ZWRkYi9vYmplY3RzdG9yZS1jdXJzb3ItZXhwZWN0ZWQudHh0CkBAIC04NTQsNiArODU0
LDI2IEBAIFBBU1MgZXZlbnQucmVzdWx0IGlzIG51bGwKIE5leHQgdGVzdDogbG93ZXIgYm91bmQg
aXMgNjsgdXBwZXIgYm91bmQgaXMgNjsgc29ydGVkIGRlc2NlbmRpbmcuCiBQQVNTIGV2ZW50LnJl
c3VsdC5rZXkgaXMgdGVzdERhdGFbNl0KIFBBU1MgZXZlbnQucmVzdWx0IGlzIG51bGwKKworTmV4
dCB0ZXN0OiBudWxsIGtleSBwYXRoIHNvcnRlZCBhc2NlbmRpbmcuCitQQVNTIGV2ZW50LnJlc3Vs
dC5rZXkgaXMgdGVzdERhdGFbMF0KK1BBU1MgZXZlbnQucmVzdWx0LmtleSBpcyB0ZXN0RGF0YVsx
XQorUEFTUyBldmVudC5yZXN1bHQua2V5IGlzIHRlc3REYXRhWzJdCitQQVNTIGV2ZW50LnJlc3Vs
dC5rZXkgaXMgdGVzdERhdGFbM10KK1BBU1MgZXZlbnQucmVzdWx0LmtleSBpcyB0ZXN0RGF0YVs0
XQorUEFTUyBldmVudC5yZXN1bHQua2V5IGlzIHRlc3REYXRhWzVdCitQQVNTIGV2ZW50LnJlc3Vs
dC5rZXkgaXMgdGVzdERhdGFbNl0KK1BBU1MgZXZlbnQucmVzdWx0IGlzIG51bGwKKworTmV4dCB0
ZXN0OiBudWxsIGtleSBwYXRoIHNvcnRlZCBkZXNjZW5kaW5nLgorUEFTUyBldmVudC5yZXN1bHQu
a2V5IGlzIHRlc3REYXRhWzZdCitQQVNTIGV2ZW50LnJlc3VsdC5rZXkgaXMgdGVzdERhdGFbNV0K
K1BBU1MgZXZlbnQucmVzdWx0LmtleSBpcyB0ZXN0RGF0YVs0XQorUEFTUyBldmVudC5yZXN1bHQu
a2V5IGlzIHRlc3REYXRhWzNdCitQQVNTIGV2ZW50LnJlc3VsdC5rZXkgaXMgdGVzdERhdGFbMl0K
K1BBU1MgZXZlbnQucmVzdWx0LmtleSBpcyB0ZXN0RGF0YVsxXQorUEFTUyBldmVudC5yZXN1bHQu
a2V5IGlzIHRlc3REYXRhWzBdCitQQVNTIGV2ZW50LnJlc3VsdCBpcyBudWxsCiBQQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL29iamVjdHN0b3JlLWN1cnNvci5odG1sIGIvTGF5b3V0
VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvb2JqZWN0c3RvcmUtY3Vyc29yLmh0bWwKaW5kZXggZDlh
ZDgwNS4uNTRlYWVmYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIv
b2JqZWN0c3RvcmUtY3Vyc29yLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVk
ZGIvb2JqZWN0c3RvcmUtY3Vyc29yLmh0bWwKQEAgLTEwNSw3ICsxMDUsNyBAQCBmdW5jdGlvbiBz
Y2hlZHVsZVRlc3RzKCkKIGZ1bmN0aW9uIHJ1bk5leHRUZXN0KCkKIHsKICAgICBpZiAoIXNjaGVk
dWxlZFRlc3RzLmxlbmd0aCkgewotICAgICAgICBkb25lKCk7CisgICAgICAgIHRlc3ROdWxsS2V5
UmFuZ2UoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAKQEAgLTE2NCw4ICsxNjQsNyBAQCBm
dW5jdGlvbiBydW5OZXh0VGVzdCgpCiAgICAgZWxzZQogICAgICAgICBrZXlSYW5nZSA9IHdlYmtp
dElEQktleVJhbmdlLnJpZ2h0Qm91bmQodGVzdERhdGFbdXBwZXJdLCB1cHBlcklzT3Blbik7CiAg
Ci0gICAgLy8gRklYTUU6IFNob3VsZCBiZSB3ZWJraXRJREJDdXJzb3IuTkVYVCA6IHdlYmtpdElE
QkN1cnNvci5QUkVWLCBidXQgd2UgY2FuJ3QgZG8gdGhhdCB5ZXQuCi0gICAgdmFyIHJlcXVlc3Qg
PSBvYmplY3RTdG9yZS5vcGVuQ3Vyc29yKGtleVJhbmdlLCBhc2NlbmRpbmcgPyAwIDogMik7Cisg
ICAgdmFyIHJlcXVlc3QgPSBvYmplY3RTdG9yZS5vcGVuQ3Vyc29yKGtleVJhbmdlLCBhc2NlbmRp
bmcgPyB3ZWJraXRJREJDdXJzb3IuTkVYVCA6IHdlYmtpdElEQkN1cnNvci5QUkVWKTsKICAgICBy
ZXF1ZXN0Lm9uc3VjY2VzcyA9IGN1cnNvckl0ZXJhdGlvbjsKICAgICByZXF1ZXN0Lm9uZXJyb3Ig
PSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKIH0KQEAgLTIwNCw2ICsyMDMsMzggQEAgZnVuY3Rp
b24gY3Vyc29ySXRlcmF0aW9uKCkKICAgICBldmVudC5yZXN1bHQuY29udGludWUoKTsKIH0KICAK
K3dpbmRvdy5udWxsS2V5UmFuZ2VTdGVwID0gMDsKK2Z1bmN0aW9uIHRlc3ROdWxsS2V5UmFuZ2Uo
KQoreworICAgIHdpbmRvdy5sb3dlciA9IDA7CisgICAgd2luZG93Lmxvd2VySXNPcGVuID0gZmFs
c2U7CisgICAgd2luZG93LnVwcGVyID0gdGVzdERhdGEubGVuZ3RoLTE7CisgICAgd2luZG93LnVw
cGVySXNPcGVuID0gZmFsc2U7CisKKyAgICBzdHIgPSAiTmV4dCB0ZXN0OiBudWxsIGtleSBwYXRo
ICI7CisgICAgaWYgKHdpbmRvdy5udWxsS2V5UmFuZ2VTdGVwID09IDApIHsKKyAgICAgICAgc3Ry
ICs9ICJzb3J0ZWQgYXNjZW5kaW5nLiI7CisgICAgICAgIHdpbmRvdy5hc2NlbmRpbmcgPSB0cnVl
OworICAgICAgICB3aW5kb3cuZXhwZWN0ZWRJbmRleCA9IGxvd2VyOworICAgICAgICB3aW5kb3cu
bnVsbEtleVJhbmdlU3RlcCA9IDE7CisgICAgfSBlbHNlIGlmICh3aW5kb3cubnVsbEtleVJhbmdl
U3RlcCA9PSAxKSB7CisgICAgICAgIHN0ciArPSAic29ydGVkIGRlc2NlbmRpbmcuIjsKKyAgICAg
ICAgd2luZG93LmFzY2VuZGluZyA9IGZhbHNlOworICAgICAgICB3aW5kb3cuZXhwZWN0ZWRJbmRl
eCA9IHVwcGVyOworICAgICAgICB3aW5kb3cubnVsbEtleVJhbmdlU3RlcCA9IDI7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZG9uZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZGVi
dWcoIiIpOworICAgIGRlYnVnKHN0cik7CisgCisgICAgdmFyIHJlcXVlc3QgPSBvYmplY3RTdG9y
ZS5vcGVuQ3Vyc29yKG51bGwsIGFzY2VuZGluZyA/IHdlYmtpdElEQkN1cnNvci5ORVhUIDogd2Vi
a2l0SURCQ3Vyc29yLlBSRVYpOworICAgIHJlcXVlc3Qub25zdWNjZXNzID0gY3Vyc29ySXRlcmF0
aW9uOworICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworfQor
IAogb3BlbkRhdGFiYXNlKCk7IC8vIFRoZSBmaXJzdCBzdGVwLgogdmFyIHN1Y2Nlc3NmdWxseVBh
cnNlZCA9IHRydWU7CiAgCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRk
Yi9vcGVuLWN1cnNvci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRk
Yi9vcGVuLWN1cnNvci1leHBlY3RlZC50eHQKaW5kZXggMWJjYTUyNy4uYzNjMWE4ZCAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvb3Blbi1jdXJzb3ItZXhwZWN0ZWQu
dHh0CisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL29wZW4tY3Vyc29yLWV4cGVj
dGVkLnR4dApAQCAtNzIsNiArNzIsOSBAQCBQQVNTIGV2ZW50LnJlc3VsdC5kaXJlY3Rpb24gaXMg
MAogUEFTUyBldmVudC5yZXN1bHQua2V5IGlzICdteUtleScKIFBBU1MgZXZlbnQucmVzdWx0LnZh
bHVlIGlzICdteVZhbHVlJwogCitQYXNzaW5nIGFuIGludmFsaWQga2V5IGludG8gLmNvbnRpbnVl
KCkuCitQQVNTIENhdWdodCBleGNlcHRpb246IEVycm9yOiBUWVBFX01JU01BVENIX0VSUjogRE9N
IEV4Y2VwdGlvbiAxNworCiBPcGVuaW5nIGFuIGVtcHR5IGN1cnNvci4KIG9iamVjdFN0b3JlLm9w
ZW5DdXJzb3Ioa2V5UmFuZ2UpCiBQQVNTICdvbnN1Y2Nlc3MnIGluIHJlc3VsdCBpcyB0cnVlCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9vcGVuLWN1cnNvci5odG1s
IGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvb3Blbi1jdXJzb3IuaHRtbAppbmRleCBl
YzYyZjJjLi4wODVhYTM5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRk
Yi9vcGVuLWN1cnNvci5odG1sCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL29w
ZW4tY3Vyc29yLmh0bWwKQEAgLTQxLDYgKzQxLDE0IEBAIGZ1bmN0aW9uIGN1cnNvclN1Y2Nlc3Mo
KQogICAgIHNob3VsZEJlKCJldmVudC5yZXN1bHQua2V5IiwgIidteUtleSciKTsKICAgICBzaG91
bGRCZSgiZXZlbnQucmVzdWx0LnZhbHVlIiwgIidteVZhbHVlJyIpOwogICAgIGRlYnVnKCIiKTsK
KyAgICB0cnkgeworICAgICAgICBkZWJ1ZygiUGFzc2luZyBhbiBpbnZhbGlkIGtleSBpbnRvIC5j
b250aW51ZSgpLiIpOworICAgICAgICBldmVudC5yZXN1bHQuY29udGludWUoW10pOworICAgICAg
ICB0ZXN0RmFpbGVkKCJObyBleGNlcHRpb24gdGhyb3duIik7CisgICAgfSBjYXRjaCAoZSkgewor
ICAgICAgICB0ZXN0UGFzc2VkKCJDYXVnaHQgZXhjZXB0aW9uOiAiICsgZS50b1N0cmluZygpKTsK
KyAgICB9CisgICAgZGVidWcoIiIpOwogICAgIG9wZW5FbXB0eUN1cnNvcigpOwogfQogCmRpZmYg
LS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDYwZjI2
NTguLjQ1NDMwYmIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsNDMgQEAKKzIwMTAtMTAtMjYgIEplcmVteSBPcmxvdyAgPGpv
cmxvd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisgICAgICAgIEZpeCBJbmRleGVkREIgY3Jhc2hlcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDgyNjYKKworICAgICAgICBJZiBJREJLZXkgcmV0dXJu
cyBudWxsLCB0eXBlIGNvbnZlcnNpb24gZmFpbGVkLiBIYW5kbGUgdGhpcyBjYXNlCisgICAgICAg
IGluIHRoZSBiaW5kaW5ncy4KKworICAgICAgICBDaGFuZ2UgVU5LTk9XTl9FUlIgdG8gYmUgMSBz
aW5jZSAwIGlzIGhhcmQgY29kZWQgdG8gbWVhbiBubyBlcnJvci4KKyAgICAgICAgVGhpcyBpcyBq
dXN0IGEgc3RvcC1nYXAgbW92ZSB1bnRpbCB3ZSBnZXQgaXQgZmlndXJlZCBvdXQgaW4gc3RhbmRh
cmRzCisgICAgICAgIGxhbmQuCisKKyAgICAgICAgSURCT2JqZWN0U3RvcmUgbmVlZHMgdG8gaGFu
ZGxlIG51bGwgcmFuZ2VzLgorCisgICAgICAgIEl0J3MgYWN0dWFsbHkgT0sgZm9yIG1fdHJhbnNh
Y3Rpb24gdG8gYmUgbm9uLW51bGwgd2hlbiBoaXR0aW5nIHRoZQorICAgICAgICBkZXN0cnVjdG9y
LiBXZSBqdXN0IG5lZWQgdG8gdGhlbiByZW1vdmUgaXQgZnJvbSB0aGUgc2V0IG9mIHBlbmRpbmcK
KyAgICAgICAgdHJhbnNhY3Rpb25zLgorCisgICAgICAgIFRoZSB0cmFuc2FjdGlvbiBjYW4gYmVj
b21lIGFib3J0ZWQgaW4gdGhlIG1pZGRsZSBvZiBwcm9jZXNzaW5nIGEKKyAgICAgICAgbGlzdCBv
ZiB0YXNrcy4gRml4IHRoaXMuCisKKyAgICAgICAgQWxsIGNoYW5nZXMgKGV4Y2VwdCB0aGUgbGFz
dCAyIHJhY2VzKSBhcmUgdGVzdGVkIGluIExheW91dFRlc3RzLgorICAgICAgICBJIGNvdWxkbid0
IGZpbmQgYSB3YXkgdG8gcmVsaWFibHkgcmVwcm9kdWNlIHRoZSByYWNlcy4KKworICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9i
akludGVybmFsOjppZGJLZXlDYWxsYmFjayk6CisgICAgICAgICogYmluZGluZ3MvdjgvSURCQmlu
ZGluZ1V0aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVJREJLZXlGcm9tVmFs
dWUpOgorICAgICAgICAqIHN0b3JhZ2UvSURCRGF0YWJhc2VFeGNlcHRpb24uaDoKKyAgICAgICAg
KiBzdG9yYWdlL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmlkbDoKKyAgICAgICAgKiBzdG9yYWdlL0lE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6b3BlbkN1cnNvckludGVybmFsKToKKyAgICAgICAgKiBzdG9yYWdl
L0lEQlJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6fklEQlJlcXVl
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6dGltZXJGaXJlZCk6CisgICAgICAg
ICogc3RvcmFnZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnRhc2tUaW1lckZpcmVkKToKKwogMjAxMC0x
MC0yMSAgSmVyZW15IE9ybG93ICA8am9ybG93QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9yVjgucG0gYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvclY4LnBtCmluZGV4IDQ2ZDljZmEuLjQyM2NjNmIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KKysrIGIvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQpAQCAtMzAxMiw2ICszMDEyLDcgQEAgc3ViIFR5
cGVDYW5GYWlsQ29udmVyc2lvbgogICAgICRpbXBsSW5jbHVkZXN7IkV4Y2VwdGlvbkNvZGUuaCJ9
ID0gMSBpZiAkdHlwZSBlcSAiQXR0ciI7CiAgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIkF0dHIi
OwogICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJWb2lkQ2FsbGJhY2siOworICAgIHJldHVybiAx
IGlmICR0eXBlIGVxICJJREJLZXkiOwogICAgIHJldHVybiBCYXNpY1R5cGVDYW5GYWlsQ29udmVy
c2lvbigkc2lnbmF0dXJlKTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4VGVzdE9iai5jcHAKaW5kZXggNDRmMGQzZS4uNGJlMTE3NyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcAorKysgYi9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCkBAIC02NzgsOSArNjc4LDE5
IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gaWRiS2V5Q2FsbGJhY2soY29uc3Qgdjg6
OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLmlkYktleSIp
OwogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7
Ci0gICAgRVhDRVBUSU9OX0JMT0NLKFJlZlB0cjxJREJLZXk+LCBrZXksIGNyZWF0ZUlEQktleUZy
b21WYWx1ZShhcmdzWzBdKSk7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgeworICAg
IFJlZlB0cjxJREJLZXk+IGtleSA9IGNyZWF0ZUlEQktleUZyb21WYWx1ZShhcmdzWzBdKTsKKyAg
ICBpZiAoVU5MSUtFTFkoIWtleSkpIHsKKyAgICAgICAgZWMgPSBUWVBFX01JU01BVENIX0VSUjsK
KyAgICAgICAgZ290byBmYWlsOworICAgIH0KICAgICBpbXAtPmlkYktleShrZXkpOwogICAgIHJl
dHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKKyAgICB9CisgICAgZmFpbDoKKyAgICBWOFBy
b3h5OjpzZXRET01FeGNlcHRpb24oZWMpOworICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4oKTsKIH0KIAogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBtZXRob2RXaXRoRXhjZXB0
aW9uQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvYmluZGluZ3MvdjgvSURCQmluZGluZ1V0aWxpdGllcy5jcHAgYi9XZWJDb3JlL2JpbmRpbmdz
L3Y4L0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwCmluZGV4IDRhNTg4NTMuLjEyM2IxNWMgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvSURCQmluZGluZ1V0aWxpdGllcy5jcHAKKysrIGIv
V2ViQ29yZS9iaW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcApAQCAtMjgsNiArMjgs
NyBAQAogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKKyNpbmNsdWRlICJJREJEYXRh
YmFzZUV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIklEQktleS5oIgogI2luY2x1ZGUgIklEQktleVBh
dGguaCIKICNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKQEAgLTQ1LDcgKzQ2LDgg
QEAgUGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0ZUlEQktleUZyb21WYWx1ZSh2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gdmFsdWUpCiAgICAgaWYgKHZhbHVlLT5Jc1N0cmluZygpKQogICAgICAgICByZXR1
cm4gSURCS2V5OjpjcmVhdGUodjhWYWx1ZVRvV2ViQ29yZVN0cmluZyh2YWx1ZSkpOwogICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgZGF0ZXMuCi0gICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gMDsg
Ly8gU2lnbmFscyB0eXBlIGVycm9yLgogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmggYi9XZWJDb3JlL3N0
b3JhZ2UvSURCRGF0YWJhc2VFeGNlcHRpb24uaAppbmRleCAyNTFjZmM5Li45NDU3NzNjIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VFeGNlcHRpb24uaAorKysgYi9XZWJD
b3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VFeGNlcHRpb24uaApAQCAtNDIsOSArNDIsOCBAQCBwdWJs
aWM6CiAgICAgfQogICAgIH5JREJEYXRhYmFzZUV4Y2VwdGlvbigpIHsgfQogCi0gICAgLy8gS2Vl
cCBpbiBzeW5jIHdpdGggd2hhdCdzIGluIHRoZSAuaWRsIGZpbGUuCiAgICAgZW51bSBFcnJvckNv
ZGUgewotICAgICAgICBVTktOT1dOX0VSUiA9IDAsCisgICAgICAgIFVOS05PV05fRVJSID0gMSwK
ICAgICAgICAgTk9OX1RSQU5TSUVOVF9FUlIgPSAxLAogICAgICAgICBOT1RfRk9VTkRfRVJSID0g
MiwKICAgICAgICAgQ09OU1RSQUlOVF9FUlIgPSAzLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9y
YWdlL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmlkbCBiL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFz
ZUV4Y2VwdGlvbi5pZGwKaW5kZXggODhlNmU3ZS4uMWYxNWZjMCAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9zdG9yYWdlL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmlkbAorKysgYi9XZWJDb3JlL3N0b3JhZ2Uv
SURCRGF0YWJhc2VFeGNlcHRpb24uaWRsCkBAIC0yOCw3ICsyOCw4IEBAIG1vZHVsZSBzdG9yYWdl
IHsKICAgICBpbnRlcmZhY2UgWwogICAgICAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFCQVNF
CiAgICAgXSBJREJEYXRhYmFzZUV4Y2VwdGlvbiB7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIHNo
b3J0IFVOS05PV05fRVJSID0gMDsKKyAgICAgICAgLy8gRklYTUU6IFRoZXNlIGVycm9yIGNvZGVz
IGNvbmZsaWN0IHdpdGggb3RoZXJzLgorICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBVTktO
T1dOX0VSUiA9IDE7CiAgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IE5PTl9UUkFOU0lFTlRf
RVJSID0gMTsKICAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgTk9UX0ZPVU5EX0VSUiA9IDI7
CiAgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IENPTlNUUkFJTlRfRVJSID0gMzsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcCBiL1dl
YkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAppbmRleCA5ZWYxNDRk
Li45N2Q4NGQyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbC5jcHAKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2VuZElt
cGwuY3BwCkBAIC0zOTQsMTEgKzM5NCwxNCBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6Om9wZW5DdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcHJwUmFuZ2UsIHVucwogCiB2
b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Om9wZW5DdXJzb3JJbnRlcm5hbChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBv
YmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIHVuc2lnbmVkIHNob3J0
IHRtcERpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1Jl
ZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uKQogeworICAg
IGJvb2wgbGVmdEJvdW5kID0gcmFuZ2UgJiYgKHJhbmdlLT5mbGFncygpICYgSURCS2V5UmFuZ2U6
OkxFRlRfQk9VTkQgfHwgcmFuZ2UtPmZsYWdzKCkgPT0gSURCS2V5UmFuZ2U6OlNJTkdMRSk7Cisg
ICAgYm9vbCByaWdodEJvdW5kID0gcmFuZ2UgJiYgKHJhbmdlLT5mbGFncygpICYgSURCS2V5UmFu
Z2U6OlJJR0hUX0JPVU5EIHx8IHJhbmdlLT5mbGFncygpID09IElEQktleVJhbmdlOjpTSU5HTEUp
OworCiAgICAgLy8gU2V2ZXJhbCBmaWxlcyBkZXBlbmQgb24gdGhpcyBvcmRlciBvZiBzZWxlY3Rz
LgogICAgIFN0cmluZyBzcWwgPSAiU0VMRUNUIGlkLCBrZXlTdHJpbmcsIGtleURhdGUsIGtleU51
bWJlciwgdmFsdWUgRlJPTSBPYmplY3RTdG9yZURhdGEgV0hFUkUgIjsKLSAgICBpZiAocmFuZ2Ut
PmZsYWdzKCkgJiBJREJLZXlSYW5nZTo6TEVGVF9CT1VORCB8fCByYW5nZS0+ZmxhZ3MoKSA9PSBJ
REJLZXlSYW5nZTo6U0lOR0xFKQorICAgIGlmIChsZWZ0Qm91bmQpCiAgICAgICAgIHNxbCArPSBy
YW5nZS0+bGVmdCgpLT5sZWZ0Q3Vyc29yV2hlcmVGcmFnbWVudChyYW5nZS0+bGVmdFdoZXJlQ2xh
dXNlQ29tcGFyaXNvbk9wZXJhdG9yKCkpOwotICAgIGlmIChyYW5nZS0+ZmxhZ3MoKSAmIElEQktl
eVJhbmdlOjpSSUdIVF9CT1VORCB8fCByYW5nZS0+ZmxhZ3MoKSA9PSBJREJLZXlSYW5nZTo6U0lO
R0xFKQorICAgIGlmIChyaWdodEJvdW5kKQogICAgICAgICBzcWwgKz0gcmFuZ2UtPnJpZ2h0KCkt
PnJpZ2h0Q3Vyc29yV2hlcmVGcmFnbWVudChyYW5nZS0+cmlnaHRXaGVyZUNsYXVzZUNvbXBhcmlz
b25PcGVyYXRvcigpKTsKICAgICBzcWwgKz0gIm9iamVjdFN0b3JlSWQgPSA/IE9SREVSIEJZICI7
CiAKQEAgLTQxMyw5ICs0MTYsOSBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Om9w
ZW5DdXJzb3JJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzcwogICAgIEFTU0VS
VF9VTlVTRUQob2ssIG9rKTsgLy8gRklYTUU6IEJldHRlciBlcnJvciBoYW5kbGluZz8KIAogICAg
IGludCBjdXJyZW50Q29sdW1uID0gMTsKLSAgICBpZiAocmFuZ2UtPmZsYWdzKCkgJiBJREJLZXlS
YW5nZTo6TEVGVF9CT1VORCB8fCByYW5nZS0+ZmxhZ3MoKSA9PSBJREJLZXlSYW5nZTo6U0lOR0xF
KQorICAgIGlmIChsZWZ0Qm91bmQpCiAgICAgICAgIGN1cnJlbnRDb2x1bW4gKz0gcmFuZ2UtPmxl
ZnQoKS0+YmluZCgqcXVlcnksIGN1cnJlbnRDb2x1bW4pOwotICAgIGlmIChyYW5nZS0+ZmxhZ3Mo
KSAmIElEQktleVJhbmdlOjpSSUdIVF9CT1VORCB8fCByYW5nZS0+ZmxhZ3MoKSA9PSBJREJLZXlS
YW5nZTo6U0lOR0xFKQorICAgIGlmIChyaWdodEJvdW5kKQogICAgICAgICBjdXJyZW50Q29sdW1u
ICs9IHJhbmdlLT5yaWdodCgpLT5iaW5kKCpxdWVyeSwgY3VycmVudENvbHVtbik7CiAgICAgcXVl
cnktPmJpbmRJbnQ2NChjdXJyZW50Q29sdW1uLCBvYmplY3RTdG9yZS0+aWQoKSk7CiAKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9JREJSZXF1ZXN0LmNwcCBiL1dlYkNvcmUvc3RvcmFnZS9J
REJSZXF1ZXN0LmNwcAppbmRleCBjNjdlMzc5Li5iMGRhODZiIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3N0b3JhZ2UvSURCUmVxdWVzdC5jcHAKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0lEQlJlcXVlc3Qu
Y3BwCkBAIC01OSwxNSArNTksOCBAQCBJREJSZXF1ZXN0OjpJREJSZXF1ZXN0KFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCQW55PiBzb3VyYwogCiBJREJSZXF1
ZXN0Ojp+SURCUmVxdWVzdCgpCiB7Ci0gICAgLy8gVGhlIHRyYW5zYWN0aW9uIHBvaW50ZXIgaXMg
dXNlZCB0byBub3RpZnkgdGhlIHRyYW5zYWN0aW9uIG9uY2UgdGhlIEpTIGV2ZW50cyB3ZXJlCi0g
ICAgLy8gZGlzcGF0Y2hlZCBieSB0aGlzIHJlcXVlc3Qgb2JqZWN0LiBJZiBubyBuZXcgdGFza3Mg
d2VyZSBhZGRlZCBieSB0aGUgZXZlbnQgSlMgY2FsbGJhY2tzLAotICAgIC8vIHRoZSB0cmFuc2Fj
dGlvbiBjYW4gY29tbWl0LiBPdGhlcndpc2UsIGl0IGNhbiBjb250aW51ZSBleGVjdXRpbmcgdGhl
IG5ldyB0YXNrcy4KLSAgICAvLyBJdCBpcyBpbXBvcnRhbnQgdG8gZ3VhcmFudGVlIHRoYXQgdGhl
IHRyYW5zYWN0aW9uIGlzIG5vdGlmaWVkIGFmdGVyIHRoZSBldmVudHMgYXJlCi0gICAgLy8gZGlz
cGF0Y2hlZCwgYXMgdGhlIHRyYW5zYWN0aW9uIGNhbm5vdCBjb21taXQgb3IgZXhlY3V0ZSBuZXcg
dGFza3MgaW4gdGhlIGFic2VuY2UKLSAgICAvLyBvZiB0aGVzZSBub3RpZmljYXRpb25zLiBXZSBj
bGVhciB0aGUgdHJhbnNhY3Rpb24gcG9pbnRlciBvbmNlIHRoZSBldmVudHMgaGF2ZSBkaXNwYXRj
aGVkLAotICAgIC8vIHNvIGhhdmluZyBhIG5vbi16ZXJvIHBvaW50ZXIgYXQgSURCUmVxdWVzdCBk
ZXN0cnVjdGlvbiB0aW1lIHNob3dzIHRoYXQgdGhlIGV2ZW50cyBoYXZlIG5vdAotICAgIC8vIHll
dCBmaXJlZCBhbmQgdGhlcmUgaXMgYSB0cmFuc2FjdGlvbiB3YWl0aW5nIHRvIGJlIG5vdGlmaWVk
LiBUaGlzIGlzIGFuIGVycm9yLgotICAgIEFTU0VSVCghbV90cmFuc2FjdGlvbik7CisgICAgaWYg
KG1fdHJhbnNhY3Rpb24pCisgICAgICAgIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3I6OnJl
bW92ZVBlbmRpbmdUcmFuc2FjdGlvbihtX3RyYW5zYWN0aW9uLmdldCgpKTsKIH0KIAogYm9vbCBJ
REJSZXF1ZXN0OjpyZXNldFJlYWR5U3RhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
KiB0cmFuc2FjdGlvbikKQEAgLTE1OSw2ICsxNTIsNyBAQCB2b2lkIElEQlJlcXVlc3Q6OnRpbWVy
RmlyZWQoVGltZXI8SURCUmVxdWVzdD4qKQogewogICAgIEFTU0VSVChtX3NlbGZSZWYpOwogICAg
IEFTU0VSVChtX3BlbmRpbmdFdmVudHMuc2l6ZSgpKTsKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IGhhbmRsZSB0aGUgc3RvcCBldmVudCBhbmQgc3RvcCBhbnkgdGltZXJzIHdoZW4gd2Ugc2VlIGl0
LiBXZSBjYW4gdGhlbiBhc3NlcnQgaGVyZSB0aGF0IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgaXMg
bm9uLW51bGwuCiAKICAgICAvLyBXZSBuZWVkIHRvIGtlZXAgc2VsZi1yZWZlcmVuY2luZyBvdXJz
ZWxmLCBvdGhlcndpc2UgaXQncyBwb3NzaWJsZSB3ZSdsbCBiZSBkZWxldGVkLgogICAgIC8vIEJ1
dCBpbiBzb21lIGNhc2VzLCBzdXNwZW5kKCkgY291bGQgYmUgY2FsbGVkIHdoaWxlIHdlJ3JlIGRp
c3BhdGNoaW5nIGFuIGV2ZW50LCBzbyB3ZQpAQCAtMTcyLDYgKzE2NiwxMCBAQCB2b2lkIElEQlJl
cXVlc3Q6OnRpbWVyRmlyZWQoVGltZXI8SURCUmVxdWVzdD4qKQogICAgIFZlY3RvcjxQZW5kaW5n
RXZlbnQ+IHBlbmRpbmdFdmVudHM7CiAgICAgcGVuZGluZ0V2ZW50cy5zd2FwKG1fcGVuZGluZ0V2
ZW50cyk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwZW5kaW5nRXZlbnRzLnNpemUoKTsg
KytpKSB7CisgICAgICAgIC8vIEl0J3MgcG9zc2libGUgd2UndmUgbmF2aWdhdGVkIGluIHdoaWNo
IGNhc2Ugd2UnbGwgY3Jhc2guCisgICAgICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
KQorICAgICAgICAgICAgcmV0dXJuOworCiAgICAgICAgIGlmIChwZW5kaW5nRXZlbnRzW2ldLm1f
ZXJyb3IpIHsKICAgICAgICAgICAgIEFTU0VSVCghcGVuZGluZ0V2ZW50c1tpXS5tX3Jlc3VsdCk7
CiAgICAgICAgICAgICBkaXNwYXRjaEV2ZW50KElEQkVycm9yRXZlbnQ6OmNyZWF0ZShtX3NvdXJj
ZSwgKnBlbmRpbmdFdmVudHNbaV0ubV9lcnJvcikpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9y
YWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwIGIvV2ViQ29yZS9zdG9yYWdlL0lEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGwuY3BwCmluZGV4IDUwMTZhM2YuLjJiMWY3MzIgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcAorKysgYi9X
ZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAKQEAgLTE0Nyw3ICsx
NDcsNyBAQCB2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnRhc2tUaW1lckZpcmVkKFRp
bWVyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KgogCiAgICAgVGFza1F1ZXVlIHF1ZXVlOwog
ICAgIHF1ZXVlLnN3YXAobV90YXNrUXVldWUpOwotICAgIHdoaWxlICghcXVldWUuaXNFbXB0eSgp
KSB7CisgICAgd2hpbGUgKCFxdWV1ZS5pc0VtcHR5KCkgJiYgbV9zdGF0ZSAhPSBGaW5pc2hlZCkg
ewogICAgICAgICBPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gdGFzayhxdWV1
ZS5maXJzdCgpLnJlbGVhc2UoKSk7CiAgICAgICAgIHF1ZXVlLnJlbW92ZUZpcnN0KCk7CiAgICAg
ICAgIG1fcGVuZGluZ0V2ZW50cysrOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggOTZhNWM2Yy4uYWU2ZDYwMyAx
MDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTAtMTAtMjYgIEplcmVteSBPcmxvdyAg
PGpvcmxvd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgRml4IEluZGV4ZWREQiBjcmFzaGVzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00ODI2NgorCisgICAgICAgIE1ha2UgV2ViSURC
T2JqZWN0U3RvcmVJbXBsIG1hdGNoIHRoZSB3YXkgdGhhdCBXZWJJREJJbmRleEltcGwgcGFzc2Vz
CisgICAgICAgIGluIGN1cnNvciBwYXJhbWV0ZXJzICh3aGljaCBpcyB0aGUgY29ycmVjdCB3YXkp
LiBLZXlSYW5nZSBrbm93cyBob3cKKyAgICAgICAgdG8gY29udmVydCBpdHNlbGYgdG8gYSBXZWJD
b3JlIHR5cGUtLWV2ZW4gaWYgdGhlIHZhbHVlIGlzIG51bGwuCisKKyAgICAgICAgKiBzcmMvV2Vi
SURCT2JqZWN0U3RvcmVJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViSURCT2JqZWN0U3Rv
cmVJbXBsOjpvcGVuQ3Vyc29yKToKKwogMjAxMC0xMC0yMSAgSmVyZW15IE9ybG93ICA8am9ybG93
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KZGlm
ZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCT2JqZWN0U3RvcmVJbXBsLmNwcCBi
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCT2JqZWN0U3RvcmVJbXBsLmNwcAppbmRleCA5NjQ5
NWZlLi41ZGQyNjUyIDEwMDc1NQotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQk9iamVj
dFN0b3JlSW1wbC5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJPYmplY3RTdG9y
ZUltcGwuY3BwCkBAIC0xMDQsNyArMTA0LDcgQEAgdm9pZCBXZWJJREJPYmplY3RTdG9yZUltcGw6
OnJlbW92ZUluZGV4KGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2ViSURCVHJhbnMKIAog
dm9pZCBXZWJJREJPYmplY3RTdG9yZUltcGw6Om9wZW5DdXJzb3IoY29uc3QgV2ViSURCS2V5UmFu
Z2UmIGtleVJhbmdlLCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIFdlYklEQkNhbGxiYWNrcyog
Y2FsbGJhY2tzLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIFdlYkV4Y2Vw
dGlvbkNvZGUmIGVjKQogewotICAgIG1fb2JqZWN0U3RvcmUtPm9wZW5DdXJzb3IoSURCS2V5UmFu
Z2U6OmNyZWF0ZShrZXlSYW5nZS5sZWZ0KCksIGtleVJhbmdlLnJpZ2h0KCksIGtleVJhbmdlLmZs
YWdzKCkpLCBkaXJlY3Rpb24sIElEQkNhbGxiYWNrc1Byb3h5OjpjcmVhdGUoY2FsbGJhY2tzKSwg
dHJhbnNhY3Rpb24uZ2V0SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKCksIGVjKTsKKyAg
ICBtX29iamVjdFN0b3JlLT5vcGVuQ3Vyc29yKGtleVJhbmdlLCBkaXJlY3Rpb24sIElEQkNhbGxi
YWNrc1Byb3h5OjpjcmVhdGUoY2FsbGJhY2tzKSwgdHJhbnNhY3Rpb24uZ2V0SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlKCksIGVjKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71899</attachid>
            <date>2010-10-26 09:19:47 -0700</date>
            <delta_ts>2010-10-26 10:04:17 -0700</delta_ts>
            <desc>another fix</desc>
            <filename>a</filename>
            <type>text/plain</type>
            <size>30270</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA4NzcxMTQ5Li45NWJiMThhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMTAtMTAt
MjYgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4IEluZGV4ZWREQiBjcmFzaGVzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00ODI2NgorCisg
ICAgICAgIFRlc3QgYWxsIHRoZSBjaGFuZ2VzIG1hZGUgaW4gV2ViQ29yZS4KKworICAgICAgICAq
IHN0b3JhZ2UvaW5kZXhlZGRiL2NvbnN0YW50cy1leHBlY3RlZC50eHQ6CisgICAgICAgICogc3Rv
cmFnZS9pbmRleGVkZGIvY29uc3RhbnRzLmh0bWw6CisgICAgICAgICogc3RvcmFnZS9pbmRleGVk
ZGIvZGF0YWJhc2UtcXVvdGEtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHN0b3JhZ2UvaW5kZXhl
ZGRiL2luZGV4LWJhc2ljcy1leHBlY3RlZC50eHQ6CisgICAgICAgICogc3RvcmFnZS9pbmRleGVk
ZGIvaW5kZXgtYmFzaWNzLmh0bWw6CisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvaW5kZXgt
Y3Vyc29yLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9pbmRleC1j
dXJzb3IuaHRtbDoKKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9rZXlyYW5nZS1leHBlY3Rl
ZC50eHQ6CisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIva2V5cmFuZ2UuaHRtbDoKKyAgICAg
ICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9vYmplY3RzdG9yZS1iYXNpY3MtZXhwZWN0ZWQudHh0Ogor
ICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL29iamVjdHN0b3JlLWJhc2ljcy5odG1sOgorICAg
ICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL29iamVjdHN0b3JlLWN1cnNvci1leHBlY3RlZC50eHQ6
CisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvb2JqZWN0c3RvcmUtY3Vyc29yLmh0bWw6Cisg
ICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvb3Blbi1jdXJzb3ItZXhwZWN0ZWQudHh0OgorICAg
ICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL29wZW4tY3Vyc29yLmh0bWw6CisKIDIwMTAtMTAtMjEg
IEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4
ZWRkYi9jb25zdGFudHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVk
ZGIvY29uc3RhbnRzLWV4cGVjdGVkLnR4dAppbmRleCAxNWEyZGY3Li44ZjUzYjU2IDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9jb25zdGFudHMtZXhwZWN0ZWQudHh0
CisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2NvbnN0YW50cy1leHBlY3RlZC50
eHQKQEAgLTgsNyArOCw3IEBAIFBBU1Mgd2Via2l0SURCS2V5UmFuZ2UuTEVGVF9PUEVOIGlzIDEK
IFBBU1Mgd2Via2l0SURCS2V5UmFuZ2UuUklHSFRfT1BFTiBpcyAyCiBQQVNTIHdlYmtpdElEQktl
eVJhbmdlLkxFRlRfQk9VTkQgaXMgNAogUEFTUyB3ZWJraXRJREJLZXlSYW5nZS5SSUdIVF9CT1VO
RCBpcyA4Ci1QQVNTIHdlYmtpdElEQkRhdGFiYXNlRXhjZXB0aW9uLlVOS05PV05fRVJSIGlzIDAK
K1BBU1Mgd2Via2l0SURCRGF0YWJhc2VFeGNlcHRpb24uVU5LTk9XTl9FUlIgaXMgMQogUEFTUyB3
ZWJraXRJREJEYXRhYmFzZUV4Y2VwdGlvbi5OT05fVFJBTlNJRU5UX0VSUiBpcyAxCiBQQVNTIHdl
YmtpdElEQkRhdGFiYXNlRXhjZXB0aW9uLk5PVF9GT1VORF9FUlIgaXMgMgogUEFTUyB3ZWJraXRJ
REJEYXRhYmFzZUV4Y2VwdGlvbi5DT05TVFJBSU5UX0VSUiBpcyAzCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9jb25zdGFudHMuaHRtbCBiL0xheW91dFRlc3RzL3N0
b3JhZ2UvaW5kZXhlZGRiL2NvbnN0YW50cy5odG1sCmluZGV4IDgxM2ZlN2EuLjljZGY0YzQgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2NvbnN0YW50cy5odG1sCisr
KyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2NvbnN0YW50cy5odG1sCkBAIC0yMiw3
ICsyMiw3IEBAIGZ1bmN0aW9uIHRlc3QoKQogICAgIHNob3VsZEJlKCJ3ZWJraXRJREJLZXlSYW5n
ZS5MRUZUX0JPVU5EIiwgIjQiKTsKICAgICBzaG91bGRCZSgid2Via2l0SURCS2V5UmFuZ2UuUklH
SFRfQk9VTkQiLCAiOCIpOwogCi0gICAgc2hvdWxkQmUoIndlYmtpdElEQkRhdGFiYXNlRXhjZXB0
aW9uLlVOS05PV05fRVJSIiwgIjAiKTsKKyAgICBzaG91bGRCZSgid2Via2l0SURCRGF0YWJhc2VF
eGNlcHRpb24uVU5LTk9XTl9FUlIiLCAiMSIpOwogICAgIHNob3VsZEJlKCJ3ZWJraXRJREJEYXRh
YmFzZUV4Y2VwdGlvbi5OT05fVFJBTlNJRU5UX0VSUiIsICIxIik7CiAgICAgc2hvdWxkQmUoIndl
YmtpdElEQkRhdGFiYXNlRXhjZXB0aW9uLk5PVF9GT1VORF9FUlIiLCAiMiIpOwogICAgIHNob3Vs
ZEJlKCJ3ZWJraXRJREJEYXRhYmFzZUV4Y2VwdGlvbi5DT05TVFJBSU5UX0VSUiIsICIzIik7CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9kYXRhYmFzZS1xdW90YS1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9kYXRhYmFzZS1xdW90
YS1leHBlY3RlZC50eHQKaW5kZXggNmMyNDVkNC4uOTFkM2FjNyAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZGF0YWJhc2UtcXVvdGEtZXhwZWN0ZWQudHh0CisrKyBi
L0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2RhdGFiYXNlLXF1b3RhLWV4cGVjdGVkLnR4
dApAQCAtNjgsNyArNjgsNyBAQCB0cmFucyA9IGRiLnRyYW5zYWN0aW9uKCkKIENyZWF0aW5nICdk
YXRhJyB3aGljaCBjb250YWlucyA2NEsgb2YgZGF0YQogUEFTUyBkYXRhLmxlbmd0aCBpcyA2NTUz
Ngogc3RvcmUgPSB0cmFucy5vYmplY3RTdG9yZSgndGVzdDEyMycpCi1FcnJvciBmdW5jdGlvbiBj
YWxsZWQ6ICgwKSBFcnJvciB3cml0aW5nIGRhdGEgdG8gc3RhYmxlIHN0b3JhZ2UuCitFcnJvciBm
dW5jdGlvbiBjYWxsZWQ6ICgxKSBFcnJvciB3cml0aW5nIGRhdGEgdG8gc3RhYmxlIHN0b3JhZ2Uu
CiBFcnJvciBldmVudCBmaXJlZDoKIFBBU1MgJ3Jlc3VsdCcgaW4gZXZlbnQgaXMgZmFsc2UKIFBB
U1MgJ2NvZGUnIGluIGV2ZW50IGlzIHRydWUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3Jh
Z2UvaW5kZXhlZGRiL2luZGV4LWJhc2ljcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdG9y
YWdlL2luZGV4ZWRkYi9pbmRleC1iYXNpY3MtZXhwZWN0ZWQudHh0CmluZGV4IDA4NjlkOTUuLmY4
ODZhMTkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2luZGV4LWJh
c2ljcy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvaW5k
ZXgtYmFzaWNzLWV4cGVjdGVkLnR4dApAQCAtMzAwLDYgKzMwMCwxMCBAQCBQQVNTICdyZWFkeVN0
YXRlJyBpbiBldmVudC50YXJnZXQgaXMgdHJ1ZQogUEFTUyBldmVudC50YXJnZXQucmVhZHlTdGF0
ZSBpcyBldmVudC50YXJnZXQuRE9ORQogCiBQQVNTIGV2ZW50LnJlc3VsdCA9PT0gbnVsbCBpcyB0
cnVlCitQYXNzaW5nIGFuIGludmFsaWQga2V5IGludG8gaW5kZXhPYmplY3QuZ2V0KCkuCitQQVNT
IENhdWdodCBleGNlcHRpb246IEVycm9yOiBUWVBFX01JU01BVENIX0VSUjogRE9NIEV4Y2VwdGlv
biAxNworUGFzc2luZyBhbiBpbnZhbGlkIGtleSBpbnRvIGluZGV4T2JqZWN0LmdldEtleSgpLgor
UEFTUyBDYXVnaHQgZXhjZXB0aW9uOiBFcnJvcjogVFlQRV9NSVNNQVRDSF9FUlI6IERPTSBFeGNl
cHRpb24gMTcKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIAogVEVTVCBDT01QTEVU
RQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvaW5kZXgtYmFzaWNz
Lmh0bWwgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9pbmRleC1iYXNpY3MuaHRtbApp
bmRleCBmNzI1N2YxLi43YTE2YzNhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2lu
ZGV4ZWRkYi9pbmRleC1iYXNpY3MuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4
ZWRkYi9pbmRleC1iYXNpY3MuaHRtbApAQCAtMjE5LDYgKzIxOSwyMSBAQCBmdW5jdGlvbiBsYXN0
KCkKICAgICB2ZXJpZnlTdWNjZXNzRXZlbnQoZXZlbnQpOwogICAgIHNob3VsZEJlVHJ1ZSgiZXZl
bnQucmVzdWx0ID09PSBudWxsIik7CiAKKyAgICB0cnkgeworICAgICAgICBkZWJ1ZygiUGFzc2lu
ZyBhbiBpbnZhbGlkIGtleSBpbnRvIGluZGV4T2JqZWN0LmdldCgpLiIpOworICAgICAgICBpbmRl
eE9iamVjdC5nZXQoW10pOworICAgICAgICB0ZXN0RmFpbGVkKCJObyBleGNlcHRpb24gdGhyb3du
Iik7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICB0ZXN0UGFzc2VkKCJDYXVnaHQgZXhjZXB0
aW9uOiAiICsgZS50b1N0cmluZygpKTsKKyAgICB9CisKKyAgICB0cnkgeworICAgICAgICBkZWJ1
ZygiUGFzc2luZyBhbiBpbnZhbGlkIGtleSBpbnRvIGluZGV4T2JqZWN0LmdldEtleSgpLiIpOwor
ICAgICAgICBpbmRleE9iamVjdC5nZXRLZXkoW10pOworICAgICAgICB0ZXN0RmFpbGVkKCJObyBl
eGNlcHRpb24gdGhyb3duIik7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICB0ZXN0UGFzc2Vk
KCJDYXVnaHQgZXhjZXB0aW9uOiAiICsgZS50b1N0cmluZygpKTsKKyAgICB9CiAgICAgZG9uZSgp
OwogfQogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9pbmRleC1j
dXJzb3ItZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvaW5kZXgt
Y3Vyc29yLWV4cGVjdGVkLnR4dAppbmRleCA4OGI5NmZmLi5iYzAxMDcwIDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9pbmRleC1jdXJzb3ItZXhwZWN0ZWQudHh0Cisr
KyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2luZGV4LWN1cnNvci1leHBlY3RlZC50
eHQKQEAgLTIwNTgsNiArMjA1OCw0NCBAQCBQQVNTIGV2ZW50LnJlc3VsdC5rZXkgaXMgdGVzdERh
dGFbN10KIFBBU1MgZXZlbnQucmVzdWx0LnZhbHVlIGlzIGV4cGVjdGVkSW5kZXgKIFBBU1MgZXZl
bnQucmVzdWx0LmtleSBpcyB0ZXN0RGF0YVs2XQogUEFTUyBldmVudC5yZXN1bHQgaXMgbnVsbAor
CitOZXh0IHRlc3Q6IG51bGwga2V5IHBhdGggc29ydGVkIGFzY2VuZGluZy4KK1BBU1MgZXZlbnQu
cmVzdWx0LnZhbHVlIGlzIGV4cGVjdGVkSW5kZXgKK1BBU1MgZXZlbnQucmVzdWx0LmtleSBpcyB0
ZXN0RGF0YVswXQorUEFTUyBldmVudC5yZXN1bHQudmFsdWUgaXMgZXhwZWN0ZWRJbmRleAorUEFT
UyBldmVudC5yZXN1bHQua2V5IGlzIHRlc3REYXRhWzFdCitQQVNTIGV2ZW50LnJlc3VsdC52YWx1
ZSBpcyBleHBlY3RlZEluZGV4CitQQVNTIGV2ZW50LnJlc3VsdC5rZXkgaXMgdGVzdERhdGFbMl0K
K1BBU1MgZXZlbnQucmVzdWx0LnZhbHVlIGlzIGV4cGVjdGVkSW5kZXgKK1BBU1MgZXZlbnQucmVz
dWx0LmtleSBpcyB0ZXN0RGF0YVszXQorUEFTUyBldmVudC5yZXN1bHQudmFsdWUgaXMgZXhwZWN0
ZWRJbmRleAorUEFTUyBldmVudC5yZXN1bHQua2V5IGlzIHRlc3REYXRhWzRdCitQQVNTIGV2ZW50
LnJlc3VsdC52YWx1ZSBpcyBleHBlY3RlZEluZGV4CitQQVNTIGV2ZW50LnJlc3VsdC5rZXkgaXMg
dGVzdERhdGFbNV0KK1BBU1MgZXZlbnQucmVzdWx0LnZhbHVlIGlzIGV4cGVjdGVkSW5kZXgKK1BB
U1MgZXZlbnQucmVzdWx0LmtleSBpcyB0ZXN0RGF0YVs2XQorUEFTUyBldmVudC5yZXN1bHQudmFs
dWUgaXMgZXhwZWN0ZWRJbmRleAorUEFTUyBldmVudC5yZXN1bHQua2V5IGlzIHRlc3REYXRhWzdd
CitQQVNTIGV2ZW50LnJlc3VsdCBpcyBudWxsCisKK05leHQgdGVzdDogbnVsbCBrZXkgcGF0aCBz
b3J0ZWQgZGVzY2VuZGluZy4KK1BBU1MgZXZlbnQucmVzdWx0LnZhbHVlIGlzIGV4cGVjdGVkSW5k
ZXgKK1BBU1MgZXZlbnQucmVzdWx0LmtleSBpcyB0ZXN0RGF0YVs3XQorUEFTUyBldmVudC5yZXN1
bHQudmFsdWUgaXMgZXhwZWN0ZWRJbmRleAorUEFTUyBldmVudC5yZXN1bHQua2V5IGlzIHRlc3RE
YXRhWzZdCitQQVNTIGV2ZW50LnJlc3VsdC52YWx1ZSBpcyBleHBlY3RlZEluZGV4CitQQVNTIGV2
ZW50LnJlc3VsdC5rZXkgaXMgdGVzdERhdGFbNV0KK1BBU1MgZXZlbnQucmVzdWx0LnZhbHVlIGlz
IGV4cGVjdGVkSW5kZXgKK1BBU1MgZXZlbnQucmVzdWx0LmtleSBpcyB0ZXN0RGF0YVs0XQorUEFT
UyBldmVudC5yZXN1bHQudmFsdWUgaXMgZXhwZWN0ZWRJbmRleAorUEFTUyBldmVudC5yZXN1bHQu
a2V5IGlzIHRlc3REYXRhWzNdCitQQVNTIGV2ZW50LnJlc3VsdC52YWx1ZSBpcyBleHBlY3RlZElu
ZGV4CitQQVNTIGV2ZW50LnJlc3VsdC5rZXkgaXMgdGVzdERhdGFbMl0KK1BBU1MgZXZlbnQucmVz
dWx0LnZhbHVlIGlzIGV4cGVjdGVkSW5kZXgKK1BBU1MgZXZlbnQucmVzdWx0LmtleSBpcyB0ZXN0
RGF0YVsxXQorUEFTUyBldmVudC5yZXN1bHQudmFsdWUgaXMgZXhwZWN0ZWRJbmRleAorUEFTUyBl
dmVudC5yZXN1bHQua2V5IGlzIHRlc3REYXRhWzBdCitQQVNTIGV2ZW50LnJlc3VsdCBpcyBudWxs
CiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2luZGV4LWN1cnNvci5odG1sIGIv
TGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvaW5kZXgtY3Vyc29yLmh0bWwKaW5kZXggNWFh
YjRmOC4uMGYyOGNiNiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIv
aW5kZXgtY3Vyc29yLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvaW5k
ZXgtY3Vyc29yLmh0bWwKQEAgLTEwNyw3ICsxMDcsNyBAQCBmdW5jdGlvbiBzY2hlZHVsZVRlc3Rz
KCkKIGZ1bmN0aW9uIHJ1bk5leHRUZXN0KCkKIHsKICAgICBpZiAoIXNjaGVkdWxlZFRlc3RzLmxl
bmd0aCkgewotICAgICAgICBkb25lKCk7CisgICAgICAgIHRlc3ROdWxsS2V5UmFuZ2UoKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAKQEAgLTIyNiw2ICsyMjYsMzggQEAgZnVuY3Rpb24gY3Vy
c29ySXRlcmF0aW9uKCkKICAgICBldmVudC5yZXN1bHQuY29udGludWUoKTsKIH0KICAKK3dpbmRv
dy5udWxsS2V5UmFuZ2VTdGVwID0gMDsKK2Z1bmN0aW9uIHRlc3ROdWxsS2V5UmFuZ2UoKQorewor
ICAgIHdpbmRvdy5sb3dlciA9IDA7CisgICAgd2luZG93Lmxvd2VySXNPcGVuID0gZmFsc2U7Cisg
ICAgd2luZG93LnVwcGVyID0gdGVzdERhdGEubGVuZ3RoLTE7CisgICAgd2luZG93LnVwcGVySXNP
cGVuID0gZmFsc2U7CisKKyAgICBzdHIgPSAiTmV4dCB0ZXN0OiBudWxsIGtleSBwYXRoICI7Cisg
ICAgaWYgKHdpbmRvdy5udWxsS2V5UmFuZ2VTdGVwID09IDApIHsKKyAgICAgICAgc3RyICs9ICJz
b3J0ZWQgYXNjZW5kaW5nLiI7CisgICAgICAgIHdpbmRvdy5hc2NlbmRpbmcgPSB0cnVlOworICAg
ICAgICB3aW5kb3cuZXhwZWN0ZWRJbmRleCA9IGxvd2VyOworICAgICAgICB3aW5kb3cubnVsbEtl
eVJhbmdlU3RlcCA9IDE7CisgICAgfSBlbHNlIGlmICh3aW5kb3cubnVsbEtleVJhbmdlU3RlcCA9
PSAxKSB7CisgICAgICAgIHN0ciArPSAic29ydGVkIGRlc2NlbmRpbmcuIjsKKyAgICAgICAgd2lu
ZG93LmFzY2VuZGluZyA9IGZhbHNlOworICAgICAgICB3aW5kb3cuZXhwZWN0ZWRJbmRleCA9IHVw
cGVyOworICAgICAgICB3aW5kb3cubnVsbEtleVJhbmdlU3RlcCA9IDI7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgZG9uZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZGVidWcoIiIp
OworICAgIGRlYnVnKHN0cik7CisgCisgICAgdmFyIHJlcXVlc3QgPSBpbmRleE9iamVjdC5vcGVu
S2V5Q3Vyc29yKG51bGwsIGFzY2VuZGluZyA/IHdlYmtpdElEQkN1cnNvci5ORVhUIDogd2Via2l0
SURCQ3Vyc29yLlBSRVYpOworICAgIHJlcXVlc3Qub25zdWNjZXNzID0gY3Vyc29ySXRlcmF0aW9u
OworICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworfQorIAog
b3BlbkRhdGFiYXNlKCk7IC8vIFRoZSBmaXJzdCBzdGVwLgogdmFyIHN1Y2Nlc3NmdWxseVBhcnNl
ZCA9IHRydWU7CiAgCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9r
ZXlyYW5nZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9rZXly
YW5nZS1leHBlY3RlZC50eHQKaW5kZXggOGQ2YmY4Ni4uMWE3ZGZmZiAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIva2V5cmFuZ2UtZXhwZWN0ZWQudHh0CisrKyBiL0xh
eW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2tleXJhbmdlLWV4cGVjdGVkLnR4dApAQCAtMTQx
LDYgKzE0MSwxOCBAQCBQQVNTIGtleVJhbmdlLmxlZnQgaXMgJ2FhZicKIFBBU1Mga2V5UmFuZ2Uu
cmlnaHQgaXMgJ2FiZicKIFBBU1MgbGVmdEZsYWdzIGlzIGtleVJhbmdlLkxFRlRfT1BFTiB8IGtl
eVJhbmdlLkxFRlRfQk9VTkQKIFBBU1MgcmlnaHRGbGFncyBpcyBrZXlSYW5nZS5SSUdIVF9PUEVO
IHwga2V5UmFuZ2UuUklHSFRfQk9VTkQKK1Bhc3NpbmcgYW4gaW52YWxpZCBrZXkgaW50byBvbmx5
KFtdKQorUEFTUyBDYXVnaHQgZXhjZXB0aW9uOiBFcnJvcjogVFlQRV9NSVNNQVRDSF9FUlI6IERP
TSBFeGNlcHRpb24gMTcKK1Bhc3NpbmcgYW4gaW52YWxpZCBrZXkgaW50byByaWdodEJvdW5kKFtd
KQorUEFTUyBDYXVnaHQgZXhjZXB0aW9uOiBFcnJvcjogVFlQRV9NSVNNQVRDSF9FUlI6IERPTSBF
eGNlcHRpb24gMTcKK1Bhc3NpbmcgYW4gaW52YWxpZCBrZXkgaW50byBsZWZ0Qm91bmQoW10pCitQ
QVNTIENhdWdodCBleGNlcHRpb246IEVycm9yOiBUWVBFX01JU01BVENIX0VSUjogRE9NIEV4Y2Vw
dGlvbiAxNworUGFzc2luZyBhbiBpbnZhbGlkIGtleSBpbnRvIGJvdW5kKG51bGwsIFtdKQorUEFT
UyBDYXVnaHQgZXhjZXB0aW9uOiBFcnJvcjogVFlQRV9NSVNNQVRDSF9FUlI6IERPTSBFeGNlcHRp
b24gMTcKK1Bhc3NpbmcgYW4gaW52YWxpZCBrZXkgaW50byBib3VuZChbXSxudWxsKQorUEFTUyBD
YXVnaHQgZXhjZXB0aW9uOiBFcnJvcjogVFlQRV9NSVNNQVRDSF9FUlI6IERPTSBFeGNlcHRpb24g
MTcKK1Bhc3NpbmcgYW4gaW52YWxpZCBrZXkgaW50byBib3VuZChbXSwgW10pCitQQVNTIENhdWdo
dCBleGNlcHRpb246IEVycm9yOiBUWVBFX01JU01BVENIX0VSUjogRE9NIEV4Y2VwdGlvbiAxNwog
UEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9rZXlyYW5nZS5odG1sIGIvTGF5b3V0
VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIva2V5cmFuZ2UuaHRtbAppbmRleCBjMzg4NWZjLi40ODcw
OGQ5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9rZXlyYW5nZS5o
dG1sCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2tleXJhbmdlLmh0bWwKQEAg
LTExMiw2ICsxMTIsNTMgQEAgZnVuY3Rpb24gdGVzdCgpCiAgICAgY2hlY2tCb3VuZEtleVJhbmdl
KCInYWFlJyIsICInYWJlJyIsIHRydWUsIGZhbHNlKTsKICAgICBjaGVja0JvdW5kS2V5UmFuZ2Uo
IidhYWYnIiwgIidhYmYnIiwgdHJ1ZSwgdHJ1ZSk7CiAKKyAgICB0cnkgeworICAgICAgICBkZWJ1
ZygiUGFzc2luZyBhbiBpbnZhbGlkIGtleSBpbnRvIG9ubHkoW10pIik7CisgICAgICAgIHdlYmtp
dElEQktleVJhbmdlLm9ubHkoW10pOworICAgICAgICB0ZXN0RmFpbGVkKCJObyBleGNlcHRpb24g
dGhyb3duIik7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICB0ZXN0UGFzc2VkKCJDYXVnaHQg
ZXhjZXB0aW9uOiAiICsgZS50b1N0cmluZygpKTsKKyAgICB9CisKKyAgICB0cnkgeworICAgICAg
ICBkZWJ1ZygiUGFzc2luZyBhbiBpbnZhbGlkIGtleSBpbnRvIHJpZ2h0Qm91bmQoW10pIik7Cisg
ICAgICAgIHdlYmtpdElEQktleVJhbmdlLnJpZ2h0Qm91bmQoW10pOworICAgICAgICB0ZXN0RmFp
bGVkKCJObyBleGNlcHRpb24gdGhyb3duIik7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICB0
ZXN0UGFzc2VkKCJDYXVnaHQgZXhjZXB0aW9uOiAiICsgZS50b1N0cmluZygpKTsKKyAgICB9Cisg
CisgICAgdHJ5IHsKKyAgICAgICAgZGVidWcoIlBhc3NpbmcgYW4gaW52YWxpZCBrZXkgaW50byBs
ZWZ0Qm91bmQoW10pIik7CisgICAgICAgIHdlYmtpdElEQktleVJhbmdlLmxlZnRCb3VuZChbXSk7
CisgICAgICAgIHRlc3RGYWlsZWQoIk5vIGV4Y2VwdGlvbiB0aHJvd24iKTsKKyAgICB9IGNhdGNo
IChlKSB7CisgICAgICAgIHRlc3RQYXNzZWQoIkNhdWdodCBleGNlcHRpb246ICIgKyBlLnRvU3Ry
aW5nKCkpOworICAgIH0KKworICAgIHRyeSB7CisgICAgICAgIGRlYnVnKCJQYXNzaW5nIGFuIGlu
dmFsaWQga2V5IGludG8gYm91bmQobnVsbCwgW10pIik7CisgICAgICAgIHdlYmtpdElEQktleVJh
bmdlLmJvdW5kKG51bGwsIFtdKTsKKyAgICAgICAgdGVzdEZhaWxlZCgiTm8gZXhjZXB0aW9uIHRo
cm93biIpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgdGVzdFBhc3NlZCgiQ2F1Z2h0IGV4
Y2VwdGlvbjogIiArIGUudG9TdHJpbmcoKSk7CisgICAgfQorCisgICAgdHJ5IHsKKyAgICAgICAg
ZGVidWcoIlBhc3NpbmcgYW4gaW52YWxpZCBrZXkgaW50byBib3VuZChbXSxudWxsKSIpOworICAg
ICAgICB3ZWJraXRJREJLZXlSYW5nZS5ib3VuZChbXSwgbnVsbCk7CisgICAgICAgIHRlc3RGYWls
ZWQoIk5vIGV4Y2VwdGlvbiB0aHJvd24iKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIHRl
c3RQYXNzZWQoIkNhdWdodCBleGNlcHRpb246ICIgKyBlLnRvU3RyaW5nKCkpOworICAgIH0KKwor
ICAgIHRyeSB7CisgICAgICAgIGRlYnVnKCJQYXNzaW5nIGFuIGludmFsaWQga2V5IGludG8gYm91
bmQoW10sIFtdKSIpOworICAgICAgICB3ZWJraXRJREJLZXlSYW5nZS5ib3VuZChbXSwgW10pOwor
ICAgICAgICB0ZXN0RmFpbGVkKCJObyBleGNlcHRpb24gdGhyb3duIik7CisgICAgfSBjYXRjaCAo
ZSkgeworICAgICAgICB0ZXN0UGFzc2VkKCJDYXVnaHQgZXhjZXB0aW9uOiAiICsgZS50b1N0cmlu
ZygpKTsKKyAgICB9CiB9CiAKIHRlc3QoKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3Jh
Z2UvaW5kZXhlZGRiL29iamVjdHN0b3JlLWJhc2ljcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0
cy9zdG9yYWdlL2luZGV4ZWRkYi9vYmplY3RzdG9yZS1iYXNpY3MtZXhwZWN0ZWQudHh0CmluZGV4
IGQyMmU2ZjAuLmEwOTdjY2YgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhl
ZGRiL29iamVjdHN0b3JlLWJhc2ljcy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvc3Rv
cmFnZS9pbmRleGVkZGIvb2JqZWN0c3RvcmUtYmFzaWNzLWV4cGVjdGVkLnR4dApAQCAtMTc2LDYg
KzE3NiwxNSBAQCBQQVNTICdyZWFkeVN0YXRlJyBpbiBldmVudC50YXJnZXQgaXMgdHJ1ZQogUEFT
UyBldmVudC50YXJnZXQucmVhZHlTdGF0ZSBpcyBldmVudC50YXJnZXQuRE9ORQogCiBQQVNTIGV2
ZW50LnJlc3VsdCBpcyBudWxsCitzdG9yZSA9IGV2ZW50LnNvdXJjZQorUGFzc2luZyBhbiBpbnZh
bGlkIGtleSBpbnRvIHN0b3JlLmdldCgpLgorUEFTUyBDYXVnaHQgZXhjZXB0aW9uOiBFcnJvcjog
VFlQRV9NSVNNQVRDSF9FUlI6IERPTSBFeGNlcHRpb24gMTcKK1Bhc3NpbmcgYW4gaW52YWxpZCBr
ZXkgaW50byBzdG9yZS5yZW1vdmUoKS4KK1BBU1MgQ2F1Z2h0IGV4Y2VwdGlvbjogRXJyb3I6IFRZ
UEVfTUlTTUFUQ0hfRVJSOiBET00gRXhjZXB0aW9uIDE3CitQYXNzaW5nIGFuIGludmFsaWQga2V5
IGludG8gc3RvcmUuYWRkKCkuCitQQVNTIENhdWdodCBleGNlcHRpb246IEVycm9yOiBUWVBFX01J
U01BVENIX0VSUjogRE9NIEV4Y2VwdGlvbiAxNworUGFzc2luZyBhbiBpbnZhbGlkIGtleSBpbnRv
IHN0b3JlLnB1dCgpLgorUEFTUyBDYXVnaHQgZXhjZXB0aW9uOiBFcnJvcjogVFlQRV9NSVNNQVRD
SF9FUlI6IERPTSBFeGNlcHRpb24gMTcKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUK
IAogVEVTVCBDT01QTEVURQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVk
ZGIvb2JqZWN0c3RvcmUtYmFzaWNzLmh0bWwgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRk
Yi9vYmplY3RzdG9yZS1iYXNpY3MuaHRtbAppbmRleCA5NTdkZmFhLi4wMDUyNDdlIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9vYmplY3RzdG9yZS1iYXNpY3MuaHRt
bAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9vYmplY3RzdG9yZS1iYXNpY3Mu
aHRtbApAQCAtNDcsNyArNDcsNyBAQCBmdW5jdGlvbiBzZXRWZXJzaW9uU3VjY2VzcygpCiANCiBm
dW5jdGlvbiBjcmVhdGVPYmplY3RTdG9yZSgpCiB7DQotICAgIGRlYnVnKCJjcmVhdE9iamVjdFN0
b3JlKCk6Iik7DQorICAgIGRlYnVnKCJjcmVhdGVPYmplY3RTdG9yZSgpOiIpOwogICAgIHdpbmRv
dy5zdG9yZSA9IGV2YWxBbmRMb2coInN0b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3N0b3Jl
TmFtZScsIG51bGwpIik7CiAgICAgdmFyIHN0b3JlTmFtZXMgPSBldmFsQW5kTG9nKCJzdG9yZU5h
bWVzID0gZGIub2JqZWN0U3RvcmVzIik7CiAKQEAgLTE5NSw2ICsxOTUsNDAgQEAgZnVuY3Rpb24g
cmVtb3ZlU3VjY2VzcygpCiAgICAgZGVidWcoInJlbW92ZVN1Y2Nlc3MoKToiKTsKICAgICB2ZXJp
ZnlTdWNjZXNzRXZlbnQoZXZlbnQpOwogICAgIHNob3VsZEJlTnVsbCgiZXZlbnQucmVzdWx0Iik7
CisgICAgdmFyIHN0b3JlID0gZXZhbEFuZExvZygic3RvcmUgPSBldmVudC5zb3VyY2UiKTsKKwor
ICAgIHRyeSB7CisgICAgICAgIGRlYnVnKCJQYXNzaW5nIGFuIGludmFsaWQga2V5IGludG8gc3Rv
cmUuZ2V0KCkuIik7CisgICAgICAgIHN0b3JlLmdldChbXSk7CisgICAgICAgIHRlc3RGYWlsZWQo
Ik5vIGV4Y2VwdGlvbiB0aHJvd24iKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIHRlc3RQ
YXNzZWQoIkNhdWdodCBleGNlcHRpb246ICIgKyBlLnRvU3RyaW5nKCkpOworICAgIH0KKworICAg
IHRyeSB7CisgICAgICAgIGRlYnVnKCJQYXNzaW5nIGFuIGludmFsaWQga2V5IGludG8gc3RvcmUu
cmVtb3ZlKCkuIik7CisgICAgICAgIHN0b3JlLnJlbW92ZShbXSk7CisgICAgICAgIHRlc3RGYWls
ZWQoIk5vIGV4Y2VwdGlvbiB0aHJvd24iKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIHRl
c3RQYXNzZWQoIkNhdWdodCBleGNlcHRpb246ICIgKyBlLnRvU3RyaW5nKCkpOworICAgIH0KKwor
ICAgIHRyeSB7CisgICAgICAgIGRlYnVnKCJQYXNzaW5nIGFuIGludmFsaWQga2V5IGludG8gc3Rv
cmUuYWRkKCkuIik7CisgICAgICAgIHN0b3JlLmFkZChudWxsLCBbXSk7CisgICAgICAgIHRlc3RG
YWlsZWQoIk5vIGV4Y2VwdGlvbiB0aHJvd24iKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAg
IHRlc3RQYXNzZWQoIkNhdWdodCBleGNlcHRpb246ICIgKyBlLnRvU3RyaW5nKCkpOworICAgIH0K
KworICAgIHRyeSB7CisgICAgICAgIGRlYnVnKCJQYXNzaW5nIGFuIGludmFsaWQga2V5IGludG8g
c3RvcmUucHV0KCkuIik7CisgICAgICAgIHN0b3JlLnB1dChudWxsLCBbXSk7CisgICAgICAgIHRl
c3RGYWlsZWQoIk5vIGV4Y2VwdGlvbiB0aHJvd24iKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAg
ICAgIHRlc3RQYXNzZWQoIkNhdWdodCBleGNlcHRpb246ICIgKyBlLnRvU3RyaW5nKCkpOworICAg
IH0KKwogICAgIGRvbmUoKTsKIH0KIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9p
bmRleGVkZGIvb2JqZWN0c3RvcmUtY3Vyc29yLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3N0
b3JhZ2UvaW5kZXhlZGRiL29iamVjdHN0b3JlLWN1cnNvci1leHBlY3RlZC50eHQKaW5kZXggODgx
ZmU5Mi4uMTQ5M2E4MCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIv
b2JqZWN0c3RvcmUtY3Vyc29yLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdl
L2luZGV4ZWRkYi9vYmplY3RzdG9yZS1jdXJzb3ItZXhwZWN0ZWQudHh0CkBAIC04NTQsNiArODU0
LDI2IEBAIFBBU1MgZXZlbnQucmVzdWx0IGlzIG51bGwKIE5leHQgdGVzdDogbG93ZXIgYm91bmQg
aXMgNjsgdXBwZXIgYm91bmQgaXMgNjsgc29ydGVkIGRlc2NlbmRpbmcuCiBQQVNTIGV2ZW50LnJl
c3VsdC5rZXkgaXMgdGVzdERhdGFbNl0KIFBBU1MgZXZlbnQucmVzdWx0IGlzIG51bGwKKworTmV4
dCB0ZXN0OiBudWxsIGtleSBwYXRoIHNvcnRlZCBhc2NlbmRpbmcuCitQQVNTIGV2ZW50LnJlc3Vs
dC5rZXkgaXMgdGVzdERhdGFbMF0KK1BBU1MgZXZlbnQucmVzdWx0LmtleSBpcyB0ZXN0RGF0YVsx
XQorUEFTUyBldmVudC5yZXN1bHQua2V5IGlzIHRlc3REYXRhWzJdCitQQVNTIGV2ZW50LnJlc3Vs
dC5rZXkgaXMgdGVzdERhdGFbM10KK1BBU1MgZXZlbnQucmVzdWx0LmtleSBpcyB0ZXN0RGF0YVs0
XQorUEFTUyBldmVudC5yZXN1bHQua2V5IGlzIHRlc3REYXRhWzVdCitQQVNTIGV2ZW50LnJlc3Vs
dC5rZXkgaXMgdGVzdERhdGFbNl0KK1BBU1MgZXZlbnQucmVzdWx0IGlzIG51bGwKKworTmV4dCB0
ZXN0OiBudWxsIGtleSBwYXRoIHNvcnRlZCBkZXNjZW5kaW5nLgorUEFTUyBldmVudC5yZXN1bHQu
a2V5IGlzIHRlc3REYXRhWzZdCitQQVNTIGV2ZW50LnJlc3VsdC5rZXkgaXMgdGVzdERhdGFbNV0K
K1BBU1MgZXZlbnQucmVzdWx0LmtleSBpcyB0ZXN0RGF0YVs0XQorUEFTUyBldmVudC5yZXN1bHQu
a2V5IGlzIHRlc3REYXRhWzNdCitQQVNTIGV2ZW50LnJlc3VsdC5rZXkgaXMgdGVzdERhdGFbMl0K
K1BBU1MgZXZlbnQucmVzdWx0LmtleSBpcyB0ZXN0RGF0YVsxXQorUEFTUyBldmVudC5yZXN1bHQu
a2V5IGlzIHRlc3REYXRhWzBdCitQQVNTIGV2ZW50LnJlc3VsdCBpcyBudWxsCiBQQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL29iamVjdHN0b3JlLWN1cnNvci5odG1sIGIvTGF5b3V0
VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvb2JqZWN0c3RvcmUtY3Vyc29yLmh0bWwKaW5kZXggZDlh
ZDgwNS4uNTRlYWVmYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIv
b2JqZWN0c3RvcmUtY3Vyc29yLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVk
ZGIvb2JqZWN0c3RvcmUtY3Vyc29yLmh0bWwKQEAgLTEwNSw3ICsxMDUsNyBAQCBmdW5jdGlvbiBz
Y2hlZHVsZVRlc3RzKCkKIGZ1bmN0aW9uIHJ1bk5leHRUZXN0KCkKIHsKICAgICBpZiAoIXNjaGVk
dWxlZFRlc3RzLmxlbmd0aCkgewotICAgICAgICBkb25lKCk7CisgICAgICAgIHRlc3ROdWxsS2V5
UmFuZ2UoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAKQEAgLTE2NCw4ICsxNjQsNyBAQCBm
dW5jdGlvbiBydW5OZXh0VGVzdCgpCiAgICAgZWxzZQogICAgICAgICBrZXlSYW5nZSA9IHdlYmtp
dElEQktleVJhbmdlLnJpZ2h0Qm91bmQodGVzdERhdGFbdXBwZXJdLCB1cHBlcklzT3Blbik7CiAg
Ci0gICAgLy8gRklYTUU6IFNob3VsZCBiZSB3ZWJraXRJREJDdXJzb3IuTkVYVCA6IHdlYmtpdElE
QkN1cnNvci5QUkVWLCBidXQgd2UgY2FuJ3QgZG8gdGhhdCB5ZXQuCi0gICAgdmFyIHJlcXVlc3Qg
PSBvYmplY3RTdG9yZS5vcGVuQ3Vyc29yKGtleVJhbmdlLCBhc2NlbmRpbmcgPyAwIDogMik7Cisg
ICAgdmFyIHJlcXVlc3QgPSBvYmplY3RTdG9yZS5vcGVuQ3Vyc29yKGtleVJhbmdlLCBhc2NlbmRp
bmcgPyB3ZWJraXRJREJDdXJzb3IuTkVYVCA6IHdlYmtpdElEQkN1cnNvci5QUkVWKTsKICAgICBy
ZXF1ZXN0Lm9uc3VjY2VzcyA9IGN1cnNvckl0ZXJhdGlvbjsKICAgICByZXF1ZXN0Lm9uZXJyb3Ig
PSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKIH0KQEAgLTIwNCw2ICsyMDMsMzggQEAgZnVuY3Rp
b24gY3Vyc29ySXRlcmF0aW9uKCkKICAgICBldmVudC5yZXN1bHQuY29udGludWUoKTsKIH0KICAK
K3dpbmRvdy5udWxsS2V5UmFuZ2VTdGVwID0gMDsKK2Z1bmN0aW9uIHRlc3ROdWxsS2V5UmFuZ2Uo
KQoreworICAgIHdpbmRvdy5sb3dlciA9IDA7CisgICAgd2luZG93Lmxvd2VySXNPcGVuID0gZmFs
c2U7CisgICAgd2luZG93LnVwcGVyID0gdGVzdERhdGEubGVuZ3RoLTE7CisgICAgd2luZG93LnVw
cGVySXNPcGVuID0gZmFsc2U7CisKKyAgICBzdHIgPSAiTmV4dCB0ZXN0OiBudWxsIGtleSBwYXRo
ICI7CisgICAgaWYgKHdpbmRvdy5udWxsS2V5UmFuZ2VTdGVwID09IDApIHsKKyAgICAgICAgc3Ry
ICs9ICJzb3J0ZWQgYXNjZW5kaW5nLiI7CisgICAgICAgIHdpbmRvdy5hc2NlbmRpbmcgPSB0cnVl
OworICAgICAgICB3aW5kb3cuZXhwZWN0ZWRJbmRleCA9IGxvd2VyOworICAgICAgICB3aW5kb3cu
bnVsbEtleVJhbmdlU3RlcCA9IDE7CisgICAgfSBlbHNlIGlmICh3aW5kb3cubnVsbEtleVJhbmdl
U3RlcCA9PSAxKSB7CisgICAgICAgIHN0ciArPSAic29ydGVkIGRlc2NlbmRpbmcuIjsKKyAgICAg
ICAgd2luZG93LmFzY2VuZGluZyA9IGZhbHNlOworICAgICAgICB3aW5kb3cuZXhwZWN0ZWRJbmRl
eCA9IHVwcGVyOworICAgICAgICB3aW5kb3cubnVsbEtleVJhbmdlU3RlcCA9IDI7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZG9uZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZGVi
dWcoIiIpOworICAgIGRlYnVnKHN0cik7CisgCisgICAgdmFyIHJlcXVlc3QgPSBvYmplY3RTdG9y
ZS5vcGVuQ3Vyc29yKG51bGwsIGFzY2VuZGluZyA/IHdlYmtpdElEQkN1cnNvci5ORVhUIDogd2Vi
a2l0SURCQ3Vyc29yLlBSRVYpOworICAgIHJlcXVlc3Qub25zdWNjZXNzID0gY3Vyc29ySXRlcmF0
aW9uOworICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworfQor
IAogb3BlbkRhdGFiYXNlKCk7IC8vIFRoZSBmaXJzdCBzdGVwLgogdmFyIHN1Y2Nlc3NmdWxseVBh
cnNlZCA9IHRydWU7CiAgCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRk
Yi9vcGVuLWN1cnNvci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRk
Yi9vcGVuLWN1cnNvci1leHBlY3RlZC50eHQKaW5kZXggMWJjYTUyNy4uYzNjMWE4ZCAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvb3Blbi1jdXJzb3ItZXhwZWN0ZWQu
dHh0CisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL29wZW4tY3Vyc29yLWV4cGVj
dGVkLnR4dApAQCAtNzIsNiArNzIsOSBAQCBQQVNTIGV2ZW50LnJlc3VsdC5kaXJlY3Rpb24gaXMg
MAogUEFTUyBldmVudC5yZXN1bHQua2V5IGlzICdteUtleScKIFBBU1MgZXZlbnQucmVzdWx0LnZh
bHVlIGlzICdteVZhbHVlJwogCitQYXNzaW5nIGFuIGludmFsaWQga2V5IGludG8gLmNvbnRpbnVl
KCkuCitQQVNTIENhdWdodCBleGNlcHRpb246IEVycm9yOiBUWVBFX01JU01BVENIX0VSUjogRE9N
IEV4Y2VwdGlvbiAxNworCiBPcGVuaW5nIGFuIGVtcHR5IGN1cnNvci4KIG9iamVjdFN0b3JlLm9w
ZW5DdXJzb3Ioa2V5UmFuZ2UpCiBQQVNTICdvbnN1Y2Nlc3MnIGluIHJlc3VsdCBpcyB0cnVlCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9vcGVuLWN1cnNvci5odG1s
IGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvb3Blbi1jdXJzb3IuaHRtbAppbmRleCBl
YzYyZjJjLi4wODVhYTM5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRk
Yi9vcGVuLWN1cnNvci5odG1sCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL29w
ZW4tY3Vyc29yLmh0bWwKQEAgLTQxLDYgKzQxLDE0IEBAIGZ1bmN0aW9uIGN1cnNvclN1Y2Nlc3Mo
KQogICAgIHNob3VsZEJlKCJldmVudC5yZXN1bHQua2V5IiwgIidteUtleSciKTsKICAgICBzaG91
bGRCZSgiZXZlbnQucmVzdWx0LnZhbHVlIiwgIidteVZhbHVlJyIpOwogICAgIGRlYnVnKCIiKTsK
KyAgICB0cnkgeworICAgICAgICBkZWJ1ZygiUGFzc2luZyBhbiBpbnZhbGlkIGtleSBpbnRvIC5j
b250aW51ZSgpLiIpOworICAgICAgICBldmVudC5yZXN1bHQuY29udGludWUoW10pOworICAgICAg
ICB0ZXN0RmFpbGVkKCJObyBleGNlcHRpb24gdGhyb3duIik7CisgICAgfSBjYXRjaCAoZSkgewor
ICAgICAgICB0ZXN0UGFzc2VkKCJDYXVnaHQgZXhjZXB0aW9uOiAiICsgZS50b1N0cmluZygpKTsK
KyAgICB9CisgICAgZGVidWcoIiIpOwogICAgIG9wZW5FbXB0eUN1cnNvcigpOwogfQogCmRpZmYg
LS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDYwZjI2
NTguLjQ1NDMwYmIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsNDMgQEAKKzIwMTAtMTAtMjYgIEplcmVteSBPcmxvdyAgPGpv
cmxvd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisgICAgICAgIEZpeCBJbmRleGVkREIgY3Jhc2hlcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDgyNjYKKworICAgICAgICBJZiBJREJLZXkgcmV0dXJu
cyBudWxsLCB0eXBlIGNvbnZlcnNpb24gZmFpbGVkLiBIYW5kbGUgdGhpcyBjYXNlCisgICAgICAg
IGluIHRoZSBiaW5kaW5ncy4KKworICAgICAgICBDaGFuZ2UgVU5LTk9XTl9FUlIgdG8gYmUgMSBz
aW5jZSAwIGlzIGhhcmQgY29kZWQgdG8gbWVhbiBubyBlcnJvci4KKyAgICAgICAgVGhpcyBpcyBq
dXN0IGEgc3RvcC1nYXAgbW92ZSB1bnRpbCB3ZSBnZXQgaXQgZmlndXJlZCBvdXQgaW4gc3RhbmRh
cmRzCisgICAgICAgIGxhbmQuCisKKyAgICAgICAgSURCT2JqZWN0U3RvcmUgbmVlZHMgdG8gaGFu
ZGxlIG51bGwgcmFuZ2VzLgorCisgICAgICAgIEl0J3MgYWN0dWFsbHkgT0sgZm9yIG1fdHJhbnNh
Y3Rpb24gdG8gYmUgbm9uLW51bGwgd2hlbiBoaXR0aW5nIHRoZQorICAgICAgICBkZXN0cnVjdG9y
LiBXZSBqdXN0IG5lZWQgdG8gdGhlbiByZW1vdmUgaXQgZnJvbSB0aGUgc2V0IG9mIHBlbmRpbmcK
KyAgICAgICAgdHJhbnNhY3Rpb25zLgorCisgICAgICAgIFRoZSB0cmFuc2FjdGlvbiBjYW4gYmVj
b21lIGFib3J0ZWQgaW4gdGhlIG1pZGRsZSBvZiBwcm9jZXNzaW5nIGEKKyAgICAgICAgbGlzdCBv
ZiB0YXNrcy4gRml4IHRoaXMuCisKKyAgICAgICAgQWxsIGNoYW5nZXMgKGV4Y2VwdCB0aGUgbGFz
dCAyIHJhY2VzKSBhcmUgdGVzdGVkIGluIExheW91dFRlc3RzLgorICAgICAgICBJIGNvdWxkbid0
IGZpbmQgYSB3YXkgdG8gcmVsaWFibHkgcmVwcm9kdWNlIHRoZSByYWNlcy4KKworICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9i
akludGVybmFsOjppZGJLZXlDYWxsYmFjayk6CisgICAgICAgICogYmluZGluZ3MvdjgvSURCQmlu
ZGluZ1V0aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVJREJLZXlGcm9tVmFs
dWUpOgorICAgICAgICAqIHN0b3JhZ2UvSURCRGF0YWJhc2VFeGNlcHRpb24uaDoKKyAgICAgICAg
KiBzdG9yYWdlL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmlkbDoKKyAgICAgICAgKiBzdG9yYWdlL0lE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6b3BlbkN1cnNvckludGVybmFsKToKKyAgICAgICAgKiBzdG9yYWdl
L0lEQlJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6fklEQlJlcXVl
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6dGltZXJGaXJlZCk6CisgICAgICAg
ICogc3RvcmFnZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnRhc2tUaW1lckZpcmVkKToKKwogMjAxMC0x
MC0yMSAgSmVyZW15IE9ybG93ICA8am9ybG93QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9yVjgucG0gYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvclY4LnBtCmluZGV4IDQ2ZDljZmEuLjQyM2NjNmIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KKysrIGIvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQpAQCAtMzAxMiw2ICszMDEyLDcgQEAgc3ViIFR5
cGVDYW5GYWlsQ29udmVyc2lvbgogICAgICRpbXBsSW5jbHVkZXN7IkV4Y2VwdGlvbkNvZGUuaCJ9
ID0gMSBpZiAkdHlwZSBlcSAiQXR0ciI7CiAgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIkF0dHIi
OwogICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJWb2lkQ2FsbGJhY2siOworICAgIHJldHVybiAx
IGlmICR0eXBlIGVxICJJREJLZXkiOwogICAgIHJldHVybiBCYXNpY1R5cGVDYW5GYWlsQ29udmVy
c2lvbigkc2lnbmF0dXJlKTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4VGVzdE9iai5jcHAKaW5kZXggNDRmMGQzZS4uNGJlMTE3NyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcAorKysgYi9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCkBAIC02NzgsOSArNjc4LDE5
IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gaWRiS2V5Q2FsbGJhY2soY29uc3Qgdjg6
OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLmlkYktleSIp
OwogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7
Ci0gICAgRVhDRVBUSU9OX0JMT0NLKFJlZlB0cjxJREJLZXk+LCBrZXksIGNyZWF0ZUlEQktleUZy
b21WYWx1ZShhcmdzWzBdKSk7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgeworICAg
IFJlZlB0cjxJREJLZXk+IGtleSA9IGNyZWF0ZUlEQktleUZyb21WYWx1ZShhcmdzWzBdKTsKKyAg
ICBpZiAoVU5MSUtFTFkoIWtleSkpIHsKKyAgICAgICAgZWMgPSBUWVBFX01JU01BVENIX0VSUjsK
KyAgICAgICAgZ290byBmYWlsOworICAgIH0KICAgICBpbXAtPmlkYktleShrZXkpOwogICAgIHJl
dHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKKyAgICB9CisgICAgZmFpbDoKKyAgICBWOFBy
b3h5OjpzZXRET01FeGNlcHRpb24oZWMpOworICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4oKTsKIH0KIAogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBtZXRob2RXaXRoRXhjZXB0
aW9uQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvYmluZGluZ3MvdjgvSURCQmluZGluZ1V0aWxpdGllcy5jcHAgYi9XZWJDb3JlL2JpbmRpbmdz
L3Y4L0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwCmluZGV4IDRhNTg4NTMuLjEyM2IxNWMgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvSURCQmluZGluZ1V0aWxpdGllcy5jcHAKKysrIGIv
V2ViQ29yZS9iaW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcApAQCAtMjgsNiArMjgs
NyBAQAogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKKyNpbmNsdWRlICJJREJEYXRh
YmFzZUV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIklEQktleS5oIgogI2luY2x1ZGUgIklEQktleVBh
dGguaCIKICNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKQEAgLTQ1LDcgKzQ2LDgg
QEAgUGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0ZUlEQktleUZyb21WYWx1ZSh2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gdmFsdWUpCiAgICAgaWYgKHZhbHVlLT5Jc1N0cmluZygpKQogICAgICAgICByZXR1
cm4gSURCS2V5OjpjcmVhdGUodjhWYWx1ZVRvV2ViQ29yZVN0cmluZyh2YWx1ZSkpOwogICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgZGF0ZXMuCi0gICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gMDsg
Ly8gU2lnbmFscyB0eXBlIGVycm9yLgogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmggYi9XZWJDb3JlL3N0
b3JhZ2UvSURCRGF0YWJhc2VFeGNlcHRpb24uaAppbmRleCAyNTFjZmM5Li45NDU3NzNjIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VFeGNlcHRpb24uaAorKysgYi9XZWJD
b3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VFeGNlcHRpb24uaApAQCAtNDIsOSArNDIsOCBAQCBwdWJs
aWM6CiAgICAgfQogICAgIH5JREJEYXRhYmFzZUV4Y2VwdGlvbigpIHsgfQogCi0gICAgLy8gS2Vl
cCBpbiBzeW5jIHdpdGggd2hhdCdzIGluIHRoZSAuaWRsIGZpbGUuCiAgICAgZW51bSBFcnJvckNv
ZGUgewotICAgICAgICBVTktOT1dOX0VSUiA9IDAsCisgICAgICAgIFVOS05PV05fRVJSID0gMSwK
ICAgICAgICAgTk9OX1RSQU5TSUVOVF9FUlIgPSAxLAogICAgICAgICBOT1RfRk9VTkRfRVJSID0g
MiwKICAgICAgICAgQ09OU1RSQUlOVF9FUlIgPSAzLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9y
YWdlL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmlkbCBiL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFz
ZUV4Y2VwdGlvbi5pZGwKaW5kZXggODhlNmU3ZS4uMWYxNWZjMCAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9zdG9yYWdlL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmlkbAorKysgYi9XZWJDb3JlL3N0b3JhZ2Uv
SURCRGF0YWJhc2VFeGNlcHRpb24uaWRsCkBAIC0yOCw3ICsyOCw4IEBAIG1vZHVsZSBzdG9yYWdl
IHsKICAgICBpbnRlcmZhY2UgWwogICAgICAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFCQVNF
CiAgICAgXSBJREJEYXRhYmFzZUV4Y2VwdGlvbiB7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIHNo
b3J0IFVOS05PV05fRVJSID0gMDsKKyAgICAgICAgLy8gRklYTUU6IFRoZXNlIGVycm9yIGNvZGVz
IGNvbmZsaWN0IHdpdGggb3RoZXJzLgorICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBVTktO
T1dOX0VSUiA9IDE7CiAgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IE5PTl9UUkFOU0lFTlRf
RVJSID0gMTsKICAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgTk9UX0ZPVU5EX0VSUiA9IDI7
CiAgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IENPTlNUUkFJTlRfRVJSID0gMzsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcCBiL1dl
YkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAppbmRleCA5ZWYxNDRk
Li45N2Q4NGQyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbC5jcHAKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2VuZElt
cGwuY3BwCkBAIC0zOTQsMTEgKzM5NCwxNCBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6Om9wZW5DdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcHJwUmFuZ2UsIHVucwogCiB2
b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Om9wZW5DdXJzb3JJbnRlcm5hbChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBv
YmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIHVuc2lnbmVkIHNob3J0
IHRtcERpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1Jl
ZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uKQogeworICAg
IGJvb2wgbGVmdEJvdW5kID0gcmFuZ2UgJiYgKHJhbmdlLT5mbGFncygpICYgSURCS2V5UmFuZ2U6
OkxFRlRfQk9VTkQgfHwgcmFuZ2UtPmZsYWdzKCkgPT0gSURCS2V5UmFuZ2U6OlNJTkdMRSk7Cisg
ICAgYm9vbCByaWdodEJvdW5kID0gcmFuZ2UgJiYgKHJhbmdlLT5mbGFncygpICYgSURCS2V5UmFu
Z2U6OlJJR0hUX0JPVU5EIHx8IHJhbmdlLT5mbGFncygpID09IElEQktleVJhbmdlOjpTSU5HTEUp
OworCiAgICAgLy8gU2V2ZXJhbCBmaWxlcyBkZXBlbmQgb24gdGhpcyBvcmRlciBvZiBzZWxlY3Rz
LgogICAgIFN0cmluZyBzcWwgPSAiU0VMRUNUIGlkLCBrZXlTdHJpbmcsIGtleURhdGUsIGtleU51
bWJlciwgdmFsdWUgRlJPTSBPYmplY3RTdG9yZURhdGEgV0hFUkUgIjsKLSAgICBpZiAocmFuZ2Ut
PmZsYWdzKCkgJiBJREJLZXlSYW5nZTo6TEVGVF9CT1VORCB8fCByYW5nZS0+ZmxhZ3MoKSA9PSBJ
REJLZXlSYW5nZTo6U0lOR0xFKQorICAgIGlmIChsZWZ0Qm91bmQpCiAgICAgICAgIHNxbCArPSBy
YW5nZS0+bGVmdCgpLT5sZWZ0Q3Vyc29yV2hlcmVGcmFnbWVudChyYW5nZS0+bGVmdFdoZXJlQ2xh
dXNlQ29tcGFyaXNvbk9wZXJhdG9yKCkpOwotICAgIGlmIChyYW5nZS0+ZmxhZ3MoKSAmIElEQktl
eVJhbmdlOjpSSUdIVF9CT1VORCB8fCByYW5nZS0+ZmxhZ3MoKSA9PSBJREJLZXlSYW5nZTo6U0lO
R0xFKQorICAgIGlmIChyaWdodEJvdW5kKQogICAgICAgICBzcWwgKz0gcmFuZ2UtPnJpZ2h0KCkt
PnJpZ2h0Q3Vyc29yV2hlcmVGcmFnbWVudChyYW5nZS0+cmlnaHRXaGVyZUNsYXVzZUNvbXBhcmlz
b25PcGVyYXRvcigpKTsKICAgICBzcWwgKz0gIm9iamVjdFN0b3JlSWQgPSA/IE9SREVSIEJZICI7
CiAKQEAgLTQxMyw5ICs0MTYsOSBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Om9w
ZW5DdXJzb3JJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzcwogICAgIEFTU0VS
VF9VTlVTRUQob2ssIG9rKTsgLy8gRklYTUU6IEJldHRlciBlcnJvciBoYW5kbGluZz8KIAogICAg
IGludCBjdXJyZW50Q29sdW1uID0gMTsKLSAgICBpZiAocmFuZ2UtPmZsYWdzKCkgJiBJREJLZXlS
YW5nZTo6TEVGVF9CT1VORCB8fCByYW5nZS0+ZmxhZ3MoKSA9PSBJREJLZXlSYW5nZTo6U0lOR0xF
KQorICAgIGlmIChsZWZ0Qm91bmQpCiAgICAgICAgIGN1cnJlbnRDb2x1bW4gKz0gcmFuZ2UtPmxl
ZnQoKS0+YmluZCgqcXVlcnksIGN1cnJlbnRDb2x1bW4pOwotICAgIGlmIChyYW5nZS0+ZmxhZ3Mo
KSAmIElEQktleVJhbmdlOjpSSUdIVF9CT1VORCB8fCByYW5nZS0+ZmxhZ3MoKSA9PSBJREJLZXlS
YW5nZTo6U0lOR0xFKQorICAgIGlmIChyaWdodEJvdW5kKQogICAgICAgICBjdXJyZW50Q29sdW1u
ICs9IHJhbmdlLT5yaWdodCgpLT5iaW5kKCpxdWVyeSwgY3VycmVudENvbHVtbik7CiAgICAgcXVl
cnktPmJpbmRJbnQ2NChjdXJyZW50Q29sdW1uLCBvYmplY3RTdG9yZS0+aWQoKSk7CiAKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9JREJSZXF1ZXN0LmNwcCBiL1dlYkNvcmUvc3RvcmFnZS9J
REJSZXF1ZXN0LmNwcAppbmRleCBjNjdlMzc5Li5jYmQ2MzVjIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3N0b3JhZ2UvSURCUmVxdWVzdC5jcHAKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0lEQlJlcXVlc3Qu
Y3BwCkBAIC01OSwxNSArNTksNiBAQCBJREJSZXF1ZXN0OjpJREJSZXF1ZXN0KFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCQW55PiBzb3VyYwogCiBJREJSZXF1
ZXN0Ojp+SURCUmVxdWVzdCgpCiB7Ci0gICAgLy8gVGhlIHRyYW5zYWN0aW9uIHBvaW50ZXIgaXMg
dXNlZCB0byBub3RpZnkgdGhlIHRyYW5zYWN0aW9uIG9uY2UgdGhlIEpTIGV2ZW50cyB3ZXJlCi0g
ICAgLy8gZGlzcGF0Y2hlZCBieSB0aGlzIHJlcXVlc3Qgb2JqZWN0LiBJZiBubyBuZXcgdGFza3Mg
d2VyZSBhZGRlZCBieSB0aGUgZXZlbnQgSlMgY2FsbGJhY2tzLAotICAgIC8vIHRoZSB0cmFuc2Fj
dGlvbiBjYW4gY29tbWl0LiBPdGhlcndpc2UsIGl0IGNhbiBjb250aW51ZSBleGVjdXRpbmcgdGhl
IG5ldyB0YXNrcy4KLSAgICAvLyBJdCBpcyBpbXBvcnRhbnQgdG8gZ3VhcmFudGVlIHRoYXQgdGhl
IHRyYW5zYWN0aW9uIGlzIG5vdGlmaWVkIGFmdGVyIHRoZSBldmVudHMgYXJlCi0gICAgLy8gZGlz
cGF0Y2hlZCwgYXMgdGhlIHRyYW5zYWN0aW9uIGNhbm5vdCBjb21taXQgb3IgZXhlY3V0ZSBuZXcg
dGFza3MgaW4gdGhlIGFic2VuY2UKLSAgICAvLyBvZiB0aGVzZSBub3RpZmljYXRpb25zLiBXZSBj
bGVhciB0aGUgdHJhbnNhY3Rpb24gcG9pbnRlciBvbmNlIHRoZSBldmVudHMgaGF2ZSBkaXNwYXRj
aGVkLAotICAgIC8vIHNvIGhhdmluZyBhIG5vbi16ZXJvIHBvaW50ZXIgYXQgSURCUmVxdWVzdCBk
ZXN0cnVjdGlvbiB0aW1lIHNob3dzIHRoYXQgdGhlIGV2ZW50cyBoYXZlIG5vdAotICAgIC8vIHll
dCBmaXJlZCBhbmQgdGhlcmUgaXMgYSB0cmFuc2FjdGlvbiB3YWl0aW5nIHRvIGJlIG5vdGlmaWVk
LiBUaGlzIGlzIGFuIGVycm9yLgotICAgIEFTU0VSVCghbV90cmFuc2FjdGlvbik7CiB9CiAKIGJv
b2wgSURCUmVxdWVzdDo6cmVzZXRSZWFkeVN0YXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZSogdHJhbnNhY3Rpb24pCkBAIC0xNTksNiArMTUwLDcgQEAgdm9pZCBJREJSZXF1ZXN0Ojp0
aW1lckZpcmVkKFRpbWVyPElEQlJlcXVlc3Q+KikKIHsKICAgICBBU1NFUlQobV9zZWxmUmVmKTsK
ICAgICBBU1NFUlQobV9wZW5kaW5nRXZlbnRzLnNpemUoKSk7CisgICAgLy8gRklYTUU6IFdlIHNo
b3VsZCBoYW5kbGUgdGhlIHN0b3AgZXZlbnQgYW5kIHN0b3AgYW55IHRpbWVycyB3aGVuIHdlIHNl
ZSBpdC4gV2UgY2FuIHRoZW4gYXNzZXJ0IGhlcmUgdGhhdCBzY3JpcHRFeGVjdXRpb25Db250ZXh0
IGlzIG5vbi1udWxsLgogCiAgICAgLy8gV2UgbmVlZCB0byBrZWVwIHNlbGYtcmVmZXJlbmNpbmcg
b3Vyc2VsZiwgb3RoZXJ3aXNlIGl0J3MgcG9zc2libGUgd2UnbGwgYmUgZGVsZXRlZC4KICAgICAv
LyBCdXQgaW4gc29tZSBjYXNlcywgc3VzcGVuZCgpIGNvdWxkIGJlIGNhbGxlZCB3aGlsZSB3ZSdy
ZSBkaXNwYXRjaGluZyBhbiBldmVudCwgc28gd2UKQEAgLTE3Miw2ICsxNjQsMTAgQEAgdm9pZCBJ
REJSZXF1ZXN0Ojp0aW1lckZpcmVkKFRpbWVyPElEQlJlcXVlc3Q+KikKICAgICBWZWN0b3I8UGVu
ZGluZ0V2ZW50PiBwZW5kaW5nRXZlbnRzOwogICAgIHBlbmRpbmdFdmVudHMuc3dhcChtX3BlbmRp
bmdFdmVudHMpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGVuZGluZ0V2ZW50cy5zaXpl
KCk7ICsraSkgeworICAgICAgICAvLyBJdCdzIHBvc3NpYmxlIHdlJ3ZlIG5hdmlnYXRlZCBpbiB3
aGljaCBjYXNlIHdlJ2xsIGNyYXNoLgorICAgICAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKwogICAgICAgICBpZiAocGVuZGluZ0V2ZW50c1tp
XS5tX2Vycm9yKSB7CiAgICAgICAgICAgICBBU1NFUlQoIXBlbmRpbmdFdmVudHNbaV0ubV9yZXN1
bHQpOwogICAgICAgICAgICAgZGlzcGF0Y2hFdmVudChJREJFcnJvckV2ZW50OjpjcmVhdGUobV9z
b3VyY2UsICpwZW5kaW5nRXZlbnRzW2ldLm1fZXJyb3IpKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
c3RvcmFnZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcCBiL1dlYkNvcmUvc3RvcmFnZS9J
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcAppbmRleCA1MDE2YTNmLi4yYjFmNzMyIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAKKysr
IGIvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwCkBAIC0xNDcs
NyArMTQ3LDcgQEAgdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjp0YXNrVGltZXJGaXJl
ZChUaW1lcjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPioKIAogICAgIFRhc2tRdWV1ZSBxdWV1
ZTsKICAgICBxdWV1ZS5zd2FwKG1fdGFza1F1ZXVlKTsKLSAgICB3aGlsZSAoIXF1ZXVlLmlzRW1w
dHkoKSkgeworICAgIHdoaWxlICghcXVldWUuaXNFbXB0eSgpICYmIG1fc3RhdGUgIT0gRmluaXNo
ZWQpIHsKICAgICAgICAgT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2so
cXVldWUuZmlyc3QoKS5yZWxlYXNlKCkpOwogICAgICAgICBxdWV1ZS5yZW1vdmVGaXJzdCgpOwog
ICAgICAgICBtX3BlbmRpbmdFdmVudHMrKzsKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDk2YTVjNmMuLmFlNmQ2
MDMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDEwLTEwLTI2ICBKZXJlbXkgT3Js
b3cgIDxqb3Jsb3dAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEZpeCBJbmRleGVkREIgY3Jhc2hlcworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDgyNjYKKworICAgICAgICBNYWtlIFdl
YklEQk9iamVjdFN0b3JlSW1wbCBtYXRjaCB0aGUgd2F5IHRoYXQgV2ViSURCSW5kZXhJbXBsIHBh
c3NlcworICAgICAgICBpbiBjdXJzb3IgcGFyYW1ldGVycyAod2hpY2ggaXMgdGhlIGNvcnJlY3Qg
d2F5KS4gS2V5UmFuZ2Uga25vd3MgaG93CisgICAgICAgIHRvIGNvbnZlcnQgaXRzZWxmIHRvIGEg
V2ViQ29yZSB0eXBlLS1ldmVuIGlmIHRoZSB2YWx1ZSBpcyBudWxsLgorCisgICAgICAgICogc3Jj
L1dlYklEQk9iamVjdFN0b3JlSW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYklEQk9iamVj
dFN0b3JlSW1wbDo6b3BlbkN1cnNvcik6CisKIDIwMTAtMTAtMjEgIEplcmVteSBPcmxvdyAgPGpv
cmxvd0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQk9iamVjdFN0b3JlSW1wbC5j
cHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQk9iamVjdFN0b3JlSW1wbC5jcHAKaW5kZXgg
OTY0OTVmZS4uNWRkMjY1MiAxMDA3NTUKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJP
YmplY3RTdG9yZUltcGwuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCT2JqZWN0
U3RvcmVJbXBsLmNwcApAQCAtMTA0LDcgKzEwNCw3IEBAIHZvaWQgV2ViSURCT2JqZWN0U3RvcmVJ
bXBsOjpyZW1vdmVJbmRleChjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYklEQlRyYW5z
CiAKIHZvaWQgV2ViSURCT2JqZWN0U3RvcmVJbXBsOjpvcGVuQ3Vyc29yKGNvbnN0IFdlYklEQktl
eVJhbmdlJiBrZXlSYW5nZSwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBXZWJJREJDYWxsYmFj
a3MqIGNhbGxiYWNrcywgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBXZWJF
eGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBtX29iamVjdFN0b3JlLT5vcGVuQ3Vyc29yKElEQktl
eVJhbmdlOjpjcmVhdGUoa2V5UmFuZ2UubGVmdCgpLCBrZXlSYW5nZS5yaWdodCgpLCBrZXlSYW5n
ZS5mbGFncygpKSwgZGlyZWN0aW9uLCBJREJDYWxsYmFja3NQcm94eTo6Y3JlYXRlKGNhbGxiYWNr
cyksIHRyYW5zYWN0aW9uLmdldElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSgpLCBlYyk7
CisgICAgbV9vYmplY3RTdG9yZS0+b3BlbkN1cnNvcihrZXlSYW5nZSwgZGlyZWN0aW9uLCBJREJD
YWxsYmFja3NQcm94eTo6Y3JlYXRlKGNhbGxiYWNrcyksIHRyYW5zYWN0aW9uLmdldElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZSgpLCBlYyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUK
</data>

          </attachment>
      

    </bug>

</bugzilla>