<?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>91123</bug_id>
          
          <creation_ts>2012-07-12 11:22:11 -0700</creation_ts>
          <short_desc>IndexedDB: inject index keys on cursor/objectstore/index get success handlers</short_desc>
          <delta_ts>2012-07-27 00:30:57 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>90923</dependson>
    
    <dependson>91546</dependson>
          <blocked>91125</blocked>
    
    <blocked>91128</blocked>
    
    <blocked>92278</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Alec Flett">alecflett</reporter>
          <assigned_to name="Alec Flett">alecflett</assigned_to>
          <cc>abarth</cc>
    
    <cc>dgrogan</cc>
    
    <cc>haraken</cc>
    
    <cc>japhet</cc>
    
    <cc>jochen</cc>
    
    <cc>jsbell</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>668015</commentid>
    <comment_count>0</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-07-12 11:22:11 -0700</bug_when>
    <thetext>Once bug 90923 lands, we&apos;ll be able to full implement this. Note that this doesn&apos;t cover the createIndex() case</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>678240</commentid>
    <comment_count>1</comment_count>
      <attachid>154394</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-07-25 11:01:02 -0700</bug_when>
    <thetext>Created attachment 154394
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>678243</commentid>
    <comment_count>2</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-07-25 11:03:48 -0700</bug_when>
    <thetext>finally finally the tree is almost ready for me to land this. This is the final patch to allow get/put/update to deal with renderer-side key injection. This leaves around a lot of cruft because the the patch for createIndex is still coming.

This particular patch includes that #include-reduction that I did, so you can ignore that stuff, it will be gone from the final patch and I&apos;ll update the patch here when webkit rolls next.

jsbell/dgrogan: mind taking a look.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>678331</commentid>
    <comment_count>3</comment_count>
      <attachid>154394</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-07-25 12:23:16 -0700</bug_when>
    <thetext>Comment on attachment 154394
Patch

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

&gt; Source/WebCore/ChangeLog:3
&gt; +        IndexedDB: inject index keys on cursor/objectstore/index get succes handlers

Typo &quot;succes&quot; -&gt; &quot;success&quot;; I updated the bug itself.

&gt; Source/WebCore/ChangeLog:19
&gt; +        assertion was removed from IDBBindingUtilities.

Haven&apos;t gotten to that point in the patch, but it seems like we could either:
* Do an extract and only inject if they differ (so keep the assert)
* Modify the assert so that it&apos;s okay if the value being injected is the same as the current value
...
But now that I&apos;ve gotten to that point, I agree that the binding utilities should stay &quot;pure&quot; and not be enforcing this logic. So I&apos;d be tempted to add in an debug-only logic at the inject...() call site that either the value is not there or the value is there and matches what we&apos;d inject.

&gt; Source/WebCore/ChangeLog:26
&gt; +        No new tests because this is a performance refactoring, and actual

Do we have any actual perf data on this? (I&apos;m guessing &quot;not yet&quot;, so might be worth being more conservative in the comments.)

&gt; Source/WebCore/ChangeLog:27
&gt; +        behavior hasn&apos;t changed.

Do we have any existing tests where the index key path is the same as the store&apos;s key path and autoincrement is used?

&gt; Source/WebCore/Modules/indexeddb/IDBCursor.cpp:161
&gt; +    } else {

The &quot;if (usesInLineKeys) ...&quot; code is really a runtime validation that the new value doesn&apos;t change the key. It seems like the &quot;else&quot; case here should run in any case so that nothing downstream needs to compute a key.

&gt; Source/WebCore/Modules/indexeddb/IDBCursor.cpp:165
&gt; +    return objectStore-&gt;put(IDBObjectStoreBackendInterface::CursorUpdate, IDBAny::create(this), context, value, key, ec);

i.e. just pass m-currentPrimaryKey in here instead of key.

&gt; Source/WebCore/Modules/indexeddb/IDBCursorBackendImpl.cpp:88
&gt; +    ASSERT_NOT_REACHED();

I believe this method can be removed as well as any dependents on it (IDBCursorBackendInterface.h, IDBCursorBackendProxy.cpp, WebIDBCursorImpl.cpp) - the WEBKIT_ASSERT_NOT_REACHED in WebIDBCursor::update() is all that&apos;s necessary to keep Chromium building if nothing is calling it.

&gt; Source/WebCore/Modules/indexeddb/IDBObjectStore.cpp:105
&gt; +static bool generateIndexKeysForValue(const IDBIndexMetadata&amp; indexMetadata,

This never appears to return false?

&gt; Source/WebCore/Modules/indexeddb/IDBObjectStore.cpp:109
&gt; +    RefPtr&lt;IDBKey&gt; indexKey = createIDBKeyFromSerializedValueAndKeyPath(objectValue, indexMetadata.keyPath);

Add ASSERT(indexKeys.get()); (or pass as reference)

&gt; Source/WebCore/Modules/indexeddb/IDBObjectStore.cpp:142
&gt; +PassRefPtr&lt;IDBRequest&gt; IDBObjectStore::put(IDBObjectStoreBackendInterface::PutMode putMode, PassRefPtr&lt;IDBAny&gt; source, ScriptExecutionContext* context, PassRefPtr&lt;SerializedScriptValue&gt; prpValue, PassRefPtr&lt;IDBKey&gt; prpKey, ExceptionCode&amp; ec)

Nice simplification. :)

&gt; Source/WebCore/Modules/indexeddb/IDBObjectStore.cpp:198
&gt;      if (key &amp;&amp; !key-&gt;isValid()) {

By this point, the only case where key is NULL is if it&apos;s going to be autogenerated, correct?

&gt; Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:127
&gt; +    ASSERT_NOT_REACHED();

Same as above on removing this - only the WebIDBObjectStore::put() stub needs to remain, the ...BackendImpl, ...BackendInterface, ...BackendProxy and Web...Impl versions can go.

&gt; Source/WebCore/Modules/indexeddb/IDBRequest.cpp:343
&gt;  void IDBRequest::onSuccess(PassRefPtr&lt;SerializedScriptValue&gt; prpSerializedScriptValue, PassRefPtr&lt;IDBKey&gt; prpPrimaryKey, const IDBKeyPath&amp; keyPath)

This should only be used in response to an IDBObjectStore.get() or IDBIndex.get(), correct? In that case, the keyPath should match the keyPath of the request&apos;s source&apos;s &quot;effectiveObjectStore&quot; (not a real concept, but borrowing from IDBCursor), right?

In that case... can we either drop the keyPath parameter or at least ASSERT that they match?

&gt; Source/WebCore/Modules/indexeddb/IDBRequest.cpp:351
&gt; +            injectIDBKeyIntoSerializedValue(primaryKey, value, keyPath);

Don&apos;t need to wrap this line.

Ideally this code would match the IDBCursor::setValueReady code. They seem to handle injection failures differently.

(Thinking towards further refactors, it would be nice if the updated cursor key/primarykey/value were passed back in onSuccessWithContinuation, stashed in the IDBRequest itself (not the cursor) and then the key injection for cursors could be done in IDBRequest.)

&gt; Source/WebCore/bindings/v8/IDBBindingUtilities.cpp:-104
&gt; -    ASSERT(!object-&gt;Has(indexOrName));

Agreed, let&apos;s keep this pure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>678554</commentid>
    <comment_count>4</comment_count>
      <attachid>154394</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-07-25 15:56:34 -0700</bug_when>
    <thetext>Comment on attachment 154394
Patch

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

Ok, nits addressed, new patch coming.

&gt;&gt; Source/WebCore/ChangeLog:19
&gt;&gt; +        assertion was removed from IDBBindingUtilities.
&gt; 
&gt; Haven&apos;t gotten to that point in the patch, but it seems like we could either:
&gt; * Do an extract and only inject if they differ (so keep the assert)
&gt; * Modify the assert so that it&apos;s okay if the value being injected is the same as the current value
&gt; ...
&gt; But now that I&apos;ve gotten to that point, I agree that the binding utilities should stay &quot;pure&quot; and not be enforcing this logic. So I&apos;d be tempted to add in an debug-only logic at the inject...() call site that either the value is not there or the value is there and matches what we&apos;d inject.

I added (back) the assertions - they seem like reasonable checks

&gt;&gt; Source/WebCore/Modules/indexeddb/IDBCursor.cpp:161
&gt;&gt; +    } else {
&gt; 
&gt; The &quot;if (usesInLineKeys) ...&quot; code is really a runtime validation that the new value doesn&apos;t change the key. It seems like the &quot;else&quot; case here should run in any case so that nothing downstream needs to compute a key.

Well as they say, &quot;it&apos;s complicated&quot; :)

it has to be set to null here mostly to get by other checks. But actually fix on the other end (In IDBObjectStore::put) is less complicated than simply passing m_currentPrimaryKey, so I did that.

&gt;&gt; Source/WebCore/Modules/indexeddb/IDBObjectStore.cpp:105
&gt;&gt; +static bool generateIndexKeysForValue(const IDBIndexMetadata&amp; indexMetadata,
&gt; 
&gt; This never appears to return false?

oh wow. Didn&apos;t even notice that I had removed all failure cases :) Fixed this and the other one in IDBObjectStoreImpl.cpp

&gt; Source/WebCore/Modules/indexeddb/IDBObjectStore.cpp:198
&gt;      if (key &amp;&amp; !key-&gt;isValid()) {

this is one of those subtle cases of 
  if (key &amp;&amp; !key-&gt;isValid())
rather than 
  if (!key || !key-&gt;isValid()) -

 i.e. the extracted key value is present, but invalid.

&gt; Source/WebCore/Modules/indexeddb/IDBRequest.cpp:343
&gt;  void IDBRequest::onSuccess(PassRefPtr&lt;SerializedScriptValue&gt; prpSerializedScriptValue, PassRefPtr&lt;IDBKey&gt; prpPrimaryKey, const IDBKeyPath&amp; keyPath)

That&apos;s why this is like this - there isn&apos;t really enough in the way of breadcrumbs to track our way back to the equivalent of the effectiveObjectStore.

I added some debug code, which also required implementing operator== on IDBKeyPath

&gt;&gt; Source/WebCore/Modules/indexeddb/IDBRequest.cpp:351
&gt;&gt; +            injectIDBKeyIntoSerializedValue(primaryKey, value, keyPath);
&gt; 
&gt; Don&apos;t need to wrap this line.
&gt; 
&gt; Ideally this code would match the IDBCursor::setValueReady code. They seem to handle injection failures differently.
&gt; 
&gt; (Thinking towards further refactors, it would be nice if the updated cursor key/primarykey/value were passed back in onSuccessWithContinuation, stashed in the IDBRequest itself (not the cursor) and then the key injection for cursors could be done in IDBRequest.)

Totally agree - been wanting to do that refactor for a while.

Good catch on the inconsistency in setValueReady - I at least made it succeed gracefully with a FIXME.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>678557</commentid>
    <comment_count>5</comment_count>
      <attachid>154467</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-07-25 15:58:21 -0700</bug_when>
    <thetext>Created attachment 154467
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>678571</commentid>
    <comment_count>6</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-07-25 16:07:51 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; &gt; (Thinking towards further refactors, it would be nice if the updated cursor key/primarykey/value were passed back in onSuccessWithContinuation, stashed in the IDBRequest itself (not the cursor) and then the key injection for cursors could be done in IDBRequest.)
&gt; 
&gt; Totally agree - been wanting to do that refactor for a while.

FYI, I have that (mostly) done locally, tracking in https://bugs.webkit.org/show_bug.cgi?id=92278

Needs to wait for the dust to settle, before breaking it up for landing, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>678573</commentid>
    <comment_count>7</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-07-25 16:09:42 -0700</bug_when>
    <thetext>Already referenced that but in the patch! :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>678582</commentid>
    <comment_count>8</comment_count>
      <attachid>154467</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-07-25 16:19:27 -0700</bug_when>
    <thetext>Comment on attachment 154467
Patch

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

Did you see my question &quot;Do we have any existing tests where the index key path is the same as the store&apos;s key path and autoincrement is used?&quot;

&gt; Source/WebCore/Modules/indexeddb/IDBCursor.cpp:258
&gt; +        const IDBObjectStoreMetadata metadata = objectStore-&gt;metadata();

To simplify, maybe we want to have IDBObjectStore::keyPath() return an IDBKeyPath and implement the IDL keyPath attribute via a method named keyPathAny() instead.

Then we can ditch the metadata() uses here, and the IDBKeyPath::operator== can take an IDBKeyPaths instead of an IDBAny.

&gt; Source/WebCore/Modules/indexeddb/IDBKeyPath.cpp:249
&gt; +    case ArrayType:

Missing an other-&gt;type() == IDBAny::DOMStringListType check?

&gt; Source/WebCore/Modules/indexeddb/IDBRequest.cpp:360
&gt; +    ASSERT(keyPath == effectiveObjectStore(m_source)-&gt;keyPath());

Thanks, and sorry for the pain.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>678620</commentid>
    <comment_count>9</comment_count>
      <attachid>154487</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-07-25 16:49:44 -0700</bug_when>
    <thetext>Created attachment 154487
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>678622</commentid>
    <comment_count>10</comment_count>
      <attachid>154467</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-07-25 16:50:34 -0700</bug_when>
    <thetext>Comment on attachment 154467
Patch

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

&gt;&gt; Source/WebCore/Modules/indexeddb/IDBCursor.cpp:258
&gt;&gt; +        const IDBObjectStoreMetadata metadata = objectStore-&gt;metadata();
&gt; 
&gt; To simplify, maybe we want to have IDBObjectStore::keyPath() return an IDBKeyPath and implement the IDL keyPath attribute via a method named keyPathAny() instead.
&gt; 
&gt; Then we can ditch the metadata() uses here, and the IDBKeyPath::operator== can take an IDBKeyPaths instead of an IDBAny.

tried that but the binding code calls keyPath(), so we&apos;d have to change the IDL... lets tackle that elsewhere

&gt;&gt; Source/WebCore/Modules/indexeddb/IDBKeyPath.cpp:249
&gt;&gt; +    case ArrayType:
&gt; 
&gt; Missing an other-&gt;type() == IDBAny::DOMStringListType check?

whoops! done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>678642</commentid>
    <comment_count>11</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-07-25 17:04:08 -0700</bug_when>
    <thetext>sorry I keep ignoring the question about the tests - I keep meaning to answer then getting into other stuff. let me look now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>678819</commentid>
    <comment_count>12</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-07-25 20:16:37 -0700</bug_when>
    <thetext>I can&apos;t find any at first pass.

I suspect that currently most practical uses of that will fail in the current implementation. Specifically if you  did:

objectStore = createObjectStore(&quot;XX&quot;, {autoIncrement: true, keyPath: &quot;foo&quot;})
index = objectStore.createIndex(&quot;foo&quot;, &quot;foo&quot;);

Then when you call put() you&apos;re almost certainly adding objects that have the &quot;foo&quot; property set:

objectStore.put({&quot;foo&quot;: &quot;xyz&quot;})

In the current code I believe this will fail because createObjectStore will look for the current key and fail because it&apos;s supposed to be autoIncrement.

If you tried
objectStore.put({})

Then I think the code might fail to generate an index key for &quot;foo&quot;, then write the object to the autoIncremented new value, (because it does pre-generate the index keys first, even in the backend) and the same will happen after this patch, for wildly different reasons: because the key would be &apos;generated&apos; until the object came out of the store.

I&apos;ll have to think about how to fix that case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679749</commentid>
    <comment_count>13</comment_count>
      <attachid>154748</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-07-26 14:17:26 -0700</bug_when>
    <thetext>Created attachment 154748
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679753</commentid>
    <comment_count>14</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-07-26 14:18:35 -0700</bug_when>
    <thetext>ok, new patch includes a test for what we described above - sure enough, it was working on trunk, the previous patch broke it, so this new patch has a fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679793</commentid>
    <comment_count>15</comment_count>
      <attachid>154748</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-07-26 14:58:18 -0700</bug_when>
    <thetext>Comment on attachment 154748
Patch

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

&gt; Source/WebCore/ChangeLog:27
&gt; +        No new tests because this is a refactoring, and actual behavior

Update comment with new test name.

&gt; Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:286
&gt; +            if (indexKeyPath == objectStore-&gt;keyPath())

This creates an temporary IDBAny (via cast operator on IDBKeyPath); it would be nice to avoid it. (The other use of the IDBKeyPath::operator==(IDBAny) is in debug code.)

&gt; LayoutTests/storage/indexeddb/resources/index-duplicate-keypaths.js:12
&gt; +    request.onsuccess = testCollideObjstoreIndexSetup;

The &quot;Objstore&quot; contraction is a little odd. Use &quot;ObjStore&quot;, &quot;ObjectStore&quot; or just &quot;Store&quot;.

&gt; LayoutTests/storage/indexeddb/resources/index-duplicate-keypaths.js:21
&gt; +    request.onerror = unexpectedErrorCallback;

Catch onblocked too, please.

&gt; LayoutTests/storage/indexeddb/resources/index-duplicate-keypaths.js:27
&gt; +    trans = event.target.result;

FYI, using |event.target.result| rather than |request.result| makes the test slightly more work to port to Workers (which don&apos;t have a global |event|). Not a big deal, though.

&gt; LayoutTests/storage/indexeddb/resources/index-duplicate-keypaths.js:28
&gt; +    deleteAllObjectStores(db);

Duplicated.

&gt; LayoutTests/storage/indexeddb/resources/index-duplicate-keypaths.js:40
&gt; +        shouldBeEqualToString(&quot;JSON.stringify(result)&quot;, v);

I&apos;m slightly worried that the serialization order is indeterminate, but I suspect in practice it&apos;s sorted by key to avoid such issues. I agree this is probably the best way to do a quick compare of these sorts of values.

&gt; LayoutTests/storage/indexeddb/resources/index-duplicate-keypaths.js:69
&gt; +    deleteAllObjectStores(db);

Duplicated.

&gt; LayoutTests/storage/indexeddb/resources/index-duplicate-keypaths.js:84
&gt; +    // insert some data to futz with the autoIncrement state

Capitalize, punctuate.

&gt; LayoutTests/storage/indexeddb/resources/index-duplicate-keypaths.js:86
&gt; +        objectStore.put({foo: i});

Can you do this in an evalAndLog() so a reader of the expected.txt knows what&apos;s going on?

&gt; LayoutTests/storage/indexeddb/resources/index-duplicate-keypaths.js:90
&gt; +        debug(&quot;got back &quot; + JSON.stringify(event.target.result));

I think this debug() line is redundant with the following shouldBe() call.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679851</commentid>
    <comment_count>16</comment_count>
      <attachid>154748</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-07-26 15:36:39 -0700</bug_when>
    <thetext>Comment on attachment 154748
Patch

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

test issues addressed.

&gt;&gt; Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:286
&gt;&gt; +            if (indexKeyPath == objectStore-&gt;keyPath())
&gt; 
&gt; This creates an temporary IDBAny (via cast operator on IDBKeyPath); it would be nice to avoid it. (The other use of the IDBKeyPath::operator==(IDBAny) is in debug code.)

That&apos;s only in the FRONT end - in the backend, keyPath() returns an IDBKeyPath (Another reason to fix that!)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679852</commentid>
    <comment_count>17</comment_count>
      <attachid>154772</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-07-26 15:37:11 -0700</bug_when>
    <thetext>Created attachment 154772
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679873</commentid>
    <comment_count>18</comment_count>
      <attachid>154776</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-07-26 16:01:19 -0700</bug_when>
    <thetext>Created attachment 154776
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679882</commentid>
    <comment_count>19</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-07-26 16:04:28 -0700</bug_when>
    <thetext>the patch for cleaning up the keyPath() junk is bug 92434</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679891</commentid>
    <comment_count>20</comment_count>
      <attachid>154780</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-07-26 16:10:59 -0700</bug_when>
    <thetext>Created attachment 154780
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679906</commentid>
    <comment_count>21</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-07-26 16:22:39 -0700</bug_when>
    <thetext>tony@ - r?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679924</commentid>
    <comment_count>22</comment_count>
      <attachid>154780</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-07-26 16:57:26 -0700</bug_when>
    <thetext>Comment on attachment 154780
Patch

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680201</commentid>
    <comment_count>23</comment_count>
      <attachid>154780</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-27 00:30:51 -0700</bug_when>
    <thetext>Comment on attachment 154780
Patch

Clearing flags on attachment: 154780

Committed r123843: &lt;http://trac.webkit.org/changeset/123843&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680202</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-27 00:30:57 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154394</attachid>
            <date>2012-07-25 11:01:02 -0700</date>
            <delta_ts>2012-07-25 15:58:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91123-20120725110052.patch</filename>
            <type>text/plain</type>
            <size>38380</size>
            <attacher name="Alec Flett">alecflett</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzNTQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGNmZWMzYjVmYzZkMzYw
M2NhNDliOTJmMjY3Y2NmYmNlODkwNzllNi4uN2YyYmIyZDg3MjExYjBhODBmOWJhMGFmYjUxY2Y3
MTNjODEyYWU0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYwIEBACisyMDEyLTA3LTI1ICBBbGVj
IEZsZXR0ICA8YWxlY2ZsZXR0QGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IGlu
amVjdCBpbmRleCBrZXlzIG9uIGN1cnNvci9vYmplY3RzdG9yZS9pbmRleCBnZXQgc3VjY2VzIGhh
bmRsZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05
MTEyMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1v
dmUga2V5LWluamVjdGlvbiBpbnRvIHRoZSBmcm9udGVuZCwgYnkgaW5qZWN0aW5nIHRoZSBrZXkg
aW50bworICAgICAgICB0aGUgdmFsdWUgb24gZ2V0IHJhdGhlciB0aGFuIHNldCBmb3IgYXV0b2lu
Y3JlbWVudGVkIGtleXMuIFRoaXMKKyAgICAgICAgZ2l2ZXMgYSBwZXJmb3JtYW5jZSB3aW4gYnkg
YXZvaWRpbmcgYW4gSVBDIGNhbGwgdG8gdGhlIFY4IHV0aWxpdHkKKyAgICAgICAgcHJvY2VzcyBv
biBjaHJvbWl1bSwgYW5kIGdlbmVyYWxseSBjbGVhbnMgdXAgdGhlIGtleSBtYW5hZ2VtZW50Lgor
CisgICAgICAgIE5vdGUgdGhhdCB0aGlzIGR1cGxpY2F0ZXMgdGhlIGxvZ2ljIG9mIGdlbmVyYXRl
SW5kZXhLZXlzIGludG8gdGhlCisgICAgICAgIGZyb250ZW5kIHVudGlsIHRoYXQgbWV0aG9kIGNh
biBiZSBleHB1bmdlZCBmcm9tIHRoZSBiYWNrZW5kLiBUaGlzCisgICAgICAgIHdpbGwgYmUgY2xl
YW5lZCB1cCBpbiBhIGxhdGVyIHBhdGNoLgorCisgICAgICAgIEluIG9yZGVyIHRvIGFjY291bnQg
Zm9yIGJvdGggb2xkIGRhdGEgKHdoaWNoIGhhcyB0aGUgZHVwbGljYXRlCisgICAgICAgIHByaW1h
cnkga2V5IGFscmVhZHkgaW5qZWN0ZWQgYW5kIHNlcmlhbGl6ZWQpIGFuZCBhbnkgbmV3IGRhdGEs
IGFuCisgICAgICAgIGFzc2VydGlvbiB3YXMgcmVtb3ZlZCBmcm9tIElEQkJpbmRpbmdVdGlsaXRp
ZXMuCisKKyAgICAgICAgVGhpcyBhbHNvIGluY2x1ZGVzIHNvbWUgbWlub3IgcmVmYWN0b3Jpbmcg
c3VjaCBhcyB0aGUgZGVwcmVjYXRpb24KKyAgICAgICAgb2YgSURCQ3Vyc29yQmFja2VuZEludGVy
ZmFjZTo6dXBkYXRlIGluIGZhdm9yIG9mIGEgZGlyZWN0IGNhbGwgdG8KKyAgICAgICAgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0LCBhbmQgcmVtb3ZhbCBvZiB0aGUgbm93LWRlZnVuY3QK
KyAgICAgICAgSURCQmFja2luZ1N0b3JlOjpnZXRPYmplY3RWaWFJbmRleC4KKworICAgICAgICBO
byBuZXcgdGVzdHMgYmVjYXVzZSB0aGlzIGlzIGEgcGVyZm9ybWFuY2UgcmVmYWN0b3JpbmcsIGFu
ZCBhY3R1YWwKKyAgICAgICAgYmVoYXZpb3IgaGFzbid0IGNoYW5nZWQuCisKKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuaDoKKyAgICAgICAgKElEQkJhY2tpbmdT
dG9yZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6dXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1
cnNvcjo6c2V0VmFsdWVSZWFkeSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vy
c29yQmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yQmFja2VuZElt
cGw6OnVwZGF0ZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5k
SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJbXBsOjpnZXRJbnRl
cm5hbCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZS5jcHA6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZS5oOgorICAgICAgICAoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZSk6CisgICAgICAgICogTW9kdWxl
cy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2VuZXJh
dGVJbmRleEtleXNGb3JWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQk9iamVjdFN0b3JlOjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3Rv
cmU6OnB1dCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaDoK
KyAgICAgICAgKElEQk9iamVjdFN0b3JlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9J
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpwdXRXaXRoSW5kZXhLZXlzKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwpOgor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SURCUmVxdWVzdDo6b25TdWNjZXNzKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9JREJC
aW5kaW5nVXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorCiAyMDEyLTA3LTI0ICBL
d2FuZyBZdWwgU2VvICA8c2t5dWxAY29tcGFueTEwMC5uZXQ+CiAKICAgICAgICAgUmVtb3ZlIGFu
IGludmFsaWQgYXNzZXJ0aW9uIGludHJvZHVjZWQgaW4gcjEyMzUzNi4gVW5yZXZpZXdlZC4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggNDNiZWQzMDQxNDFiYmVlZGU5ZWM3MWM1MzdkOWQz
NzQ1NTE4NjFiNS4uMzU4OTc2NDk3YjFjZTdkN2VhZGE4NDBlMzU2M2I1NjU5ZDZiMDBmZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMi0wNy0yNSAgQWxl
YyBGbGV0dCAgPGFsZWNmbGV0dEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBp
bmplY3QgaW5kZXgga2V5cyBvbiBjdXJzb3Ivb2JqZWN0c3RvcmUvaW5kZXggZ2V0IHN1Y2NlcyBo
YW5kbGVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTExMjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBS
ZW1vdmUgbWV0aG9kIG5vIGxvbmdlciB1c2VkLgorCisgICAgICAgICogdGVzdHMvSURCRmFrZUJh
Y2tpbmdTdG9yZS5oOgorCiAyMDEyLTA3LTI0ICBKaWFuIExpICA8amlhbmxpQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBBZGQgcGVyLWNvbnRleHQgc2V0dGluZyBmb3IgaHRtbCBub3RpZmljYXRp
b25zCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNr
aW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdT
dG9yZS5oCmluZGV4IDc4YTlmNjY3YWRkMTMwZTYzZTNjMDc0NmQ0YTcwM2I0ODk1NDZiZDcuLmY4
ZGU2ODIwMjdmYzI1M2Y3N2ZhNTU5OTRjMWViMGViZmMzMDQxNTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oCkBAIC04Myw3ICs4
Myw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgoaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCkgPSAwOwogICAg
IHZpcnR1YWwgYm9vbCBwdXRJbmRleERhdGFGb3JSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiwgY29u
c3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKikgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBk
ZWxldGVJbmRleERhdGFGb3JSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlm
aWVyKikgPSAwOwotICAgIHZpcnR1YWwgU3RyaW5nIGdldE9iamVjdFZpYUluZGV4KGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0
IElEQktleSYpID0gMDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBnZXRQcmltYXJ5
S2V5VmlhSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JikgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBrZXlF
eGlzdHNJbkluZGV4KGludDY0X3QgZGF0YWJhc2VpZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBp
bnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYgaW5kZXhLZXksIFJlZlB0cjxJREJLZXk+JiBm
b3VuZFByaW1hcnlLZXkpID0gMDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCQ2FsbGJhY2tzLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJDYWxsYmFja3MuaAppbmRleCAwYjM0YjY4ODZkNWUxYWE0M2QxOTUzZjlhZDgwM2Ex
ZTJhNzI4OTI0Li44NTNmZmM3MmQyNjAzOTFmY2M0MzY2NGQ1NzNmYzVkYWUzMDJkYzBmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDYWxsYmFja3MuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDYWxsYmFja3MuaApAQCAt
MzAsMTkgKzMwLDE5IEBACiAjZGVmaW5lIElEQkNhbGxiYWNrc19oCiAKICNpbmNsdWRlICJET01T
dHJpbmdMaXN0LmgiCi0jaW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZS5oIgotI2lu
Y2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5oIgogI2luY2x1ZGUgIklEQkRhdGFi
YXNlRXJyb3IuaCIKICNpbmNsdWRlICJJREJLZXkuaCIKICNpbmNsdWRlICJJREJLZXlQYXRoLmgi
Ci0jaW5jbHVkZSAiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAi
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlLmgiCiAjaW5jbHVkZSAiU2VyaWFsaXplZFNj
cmlwdFZhbHVlLmgiCiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogCiAjaWYgRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIElEQkN1cnNvckJh
Y2tlbmRJbnRlcmZhY2U7CitjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U7CitjbGFz
cyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U7CitjbGFzcyBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2U7CiAKIC8vIEZJWE1FOiBBbGwgY2hpbGQgY2xhc3NlcyBuZWVkIHRvIGJl
IG1hZGUgdGhyZWFkc2FmZS4KIGNsYXNzIElEQkNhbGxiYWNrcyA6IHB1YmxpYyBUaHJlYWRTYWZl
UmVmQ291bnRlZDxJREJDYWxsYmFja3M+IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJDdXJzb3IuY3BwCmluZGV4IGVmMzRjYjhjN2ZiNzYzNjE4NDEyMmIzY2I4MzZk
MjQ4ZDIxZWI5MzAuLmEyMjNkNTkyZjBjYTRjNWYyZmJlNGYwZDg2YTllMmRlYjMwMTJmOTMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcApAQCAt
MTUxLDIxICsxNTEsMTggQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJDdXJzb3I6OnVwZGF0
ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmUKICAgICBSZWZQdHI8SURC
T2JqZWN0U3RvcmU+IG9iamVjdFN0b3JlID0gZWZmZWN0aXZlT2JqZWN0U3RvcmUoKTsKICAgICBj
b25zdCBJREJLZXlQYXRoJiBrZXlQYXRoID0gb2JqZWN0U3RvcmUtPm1ldGFkYXRhKCkua2V5UGF0
aDsKICAgICBjb25zdCBib29sIHVzZXNJbkxpbmVLZXlzID0gIWtleVBhdGguaXNOdWxsKCk7Cisg
ICAgUmVmUHRyPElEQktleT4ga2V5OwogICAgIGlmICh1c2VzSW5MaW5lS2V5cykgewogICAgICAg
ICBSZWZQdHI8SURCS2V5PiBrZXlQYXRoS2V5ID0gY3JlYXRlSURCS2V5RnJvbVNlcmlhbGl6ZWRW
YWx1ZUFuZEtleVBhdGgodmFsdWUsIGtleVBhdGgpOwogICAgICAgICBpZiAoIWtleVBhdGhLZXkg
fHwgIWtleVBhdGhLZXktPmlzRXF1YWwobV9jdXJyZW50UHJpbWFyeUtleS5nZXQoKSkpIHsKICAg
ICAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOwogICAgICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBrZXkgPSBtX2N1
cnJlbnRQcmltYXJ5S2V5OwogICAgIH0KIAotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0
ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3Ry
YW5zYWN0aW9uLmdldCgpKTsKLSAgICBtX2JhY2tlbmQtPnVwZGF0ZSh2YWx1ZSwgcmVxdWVzdCwg
ZWMpOwotICAgIGlmIChlYykgewotICAgICAgICByZXF1ZXN0LT5tYXJrRWFybHlEZWF0aCgpOwot
ICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgcmV0dXJuIHJlcXVlc3QucmVsZWFzZSgpOwor
ICAgIHJldHVybiBvYmplY3RTdG9yZS0+cHV0KElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFj
ZTo6Q3Vyc29yVXBkYXRlLCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgY29udGV4dCwgdmFsdWUsIGtl
eSwgZWMpOwogfQogCiB2b2lkIElEQkN1cnNvcjo6YWR2YW5jZSh1bnNpZ25lZCBsb25nIGNvdW50
LCBFeGNlcHRpb25Db2RlJiBlYykKQEAgLTI1OSwxOCArMjU2LDE1IEBAIHZvaWQgSURCQ3Vyc29y
OjpzZXRWYWx1ZVJlYWR5KCkKICAgICBtX2N1cnJlbnRQcmltYXJ5S2V5ID0gbV9iYWNrZW5kLT5w
cmltYXJ5S2V5KCk7CiAKICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSA9
IG1fYmFja2VuZC0+dmFsdWUoKTsKLSNpZm5kZWYgTkRFQlVHCiAgICAgaWYgKCFpc0tleUN1cnNv
cigpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBBY3R1YWxseSBpbmplY3QgdGhlIHByaW1hcnlLZXkg
YXQgdGhlIGtleVBhdGguCiAgICAgICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZT4gb2JqZWN0U3Rv
cmUgPSBlZmZlY3RpdmVPYmplY3RTdG9yZSgpOwotICAgICAgICBpZiAob2JqZWN0U3RvcmUtPmF1
dG9JbmNyZW1lbnQoKSAmJiAhb2JqZWN0U3RvcmUtPm1ldGFkYXRhKCkua2V5UGF0aC5pc051bGwo
KSkgewotICAgICAgICAgICAgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCA9IG9iamVjdFN0b3Jl
LT5tZXRhZGF0YSgpLmtleVBhdGg7Ci0gICAgICAgICAgICBSZWZQdHI8SURCS2V5PiBleHBlY3Rl
ZEtleSA9IGNyZWF0ZUlEQktleUZyb21TZXJpYWxpemVkVmFsdWVBbmRLZXlQYXRoKHZhbHVlLCBr
ZXlQYXRoKTsKLSAgICAgICAgICAgIEFTU0VSVChtX2N1cnJlbnRQcmltYXJ5S2V5KTsKLSAgICAg
ICAgICAgIEFTU0VSVChleHBlY3RlZEtleS0+aXNFcXVhbChtX2N1cnJlbnRQcmltYXJ5S2V5Lmdl
dCgpKSk7CisgICAgICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEgbWV0YWRhdGEgPSBv
YmplY3RTdG9yZS0+bWV0YWRhdGEoKTsKKyAgICAgICAgaWYgKG1ldGFkYXRhLmF1dG9JbmNyZW1l
bnQgJiYgIW1ldGFkYXRhLmtleVBhdGguaXNOdWxsKCkpIHsKKyAgICAgICAgICAgIFJlZlB0cjxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlQWZ0ZXJJbmplY3Rpb24gPSBpbmplY3RJREJLZXlJ
bnRvU2VyaWFsaXplZFZhbHVlKG1fY3VycmVudFByaW1hcnlLZXksIHZhbHVlLCBtZXRhZGF0YS5r
ZXlQYXRoKTsKKyAgICAgICAgICAgIEFTU0VSVCh2YWx1ZUFmdGVySW5qZWN0aW9uKTsKKyAgICAg
ICAgICAgIHZhbHVlID0gdmFsdWVBZnRlckluamVjdGlvbjsKICAgICAgICAgfQogICAgIH0KLSNl
bmRpZgogICAgIG1fY3VycmVudFZhbHVlID0gSURCQW55OjpjcmVhdGUodmFsdWUucmVsZWFzZSgp
KTsKIAogICAgIG1fZ290VmFsdWUgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwCmluZGV4IGFlMjdh
ZjhhMzJjNmJiNjk0OTJiZmYwODY2ZTJkMDI4NTI0NDY2MDMuLjRhMzk1ZWI4YjgxZDIwMmM3OTdk
MzM1MmM3Njc3ZWEzNGU3OGE4NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAKQEAgLTg1LDEzICs4NSw3
IEBAIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBJREJDdXJzb3JCYWNrZW5kSW1w
bDo6dmFsdWUoKSBjb25zdAogCiB2b2lkIElEQkN1cnNvckJhY2tlbmRJbXBsOjp1cGRhdGUoUGFz
c1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gY2FsbGJhY2tzLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBJREJfVFJBQ0UoIklE
QkN1cnNvckJhY2tlbmRJbXBsOjp1cGRhdGUiKTsKLSAgICBBU1NFUlQobV90cmFuc2FjdGlvbi0+
bW9kZSgpICE9IElEQlRyYW5zYWN0aW9uOjpSRUFEX09OTFkpOwotCi0gICAgQVNTRVJUKG1fY3Vy
c29yKTsKLSAgICBBU1NFUlQobV9jdXJzb3JUeXBlICE9IEluZGV4S2V5Q3Vyc29yKTsKLQotICAg
IG1fb2JqZWN0U3RvcmUtPnB1dCh2YWx1ZSwgbV9jdXJzb3ItPnByaW1hcnlLZXkoKSwgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpDdXJzb3JVcGRhdGUsIGNhbGxiYWNrcywgbV90cmFu
c2FjdGlvbi5nZXQoKSwgZWMpOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lk
IElEQkN1cnNvckJhY2tlbmRJbXBsOjpjb250aW51ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5
PiBwcnBLZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIEV4Y2VwdGlv
bkNvZGUmIGVjKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCSW5kZXhCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcAppbmRleCA5ZjVmZjNiYWZjYTI1NDk3NWE0M2M0MzBl
YmNhNWUyMTg2OTBlYzY2Li4xMzQwMDg0OTFmNWE3NDMxOTZlMmZjOWFiODgyZGFlZTZjYjM5NTk2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJh
Y2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJ
bmRleEJhY2tlbmRJbXBsLmNwcApAQCAtMTcyLDExICsxNzIsMTkgQEAgdm9pZCBJREJJbmRleEJh
Y2tlbmRJbXBsOjpnZXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0
cjxJREJJbmQKICAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yLT5jbG9zZSgpOwogICAgIH0KIAot
ICAgIFN0cmluZyB2YWx1ZSA9IGluZGV4LT5iYWNraW5nU3RvcmUoKS0+Z2V0T2JqZWN0VmlhSW5k
ZXgoaW5kZXgtPmRhdGFiYXNlSWQoKSwgaW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5pZCgp
LCBpbmRleC0+aWQoKSwgKmtleSk7CisgICAgUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSA9IGlu
ZGV4LT5iYWNraW5nU3RvcmUoKS0+Z2V0UHJpbWFyeUtleVZpYUluZGV4KGluZGV4LT5kYXRhYmFz
ZUlkKCksIGluZGV4LT5tX29iamVjdFN0b3JlQmFja2VuZC0+aWQoKSwgaW5kZXgtPmlkKCksICpr
ZXkpOworCisgICAgU3RyaW5nIHZhbHVlID0gaW5kZXgtPmJhY2tpbmdTdG9yZSgpLT5nZXRPYmpl
Y3RTdG9yZVJlY29yZChpbmRleC0+ZGF0YWJhc2VJZCgpLCBpbmRleC0+bV9vYmplY3RTdG9yZUJh
Y2tlbmQtPmlkKCksICpwcmltYXJ5S2V5KTsKKwogICAgIGlmICh2YWx1ZS5pc051bGwoKSkgewog
ICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6OnVuZGVm
aW5lZFZhbHVlKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQorICAgIGlmIChpbmRleC0+bV9v
YmplY3RTdG9yZUJhY2tlbmQtPmF1dG9JbmNyZW1lbnQoKSAmJiAhaW5kZXgtPm1fb2JqZWN0U3Rv
cmVCYWNrZW5kLT5rZXlQYXRoKCkuaXNOdWxsKCkpIHsKKyAgICAgICAgY2FsbGJhY2tzLT5vblN1
Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZSh2YWx1ZSksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHByaW1hcnlLZXksIGluZGV4LT5tX29iamVjdFN0b3Jl
QmFja2VuZC0+a2V5UGF0aCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICBjYWxsYmFj
a3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlKHZhbHVl
KSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkxldmVsREJCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAKaW5kZXggMzJlMmY2ODE1Nzk0MDlhMDkwOGQy
OWExODcyYzBjZGM1NmI4OWVmOS4uMDUxM2MzNTMzZmNhYjBmZjg1MmRjMGE5MTM0NDU3ZWNmMzYy
OTdmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAKQEAgLTk2NywxNSArOTY3LDYgQEAgYm9vbCBJ
REJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVJbmRleERhdGFGb3JSZWNvcmQoaW50NjRfdCwg
aW50NjRfdCwgaW50NjRfdCwKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotU3RyaW5nIElEQkxldmVs
REJCYWNraW5nU3RvcmU6OmdldE9iamVjdFZpYUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYga2V5KQot
ewotICAgIFJlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkgPSBnZXRQcmltYXJ5S2V5VmlhSW5kZXgo
ZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5KTsKLSAgICBpZiAoIXByaW1h
cnlLZXkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIHJldHVybiBnZXRPYmplY3RT
dG9yZVJlY29yZChkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAqcHJpbWFyeUtleSk7Ci19Ci0K
IHN0YXRpYyBib29sIHZlcnNpb25FeGlzdHMoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlv
biwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgdmVy
c2lvbiwgY29uc3QgVmVjdG9yPGNoYXI+JiBlbmNvZGVkUHJpbWFyeUtleSkKIHsKICAgICBjb25z
dCBWZWN0b3I8Y2hhcj4ga2V5ID0gRXhpc3RzRW50cnlLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBv
YmplY3RTdG9yZUlkLCBlbmNvZGVkUHJpbWFyeUtleSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmgKaW5kZXgg
YzVhOWUyZWUzMDllOGNhM2ZkN2Y3MGYwYWEyYmI4MGNlYzA0NmIyZS4uMGJlOTM0ZmZkYTliY2Y4
MDkxZDUzNDEwYTZhYmNjODAwZjU5MGQzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaApAQCAtNjksNyAr
NjksNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUluZGV4KGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpOwogICAgIHZp
cnR1YWwgYm9vbCBwdXRJbmRleERhdGFGb3JSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiwgY29uc3Qg
T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKik7CiAgICAgdmlydHVhbCBib29sIGRlbGV0ZUlu
ZGV4RGF0YUZvclJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqKTsK
LSAgICB2aXJ0dWFsIFN0cmluZyBnZXRPYmplY3RWaWFJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmKTsK
ICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBnZXRQcmltYXJ5S2V5VmlhSW5kZXgoaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwg
Y29uc3QgSURCS2V5Jik7CiAgICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luSW5kZXgoaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29u
c3QgSURCS2V5JiBpbmRleEtleSwgUmVmUHRyPElEQktleT4mIGZvdW5kUHJpbWFyeUtleSk7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0
b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3Jl
LmNwcAppbmRleCBlMjdjYTgyN2I3NWFmYmQ1MTAwMWMwNmYzODA3MmZhMTM1ZGI2ZjA3Li42OTRi
YmMxMmFmNTIwNmMwMmViYTM3ZTY5OWY5YWYyZWFhYzJiMDY1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCkBAIC0zMSw2ICsz
MSw3IEBACiAjaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgogI2luY2x1ZGUgIklEQkFueS5oIgog
I2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJJREJDdXJzb3JCYWNr
ZW5kSW50ZXJmYWNlLmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2UuaCIKICNpbmNsdWRlICJJREJE
YXRhYmFzZUV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIklEQkluZGV4LmgiCkBAIC0xMDEsMTkgKzEw
Miw0NCBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpnZXQoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzcwogICAgIHJldHVybiBnZXQoY29udGV4dCwg
a2V5UmFuZ2UucmVsZWFzZSgpLCBlYyk7CiB9CiAKK3N0YXRpYyBib29sIGdlbmVyYXRlSW5kZXhL
ZXlzRm9yVmFsdWUoY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+IG9iamVjdFZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBJREJPYmplY3RTdG9yZTo6SW5kZXhLZXlzKiBpbmRleEtleXMpCit7CisgICAgUmVmUHRy
PElEQktleT4gaW5kZXhLZXkgPSBjcmVhdGVJREJLZXlGcm9tU2VyaWFsaXplZFZhbHVlQW5kS2V5
UGF0aChvYmplY3RWYWx1ZSwgaW5kZXhNZXRhZGF0YS5rZXlQYXRoKTsKKworICAgIGlmICghaW5k
ZXhLZXkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKCFpbmRleE1ldGFkYXRhLm11
bHRpRW50cnkgfHwgaW5kZXhLZXktPnR5cGUoKSAhPSBJREJLZXk6OkFycmF5VHlwZSkgeworICAg
ICAgICBpZiAoIWluZGV4S2V5LT5pc1ZhbGlkKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgICAgICBpbmRleEtleXMtPmFwcGVuZChpbmRleEtleSk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgQVNTRVJUKGluZGV4TWV0YWRhdGEubXVsdGlFbnRyeSk7CisgICAgICAgIEFTU0VSVChp
bmRleEtleS0+dHlwZSgpID09IElEQktleTo6QXJyYXlUeXBlKTsKKyAgICAgICAgaW5kZXhLZXkg
PSBJREJLZXk6OmNyZWF0ZU11bHRpRW50cnlBcnJheShpbmRleEtleS0+YXJyYXkoKSk7CisKKyAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmRleEtleS0+YXJyYXkoKS5zaXplKCk7ICsr
aSkKKyAgICAgICAgICAgIGluZGV4S2V5cy0+YXBwZW5kKGluZGV4S2V5LT5hcnJheSgpW2ldKTsK
KyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURC
T2JqZWN0U3RvcmU6OmFkZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXks
IEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmU6OmFk
ZCIpOwotICAgIHJldHVybiBwdXQoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpBZGRP
bmx5LCBjb250ZXh0LCB2YWx1ZSwga2V5LCBlYyk7CisgICAgcmV0dXJuIHB1dChJREJPYmplY3RT
dG9yZUJhY2tlbmRJbnRlcmZhY2U6OkFkZE9ubHksIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBjb250
ZXh0LCB2YWx1ZSwga2V5LCBlYyk7CiB9CiAKIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2Jq
ZWN0U3RvcmU6OnB1dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIEV4
Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmU6OnB1dCIp
OwotICAgIHJldHVybiBwdXQoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpBZGRPclVw
ZGF0ZSwgY29udGV4dCwgdmFsdWUsIGtleSwgZWMpOworICAgIHJldHVybiBwdXQoSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpBZGRPclVwZGF0ZSwgSURCQW55OjpjcmVhdGUodGhpcyks
IGNvbnRleHQsIHZhbHVlLCBrZXksIGVjKTsKIH0KIAotUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJ
REJPYmplY3RTdG9yZTo6cHV0KElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6UHV0TW9k
ZSBwdXRNb2RlLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBwcnBLZXks
IEV4Y2VwdGlvbkNvZGUmIGVjKQorUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9y
ZTo6cHV0KElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6UHV0TW9kZSBwdXRNb2RlLCBQ
YXNzUmVmUHRyPElEQkFueT4gc291cmNlLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFsdWUsIFBhc3NSZWZQdHI8
SURCS2V5PiBwcnBLZXksIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIElEQl9UUkFDRSgiSURC
T2JqZWN0U3RvcmU6OnB1dCIpOwogICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZh
bHVlID0gcHJwVmFsdWU7CkBAIC0xNjYsMTUgKzE5MiwyOSBAQCBQYXNzUmVmUHRyPElEQlJlcXVl
c3Q+IElEQk9iamVjdFN0b3JlOjpwdXQoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpQ
dXRNbwogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgfQogICAgICAgICB9
CisgICAgICAgIGlmIChrZXlQYXRoS2V5KQorICAgICAgICAgICAga2V5ID0ga2V5UGF0aEtleTsK
ICAgICB9CiAgICAgaWYgKGtleSAmJiAha2V5LT5pc1ZhbGlkKCkpIHsKICAgICAgICAgZWMgPSBJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0K
IAotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNv
bnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKLSAgICAv
LyBGSVhNRTogUGFzcyB0aHJvdWdoIGtleVBhdGhLZXkgYXMga2V5IHRvIHNpbXBsaWZ5IGJhY2sg
ZW5kIGltcGxlbWVudGF0aW9uLgotICAgIG1fYmFja2VuZC0+cHV0KHZhbHVlLnJlbGVhc2UoKSwg
a2V5LnJlbGVhc2UoKSwgcHV0TW9kZSwgcmVxdWVzdCwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgp
LCBlYyk7CisgICAgVmVjdG9yPFN0cmluZz4gaW5kZXhOYW1lczsKKyAgICBWZWN0b3I8SW5kZXhL
ZXlzPiBpbmRleEtleXM7CisgICAgZm9yIChJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbmRleE1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX21ldGFkYXRhLmluZGV4ZXMuYmVnaW4oKTsgaXQgIT0g
bV9tZXRhZGF0YS5pbmRleGVzLmVuZCgpOyArK2l0KSB7CisgICAgICAgIEluZGV4S2V5cyBrZXlz
OworICAgICAgICBpZiAoIWdlbmVyYXRlSW5kZXhLZXlzRm9yVmFsdWUoaXQtPnNlY29uZCwgdmFs
dWUsICZrZXlzKSkgeworICAgICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFU
QV9FUlI7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBpbmRleE5h
bWVzLmFwcGVuZChpdC0+Zmlyc3QpOworICAgICAgICBpbmRleEtleXMuYXBwZW5kKGtleXMpOwor
ICAgIH0KKyAgICBBU1NFUlQoaW5kZXhLZXlzLnNpemUoKSA9PSBpbmRleE5hbWVzLnNpemUoKSk7
CisKKyAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShj
b250ZXh0LCBzb3VyY2UsIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOworICAgIG1fYmFja2VuZC0+cHV0
V2l0aEluZGV4S2V5cyh2YWx1ZS5yZWxlYXNlKCksIGtleS5yZWxlYXNlKCksIHB1dE1vZGUsIHJl
cXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgaW5kZXhOYW1lcywgaW5kZXhLZXlzLCBl
Yyk7CiAgICAgaWYgKGVjKSB7CiAgICAgICAgIHJlcXVlc3QtPm1hcmtFYXJseURlYXRoKCk7CiAg
ICAgICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCT2JqZWN0U3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQk9iamVjdFN0b3JlLmgKaW5kZXggZWY3YzA2M2I4ZjgyMjY0MTdhN2JmZjhmMmZlMTM2OTgy
NDNiODUzNy4uNmZlZmM0ZTJiYWQwOTVhZTZkMTMzNGMzZWJiOTZmZTkwODliODgwZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oCkBA
IC05NSw3ICs5NSw3IEBAIHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNvdW50
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgRXhjZXB0
aW9uQ29kZSYpOwogICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gY291bnQoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5PiwgRXhjZXB0aW9uQ29kZSYpOwogCi0gICAg
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBwdXQoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNl
OjpQdXRNb2RlLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQ
YXNzUmVmUHRyPElEQlJlcXVlc3Q+IHB1dChJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6
OlB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQW55PiBzb3VyY2UsIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NSZWZQdHI8SURCS2V5
PiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgbWFya0RlbGV0ZWQoKSB7IG1fZGVsZXRlZCA9
IHRydWU7IH0KICAgICB2b2lkIHRyYW5zYWN0aW9uRmluaXNoZWQoKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsLmNwcAppbmRleCBiOTYyZTk0ODdhMjE2ZmFjNTg5OGUwYTA3MmViMDY1YjM2OGZi
NTQ1Li5jZWMzYjczNmQ2MDNiMjE5Yzg3YjI4NjU5OWMwMTdiZDU2NmI4NmEzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsLmNwcApAQCAtMTIwLDQ2ICsxMjAsMTEgQEAgdm9pZCBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpnZXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFz
c1JlZlB0cjwKICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6
OmNyZWF0ZUZyb21XaXJlKHdpcmVEYXRhKSk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPElEQktl
eT4gZmV0Y2hLZXlGcm9tS2V5UGF0aChTZXJpYWxpemVkU2NyaXB0VmFsdWUqIHZhbHVlLCBjb25z
dCBJREJLZXlQYXRoJiBrZXlQYXRoKQotewotICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6ZmV0Y2hLZXlGcm9tS2V5UGF0aCIpOwotICAgIEFTU0VSVCgha2V5UGF0aC5p
c051bGwoKSk7Ci0KLSAgICBWZWN0b3I8UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gPiB2
YWx1ZXM7Ci0gICAgdmFsdWVzLmFwcGVuZCh2YWx1ZSk7Ci0gICAgVmVjdG9yPFJlZlB0cjxJREJL
ZXk+ID4ga2V5czsKLSAgICBJREJLZXlQYXRoQmFja2VuZEltcGw6OmNyZWF0ZUlEQktleXNGcm9t
U2VyaWFsaXplZFZhbHVlc0FuZEtleVBhdGgodmFsdWVzLCBrZXlQYXRoLCBrZXlzKTsKLSAgICBp
ZiAoa2V5cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIEFTU0VSVChrZXlzLnNp
emUoKSA9PSAxKTsKLSAgICByZXR1cm4ga2V5c1swXS5yZWxlYXNlKCk7Ci19Ci0KLXN0YXRpYyBQ
YXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gaW5qZWN0S2V5SW50b0tleVBhdGgoUGFz
c1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZh
bHVlLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKQotewotICAgIElEQl9UUkFDRSgiSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6aW5qZWN0S2V5SW50b0tleVBhdGgiKTsKLSAgICByZXR1cm4g
SURCS2V5UGF0aEJhY2tlbmRJbXBsOjppbmplY3RJREJLZXlJbnRvU2VyaWFsaXplZFZhbHVlKGtl
eSwgdmFsdWUsIGtleVBhdGgpOwotfQogCiAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgbWV0aG9kIHdo
ZW4gZ2V0LXNpZGUga2V5IGluamVjdGlvbiBpcyB0aGUgbm9ybS4KIHZvaWQgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6cHV0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBW
YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwgUHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBJREJfVFJB
Q0UoIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dCIpOwotICAgIElEQl9UUkFDRSgiSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0V2l0aEluZGV4S2V5cyIpOwotCi0gICAgUmVmUHRy
PElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlID0gdGhpczsKLSAgICBSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSA9IHBycFZhbHVlOwotICAgIFJlZlB0cjxJ
REJLZXk+IGtleSA9IHBycEtleTsKLSAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3Mg
PSBwcnBDYWxsYmFja3M7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRy
YW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlvblB0
cik7Ci0gICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgIT0gSURCVHJhbnNhY3Rpb246OlJF
QURfT05MWSk7Ci0KLSAgICAvLyBOdWxsIHBvaW50ZXJzIGhlcmUgc2lnbmlmeSB0aGF0IGluZGV4
IGtleXMgc2hvdWxkIGJlIGdlbmVyYXRlZCBhcyBhIHBhcnQgb2YgdGhpcyBwdXQuCi0gICAgT3du
UHRyPFZlY3RvcjxTdHJpbmc+ID4gbnVsbEluZGV4TmFtZXM7Ci0gICAgT3duUHRyPFZlY3RvcjxJ
bmRleEtleXM+ID4gbnVsbEluZGV4S2V5czsKLSAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVs
ZVRhc2soCi0gICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJklEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OnB1dEludGVybmFsLCBvYmplY3RTdG9yZSwgdmFsdWUsIGtleSwgcHV0TW9kZSwg
Y2FsbGJhY2tzLCB0cmFuc2FjdGlvbiwgbnVsbEluZGV4TmFtZXMucmVsZWFzZSgpLCBudWxsSW5k
ZXhLZXlzLnJlbGVhc2UoKSkpKQotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpU
UkFOU0FDVElPTl9JTkFDVElWRV9FUlI7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAK
IHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0V2l0aEluZGV4S2V5cyhQYXNzUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBw
cnBLZXksIFB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxi
YWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgY29u
c3QgVmVjdG9yPFN0cmluZz4mIGluZGV4TmFtZXMsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiBp
bmRleEtleXMsIEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMTc2LDYgKzE0MSw4IEBAIHZvaWQgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0V2l0aEluZGV4S2V5cyhQYXNzUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1CiAgICAgT3duUHRyPFZlY3RvcjxTdHJpbmc+ID4gbmV3SW5kZXhOYW1l
cyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8U3RyaW5nPihpbmRleE5hbWVzKSk7CiAgICAgT3duUHRy
PFZlY3RvcjxJbmRleEtleXM+ID4gbmV3SW5kZXhLZXlzID0gYWRvcHRQdHIobmV3IFZlY3RvcjxJ
bmRleEtleXM+KGluZGV4S2V5cykpOwogCisgICAgQVNTRVJUKGF1dG9JbmNyZW1lbnQoKSB8fCBr
ZXkpOworCiAgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKAogICAgICAgICAgICAg
Y3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5h
bCwgb2JqZWN0U3RvcmUsIHZhbHVlLCBrZXksIHB1dE1vZGUsIGNhbGxiYWNrcywgdHJhbnNhY3Rp
b24sIG5ld0luZGV4TmFtZXMucmVsZWFzZSgpLCBuZXdJbmRleEtleXMucmVsZWFzZSgpKSkpCiAg
ICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VS
UjsKQEAgLTE5NCwxMSArMTYxLDEyIEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2luZGV4S2V5cyhp
bmRleEtleXMpCiAgICAgeyB9CiAKKyAgICAvLyBGSVhNRTogcmVtb3ZlIHRoaXMgb25jZSBjcmVh
dGVJbmRleCgpIGdlbmVyYXRlcyB0aGVzZSBpbiB0aGUgcmVuZGVyZXIuCiAgICAgYm9vbCBnZW5l
cmF0ZUluZGV4S2V5c0ZvclZhbHVlKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogb2JqZWN0VmFsdWUp
CiAgICAgewogICAgICAgICBtX2luZGV4S2V5cy5jbGVhcigpOwogCi0gICAgICAgIFJlZlB0cjxJ
REJLZXk+IGluZGV4S2V5ID0gZmV0Y2hLZXlGcm9tS2V5UGF0aChvYmplY3RWYWx1ZSwgbV9pbmRl
eE1ldGFkYXRhLmtleVBhdGgpOworICAgICAgICBSZWZQdHI8SURCS2V5PiBpbmRleEtleSA9IGZl
dGNoS2V5RnJvbUtleVBhdGgob2JqZWN0VmFsdWUpOwogCiAgICAgICAgIGlmICghaW5kZXhLZXkp
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTIxMyw5ICsxODEsOCBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICBBU1NFUlQoaW5kZXhLZXktPnR5cGUoKSA9PSBJREJLZXk6OkFycmF5VHlwZSk7
CiAgICAgICAgICAgICBpbmRleEtleSA9IElEQktleTo6Y3JlYXRlTXVsdGlFbnRyeUFycmF5KGlu
ZGV4S2V5LT5hcnJheSgpKTsKIAotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBp
bmRleEtleS0+YXJyYXkoKS5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBpbmRleEtleS0+YXJyYXkoKS5zaXplKCk7ICsraSkKICAgICAgICAgICAgICAg
ICBtX2luZGV4S2V5cy5hcHBlbmQoaW5kZXhLZXktPmFycmF5KClbaV0pOwotICAgICAgICAgICAg
fQogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTI2Niw2ICsyMzMs
MjEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQorCisgICAgUGFzc1JlZlB0cjxJREJLZXk+IGZldGNoS2V5RnJvbUtleVBh
dGgoU2VyaWFsaXplZFNjcmlwdFZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIElEQl9UUkFD
RSgiSW5kZXhXcml0ZXI6OmZldGNoS2V5RnJvbUtleVBhdGgiKTsKKworICAgICAgICBWZWN0b3I8
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gPiB2YWx1ZXM7CisgICAgICAgIHZhbHVlcy5h
cHBlbmQodmFsdWUpOworICAgICAgICBWZWN0b3I8UmVmUHRyPElEQktleT4gPiBrZXlzOworICAg
ICAgICBJREJLZXlQYXRoQmFja2VuZEltcGw6OmNyZWF0ZUlEQktleXNGcm9tU2VyaWFsaXplZFZh
bHVlc0FuZEtleVBhdGgodmFsdWVzLCBtX2luZGV4TWV0YWRhdGEua2V5UGF0aCwga2V5cyk7Cisg
ICAgICAgIGlmIChrZXlzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICBBU1NFUlQoa2V5cy5zaXplKCkgPT0gMSk7CisgICAgICAgIHJldHVybiBrZXlzWzBdLnJlbGVh
c2UoKTsKKyAgICB9CisKICAgICBjb25zdCBJREJJbmRleE1ldGFkYXRhIG1faW5kZXhNZXRhZGF0
YTsKICAgICBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5cyBtX2luZGV4
S2V5czsKIH07CkBAIC0yNzksNDAgKzI2MSwxOCBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6OnB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPAog
ICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IHBycEtleTsKICAgICBPd25QdHI8VmVjdG9yPFN0cmlu
Zz4gPiBpbmRleE5hbWVzID0gcG9wSW5kZXhOYW1lczsKICAgICBPd25QdHI8VmVjdG9yPEluZGV4
S2V5cz4gPiBpbmRleEtleXMgPSBwb3BJbmRleEtleXM7Ci0gICAgQVNTRVJUKCghaW5kZXhOYW1l
cyAmJiAhaW5kZXhLZXlzKSB8fCBpbmRleE5hbWVzLT5zaXplKCkgPT0gaW5kZXhLZXlzLT5zaXpl
KCkpOworICAgIEFTU0VSVChpbmRleE5hbWVzICYmIGluZGV4S2V5cyAmJiBpbmRleE5hbWVzLT5z
aXplKCkgPT0gaW5kZXhLZXlzLT5zaXplKCkpOwogICAgIGNvbnN0IGJvb2wgYXV0b0luY3JlbWVu
dCA9IG9iamVjdFN0b3JlLT5hdXRvSW5jcmVtZW50KCk7CiAgICAgYm9vbCBrZXlXYXNHZW5lcmF0
ZWQgPSBmYWxzZTsKIAotICAgIGlmIChwdXRNb2RlICE9IEN1cnNvclVwZGF0ZSkgewotICAgICAg
ICBjb25zdCBib29sIGhhc0tleVBhdGggPSAhb2JqZWN0U3RvcmUtPm1fa2V5UGF0aC5pc051bGwo
KTsKLSAgICAgICAgaWYgKGhhc0tleVBhdGgpIHsKLSAgICAgICAgICAgIEFTU0VSVCgha2V5KTsK
LSAgICAgICAgICAgIFJlZlB0cjxJREJLZXk+IGtleVBhdGhLZXkgPSBmZXRjaEtleUZyb21LZXlQ
YXRoKHZhbHVlLmdldCgpLCBvYmplY3RTdG9yZS0+bV9rZXlQYXRoKTsKLSAgICAgICAgICAgIGlm
IChrZXlQYXRoS2V5KQotICAgICAgICAgICAgICAgIGtleSA9IGtleVBhdGhLZXk7Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKGF1dG9JbmNyZW1lbnQpIHsKLSAgICAgICAgICAgIGlmICgha2V5KSB7
Ci0gICAgICAgICAgICAgICAgUmVmUHRyPElEQktleT4gYXV0b0luY0tleSA9IG9iamVjdFN0b3Jl
LT5nZW5lcmF0ZUtleSgpOwotICAgICAgICAgICAgICAgIGtleVdhc0dlbmVyYXRlZCA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgaWYgKCFhdXRvSW5jS2V5LT5pc1ZhbGlkKCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlIsICJNYXhpbXVtIGtleSBnZW5lcmF0b3IgdmFs
dWUgcmVhY2hlZC4iKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIHdoZW4gZ2V0LXNp
ZGUga2V5IGluamVjdGlvbiBpcyB0aGUgbm9ybS4KLSAgICAgICAgICAgICAgICBpZiAoaGFzS2V5
UGF0aCkgewotICAgICAgICAgICAgICAgICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiB2YWx1ZUFmdGVySW5qZWN0aW9uID0gaW5qZWN0S2V5SW50b0tleVBhdGgoYXV0b0luY0tleSwg
dmFsdWUsIG9iamVjdFN0b3JlLT5tX2tleVBhdGgpOwotICAgICAgICAgICAgICAgICAgICBBU1NF
UlQodmFsdWVBZnRlckluamVjdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghdmFsdWVB
ZnRlckluamVjdGlvbikgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2tzIGluIHB1
dCgpIGVuc3VyZSB0aGlzIHNob3VsZCBvbmx5IGhhcHBlbiBpZiBJL08gZXJyb3Igb2NjdXJzLgot
ICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJy
b3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJJbnRlcm5hbCBl
cnJvciBpbnNlcnRpbmcgZ2VuZXJhdGVkIGtleSBpbnRvIHRoZSBvYmplY3QuIikpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIHZhbHVlID0gdmFsdWVBZnRlckluamVjdGlvbjsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAga2V5ID0gYXV0b0luY0tleTsKLSAgICAgICAgICAgIH0KKyAg
ICBpZiAocHV0TW9kZSAhPSBDdXJzb3JVcGRhdGUgJiYgYXV0b0luY3JlbWVudCAmJiAha2V5KSB7
CisgICAgICAgIFJlZlB0cjxJREJLZXk+IGF1dG9JbmNLZXkgPSBvYmplY3RTdG9yZS0+Z2VuZXJh
dGVLZXkoKTsKKyAgICAgICAga2V5V2FzR2VuZXJhdGVkID0gdHJ1ZTsKKyAgICAgICAgaWYgKCFh
dXRvSW5jS2V5LT5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJ
REJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSLCAi
TWF4aW11bSBrZXkgZ2VuZXJhdG9yIHZhbHVlIHJlYWNoZWQuIikpOworICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CisgICAgICAgIGtleSA9IGF1dG9JbmNLZXk7CiAgICAgfQogCiAgICAg
QVNTRVJUKGtleSAmJiBrZXktPmlzVmFsaWQoKSk7CkBAIC0zMjUsMTIgKzI4NSw4IEBAIHZvaWQg
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFBhc3NSZWZQdHI8CiAKICAgICBWZWN0b3I8T3duUHRyPEluZGV4V3JpdGVyPiA+IGlu
ZGV4V3JpdGVyczsKICAgICBIYXNoTWFwPFN0cmluZywgSW5kZXhLZXlzPiBpbmRleEtleU1hcDsK
LSAgICAvLyBGSVhNRTogVHVybiB0aGlzIGludG8gYW4gQVNTRVJUKGluZGV4S2V5cykgd2hlbiBn
ZXQtc2lkZSBrZXkgaW5qZWN0aW9uIGlzIHRoZSBub3JtLgotICAgIGJvb2wgaGF2ZUluZGV4S2V5
cyA9IGluZGV4S2V5cyAmJiAhaW5kZXhLZXlzLT5pc0VtcHR5KCk7Ci0gICAgaWYgKGhhdmVJbmRl
eEtleXMpIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmRleE5hbWVzLT5zaXpl
KCk7ICsraSkKLSAgICAgICAgICAgIGluZGV4S2V5TWFwLmFkZChpbmRleE5hbWVzLT5hdChpKSwg
aW5kZXhLZXlzLT5hdChpKSk7Ci0gICAgfQorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5k
ZXhOYW1lcy0+c2l6ZSgpOyArK2kpCisgICAgICAgIGluZGV4S2V5TWFwLmFkZChpbmRleE5hbWVz
LT5hdChpKSwgaW5kZXhLZXlzLT5hdChpKSk7CiAKICAgICBmb3IgKEluZGV4TWFwOjppdGVyYXRv
ciBpdCA9IG9iamVjdFN0b3JlLT5tX2luZGV4ZXMuYmVnaW4oKTsgaXQgIT0gb2JqZWN0U3RvcmUt
Pm1faW5kZXhlcy5lbmQoKTsgKytpdCkgewogCkBAIC0zMzksMTIgKzI5NSw4IEBAIHZvaWQgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3NSZWZQdHI8CiAgICAgICAgICAgICBjb250aW51ZTsgLy8gVGhlIGluZGV4IG9iamVj
dCBoYXMgYmVlbiBjcmVhdGVkLCBidXQgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGRhdGFiYXNlIHll
dC4KIAogICAgICAgICBPd25QdHI8SW5kZXhXcml0ZXI+IGluZGV4V3JpdGVyOwotICAgICAgICBp
ZiAoaGF2ZUluZGV4S2V5cykKLSAgICAgICAgICAgIGluZGV4V3JpdGVyID0gYWRvcHRQdHIobmV3
IEluZGV4V3JpdGVyKGluZGV4LT5tZXRhZGF0YSgpLCBpbmRleEtleU1hcC5nZXQoaXQtPmZpcnN0
KSkpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGluZGV4V3JpdGVyID0gYWRvcHRQdHIo
bmV3IEluZGV4V3JpdGVyKGluZGV4LT5tZXRhZGF0YSgpKSk7Ci0gICAgICAgICAgICBpbmRleFdy
aXRlci0+Z2VuZXJhdGVJbmRleEtleXNGb3JWYWx1ZSh2YWx1ZS5nZXQoKSk7Ci0gICAgICAgIH0K
KyAgICAgICAgaW5kZXhXcml0ZXIgPSBhZG9wdFB0cihuZXcgSW5kZXhXcml0ZXIoaW5kZXgtPm1l
dGFkYXRhKCksIGluZGV4S2V5TWFwLmdldChpdC0+Zmlyc3QpKSk7CisKICAgICAgICAgU3RyaW5n
IGVycm9yTWVzc2FnZTsKICAgICAgICAgaWYgKCFpbmRleFdyaXRlci0+dmVyaWZ5SW5kZXhLZXlz
KCpvYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcAppbmRleCBhMWVhZjI5MzBj
MWExZWI4YzI3YmNlZThlNTIyMDllODI2OTg0MzRlLi4yNDM5M2M3ZGQwN2U3MDNjN2I2OGI0MmQ4
M2U5MGJmMTk3NDZkNzE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJSZXF1ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJSZXF1ZXN0LmNwcApAQCAtMzQyLDIxICszNDIsMjEgQEAgdm9pZCBJREJSZXF1ZXN0Ojpv
blN1Y2Nlc3MoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWRTY3Jp
cHRWYWwKIAogdm9pZCBJREJSZXF1ZXN0OjpvblN1Y2Nlc3MoUGFzc1JlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+IHBycFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+
IHBycFByaW1hcnlLZXksIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgpCiB7Ci0gICAgTE9HX0VS
Uk9SKCJDSEVDS0lORzogb25TdWNjZXNzKHZhbHVlLCBrZXksIGtleXBhdGgpIik7Ci0gICAgQVNT
RVJUKG1fcmVhZHlTdGF0ZSA9PSBQRU5ESU5HIHx8IG1fcmVhZHlTdGF0ZSA9PSBET05FKTsKICAg
ICBpZiAobV9yZXF1ZXN0QWJvcnRlZCkKICAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVChtX3Jl
YWR5U3RhdGUgPT0gUEVORElORyk7Ci0gICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4g
c2VyaWFsaXplZFNjcmlwdFZhbHVlID0gcHJwU2VyaWFsaXplZFNjcmlwdFZhbHVlOwotI2lmbmRl
ZiBOREVCVUcKLSAgICAvLyBGSVhNRTogQXNzZXJ0IHVudGlsIHdlIGNhbiBhY3R1YWxseSBpbmpl
Y3QgdGhlIHJpZ2h0IHZhbHVlLgorICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZh
bHVlID0gcHJwU2VyaWFsaXplZFNjcmlwdFZhbHVlOworCiAgICAgUmVmUHRyPElEQktleT4gcHJp
bWFyeUtleSA9IHBycFByaW1hcnlLZXk7Ci0gICAgUmVmUHRyPElEQktleT4gZXhwZWN0ZWRLZXkg
PQotICAgICAgICAgICAgICBjcmVhdGVJREJLZXlGcm9tU2VyaWFsaXplZFZhbHVlQW5kS2V5UGF0
aChzZXJpYWxpemVkU2NyaXB0VmFsdWUsIGtleVBhdGgpOwotICAgIEFTU0VSVChwcmltYXJ5S2V5
KTsKLSAgICBBU1NFUlQoZXhwZWN0ZWRLZXktPmlzRXF1YWwocHJpbWFyeUtleS5nZXQoKSkpOwot
I2VuZGlmCi0gICAgb25TdWNjZXNzKHNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5yZWxlYXNlKCkpOwor
ICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlQWZ0ZXJJbmplY3Rpb24gPQor
ICAgICAgICAgICAgaW5qZWN0SURCS2V5SW50b1NlcmlhbGl6ZWRWYWx1ZShwcmltYXJ5S2V5LCB2
YWx1ZSwga2V5UGF0aCk7CisgICAgQVNTRVJUKHZhbHVlQWZ0ZXJJbmplY3Rpb24pOworICAgIGlm
ICghdmFsdWVBZnRlckluamVjdGlvbikgeworICAgICAgICAvLyBDaGVja3MgaW4gcHV0KCkgZW5z
dXJlIHRoaXMgc2hvdWxkIG9ubHkgaGFwcGVuIGlmIEkvTyBlcnJvciBvY2N1cnMuCisgICAgICAg
IG9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpV
TktOT1dOX0VSUiwgIkludGVybmFsIGVycm9yIGluc2VydGluZyBnZW5lcmF0ZWQga2V5IGludG8g
dGhlIG9iamVjdC4iKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgdmFsdWUgPSB2YWx1
ZUFmdGVySW5qZWN0aW9uOworICAgIG9uU3VjY2Vzcyh2YWx1ZS5yZWxlYXNlKCkpOwogfQogCiB2
b2lkIElEQlJlcXVlc3Q6Om9uU3VjY2Vzc1dpdGhDb250aW51YXRpb24oKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5oCmluZGV4IGFhOWIzZjU4ZTljYTJh
Njg1YTEzMjk1YzMyOTFmNmIyNWNmZDVmNjMuLmE4MDRjMmJkNWViMWI3MzFhNTE5NzU1ODY4OWFk
YjZhNjVlYWJjM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQlJlcXVlc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJS
ZXF1ZXN0LmgKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlICJJREJBbnkuaCIKICNpbmNsdWRl
ICJJREJDYWxsYmFja3MuaCIKICNpbmNsdWRlICJJREJDdXJzb3IuaCIKKyNpbmNsdWRlICJJREJD
dXJzb3JCYWNrZW5kSW50ZXJmYWNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvSURCQmluZGluZ1V0aWxpdGllcy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcAppbmRl
eCA2NjFmZjAxNTk1ZGYwNTUwMGQ3ZjZjYWMzMTBlOGJjNzEzNDRiM2U4Li4yMmY4MzE1YjIwNDZj
NjU0NzgxNWI5NDU2MGI0OGQ4ODU4NjNlMWY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcApAQCAtMTAxLDcgKzEwMSw2IEBAIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+CiBib29sIHNldFZhbHVlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiYg
djhPYmplY3QsIFQgaW5kZXhPck5hbWUsIGNvbnN0IHY4OjpIYW5kbGU8djg6OlZhbHVlPiYgdjhW
YWx1ZSkKIHsKICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gb2JqZWN0ID0gdjhPYmplY3QtPlRv
T2JqZWN0KCk7Ci0gICAgQVNTRVJUKCFvYmplY3QtPkhhcyhpbmRleE9yTmFtZSkpOwogICAgIHJl
dHVybiBvYmplY3QtPlNldChpbmRleE9yTmFtZSwgdjhWYWx1ZSk7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwCmluZGV4
IDBmZGFjYTZlMjllMzg0OGNmZTcxNzIwYzI5OTUyY2I3MzQxZTg4NTguLmM1ODRiMWU5ZmQzZWFm
YTllZmVhYzYxZDQxNjVkZjM2YzQyZWQ4YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcApAQCAtNDIsNiArNDIsNyBAQAog
I2luY2x1ZGUgIkdyb3VwU2V0dGluZ3MuaCIKICNpbmNsdWRlICJJREJDYWxsYmFja3MuaCIKICNp
bmNsdWRlICJJREJDdXJzb3IuaCIKKyNpbmNsdWRlICJJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNl
LmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmgiCiAjaW5jbHVkZSAi
SURCRGF0YWJhc2VDYWxsYmFja3MuaCIKICNpbmNsdWRlICJJREJGYWN0b3J5QmFja2VuZEludGVy
ZmFjZS5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCQ2FsbGJh
Y2tzUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCQ2FsbGJhY2tzUHJv
eHkuY3BwCmluZGV4IGE1NDQxODliNjY4ZjQ0ZWQ4MTRkNGM3MjI4MDcxNDAzYzI3Yjk3Y2QuLjdk
Zjg0ZDJmZmJlMDc5NjEzNTU2NWZhMDJjZjdlOGUxYWQ4MjA5MmMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkNhbGxiYWNrc1Byb3h5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9JREJDYWxsYmFja3NQcm94eS5jcHAKQEAgLTMxLDggKzMxLDEy
IEBACiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAorI2luY2x1ZGUgIklEQkN1cnNv
ckJhY2tlbmRJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZh
Y2UuaCIKICNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRQcm94eS5oIgogI2luY2x1ZGUgIklE
QkRhdGFiYXNlRXJyb3IuaCIKKyNpbmNsdWRlICJJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZh
Y2UuaCIKKyNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaCIKICNpbmNs
dWRlICJXZWJJREJDYWxsYmFja3MuaCIKICNpbmNsdWRlICJXZWJJREJDdXJzb3JJbXBsLmgiCiAj
aW5jbHVkZSAiV2ViSURCRGF0YWJhc2VJbXBsLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJJREJEYXRhYmFzZUltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViSURCRGF0YWJhc2VJbXBsLmNwcAppbmRleCAxODU3M2NhY2ZlMTgwMWI5OGI5
ZTM5YmEzZjFlZThkNmM2NGQwZDkyLi5iYzZkMDlmYTFmYjk3MGMyOTdlMTc3YTIxNTRlZTcxMDE4
ZmFmZmY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJEYXRh
YmFzZUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkRhdGFi
YXNlSW1wbC5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tl
bmRJbnRlcmZhY2UuaCIKICNpbmNsdWRlICJJREJEYXRhYmFzZUNhbGxiYWNrc1Byb3h5LmgiCiAj
aW5jbHVkZSAiSURCTWV0YWRhdGEuaCIKKyNpbmNsdWRlICJJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bnRlcmZhY2UuaCIKICNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaCIK
ICNpbmNsdWRlICJXZWJJREJDYWxsYmFja3MuaCIKICNpbmNsdWRlICJXZWJJREJEYXRhYmFzZUNh
bGxiYWNrcy5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURC
VHJhbnNhY3Rpb25JbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQlRy
YW5zYWN0aW9uSW1wbC5jcHAKaW5kZXggOTQ2MTBlYmE5Njk1ZDBmZmEwZjIzMGYzNjc0MTczMWMy
OTUxY2NiZC4uNWNiYmVlNjYzNGEzYmZmMTk0NzBkNmY3OWIwYWFmNGFiODcwNGMwZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCVHJhbnNhY3Rpb25JbXBsLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJUcmFuc2FjdGlvbkltcGwu
Y3BwCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAor
I2luY2x1ZGUgIklEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZS5oIgogI2luY2x1ZGUgIklE
QlRyYW5zYWN0aW9uLmgiCiAjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25DYWxsYmFja3NQcm94eS5o
IgogI2luY2x1ZGUgIldlYklEQk9iamVjdFN0b3JlSW1wbC5oIgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJGYWtlQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0lEQkZha2VCYWNraW5nU3RvcmUuaAppbmRleCAwODQwNWNlMGFi
NThjOTZmYzI5NmMzZjBmOGExNGZmNjlkNjViYTE4Li41MzZkNzg1YjkzYWVlNDNiOWY1MzMyNTI1
YzYzZWM3OWU3MDk1OWJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0lEQkZha2VCYWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0lEQkZha2VCYWNraW5nU3RvcmUuaApAQCAtNTksNyArNTksNiBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIGRlbGV0ZUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpIE9WRVJSSURFIHsgfQogICAgIHZpcnR1YWwgYm9vbCBw
dXRJbmRleERhdGFGb3JSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgT2JqZWN0U3RvcmVS
ZWNvcmRJZGVudGlmaWVyKikgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFs
IGJvb2wgZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3Jk
SWRlbnRpZmllciopIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBTdHJp
bmcgZ2V0T2JqZWN0VmlhSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JikgT1ZFUlJJREUgeyByZXR1cm4g
U3RyaW5nKCk7IH0KICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBnZXRQcmltYXJ5S2V5
VmlhSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0
X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JikgT1ZFUlJJREUgeyByZXR1cm4gUGFzc1JlZlB0cjxJ
REJLZXk+KCk7IH0KICAgICB2aXJ0dWFsIGJvb2wga2V5RXhpc3RzSW5JbmRleChpbnQ2NF90IGRh
dGFiYXNlaWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJ
REJLZXkmIGluZGV4S2V5LCBSZWZQdHI8SURCS2V5PiYgZm91bmRQcmltYXJ5S2V5KSBPVkVSUklE
RSB7IHJldHVybiBmYWxzZTsgfQogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cg
Yi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggY2I2ZWQ2ZjE5NWVmZjA5ZDkzNGFhMzIwMjU3
NmUzODk5Y2I4N2VhNC4uOTY0MTllNTEzODI0YmI1ZmJmOWMwZDQ4MDJiMGZhODBiYmE3YjExOSAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDEyLTA3LTI1ICBBbGVjIEZsZXR0ICA8YWxlY2ZsZXR0
QGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IGluamVjdCBpbmRleCBrZXlzIG9u
IGN1cnNvci9vYmplY3RzdG9yZS9pbmRleCBnZXQgc3VjY2VzIGhhbmRsZXJzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MTEyMworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1pbm9yIHR3ZWFrcyB0byB0ZXN0
cyB0byBtYWtlIGl0IGVhc2llciB0byBmaWd1cmUgb3V0IHdoaWNoIGtleSBpcworICAgICAgICBi
ZWluZyB1cGRhdGVkLgorCisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvbW96aWxsYS9hdXRv
aW5jcmVtZW50LWluZGV4ZXMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHN0b3JhZ2UvaW5kZXhl
ZGRiL21vemlsbGEvcmVzb3VyY2VzL2F1dG9pbmNyZW1lbnQtaW5kZXhlcy5qczoKKyAgICAgICAg
KHNldHVwT2JqZWN0U3RvcmUpOgorICAgICAgICAoc2V0dXBJbmRleGVzKToKKyAgICAgICAgKHNl
dFZlcnNpb25Db21wbGV0ZSk6CisKIDIwMTItMDctMjQgIEFuZHJldyBXaWxzb24gIDxhdHdpbHNv
bkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCBjaHJvbWl1bSBleHBlY3RhdGlv
bnMgY2hhbmdlIHN0b3AgaWdub3JpbmcgZmFzdC9oaWRwaSBjaGFuZ2VzLgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW96aWxsYS9hdXRvaW5jcmVtZW50LWluZGV4
ZXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW96aWxsYS9h
dXRvaW5jcmVtZW50LWluZGV4ZXMtZXhwZWN0ZWQudHh0CmluZGV4IGY5NDUzNzQ3MTA5ZjlhMDU0
YWQ5ZDM4OGMxNmIwODg5ZmY2YjZhZWEuLjYxYmFhMjJmMmE3ZDA4YzRmYWIwMjc1ZjJhYmVmY2Ux
NGU1YWEyYmIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL21vemls
bGEvYXV0b2luY3JlbWVudC1pbmRleGVzLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9z
dG9yYWdlL2luZGV4ZWRkYi9tb3ppbGxhL2F1dG9pbmNyZW1lbnQtaW5kZXhlcy1leHBlY3RlZC50
eHQKQEAgLTksNyArOSw3IEBAIGluZGV4ZWREQi5vcGVuKG5hbWUpCiBkYiA9IGV2ZW50LnRhcmdl
dC5yZXN1bHQKIHJlcXVlc3QgPSBkYi5zZXRWZXJzaW9uKCcxJykKIERlbGV0ZWQgYWxsIG9iamVj
dCBzdG9yZXMuCi1vYmplY3RTdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdmb28nLCB7IGtl
eVBhdGg6ICdpZCcsIGF1dG9JbmNyZW1lbnQ6IHRydWUgfSk7CitvYmplY3RTdG9yZSA9IGRiLmNy
ZWF0ZU9iamVjdFN0b3JlKCdhdXRvaW5jcmVtZW50LWlkJywgeyBrZXlQYXRoOiAnaWQnLCBhdXRv
SW5jcmVtZW50OiB0cnVlIH0pOwogb2JqZWN0U3RvcmUuY3JlYXRlSW5kZXgoJ2ZpcnN0JywgJ2Zp
cnN0Jyk7CiBvYmplY3RTdG9yZS5jcmVhdGVJbmRleCgnc2Vjb25kJywgJ3NlY29uZCcpOwogb2Jq
ZWN0U3RvcmUuY3JlYXRlSW5kZXgoJ3RoaXJkJywgJ3RoaXJkJyk7CkBAIC0xNyw3ICsxNyw4IEBA
IGRhdGEgPSB7IGZpcnN0OiAnZm9vJywgc2Vjb25kOiAnZm9vJywgdGhpcmQ6ICdmb28nIH07CiBy
ZXF1ZXN0ID0gb2JqZWN0U3RvcmUuYWRkKGRhdGEpOwoga2V5ID0gZXZlbnQudGFyZ2V0LnJlc3Vs
dDsKIFBBU1Mga2V5ID09IG51bGwgaXMgZmFsc2UKLW9iamVjdFN0b3JlID0gZGIudHJhbnNhY3Rp
b24oJ2ZvbycpLm9iamVjdFN0b3JlKCdmb28nKTsKK2V4cGVjdGVkIGtleSBpcyAxCitvYmplY3RT
dG9yZSA9IGRiLnRyYW5zYWN0aW9uKCdhdXRvaW5jcmVtZW50LWlkJykub2JqZWN0U3RvcmUoJ2F1
dG9pbmNyZW1lbnQtaWQnKTsKIGZpcnN0ID0gb2JqZWN0U3RvcmUuaW5kZXgoJ2ZpcnN0Jyk7CiBy
ZXF1ZXN0ID0gZmlyc3QuZ2V0KCdmb28nKTsKIFBBU1MgZXZlbnQudGFyZ2V0LnJlc3VsdC5pZCBp
cyBrZXkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL21vemlsbGEv
cmVzb3VyY2VzL2F1dG9pbmNyZW1lbnQtaW5kZXhlcy5qcyBiL0xheW91dFRlc3RzL3N0b3JhZ2Uv
aW5kZXhlZGRiL21vemlsbGEvcmVzb3VyY2VzL2F1dG9pbmNyZW1lbnQtaW5kZXhlcy5qcwppbmRl
eCAxYzg1OTg0ODY1ZGJmOWE3ZmYzNzViNDkwMDdmZmFhMzhhNDg2NGViLi4yZGE5NmU3ZmZhNTZl
OTczODg5NjVjYzg1MmZlOTFlYzliZTM4NTlmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdG9y
YWdlL2luZGV4ZWRkYi9tb3ppbGxhL3Jlc291cmNlcy9hdXRvaW5jcmVtZW50LWluZGV4ZXMuanMK
KysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW96aWxsYS9yZXNvdXJjZXMvYXV0
b2luY3JlbWVudC1pbmRleGVzLmpzCkBAIC0zNSw3ICszNSw3IEBAIGZ1bmN0aW9uIHNldHVwT2Jq
ZWN0U3RvcmUoKQogICAgIHRyYW5zID0gZXZlbnQudGFyZ2V0LnJlc3VsdDsKICAgICBkZWxldGVB
bGxPYmplY3RTdG9yZXMoZGIpOwogCi0gICAgb2JqZWN0U3RvcmUgPSBldmFsQW5kTG9nKCJvYmpl
Y3RTdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdmb28nLCB7IGtleVBhdGg6ICdpZCcsIGF1
dG9JbmNyZW1lbnQ6IHRydWUgfSk7Iik7CisgICAgb2JqZWN0U3RvcmUgPSBldmFsQW5kTG9nKCJv
YmplY3RTdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdhdXRvaW5jcmVtZW50LWlkJywgeyBr
ZXlQYXRoOiAnaWQnLCBhdXRvSW5jcmVtZW50OiB0cnVlIH0pOyIpOwogICAgIGV2YWxBbmRMb2co
Im9iamVjdFN0b3JlLmNyZWF0ZUluZGV4KCdmaXJzdCcsICdmaXJzdCcpOyIpOwogICAgIGV2YWxB
bmRMb2coIm9iamVjdFN0b3JlLmNyZWF0ZUluZGV4KCdzZWNvbmQnLCAnc2Vjb25kJyk7Iik7CiAg
ICAgZXZhbEFuZExvZygib2JqZWN0U3RvcmUuY3JlYXRlSW5kZXgoJ3RoaXJkJywgJ3RoaXJkJyk7
Iik7CkBAIC00OSwxMiArNDksMTMgQEAgZnVuY3Rpb24gc2V0dXBJbmRleGVzKCkKIHsKICAgICBr
ZXkgPSBldmFsQW5kTG9nKCJrZXkgPSBldmVudC50YXJnZXQucmVzdWx0OyIpOwogICAgIHNob3Vs
ZEJlRmFsc2UoImtleSA9PSBudWxsIik7CisgICAgZGVidWcoImV4cGVjdGVkIGtleSBpcyAiICsg
a2V5KTsKICAgICB0cmFucy5vbmNvbXBsZXRlID0gc2V0VmVyc2lvbkNvbXBsZXRlOwogfQogCiBm
dW5jdGlvbiBzZXRWZXJzaW9uQ29tcGxldGUoKQogewotICAgIG9iamVjdFN0b3JlID0gZXZhbEFu
ZExvZygib2JqZWN0U3RvcmUgPSBkYi50cmFuc2FjdGlvbignZm9vJykub2JqZWN0U3RvcmUoJ2Zv
bycpOyIpOworICAgIG9iamVjdFN0b3JlID0gZXZhbEFuZExvZygib2JqZWN0U3RvcmUgPSBkYi50
cmFuc2FjdGlvbignYXV0b2luY3JlbWVudC1pZCcpLm9iamVjdFN0b3JlKCdhdXRvaW5jcmVtZW50
LWlkJyk7Iik7CiAgICAgZmlyc3QgPSBldmFsQW5kTG9nKCJmaXJzdCA9IG9iamVjdFN0b3JlLmlu
ZGV4KCdmaXJzdCcpOyIpOwogICAgIHJlcXVlc3QgPSBldmFsQW5kTG9nKCJyZXF1ZXN0ID0gZmly
c3QuZ2V0KCdmb28nKTsiKTsKICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGNoZWNrRmlyc3RJbmRl
eEFuZFByZXBhcmVTZWNvbmQ7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154467</attachid>
            <date>2012-07-25 15:58:21 -0700</date>
            <delta_ts>2012-07-25 16:50:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91123-20120725155810.patch</filename>
            <type>text/plain</type>
            <size>50125</size>
            <attacher name="Alec Flett">alecflett</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzNjM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDAzYWI4YzQyYWU3ODQx
MTkzOTEwMjZiNjYyZDgwYjg1MWZmNWM4YS4uY2MxYjgyYTY3NjE0NDEzYjI4ZjExODU0ODZmMGQ1
ZjE1NjI5NThlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYxIEBACisyMDEyLTA3LTI1ICBBbGVj
IEZsZXR0ICA8YWxlY2ZsZXR0QGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IGlu
amVjdCBpbmRleCBrZXlzIG9uIGN1cnNvci9vYmplY3RzdG9yZS9pbmRleCBnZXQgc3VjY2VzcyBo
YW5kbGVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTExMjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBN
b3ZlIGtleS1pbmplY3Rpb24gaW50byB0aGUgZnJvbnRlbmQsIGJ5IGluamVjdGluZyB0aGUga2V5
IGludG8KKyAgICAgICAgdGhlIHZhbHVlIG9uIGdldCByYXRoZXIgdGhhbiBzZXQgZm9yIGF1dG9p
bmNyZW1lbnRlZCBrZXlzLiBUaGlzCisgICAgICAgIGdpdmVzIGEgcG90ZW50aWFsIHBlcmZvcm1h
bmNlIHdpbiBieSBhdm9pZGluZyBhbiBJUEMgY2FsbCB0byB0aGUKKyAgICAgICAgVjggdXRpbGl0
eSBwcm9jZXNzIG9uIGNocm9taXVtLCBhbmQgZ2VuZXJhbGx5IGNsZWFucyB1cCB0aGUga2V5Cisg
ICAgICAgIG1hbmFnZW1lbnQuCisKKyAgICAgICAgTm90ZSB0aGF0IHRoaXMgZHVwbGljYXRlcyB0
aGUgbG9naWMgb2YgZ2VuZXJhdGVJbmRleEtleXMgaW50byB0aGUKKyAgICAgICAgZnJvbnRlbmQg
dW50aWwgdGhhdCBtZXRob2QgY2FuIGJlIGV4cHVuZ2VkIGZyb20gdGhlIGJhY2tlbmQuIFRoaXMK
KyAgICAgICAgd2lsbCBiZSBjbGVhbmVkIHVwIGluIGEgbGF0ZXIgcGF0Y2guCisKKyAgICAgICAg
SW4gb3JkZXIgdG8gYWNjb3VudCBmb3IgYm90aCBvbGQgZGF0YSAod2hpY2ggaGFzIHRoZSBkdXBs
aWNhdGUKKyAgICAgICAgcHJpbWFyeSBrZXkgYWxyZWFkeSBpbmplY3RlZCBhbmQgc2VyaWFsaXpl
ZCkgYW5kIGFueSBuZXcgZGF0YSwgYW4KKyAgICAgICAgYXNzZXJ0aW9uIHdhcyByZW1vdmVkIGZy
b20gSURCQmluZGluZ1V0aWxpdGllcy4KKworICAgICAgICBUaGlzIGFsc28gaW5jbHVkZXMgc29t
ZSBtaW5vciByZWZhY3RvcmluZyBzdWNoIGFzIHRoZSBkZXByZWNhdGlvbgorICAgICAgICBvZiBJ
REJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjp1cGRhdGUgaW4gZmF2b3Igb2YgYSBkaXJlY3QgY2Fs
bCB0bworICAgICAgICBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXQsIGFuZCByZW1vdmFs
IG9mIHRoZSBub3ctZGVmdW5jdAorICAgICAgICBJREJCYWNraW5nU3RvcmU6OmdldE9iamVjdFZp
YUluZGV4LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIHRoaXMgaXMgYSByZWZhY3Rv
cmluZywgYW5kIGFjdHVhbCBiZWhhdmlvcgorICAgICAgICBoYXNuJ3QgY2hhbmdlZC4KKworICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oOgorICAgICAgICAoSURC
QmFja2luZ1N0b3JlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yOjp1cGRhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCQ3Vyc29yOjpzZXRWYWx1ZVJlYWR5KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3JC
YWNrZW5kSW1wbDo6dXBkYXRlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRl
eEJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4QmFja2VuZEltcGw6
OmdldEludGVybmFsKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFj
a2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFj
a2luZ1N0b3JlLmg6CisgICAgICAgIChJREJMZXZlbERCQmFja2luZ1N0b3JlKToKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpnZW5lcmF0ZUluZGV4S2V5c0ZvclZhbHVlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJP
YmplY3RTdG9yZTo6cHV0KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RT
dG9yZS5oOgorICAgICAgICAoSURCT2JqZWN0U3RvcmUpOgorICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OnB1dFdpdGhJbmRleEtleXMpOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRl
cm5hbCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpvblN1Y2Nlc3MpOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisKIDIwMTIt
MDctMjUgIEFuZHJldyBXaWxzb24gIDxhdHdpbHNvbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
VW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEyMzU2MC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
aW5kZXggZjFiNDNmZTJiMjdiNDMwMDJhYTBmZWY0OGEzMDI0OTc2NWUyOTJjYy4uNTViNTExZjI4
MTMwOTUxZTlkNGZiNjY1MjM2MTNlZDVhYTRhZDdmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMi0wNy0yNSAgQWxlYyBGbGV0dCAgPGFsZWNmbGV0dEBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBpbmplY3QgaW5kZXgga2V5cyBvbiBj
dXJzb3Ivb2JqZWN0c3RvcmUvaW5kZXggZ2V0IHN1Y2Nlc3MgaGFuZGxlcnMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxMTIzCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlIG1ldGhvZCBubyBsb25n
ZXIgdXNlZC4KKworICAgICAgICAqIHRlc3RzL0lEQkZha2VCYWNraW5nU3RvcmUuaDoKKwogMjAx
Mi0wNy0yNSAgQWRyaWVubmUgV2Fsa2VyICA8ZW5uZUBnb29nbGUuY29tPgogCiAgICAgICAgIFtj
aHJvbWl1bV0gVW5pZnkgY29tcG9zaXRvciBxdWFkVHJhbnNmb3JtL2RyYXdUcmFuc2Zvcm0vb3Jp
Z2luVHJhbnNmb3JtCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkJhY2tpbmdTdG9yZS5oCmluZGV4IDc4YTlmNjY3YWRkMTMwZTYzZTNjMDc0NmQ0YTcwM2I0ODk1
NDZiZDcuLmY4ZGU2ODIwMjdmYzI1M2Y3N2ZhNTU5OTRjMWViMGViZmMzMDQxNTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oCkBA
IC04Myw3ICs4Myw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgoaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCkg
PSAwOwogICAgIHZpcnR1YWwgYm9vbCBwdXRJbmRleERhdGFGb3JSZWNvcmQoaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURC
S2V5JiwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKikgPSAwOwogICAgIHZpcnR1
YWwgYm9vbCBkZWxldGVJbmRleERhdGFGb3JSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgT2JqZWN0U3RvcmVSZWNv
cmRJZGVudGlmaWVyKikgPSAwOwotICAgIHZpcnR1YWwgU3RyaW5nIGdldE9iamVjdFZpYUluZGV4
KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4
SWQsIGNvbnN0IElEQktleSYpID0gMDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBn
ZXRQcmltYXJ5S2V5VmlhSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JikgPSAwOwogICAgIHZpcnR1YWwg
Ym9vbCBrZXlFeGlzdHNJbkluZGV4KGludDY0X3QgZGF0YWJhc2VpZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYgaW5kZXhLZXksIFJlZlB0cjxJ
REJLZXk+JiBmb3VuZFByaW1hcnlLZXkpID0gMDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHAKaW5kZXggZWYzNGNiOGM3ZmI3NjM2MTg0MTIyYjNj
YjgzNmQyNDhkMjFlYjkzMC4uMDVkZGIyNTFlNGZhMmMxNzk2ZWI1ZTIzYTg4N2RmMjhlN2E0N2Rh
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29y
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3Bw
CkBAIC0xNTksMTMgKzE1OSw3IEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCQ3Vyc29yOjp1
cGRhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlCiAgICAgICAgIH0K
ICAgICB9CiAKLSAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNy
ZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7
Ci0gICAgbV9iYWNrZW5kLT51cGRhdGUodmFsdWUsIHJlcXVlc3QsIGVjKTsKLSAgICBpZiAoZWMp
IHsKLSAgICAgICAgcmVxdWVzdC0+bWFya0Vhcmx5RGVhdGgoKTsKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgfQotICAgIHJldHVybiByZXF1ZXN0LnJlbGVhc2UoKTsKKyAgICByZXR1cm4gb2JqZWN0
U3RvcmUtPnB1dChJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OkN1cnNvclVwZGF0ZSwg
SURCQW55OjpjcmVhdGUodGhpcyksIGNvbnRleHQsIHZhbHVlLCBtX2N1cnJlbnRQcmltYXJ5S2V5
LCBlYyk7CiB9CiAKIHZvaWQgSURCQ3Vyc29yOjphZHZhbmNlKHVuc2lnbmVkIGxvbmcgY291bnQs
IEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMjU5LDE4ICsyNTMsMjEgQEAgdm9pZCBJREJDdXJzb3I6
OnNldFZhbHVlUmVhZHkoKQogICAgIG1fY3VycmVudFByaW1hcnlLZXkgPSBtX2JhY2tlbmQtPnBy
aW1hcnlLZXkoKTsKIAogICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlID0g
bV9iYWNrZW5kLT52YWx1ZSgpOwotI2lmbmRlZiBOREVCVUcKICAgICBpZiAoIWlzS2V5Q3Vyc29y
KCkpIHsKLSAgICAgICAgLy8gRklYTUU6IEFjdHVhbGx5IGluamVjdCB0aGUgcHJpbWFyeUtleSBh
dCB0aGUga2V5UGF0aC4KICAgICAgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlPiBvYmplY3RTdG9y
ZSA9IGVmZmVjdGl2ZU9iamVjdFN0b3JlKCk7Ci0gICAgICAgIGlmIChvYmplY3RTdG9yZS0+YXV0
b0luY3JlbWVudCgpICYmICFvYmplY3RTdG9yZS0+bWV0YWRhdGEoKS5rZXlQYXRoLmlzTnVsbCgp
KSB7Ci0gICAgICAgICAgICBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoID0gb2JqZWN0U3RvcmUt
Pm1ldGFkYXRhKCkua2V5UGF0aDsKLSAgICAgICAgICAgIFJlZlB0cjxJREJLZXk+IGV4cGVjdGVk
S2V5ID0gY3JlYXRlSURCS2V5RnJvbVNlcmlhbGl6ZWRWYWx1ZUFuZEtleVBhdGgodmFsdWUsIGtl
eVBhdGgpOwotICAgICAgICAgICAgQVNTRVJUKG1fY3VycmVudFByaW1hcnlLZXkpOwotICAgICAg
ICAgICAgQVNTRVJUKGV4cGVjdGVkS2V5LT5pc0VxdWFsKG1fY3VycmVudFByaW1hcnlLZXkuZ2V0
KCkpKTsKKyAgICAgICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBtZXRhZGF0YSA9IG9i
amVjdFN0b3JlLT5tZXRhZGF0YSgpOworICAgICAgICBpZiAobWV0YWRhdGEuYXV0b0luY3JlbWVu
dCAmJiAhbWV0YWRhdGEua2V5UGF0aC5pc051bGwoKSkgeworI2lmbmRlZiBOREVCVUcKKyAgICAg
ICAgICAgIFJlZlB0cjxJREJLZXk+IGV4cGVjdGVkS2V5ID0gY3JlYXRlSURCS2V5RnJvbVNlcmlh
bGl6ZWRWYWx1ZUFuZEtleVBhdGgodmFsdWUsIG1ldGFkYXRhLmtleVBhdGgpOworICAgICAgICAg
ICAgQVNTRVJUKCFleHBlY3RlZEtleSB8fCBleHBlY3RlZEtleS0+aXNFcXVhbChtX2N1cnJlbnRQ
cmltYXJ5S2V5LmdldCgpKSk7CisjZW5kaWYKKyAgICAgICAgICAgIFJlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+IHZhbHVlQWZ0ZXJJbmplY3Rpb24gPSBpbmplY3RJREJLZXlJbnRvU2VyaWFs
aXplZFZhbHVlKG1fY3VycmVudFByaW1hcnlLZXksIHZhbHVlLCBtZXRhZGF0YS5rZXlQYXRoKTsK
KyAgICAgICAgICAgIEFTU0VSVCh2YWx1ZUFmdGVySW5qZWN0aW9uKTsKKyAgICAgICAgICAgIC8v
IEZJWE1FOiBUaGVyZSBpcyBubyB3YXkgdG8gcmVwb3J0IGVycm9ycyBoZXJlLiBNb3ZlIHRoaXMg
aW50byBvblN1Y2Nlc3NXaXRoQ29udGludWF0aW9uIHNvIHRoYXQgd2UgY2FuIGFib3J0IHRoZSB0
cmFuc2FjdGlvbiB0aGVyZS4gU2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9OTIyNzgKKyAgICAgICAgICAgIGlmICh2YWx1ZUFmdGVySW5qZWN0aW9uKQorICAgICAg
ICAgICAgICAgIHZhbHVlID0gdmFsdWVBZnRlckluamVjdGlvbjsKICAgICAgICAgfQogICAgIH0K
LSNlbmRpZgogICAgIG1fY3VycmVudFZhbHVlID0gSURCQW55OjpjcmVhdGUodmFsdWUucmVsZWFz
ZSgpKTsKIAogICAgIG1fZ290VmFsdWUgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwCmluZGV4IGFl
MjdhZjhhMzJjNmJiNjk0OTJiZmYwODY2ZTJkMDI4NTI0NDY2MDMuLjBhMzlhOGZiYzY5ZTA2NzNm
NzM3Mjc2MTJiOTFlY2I1MWFkOWEwOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAKQEAgLTgzLDE3ICs4
Myw2IEBAIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBJREJDdXJzb3JCYWNrZW5k
SW1wbDo6dmFsdWUoKSBjb25zdAogICAgIHJldHVybiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNy
ZWF0ZUZyb21XaXJlKG1fY3Vyc29yLT52YWx1ZSgpKTsKIH0KIAotdm9pZCBJREJDdXJzb3JCYWNr
ZW5kSW1wbDo6dXBkYXRlKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgRXhjZXB0aW9uQ29kZSYgZWMpCi17
Ci0gICAgSURCX1RSQUNFKCJJREJDdXJzb3JCYWNrZW5kSW1wbDo6dXBkYXRlIik7Ci0gICAgQVNT
RVJUKG1fdHJhbnNhY3Rpb24tPm1vZGUoKSAhPSBJREJUcmFuc2FjdGlvbjo6UkVBRF9PTkxZKTsK
LQotICAgIEFTU0VSVChtX2N1cnNvcik7Ci0gICAgQVNTRVJUKG1fY3Vyc29yVHlwZSAhPSBJbmRl
eEtleUN1cnNvcik7Ci0KLSAgICBtX29iamVjdFN0b3JlLT5wdXQodmFsdWUsIG1fY3Vyc29yLT5w
cmltYXJ5S2V5KCksIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6Q3Vyc29yVXBkYXRl
LCBjYWxsYmFja3MsIG1fdHJhbnNhY3Rpb24uZ2V0KCksIGVjKTsKLX0KLQogdm9pZCBJREJDdXJz
b3JCYWNrZW5kSW1wbDo6Y29udGludWVGdW5jdGlvbihQYXNzUmVmUHRyPElEQktleT4gcHJwS2V5
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKICAgICBJREJfVFJBQ0UoIklEQkN1cnNvckJhY2tlbmRJbXBsOjpjb250aW51ZSIpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFj
a2VuZEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJh
Y2tlbmRJbXBsLmgKaW5kZXggMDQzYzQwMzUyY2RkM2EzZmQ2M2Y5OTcyZDE2NzIxZjA0OGUyYjA5
OS4uNTA5N2M1Mzg3NjhmMjlmMDkxOTRiMjk0OTBiMWQ0MTJkZTRlMWYzYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1w
bC5oCkBAIC01Nyw3ICs1Nyw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURC
S2V5PiBrZXkoKSBjb25zdDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5
S2V5KCkgY29uc3Q7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZT4gdmFsdWUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlKFBhc3NSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBFeGNlcHRpb25D
b2RlJik7CiAgICAgdmlydHVhbCB2b2lkIGFkdmFuY2UodW5zaWduZWQgbG9uZywgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+LCBFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIGNvbnRp
bnVlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4s
IEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRnVuY3Rpb24oUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+LCBFeGNlcHRpb25Db2RlJik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlLmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNl
LmgKaW5kZXggNDhkM2ExODI5ZjY1ODhlZGY2MTk3MzM3ZjMxOGIyYzA2ZTkwYmNmMy4uMWRmMjg0
NTZhNDFjODkzODNmZTJiODEyYWQzNzA2ZGUyNzQ4OTQzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbnRlcmZh
Y2UuaApAQCAtNTcsNyArNTcsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElE
QktleT4gcHJpbWFyeUtleSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSgpIGNvbnN0ID0gMDsKIAotICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGUoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4sIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGFkdmFu
Y2UodW5zaWduZWQgbG9uZyBjb3VudCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBFeGNlcHRp
b25Db2RlJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBjb250aW51ZUZ1bmN0aW9uKFBhc3NSZWZQ
dHI8SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgRXhjZXB0aW9uQ29kZSYp
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+LCBFeGNlcHRpb25Db2RlJikgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcAppbmRleCA5ZjVmZjNi
YWZjYTI1NDk3NWE0M2M0MzBlYmNhNWUyMTg2OTBlYzY2Li4xMzQwMDg0OTFmNWE3NDMxOTZlMmZj
OWFiODgyZGFlZTZjYjM5NTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcApAQCAtMTcyLDExICsxNzIsMTkg
QEAgdm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpnZXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgUGFzc1JlZlB0cjxJREJJbmQKICAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yLT5j
bG9zZSgpOwogICAgIH0KIAotICAgIFN0cmluZyB2YWx1ZSA9IGluZGV4LT5iYWNraW5nU3RvcmUo
KS0+Z2V0T2JqZWN0VmlhSW5kZXgoaW5kZXgtPmRhdGFiYXNlSWQoKSwgaW5kZXgtPm1fb2JqZWN0
U3RvcmVCYWNrZW5kLT5pZCgpLCBpbmRleC0+aWQoKSwgKmtleSk7CisgICAgUmVmUHRyPElEQktl
eT4gcHJpbWFyeUtleSA9IGluZGV4LT5iYWNraW5nU3RvcmUoKS0+Z2V0UHJpbWFyeUtleVZpYUlu
ZGV4KGluZGV4LT5kYXRhYmFzZUlkKCksIGluZGV4LT5tX29iamVjdFN0b3JlQmFja2VuZC0+aWQo
KSwgaW5kZXgtPmlkKCksICprZXkpOworCisgICAgU3RyaW5nIHZhbHVlID0gaW5kZXgtPmJhY2tp
bmdTdG9yZSgpLT5nZXRPYmplY3RTdG9yZVJlY29yZChpbmRleC0+ZGF0YWJhc2VJZCgpLCBpbmRl
eC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlkKCksICpwcmltYXJ5S2V5KTsKKwogICAgIGlmICh2
YWx1ZS5pc051bGwoKSkgewogICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVk
U2NyaXB0VmFsdWU6OnVuZGVmaW5lZFZhbHVlKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQor
ICAgIGlmIChpbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmF1dG9JbmNyZW1lbnQoKSAmJiAh
aW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5rZXlQYXRoKCkuaXNOdWxsKCkpIHsKKyAgICAg
ICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9t
V2lyZSh2YWx1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW1hcnlLZXksIGlu
ZGV4LT5tX29iamVjdFN0b3JlQmFja2VuZC0+a2V5UGF0aCgpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNy
ZWF0ZUZyb21XaXJlKHZhbHVlKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCS2V5UGF0aC5jcHAKaW5kZXggMGMzNWQyMGQ2MDZkN2Q1Y2ZiNDE3OTM1YTY3
ZDYwYmQ0NTJkZjNhOC4uNzMzMGZiMGViYWFhYWFjZTMwZDhmY2IzODYwZDk1ODBlNWUzMmNlMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5jcHAK
QEAgLTIzNiw2ICsyMzYsMjggQEAgSURCS2V5UGF0aDo6b3BlcmF0b3IgUGFzc1JlZlB0cjxJREJB
bnk+KCkgY29uc3QKICAgICByZXR1cm4gMDsKIH0KIAorYm9vbCBJREJLZXlQYXRoOjpvcGVyYXRv
cj09KFBhc3NSZWZQdHI8SURCQW55PiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAoIWlzVmFsaWQo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICBj
YXNlIE51bGxUeXBlOgorICAgICAgICByZXR1cm4gb3RoZXItPnR5cGUoKSA9PSBJREJBbnk6Ok51
bGxUeXBlOworICAgIGNhc2UgU3RyaW5nVHlwZToKKyAgICAgICAgcmV0dXJuIG90aGVyLT50eXBl
KCkgPT0gSURCQW55OjpTdHJpbmdUeXBlICYmIG90aGVyLT5zdHJpbmcoKSA9PSBzdHJpbmcoKTsK
KyAgICBjYXNlIEFycmF5VHlwZToKKyAgICAgICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IG90aGVy
TGlzdCA9IG90aGVyLT5kb21TdHJpbmdMaXN0KCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9hcnJheS5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKG90aGVyTGlzdC0+
aXRlbShpKSAhPSBtX2FycmF5W2ldKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0
aC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5oCmluZGV4
IGY1MjM2YzE1MmYwMmNiZGEyOGRiOGMzMTUxZjJkZDg1N2VhYWVjZTkuLjk4ODIzNDAzYTBhMWNl
YmI4YjAxYjQ3Y2RhOTIwMTFiZWVjMzExNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJLZXlQYXRoLmgKQEAgLTcyLDYgKzcyLDcgQEAgcHVibGljOgogICAgIGJv
b2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IE51bGxUeXBlOyB9CiAgICAgYm9v
bCBpc1ZhbGlkKCkgY29uc3Q7CiAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxJREJBbnk+KCkgY29u
c3Q7CisgICAgYm9vbCBvcGVyYXRvcj09KFBhc3NSZWZQdHI8SURCQW55PiBvdGhlcikgY29uc3Q7
CiAKIHByaXZhdGU6CiAgICAgVHlwZSBtX3R5cGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwCmluZGV4
IDMyZTJmNjgxNTc5NDA5YTA5MDhkMjlhMTg3MmMwY2RjNTZiODllZjkuLjA1MTNjMzUzM2ZjYWIw
ZmY4NTJkYzBhOTEzNDQ1N2VjZjM2Mjk3ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwCkBAIC05
NjcsMTUgKzk2Nyw2IEBAIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlSW5kZXhE
YXRhRm9yUmVjb3JkKGludDY0X3QsIGludDY0X3QsIGludDY0X3QsCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLVN0cmluZyBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRPYmplY3RWaWFJbmRleChp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElk
LCBjb25zdCBJREJLZXkmIGtleSkKLXsKLSAgICBSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5ID0g
Z2V0UHJpbWFyeUtleVZpYUluZGV4KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQs
IGtleSk7Ci0gICAgaWYgKCFwcmltYXJ5S2V5KQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0K
LSAgICByZXR1cm4gZ2V0T2JqZWN0U3RvcmVSZWNvcmQoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJ
ZCwgKnByaW1hcnlLZXkpOwotfQotCiBzdGF0aWMgYm9vbCB2ZXJzaW9uRXhpc3RzKExldmVsREJU
cmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBpbnQ2NF90IHZlcnNpb24sIGNvbnN0IFZlY3RvcjxjaGFyPiYgZW5jb2RlZFBy
aW1hcnlLZXkpCiB7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGtleSA9IEV4aXN0c0VudHJ5S2V5
OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgZW5jb2RlZFByaW1hcnlLZXkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZS5oCmluZGV4IGM1YTllMmVlMzA5ZThjYTNmZDdmNzBmMGFhMmJiODBjZWMw
NDZiMmUuLjBiZTkzNGZmZGE5YmNmODA5MWQ1MzQxMGE2YWJjYzgwMGY1OTBkMzYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3Rv
cmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFj
a2luZ1N0b3JlLmgKQEAgLTY5LDcgKzY5LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBk
ZWxldGVJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50
NjRfdCBpbmRleElkKTsKICAgICB2aXJ0dWFsIGJvb2wgcHV0SW5kZXhEYXRhRm9yUmVjb3JkKGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQs
IGNvbnN0IElEQktleSYsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciopOwogICAg
IHZpcnR1YWwgYm9vbCBkZWxldGVJbmRleERhdGFGb3JSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgT2JqZWN0U3Rv
cmVSZWNvcmRJZGVudGlmaWVyKik7Ci0gICAgdmlydHVhbCBTdHJpbmcgZ2V0T2JqZWN0VmlhSW5k
ZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5k
ZXhJZCwgY29uc3QgSURCS2V5Jik7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQktleT4gZ2V0
UHJpbWFyeUtleVZpYUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYpOwogICAgIHZpcnR1YWwgYm9vbCBr
ZXlFeGlzdHNJbkluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYgaW5kZXhLZXksIFJlZlB0cjxJREJLZXk+
JiBmb3VuZFByaW1hcnlLZXkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKaW5kZXggZGM5YmVjNWI0OTA1YjZjYjhkMTYxZTJi
MDA3NTU4MmMzOWY1NjZlNS4uN2Y3Y2Q3NGJiMGVkY2I2M2Y4NDU0MGJlYjBjOTU5ZGVjZTYyNmYx
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0
U3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVj
dFN0b3JlLmNwcApAQCAtMTAyLDE5ICsxMDIsNDQgQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJ
REJPYmplY3RTdG9yZTo6Z2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3MK
ICAgICByZXR1cm4gZ2V0KGNvbnRleHQsIGtleVJhbmdlLnJlbGVhc2UoKSwgZWMpOwogfQogCitz
dGF0aWMgdm9pZCBnZW5lcmF0ZUluZGV4S2V5c0ZvclZhbHVlKGNvbnN0IElEQkluZGV4TWV0YWRh
dGEmIGluZGV4TWV0YWRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBvYmplY3RWYWx1ZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSURCT2JqZWN0U3RvcmU6OkluZGV4S2V5cyog
aW5kZXhLZXlzKQoreworICAgIEFTU0VSVChpbmRleEtleXMpOworICAgIFJlZlB0cjxJREJLZXk+
IGluZGV4S2V5ID0gY3JlYXRlSURCS2V5RnJvbVNlcmlhbGl6ZWRWYWx1ZUFuZEtleVBhdGgob2Jq
ZWN0VmFsdWUsIGluZGV4TWV0YWRhdGEua2V5UGF0aCk7CisKKyAgICBpZiAoIWluZGV4S2V5KQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWluZGV4TWV0YWRhdGEubXVsdGlFbnRyeSB8fCBp
bmRleEtleS0+dHlwZSgpICE9IElEQktleTo6QXJyYXlUeXBlKSB7CisgICAgICAgIGlmICghaW5k
ZXhLZXktPmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpbmRleEtl
eXMtPmFwcGVuZChpbmRleEtleSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKGluZGV4
TWV0YWRhdGEubXVsdGlFbnRyeSk7CisgICAgICAgIEFTU0VSVChpbmRleEtleS0+dHlwZSgpID09
IElEQktleTo6QXJyYXlUeXBlKTsKKyAgICAgICAgaW5kZXhLZXkgPSBJREJLZXk6OmNyZWF0ZU11
bHRpRW50cnlBcnJheShpbmRleEtleS0+YXJyYXkoKSk7CisKKyAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBpbmRleEtleS0+YXJyYXkoKS5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIGlu
ZGV4S2V5cy0+YXBwZW5kKGluZGV4S2V5LT5hcnJheSgpW2ldKTsKKyAgICB9Cit9CisKIFBhc3NS
ZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OmFkZChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIFBh
c3NSZWZQdHI8SURCS2V5PiBrZXksIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIElEQl9UUkFD
RSgiSURCT2JqZWN0U3RvcmU6OmFkZCIpOwotICAgIHJldHVybiBwdXQoSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW50ZXJmYWNlOjpBZGRPbmx5LCBjb250ZXh0LCB2YWx1ZSwga2V5LCBlYyk7CisgICAg
cmV0dXJuIHB1dChJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OkFkZE9ubHksIElEQkFu
eTo6Y3JlYXRlKHRoaXMpLCBjb250ZXh0LCB2YWx1ZSwga2V5LCBlYyk7CiB9CiAKIFBhc3NSZWZQ
dHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIFBhc3NS
ZWZQdHI8SURCS2V5PiBrZXksIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIElEQl9UUkFDRSgi
SURCT2JqZWN0U3RvcmU6OnB1dCIpOwotICAgIHJldHVybiBwdXQoSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW50ZXJmYWNlOjpBZGRPclVwZGF0ZSwgY29udGV4dCwgdmFsdWUsIGtleSwgZWMpOworICAg
IHJldHVybiBwdXQoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpBZGRPclVwZGF0ZSwg
SURCQW55OjpjcmVhdGUodGhpcyksIGNvbnRleHQsIHZhbHVlLCBrZXksIGVjKTsKIH0KIAotUGFz
c1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0KElEQk9iamVjdFN0b3JlQmFj
a2VuZEludGVyZmFjZTo6UHV0TW9kZSBwdXRNb2RlLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFsdWUsIFBhc3NS
ZWZQdHI8SURCS2V5PiBwcnBLZXksIEV4Y2VwdGlvbkNvZGUmIGVjKQorUGFzc1JlZlB0cjxJREJS
ZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0KElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFj
ZTo6UHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkFueT4gc291cmNlLCBTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4g
cHJwVmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBwcnBLZXksIEV4Y2VwdGlvbkNvZGUmIGVjKQog
ewogICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmU6OnB1dCIpOwogICAgIFJlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlID0gcHJwVmFsdWU7CkBAIC0xNDEsNyArMTY2LDcgQEAg
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0KElEQk9iamVjdFN0b3Jl
QmFja2VuZEludGVyZmFjZTo6UHV0TW8KICAgICBjb25zdCBib29sIHVzZXNJbkxpbmVLZXlzID0g
IWtleVBhdGguaXNOdWxsKCk7CiAgICAgY29uc3QgYm9vbCBoYXNLZXlHZW5lcmF0b3IgPSBhdXRv
SW5jcmVtZW50KCk7CiAKLSAgICBpZiAodXNlc0luTGluZUtleXMgJiYga2V5KSB7CisgICAgaWYg
KHB1dE1vZGUgIT0gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpDdXJzb3JVcGRhdGUg
JiYgdXNlc0luTGluZUtleXMgJiYga2V5KSB7CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNl
cHRpb246OkRBVEFfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CkBAIC0xNjcsMTUgKzE5
MiwyNiBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpwdXQoSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpQdXRNbwogICAgICAgICAgICAgICAgIHJldHVybiAw
OwogICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIGlmIChrZXlQYXRoS2V5KQorICAg
ICAgICAgICAga2V5ID0ga2V5UGF0aEtleTsKICAgICB9CiAgICAgaWYgKGtleSAmJiAha2V5LT5p
c1ZhbGlkKCkpIHsKICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7
CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1
ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBt
X3RyYW5zYWN0aW9uLmdldCgpKTsKLSAgICAvLyBGSVhNRTogUGFzcyB0aHJvdWdoIGtleVBhdGhL
ZXkgYXMga2V5IHRvIHNpbXBsaWZ5IGJhY2sgZW5kIGltcGxlbWVudGF0aW9uLgotICAgIG1fYmFj
a2VuZC0+cHV0KHZhbHVlLnJlbGVhc2UoKSwga2V5LnJlbGVhc2UoKSwgcHV0TW9kZSwgcmVxdWVz
dCwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7CisgICAgVmVjdG9yPFN0cmluZz4gaW5k
ZXhOYW1lczsKKyAgICBWZWN0b3I8SW5kZXhLZXlzPiBpbmRleEtleXM7CisgICAgZm9yIChJREJP
YmplY3RTdG9yZU1ldGFkYXRhOjpJbmRleE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX21ldGFk
YXRhLmluZGV4ZXMuYmVnaW4oKTsgaXQgIT0gbV9tZXRhZGF0YS5pbmRleGVzLmVuZCgpOyArK2l0
KSB7CisgICAgICAgIEluZGV4S2V5cyBrZXlzOworICAgICAgICBnZW5lcmF0ZUluZGV4S2V5c0Zv
clZhbHVlKGl0LT5zZWNvbmQsIHZhbHVlLCAma2V5cyk7CisgICAgICAgIGluZGV4TmFtZXMuYXBw
ZW5kKGl0LT5maXJzdCk7CisgICAgICAgIGluZGV4S2V5cy5hcHBlbmQoa2V5cyk7CisgICAgfQor
ICAgIEFTU0VSVChpbmRleEtleXMuc2l6ZSgpID09IGluZGV4TmFtZXMuc2l6ZSgpKTsKKworICAg
IFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQs
IHNvdXJjZSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgbV9iYWNrZW5kLT5wdXRXaXRoSW5k
ZXhLZXlzKHZhbHVlLnJlbGVhc2UoKSwga2V5LnJlbGVhc2UoKSwgcHV0TW9kZSwgcmVxdWVzdCwg
bV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBpbmRleE5hbWVzLCBpbmRleEtleXMsIGVjKTsKICAg
ICBpZiAoZWMpIHsKICAgICAgICAgcmVxdWVzdC0+bWFya0Vhcmx5RGVhdGgoKTsKICAgICAgICAg
cmV0dXJuIDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJPYmplY3RTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2Jq
ZWN0U3RvcmUuaAppbmRleCBlZjdjMDYzYjhmODIyNjQxN2E3YmZmOGYyZmUxMzY5ODI0M2I4NTM3
Li42ZmVmYzRlMmJhZDA5NWFlNmQxMzM0YzNlYmI5NmZlOTA4OWI4ODBmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmgKQEAgLTk1LDcg
Kzk1LDcgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gY291bnQoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBFeGNlcHRpb25Db2Rl
Jik7CiAgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBjb3VudChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXk+LCBFeGNlcHRpb25Db2RlJik7CiAKLSAgICBQYXNzUmVm
UHRyPElEQlJlcXVlc3Q+IHB1dChJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1v
ZGUsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4sIFBhc3NSZWZQdHI8SURCS2V5PiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQ
dHI8SURCUmVxdWVzdD4gcHV0KElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6UHV0TW9k
ZSwgUGFzc1JlZlB0cjxJREJBbnk+IHNvdXJjZSwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBh
c3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJREJLZXk+LCBFeGNl
cHRpb25Db2RlJik7CiAgICAgdm9pZCBtYXJrRGVsZXRlZCgpIHsgbV9kZWxldGVkID0gdHJ1ZTsg
fQogICAgIHZvaWQgdHJhbnNhY3Rpb25GaW5pc2hlZCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZElt
cGwuY3BwCmluZGV4IGI5NjJlOTQ4N2EyMTZmYWM1ODk4ZTBhMDcyZWIwNjViMzY4ZmI1NDUuLmU3
OTFlNGU5MjQ3MzhhYTM5Nzg1YjE3Nzk2MjQxOGUzNTA3OThiMTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGwuY3BwCkBAIC0xMjAsNDggKzEyMCw2IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6Z2V0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8
CiAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVG
cm9tV2lyZSh3aXJlRGF0YSkpOwogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxJREJLZXk+IGZldGNo
S2V5RnJvbUtleVBhdGgoU2VyaWFsaXplZFNjcmlwdFZhbHVlKiB2YWx1ZSwgY29uc3QgSURCS2V5
UGF0aCYga2V5UGF0aCkKLXsKLSAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6OmZldGNoS2V5RnJvbUtleVBhdGgiKTsKLSAgICBBU1NFUlQoIWtleVBhdGguaXNOdWxsKCkp
OwotCi0gICAgVmVjdG9yPFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+ID4gdmFsdWVzOwot
ICAgIHZhbHVlcy5hcHBlbmQodmFsdWUpOwotICAgIFZlY3RvcjxSZWZQdHI8SURCS2V5PiA+IGtl
eXM7Ci0gICAgSURCS2V5UGF0aEJhY2tlbmRJbXBsOjpjcmVhdGVJREJLZXlzRnJvbVNlcmlhbGl6
ZWRWYWx1ZXNBbmRLZXlQYXRoKHZhbHVlcywga2V5UGF0aCwga2V5cyk7Ci0gICAgaWYgKGtleXMu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBBU1NFUlQoa2V5cy5zaXplKCkgPT0g
MSk7Ci0gICAgcmV0dXJuIGtleXNbMF0ucmVsZWFzZSgpOwotfQotCi1zdGF0aWMgUGFzc1JlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGluamVjdEtleUludG9LZXlQYXRoKFBhc3NSZWZQdHI8
SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSwgY29u
c3QgSURCS2V5UGF0aCYga2V5UGF0aCkKLXsKLSAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OmluamVjdEtleUludG9LZXlQYXRoIik7Ci0gICAgcmV0dXJuIElEQktleVBh
dGhCYWNrZW5kSW1wbDo6aW5qZWN0SURCS2V5SW50b1NlcmlhbGl6ZWRWYWx1ZShrZXksIHZhbHVl
LCBrZXlQYXRoKTsKLX0KLQotLy8gRklYTUU6IFJlbW92ZSB0aGlzIG1ldGhvZCB3aGVuIGdldC1z
aWRlIGtleSBpbmplY3Rpb24gaXMgdGhlIG5vcm0uCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6OnB1dChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFsdWUsIFBh
c3NSZWZQdHI8SURCS2V5PiBwcnBLZXksIFB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0
cmFuc2FjdGlvblB0ciwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgSURCX1RSQUNFKCJJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXQiKTsKLSAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OnB1dFdpdGhJbmRleEtleXMiKTsKLQotICAgIFJlZlB0cjxJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSA9IHRoaXM7Ci0gICAgUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUgPSBwcnBWYWx1ZTsKLSAgICBSZWZQdHI8SURCS2V5PiBr
ZXkgPSBwcnBLZXk7Ci0gICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2Fs
bGJhY2tzOwotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlv
biA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNhY3Rpb25QdHIpOwotICAg
IEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpICE9IElEQlRyYW5zYWN0aW9uOjpSRUFEX09OTFkp
OwotCi0gICAgLy8gTnVsbCBwb2ludGVycyBoZXJlIHNpZ25pZnkgdGhhdCBpbmRleCBrZXlzIHNo
b3VsZCBiZSBnZW5lcmF0ZWQgYXMgYSBwYXJ0IG9mIHRoaXMgcHV0LgotICAgIE93blB0cjxWZWN0
b3I8U3RyaW5nPiA+IG51bGxJbmRleE5hbWVzOwotICAgIE93blB0cjxWZWN0b3I8SW5kZXhLZXlz
PiA+IG51bGxJbmRleEtleXM7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKAot
ICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
OjpwdXRJbnRlcm5hbCwgb2JqZWN0U3RvcmUsIHZhbHVlLCBrZXksIHB1dE1vZGUsIGNhbGxiYWNr
cywgdHJhbnNhY3Rpb24sIG51bGxJbmRleE5hbWVzLnJlbGVhc2UoKSwgbnVsbEluZGV4S2V5cy5y
ZWxlYXNlKCkpKSkKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJ
T05fSU5BQ1RJVkVfRVJSOwotfQotCiB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1
dFdpdGhJbmRleEtleXMoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVl
LCBQYXNzUmVmUHRyPElEQktleT4gcHJwS2V5LCBQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZSogdHJhbnNhY3Rpb25QdHIsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBpbmRleE5hbWVzLCBjb25z
dCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5kZXhLZXlzLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAg
ICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dFdpdGhJbmRleEtleXMi
KTsKQEAgLTE3Niw2ICsxMzQsOCBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1
dFdpdGhJbmRleEtleXMoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdQogICAgIE93blB0
cjxWZWN0b3I8U3RyaW5nPiA+IG5ld0luZGV4TmFtZXMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPFN0
cmluZz4oaW5kZXhOYW1lcykpOwogICAgIE93blB0cjxWZWN0b3I8SW5kZXhLZXlzPiA+IG5ld0lu
ZGV4S2V5cyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8SW5kZXhLZXlzPihpbmRleEtleXMpKTsKIAor
ICAgIEFTU0VSVChhdXRvSW5jcmVtZW50KCkgfHwga2V5KTsKKwogICAgIGlmICghdHJhbnNhY3Rp
b24tPnNjaGVkdWxlVGFzaygKICAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwsIG9iamVjdFN0b3JlLCB2YWx1ZSwga2V5
LCBwdXRNb2RlLCBjYWxsYmFja3MsIHRyYW5zYWN0aW9uLCBuZXdJbmRleE5hbWVzLnJlbGVhc2Uo
KSwgbmV3SW5kZXhLZXlzLnJlbGVhc2UoKSkpKQogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9FUlI7CkBAIC0xOTQsMTggKzE1NCwxOSBAQCBw
dWJsaWM6CiAgICAgICAgICwgbV9pbmRleEtleXMoaW5kZXhLZXlzKQogICAgIHsgfQogCi0gICAg
Ym9vbCBnZW5lcmF0ZUluZGV4S2V5c0ZvclZhbHVlKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogb2Jq
ZWN0VmFsdWUpCisgICAgLy8gRklYTUU6IHJlbW92ZSB0aGlzIG9uY2UgY3JlYXRlSW5kZXgoKSBn
ZW5lcmF0ZXMgdGhlc2UgaW4gdGhlIHJlbmRlcmVyLgorICAgIHZvaWQgZ2VuZXJhdGVJbmRleEtl
eXNGb3JWYWx1ZShTZXJpYWxpemVkU2NyaXB0VmFsdWUqIG9iamVjdFZhbHVlKQogICAgIHsKICAg
ICAgICAgbV9pbmRleEtleXMuY2xlYXIoKTsKIAotICAgICAgICBSZWZQdHI8SURCS2V5PiBpbmRl
eEtleSA9IGZldGNoS2V5RnJvbUtleVBhdGgob2JqZWN0VmFsdWUsIG1faW5kZXhNZXRhZGF0YS5r
ZXlQYXRoKTsKKyAgICAgICAgUmVmUHRyPElEQktleT4gaW5kZXhLZXkgPSBmZXRjaEtleUZyb21L
ZXlQYXRoKG9iamVjdFZhbHVlKTsKIAogICAgICAgICBpZiAoIWluZGV4S2V5KQotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgaWYgKCFtX2lu
ZGV4TWV0YWRhdGEubXVsdGlFbnRyeSB8fCBpbmRleEtleS0+dHlwZSgpICE9IElEQktleTo6QXJy
YXlUeXBlKSB7CiAgICAgICAgICAgICBpZiAoIWluZGV4S2V5LT5pc1ZhbGlkKCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAg
ICAgICBtX2luZGV4S2V5cy5hcHBlbmQoaW5kZXhLZXkpOwogICAgICAgICB9IGVsc2UgewpAQCAt
MjEzLDExICsxNzQsOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBBU1NFUlQoaW5kZXhLZXktPnR5
cGUoKSA9PSBJREJLZXk6OkFycmF5VHlwZSk7CiAgICAgICAgICAgICBpbmRleEtleSA9IElEQktl
eTo6Y3JlYXRlTXVsdGlFbnRyeUFycmF5KGluZGV4S2V5LT5hcnJheSgpKTsKIAotICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmRleEtleS0+YXJyYXkoKS5zaXplKCk7ICsraSkg
eworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmRleEtleS0+YXJyYXkoKS5z
aXplKCk7ICsraSkKICAgICAgICAgICAgICAgICBtX2luZGV4S2V5cy5hcHBlbmQoaW5kZXhLZXkt
PmFycmF5KClbaV0pOwotICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KIAogICAgIGJvb2wgdmVyaWZ5SW5kZXhLZXlzKElEQkJhY2tpbmdTdG9yZSYg
YmFja2luZ1N0b3JlLApAQCAtMjY2LDYgKzIyNSwyMSBAQCBwcml2YXRlOgogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CisKKyAgICBQYXNzUmVm
UHRyPElEQktleT4gZmV0Y2hLZXlGcm9tS2V5UGF0aChTZXJpYWxpemVkU2NyaXB0VmFsdWUqIHZh
bHVlKQorICAgIHsKKyAgICAgICAgSURCX1RSQUNFKCJJbmRleFdyaXRlcjo6ZmV0Y2hLZXlGcm9t
S2V5UGF0aCIpOworCisgICAgICAgIFZlY3RvcjxSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiA+IHZhbHVlczsKKyAgICAgICAgdmFsdWVzLmFwcGVuZCh2YWx1ZSk7CisgICAgICAgIFZlY3Rv
cjxSZWZQdHI8SURCS2V5PiA+IGtleXM7CisgICAgICAgIElEQktleVBhdGhCYWNrZW5kSW1wbDo6
Y3JlYXRlSURCS2V5c0Zyb21TZXJpYWxpemVkVmFsdWVzQW5kS2V5UGF0aCh2YWx1ZXMsIG1faW5k
ZXhNZXRhZGF0YS5rZXlQYXRoLCBrZXlzKTsKKyAgICAgICAgaWYgKGtleXMuaXNFbXB0eSgpKQor
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIEFTU0VSVChrZXlzLnNpemUoKSA9PSAxKTsK
KyAgICAgICAgcmV0dXJuIGtleXNbMF0ucmVsZWFzZSgpOworICAgIH0KKwogICAgIGNvbnN0IElE
QkluZGV4TWV0YWRhdGEgbV9pbmRleE1ldGFkYXRhOwogICAgIElEQk9iamVjdFN0b3JlQmFja2Vu
ZEludGVyZmFjZTo6SW5kZXhLZXlzIG1faW5kZXhLZXlzOwogfTsKQEAgLTI3OSw0MCArMjUzLDE4
IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8CiAgICAgUmVmUHRyPElEQktleT4ga2V5ID0gcHJw
S2V5OwogICAgIE93blB0cjxWZWN0b3I8U3RyaW5nPiA+IGluZGV4TmFtZXMgPSBwb3BJbmRleE5h
bWVzOwogICAgIE93blB0cjxWZWN0b3I8SW5kZXhLZXlzPiA+IGluZGV4S2V5cyA9IHBvcEluZGV4
S2V5czsKLSAgICBBU1NFUlQoKCFpbmRleE5hbWVzICYmICFpbmRleEtleXMpIHx8IGluZGV4TmFt
ZXMtPnNpemUoKSA9PSBpbmRleEtleXMtPnNpemUoKSk7CisgICAgQVNTRVJUKGluZGV4TmFtZXMg
JiYgaW5kZXhLZXlzICYmIGluZGV4TmFtZXMtPnNpemUoKSA9PSBpbmRleEtleXMtPnNpemUoKSk7
CiAgICAgY29uc3QgYm9vbCBhdXRvSW5jcmVtZW50ID0gb2JqZWN0U3RvcmUtPmF1dG9JbmNyZW1l
bnQoKTsKICAgICBib29sIGtleVdhc0dlbmVyYXRlZCA9IGZhbHNlOwogCi0gICAgaWYgKHB1dE1v
ZGUgIT0gQ3Vyc29yVXBkYXRlKSB7Ci0gICAgICAgIGNvbnN0IGJvb2wgaGFzS2V5UGF0aCA9ICFv
YmplY3RTdG9yZS0+bV9rZXlQYXRoLmlzTnVsbCgpOwotICAgICAgICBpZiAoaGFzS2V5UGF0aCkg
ewotICAgICAgICAgICAgQVNTRVJUKCFrZXkpOwotICAgICAgICAgICAgUmVmUHRyPElEQktleT4g
a2V5UGF0aEtleSA9IGZldGNoS2V5RnJvbUtleVBhdGgodmFsdWUuZ2V0KCksIG9iamVjdFN0b3Jl
LT5tX2tleVBhdGgpOwotICAgICAgICAgICAgaWYgKGtleVBhdGhLZXkpCi0gICAgICAgICAgICAg
ICAga2V5ID0ga2V5UGF0aEtleTsKLSAgICAgICAgfQotICAgICAgICBpZiAoYXV0b0luY3JlbWVu
dCkgewotICAgICAgICAgICAgaWYgKCFrZXkpIHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8SURC
S2V5PiBhdXRvSW5jS2V5ID0gb2JqZWN0U3RvcmUtPmdlbmVyYXRlS2V5KCk7Ci0gICAgICAgICAg
ICAgICAga2V5V2FzR2VuZXJhdGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBpZiAoIWF1dG9J
bmNLZXktPmlzVmFsaWQoKSkgewotICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3MtPm9uRXJy
b3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VS
UiwgIk1heGltdW0ga2V5IGdlbmVyYXRvciB2YWx1ZSByZWFjaGVkLiIpKTsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvLyBG
SVhNRTogUmVtb3ZlIHRoaXMgd2hlbiBnZXQtc2lkZSBrZXkgaW5qZWN0aW9uIGlzIHRoZSBub3Jt
LgotICAgICAgICAgICAgICAgIGlmIChoYXNLZXlQYXRoKSB7Ci0gICAgICAgICAgICAgICAgICAg
IFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlQWZ0ZXJJbmplY3Rpb24gPSBpbmpl
Y3RLZXlJbnRvS2V5UGF0aChhdXRvSW5jS2V5LCB2YWx1ZSwgb2JqZWN0U3RvcmUtPm1fa2V5UGF0
aCk7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVCh2YWx1ZUFmdGVySW5qZWN0aW9uKTsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZUFmdGVySW5qZWN0aW9uKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAvLyBDaGVja3MgaW4gcHV0KCkgZW5zdXJlIHRoaXMgc2hvdWxkIG9ubHkg
aGFwcGVuIGlmIEkvTyBlcnJvciBvY2N1cnMuCi0gICAgICAgICAgICAgICAgICAgICAgICBjYWxs
YmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpVTktOT1dOX0VSUiwgIkludGVybmFsIGVycm9yIGluc2VydGluZyBnZW5lcmF0ZWQga2V5
IGludG8gdGhlIG9iamVjdC4iKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZUFm
dGVySW5qZWN0aW9uOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBrZXkgPSBh
dXRvSW5jS2V5OwotICAgICAgICAgICAgfQorICAgIGlmIChwdXRNb2RlICE9IEN1cnNvclVwZGF0
ZSAmJiBhdXRvSW5jcmVtZW50ICYmICFrZXkpIHsKKyAgICAgICAgUmVmUHRyPElEQktleT4gYXV0
b0luY0tleSA9IG9iamVjdFN0b3JlLT5nZW5lcmF0ZUtleSgpOworICAgICAgICBrZXlXYXNHZW5l
cmF0ZWQgPSB0cnVlOworICAgICAgICBpZiAoIWF1dG9JbmNLZXktPmlzVmFsaWQoKSkgeworICAg
ICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlIsICJNYXhpbXVtIGtleSBnZW5lcmF0b3IgdmFsdWUg
cmVhY2hlZC4iKSk7CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKyAgICAgICAga2V5
ID0gYXV0b0luY0tleTsKICAgICB9CiAKICAgICBBU1NFUlQoa2V5ICYmIGtleS0+aXNWYWxpZCgp
KTsKQEAgLTMyNSwxMiArMjc3LDggQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpw
dXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjwKIAogICAgIFZl
Y3RvcjxPd25QdHI8SW5kZXhXcml0ZXI+ID4gaW5kZXhXcml0ZXJzOwogICAgIEhhc2hNYXA8U3Ry
aW5nLCBJbmRleEtleXM+IGluZGV4S2V5TWFwOwotICAgIC8vIEZJWE1FOiBUdXJuIHRoaXMgaW50
byBhbiBBU1NFUlQoaW5kZXhLZXlzKSB3aGVuIGdldC1zaWRlIGtleSBpbmplY3Rpb24gaXMgdGhl
IG5vcm0uCi0gICAgYm9vbCBoYXZlSW5kZXhLZXlzID0gaW5kZXhLZXlzICYmICFpbmRleEtleXMt
PmlzRW1wdHkoKTsKLSAgICBpZiAoaGF2ZUluZGV4S2V5cykgewotICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGluZGV4TmFtZXMtPnNpemUoKTsgKytpKQotICAgICAgICAgICAgaW5kZXhL
ZXlNYXAuYWRkKGluZGV4TmFtZXMtPmF0KGkpLCBpbmRleEtleXMtPmF0KGkpKTsKLSAgICB9Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmRleE5hbWVzLT5zaXplKCk7ICsraSkKKyAgICAg
ICAgaW5kZXhLZXlNYXAuYWRkKGluZGV4TmFtZXMtPmF0KGkpLCBpbmRleEtleXMtPmF0KGkpKTsK
IAogICAgIGZvciAoSW5kZXhNYXA6Oml0ZXJhdG9yIGl0ID0gb2JqZWN0U3RvcmUtPm1faW5kZXhl
cy5iZWdpbigpOyBpdCAhPSBvYmplY3RTdG9yZS0+bV9pbmRleGVzLmVuZCgpOyArK2l0KSB7CiAK
QEAgLTMzOSwxMiArMjg3LDggQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJ
bnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjwKICAgICAgICAgICAg
IGNvbnRpbnVlOyAvLyBUaGUgaW5kZXggb2JqZWN0IGhhcyBiZWVuIGNyZWF0ZWQsIGJ1dCBkb2Vz
IG5vdCBleGlzdCBpbiB0aGUgZGF0YWJhc2UgeWV0LgogCiAgICAgICAgIE93blB0cjxJbmRleFdy
aXRlcj4gaW5kZXhXcml0ZXI7Ci0gICAgICAgIGlmIChoYXZlSW5kZXhLZXlzKQotICAgICAgICAg
ICAgaW5kZXhXcml0ZXIgPSBhZG9wdFB0cihuZXcgSW5kZXhXcml0ZXIoaW5kZXgtPm1ldGFkYXRh
KCksIGluZGV4S2V5TWFwLmdldChpdC0+Zmlyc3QpKSk7Ci0gICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgaW5kZXhXcml0ZXIgPSBhZG9wdFB0cihuZXcgSW5kZXhXcml0ZXIoaW5kZXgtPm1ldGFk
YXRhKCkpKTsKLSAgICAgICAgICAgIGluZGV4V3JpdGVyLT5nZW5lcmF0ZUluZGV4S2V5c0ZvclZh
bHVlKHZhbHVlLmdldCgpKTsKLSAgICAgICAgfQorICAgICAgICBpbmRleFdyaXRlciA9IGFkb3B0
UHRyKG5ldyBJbmRleFdyaXRlcihpbmRleC0+bWV0YWRhdGEoKSwgaW5kZXhLZXlNYXAuZ2V0KGl0
LT5maXJzdCkpKTsKKwogICAgICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlOwogICAgICAgICBpZiAo
IWluZGV4V3JpdGVyLT52ZXJpZnlJbmRleEtleXMoKm9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUo
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFN0b3Jl
LT5kYXRhYmFzZUlkKCksCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgKaW5kZXggNjQ3YmMyOTc4NDlk
NjRmOTE3NTljZjg1YzNiMTQ0YTFlMWM2NGM2Mi4uNWIxYjU0ZmMyZGI4NWZkNDkzYWVjZDdkNjdi
YzVkYmY5NWE1NzA0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaApAQCAtNjYsNyArNjYsNiBA
QCBwdWJsaWM6CiAKICAgICAvLyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UKICAgICB2
aXJ0dWFsIHZvaWQgZ2V0KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUm
KTsKLSAgICB2aXJ0dWFsIHZvaWQgcHV0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiwgUGFzc1JlZlB0cjxJREJLZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4s
IElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2
aXJ0dWFsIHZvaWQgcHV0V2l0aEluZGV4S2V5cyhQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4sIFBhc3NSZWZQdHI8SURCS2V5PiwgUHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBjb25zdCBWZWN0b3I8U3RyaW5n
PiYsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1
YWwgdm9pZCBkZWxldGVGdW5jdGlvbihQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRp
b25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW50ZXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJP
YmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UuaAppbmRleCAzN2QzZWUwZjk0MzBkYzUwN2IwOTRl
MzQwZjg5YzM5ZTRhMGQ2ZDM0Li5mMmZkMDg4YzFjNDMxNGQ4YmQ0YTNmMzYzNTJiOTM5YjM0OTVk
ZmU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UuaApAQCAtNTcsNyArNTcsNiBA
QCBwdWJsaWM6CiAgICAgfTsKICAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8SURCS2V5PiA+IElu
ZGV4S2V5czsKIAotICAgIHZpcnR1YWwgdm9pZCBwdXQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIFB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYp
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcHV0V2l0aEluZGV4S2V5cyhQYXNzUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NSZWZQdHI8SURCS2V5PiwgUHV0TW9kZSwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiwgRXhjZXB0aW9uQ29kZSYp
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXlS
YW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcAppbmRleCBhMWVhZjI5MzBjMWExZWI4YzI3YmNl
ZThlNTIyMDllODI2OTg0MzRlLi5kOWY0MjI1M2U4ZmNkMGZhM2RiMDdlZjU4NDg0MGFlZDJhYjdi
MDNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1
ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0
LmNwcApAQCAtMzM5LDI0ICszMzksNDIgQEAgdm9pZCBJREJSZXF1ZXN0OjpvblN1Y2Nlc3MoUGFz
c1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWRTY3JpcHRWYWwKICAgICBl
bnF1ZXVlRXZlbnQoY3JlYXRlU3VjY2Vzc0V2ZW50KCkpOwogfQogCisjaWZuZGVmIE5ERUJVRwor
c3RhdGljIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IGVmZmVjdGl2ZU9iamVjdFN0b3JlKFBh
c3NSZWZQdHI8SURCQW55PiBzb3VyY2UpCit7CisgICAgaWYgKHNvdXJjZS0+dHlwZSgpID09IElE
QkFueTo6SURCT2JqZWN0U3RvcmVUeXBlKQorICAgICAgICByZXR1cm4gc291cmNlLT5pZGJPYmpl
Y3RTdG9yZSgpOworICAgIGlmIChzb3VyY2UtPnR5cGUoKSA9PSBJREJBbnk6OklEQkluZGV4VHlw
ZSkKKyAgICAgICAgcmV0dXJuIHNvdXJjZS0+aWRiSW5kZXgoKS0+b2JqZWN0U3RvcmUoKTsKKwor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorI2VuZGlmCiAKIHZv
aWQgSURCUmVxdWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiBwcnBTZXJpYWxpemVkU2NyaXB0VmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQcmltYXJ5
S2V5LCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKQogewotICAgIExPR19FUlJPUigiQ0hFQ0tJ
Tkc6IG9uU3VjY2Vzcyh2YWx1ZSwga2V5LCBrZXlwYXRoKSIpOwotICAgIEFTU0VSVChtX3JlYWR5
U3RhdGUgPT0gUEVORElORyB8fCBtX3JlYWR5U3RhdGUgPT0gRE9ORSk7CiAgICAgaWYgKG1fcmVx
dWVzdEFib3J0ZWQpCiAgICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQobV9yZWFkeVN0YXRlID09
IFBFTkRJTkcpOwotICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZSA9IHBycFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKICNpZm5kZWYgTkRFQlVHCi0g
ICAgLy8gRklYTUU6IEFzc2VydCB1bnRpbCB3ZSBjYW4gYWN0dWFsbHkgaW5qZWN0IHRoZSByaWdo
dCB2YWx1ZS4KKyAgICBBU1NFUlQoa2V5UGF0aCA9PSBlZmZlY3RpdmVPYmplY3RTdG9yZShtX3Nv
dXJjZSktPmtleVBhdGgoKSk7CisjZW5kaWYKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiB2YWx1ZSA9IHBycFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKKwogICAgIFJlZlB0cjxJREJL
ZXk+IHByaW1hcnlLZXkgPSBwcnBQcmltYXJ5S2V5OwotICAgIFJlZlB0cjxJREJLZXk+IGV4cGVj
dGVkS2V5ID0KLSAgICAgICAgICAgICAgY3JlYXRlSURCS2V5RnJvbVNlcmlhbGl6ZWRWYWx1ZUFu
ZEtleVBhdGgoc2VyaWFsaXplZFNjcmlwdFZhbHVlLCBrZXlQYXRoKTsKLSAgICBBU1NFUlQocHJp
bWFyeUtleSk7Ci0gICAgQVNTRVJUKGV4cGVjdGVkS2V5LT5pc0VxdWFsKHByaW1hcnlLZXkuZ2V0
KCkpKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgUmVmUHRyPElEQktleT4gZXhwZWN0ZWRLZXkgPSBj
cmVhdGVJREJLZXlGcm9tU2VyaWFsaXplZFZhbHVlQW5kS2V5UGF0aCh2YWx1ZSwga2V5UGF0aCk7
CisgICAgQVNTRVJUKCFleHBlY3RlZEtleSB8fCBleHBlY3RlZEtleS0+aXNFcXVhbChwcmltYXJ5
S2V5LmdldCgpKSk7CiAjZW5kaWYKLSAgICBvblN1Y2Nlc3Moc2VyaWFsaXplZFNjcmlwdFZhbHVl
LnJlbGVhc2UoKSk7CisgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWVBZnRl
ckluamVjdGlvbiA9IGluamVjdElEQktleUludG9TZXJpYWxpemVkVmFsdWUocHJpbWFyeUtleSwg
dmFsdWUsIGtleVBhdGgpOworICAgIEFTU0VSVCh2YWx1ZUFmdGVySW5qZWN0aW9uKTsKKyAgICBp
ZiAoIXZhbHVlQWZ0ZXJJbmplY3Rpb24pIHsKKyAgICAgICAgLy8gQ2hlY2tzIGluIHB1dCgpIGVu
c3VyZSB0aGlzIHNob3VsZCBvbmx5IGhhcHBlbiBpZiBJL08gZXJyb3Igb2NjdXJzLgorICAgICAg
ICBvbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
VU5LTk9XTl9FUlIsICJJbnRlcm5hbCBlcnJvciBpbnNlcnRpbmcgZ2VuZXJhdGVkIGtleSBpbnRv
IHRoZSBvYmplY3QuIikpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHZhbHVlID0gdmFs
dWVBZnRlckluamVjdGlvbjsKKyAgICBvblN1Y2Nlc3ModmFsdWUucmVsZWFzZSgpKTsKIH0KIAog
dm9pZCBJREJSZXF1ZXN0OjpvblN1Y2Nlc3NXaXRoQ29udGludWF0aW9uKCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvSURCQmluZGluZ1V0aWxpdGllcy5jcHAKaW5kZXggNjYx
ZmYwMTU5NWRmMDU1MDBkN2Y2Y2FjMzEwZThiYzcxMzQ0YjNlOC4uMjJmODMxNWIyMDQ2YzY1NDc4
MTViOTQ1NjBiNDhkODg1ODYzZTFmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvSURCQmluZGluZ1V0aWxpdGllcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvSURCQmluZGluZ1V0aWxpdGllcy5jcHAKQEAgLTEwMSw3ICsxMDEsNiBAQCB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgogYm9vbCBzZXRWYWx1ZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4mIHY4T2Jq
ZWN0LCBUIGluZGV4T3JOYW1lLCBjb25zdCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4mIHY4VmFsdWUp
CiB7CiAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IG9iamVjdCA9IHY4T2JqZWN0LT5Ub09iamVj
dCgpOwotICAgIEFTU0VSVCghb2JqZWN0LT5IYXMoaW5kZXhPck5hbWUpKTsKICAgICByZXR1cm4g
b2JqZWN0LT5TZXQoaW5kZXhPck5hbWUsIHY4VmFsdWUpOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJDdXJzb3JCYWNrZW5kUHJveHkuY3BwIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvSURCQ3Vyc29yQmFja2VuZFByb3h5LmNwcAppbmRleCBjYTM5
MGJhOTA3NDI3ZTA4ZmQ0NzhiYjk1Y2Y5ZTJjNDE2Y2QyZmZiLi4yNzdhNjY1Y2YwMDBlZTkzZTA4
YzRmYTFkYzQ2Yzg1MWI5ODE5ZjE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9JREJDdXJzb3JCYWNrZW5kUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL0lEQkN1cnNvckJhY2tlbmRQcm94eS5jcHAKQEAgLTY5LDExICs2OSw2IEBAIFBhc3NS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBJREJDdXJzb3JCYWNrZW5kUHJveHk6OnZhbHVl
KCkgY29uc3QKICAgICByZXR1cm4gbV9pZGJDdXJzb3ItPnZhbHVlKCk7CiB9CiAKLXZvaWQgSURC
Q3Vyc29yQmFja2VuZFByb3h5Ojp1cGRhdGUoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IHZhbHVlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBFeGNlcHRpb25D
b2RlJiBlYykKLXsKLSAgICBtX2lkYkN1cnNvci0+dXBkYXRlKHZhbHVlLCBuZXcgV2ViSURCQ2Fs
bGJhY2tzSW1wbChjYWxsYmFja3MpLCBlYyk7Ci19Ci0KIHZvaWQgSURCQ3Vyc29yQmFja2VuZFBy
b3h5OjphZHZhbmNlKHVuc2lnbmVkIGxvbmcgY291bnQsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIG1faWRiQ3Vyc29yLT5hZHZh
bmNlKGNvdW50LCBuZXcgV2ViSURCQ2FsbGJhY2tzSW1wbChjYWxsYmFja3MpLCBlYyk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJDdXJzb3JCYWNrZW5kUHJveHku
aCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkN1cnNvckJhY2tlbmRQcm94eS5oCmlu
ZGV4IDllNGI1NzAwODEyNmYzOTZjZDE0ZjYzM2M2YTNhNDFkNmI1OTAyODUuLmQ3NDJmNjhlNWZl
NTZmMzdkYWFjMTc1MzczNmZjZTk3ZjBhMjY0YWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL0lEQkN1cnNvckJhY2tlbmRQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL0lEQkN1cnNvckJhY2tlbmRQcm94eS5oCkBAIC00NSw3ICs0NSw2IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCS2V5PiBrZXkoKSBjb25z
dDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCS2V5PiBwcmltYXJ5S2V5KCkg
Y29uc3Q7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gdmFsdWUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlKFBhc3NSZWZQdHI8
V2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJD
YWxsYmFja3M+LCBXZWJDb3JlOjpFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIGFk
dmFuY2UodW5zaWduZWQgbG9uZywgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+LCBX
ZWJDb3JlOjpFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIGNvbnRpbnVlRnVuY3Rp
b24oUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJLZXk+LCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkNh
bGxiYWNrcz4sIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgZGVs
ZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+LCBXZWJDb3JlOjpF
eGNlcHRpb25Db2RlJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9J
REJPYmplY3RTdG9yZUJhY2tlbmRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9JREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eS5jcHAKaW5kZXggODI2NDA3MzMwYTAyN2ExNmRi
N2ZiMWMzZGNkMGVmZGMxZjRiMzUxNy4uNGQxYzkxZDA3NWZmNjA3YTczN2IyMjAxMDdmZGI3YjBi
ZjI0Yjc1OSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCT2JqZWN0
U3RvcmVCYWNrZW5kUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lE
Qk9iamVjdFN0b3JlQmFja2VuZFByb3h5LmNwcApAQCAtNjcsMTQgKzY3LDYgQEAgdm9pZCBJREJP
YmplY3RTdG9yZUJhY2tlbmRQcm94eTo6Z2V0KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJh
bmdlLCBQYXNzUmVmUHQKICAgICBtX3dlYklEQk9iamVjdFN0b3JlLT5nZXQoa2V5UmFuZ2UsIG5l
dyBXZWJJREJDYWxsYmFja3NJbXBsKGNhbGxiYWNrcyksICp0cmFuc2FjdGlvblByb3h5LT5nZXRX
ZWJJREJUcmFuc2FjdGlvbigpLCBlYyk7CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5k
UHJveHk6OnB1dChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIFBhc3NS
ZWZQdHI8SURCS2V5PiBrZXksIFB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+IGNhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlv
biwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgLy8gVGhlIHRyYW5zYWN0aW9uIHBvaW50ZXIg
aXMgZ3VhcmFudGVlZCB0byBiZSBhIHBvaW50ZXIgdG8gYSBwcm94eSBvYmplY3QgYXMsIGluIHRo
ZSByZW5kZXJlciwKLSAgICAvLyBhbGwgaW1wbGVtZW50YXRpb25zIG9mIElEQiBpbnRlcmZhY2Vz
IGFyZSBwcm94eSBvYmplY3RzLgotICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5KiB0cmFu
c2FjdGlvblByb3h5ID0gc3RhdGljX2Nhc3Q8SURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkqPih0
cmFuc2FjdGlvbik7Ci0gICAgbV93ZWJJREJPYmplY3RTdG9yZS0+cHV0KHZhbHVlLCBrZXksIHN0
YXRpY19jYXN0PFdlYklEQk9iamVjdFN0b3JlOjpQdXRNb2RlPihwdXRNb2RlKSwgbmV3IFdlYklE
QkNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzKSwgKnRyYW5zYWN0aW9uUHJveHktPmdldFdlYklEQlRy
YW5zYWN0aW9uKCksIGVjKTsKLX0KLQogdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eTo6
cHV0V2l0aEluZGV4S2V5cyhQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUs
IFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFu
c2FjdGlvbiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGluZGV4TmFtZXMsIGNvbnN0IFZlY3RvcjxJ
bmRleEtleXM+JiBpbmRleEtleXMsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIC8vIFRoZSB0
cmFuc2FjdGlvbiBwb2ludGVyIGlzIGd1YXJhbnRlZWQgdG8gYmUgYSBwb2ludGVyIHRvIGEgcHJv
eHkgb2JqZWN0IGFzLCBpbiB0aGUgcmVuZGVyZXIsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9JREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eS5oIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHkuaAppbmRleCBjNjQwMjhj
ZmZiNjBmMmQ4YTI0NGE3MTVjNzNjMGI3NjVhZWVmNDRjLi4wMjM1MDc3ZmE5NzNmZThmMTYxOTJl
NDEzNmZhMjAwOTk3ZTJhNjNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9JREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL0lEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5LmgKQEAgLTQ0LDcgKzQ0LDYgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgfklEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5KCk7CiAKICAgICB2
aXJ0dWFsIHZvaWQgZ2V0KFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCS2V5UmFuZ2U+LCBQYXNzUmVm
UHRyPFdlYkNvcmU6OklEQkNhbGxiYWNrcz4sIFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZSosIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFsIHZvaWQg
cHV0KFBhc3NSZWZQdHI8V2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0
cjxXZWJDb3JlOjpJREJLZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkNhbGxi
YWNrcz4sIFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIFdlYkNvcmU6
OkV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcHV0V2l0aEluZGV4S2V5cyhQYXNz
UmVmUHRyPFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NSZWZQdHI8V2ViQ29y
ZTo6SURCS2V5PiwgUHV0TW9kZSwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+LCBX
ZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBjb25zdCBXVEY6OlZlY3Rv
cjxXVEY6OlN0cmluZz4mLCBjb25zdCBXVEY6OlZlY3RvcjxJbmRleEtleXM+JiwgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVGdW5jdGlvbihQYXNzUmVm
UHRyPFdlYkNvcmU6OklEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFj
a3M+LCBXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBXZWJDb3JlOjpF
eGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyKFBhc3NSZWZQdHI8V2ViQ29y
ZTo6SURCQ2FsbGJhY2tzPiwgV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
KiwgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViSURCQ3Vyc29ySW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJJREJDdXJzb3JJbXBsLmNwcAppbmRleCBlOWMwZTA0YWYwMzczMjRjNDE2NGMzYzVh
MTJjZDFiN2ExZmIxY2U4Li4wZDY1YTg3YmVlMGFjNGY2ZTIyODYxZGFmMTcxOGFlYWNmOGRiM2Fi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJDdXJzb3JJbXBs
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJDdXJzb3JJbXBsLmNw
cApAQCAtNjIsMTEgKzYyLDYgQEAgV2ViU2VyaWFsaXplZFNjcmlwdFZhbHVlIFdlYklEQkN1cnNv
ckltcGw6OnZhbHVlKCkgY29uc3QKICAgICByZXR1cm4gbV9pZGJDdXJzb3JCYWNrZW5kLT52YWx1
ZSgpOwogfQogCi12b2lkIFdlYklEQkN1cnNvckltcGw6OnVwZGF0ZShjb25zdCBXZWJTZXJpYWxp
emVkU2NyaXB0VmFsdWUmIHZhbHVlLCBXZWJJREJDYWxsYmFja3MqIGNhbGxiYWNrcywgV2ViRXhj
ZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgbV9pZGJDdXJzb3JCYWNrZW5kLT51cGRhdGUodmFsdWUs
IElEQkNhbGxiYWNrc1Byb3h5OjpjcmVhdGUoYWRvcHRQdHIoY2FsbGJhY2tzKSksIGVjKTsKLX0K
LQogdm9pZCBXZWJJREJDdXJzb3JJbXBsOjphZHZhbmNlKHVuc2lnbmVkIGxvbmcgY291bnQsIFdl
YklEQkNhbGxiYWNrcyogY2FsbGJhY2tzLCBXZWJFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBt
X2lkYkN1cnNvckJhY2tlbmQtPmFkdmFuY2UoY291bnQsIElEQkNhbGxiYWNrc1Byb3h5OjpjcmVh
dGUoYWRvcHRQdHIoY2FsbGJhY2tzKSksIGVjKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYklEQkN1cnNvckltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYklEQkN1cnNvckltcGwuaAppbmRleCBmMGQzODdiNjIxOTc2ODdhODE2YWQxZGM3NTU1
Y2RjMjdlZmJhZmM1Li40NWEyMjliMzgzMDE5MjY5MWZhNzhkMGRhODZiZTM5NzY4NzFiYjdhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJDdXJzb3JJbXBsLmgK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCQ3Vyc29ySW1wbC5oCkBAIC00
Nyw3ICs0Nyw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFdlYklEQktleSBrZXkoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIFdlYklEQktleSBwcmltYXJ5S2V5KCkgY29uc3Q7CiAgICAgdmlydHVhbCBX
ZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUgdmFsdWUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlKGNvbnN0IFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSYsIFdlYklEQkNhbGxiYWNrcyos
IFdlYkV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgYWR2YW5jZSh1bnNpZ25lZCBs
b25nLCBXZWJJREJDYWxsYmFja3MqLCBXZWJFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2
b2lkIGNvbnRpbnVlRnVuY3Rpb24oY29uc3QgV2ViSURCS2V5JiwgV2ViSURCQ2FsbGJhY2tzKiwg
V2ViRXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVGdW5jdGlvbihXZWJJ
REJDYWxsYmFja3MqLCBXZWJFeGNlcHRpb25Db2RlJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJJREJPYmplY3RTdG9yZUltcGwuY3BwIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViSURCT2JqZWN0U3RvcmVJbXBsLmNwcAppbmRleCA1M2QxNDBmNDJi
ZTk4YjNhYmU3M2E3NGJiMzM1ZGYzY2ViNjVkMjljLi4yMmEwNjY4MDc3NDQ0ZGFjMzFkZWU3YjBi
NTk0MTI3MmRlZGYzZGJmIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJJREJPYmplY3RTdG9yZUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYklEQk9iamVjdFN0b3JlSW1wbC5jcHAKQEAgLTU4LDExICs1OCw2IEBAIHZvaWQgV2ViSURC
T2JqZWN0U3RvcmVJbXBsOjpnZXQoY29uc3QgV2ViSURCS2V5UmFuZ2UmIGtleVJhbmdlLCBXZWJJ
REJDYWxsYmFja3MqCiAgICAgbV9vYmplY3RTdG9yZS0+Z2V0KGtleVJhbmdlLCBJREJDYWxsYmFj
a3NQcm94eTo6Y3JlYXRlKGFkb3B0UHRyKGNhbGxiYWNrcykpLCB0cmFuc2FjdGlvbi5nZXRJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UoKSwgZWMpOwogfQogCi12b2lkIFdlYklEQk9iamVj
dFN0b3JlSW1wbDo6cHV0KGNvbnN0IFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSYgdmFsdWUsIGNv
bnN0IFdlYklEQktleSYga2V5LCBQdXRNb2RlIHB1dE1vZGUsIFdlYklEQkNhbGxiYWNrcyogY2Fs
bGJhY2tzLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIFdlYkV4Y2VwdGlv
bkNvZGUmIGVjKQotewotICAgIG1fb2JqZWN0U3RvcmUtPnB1dCh2YWx1ZSwga2V5LCBzdGF0aWNf
Y2FzdDxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vZGU+KHB1dE1vZGUpLCBJ
REJDYWxsYmFja3NQcm94eTo6Y3JlYXRlKGFkb3B0UHRyKGNhbGxiYWNrcykpLCB0cmFuc2FjdGlv
bi5nZXRJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UoKSwgZWMpOwotfQotCiB2b2lkIFdl
YklEQk9iamVjdFN0b3JlSW1wbDo6cHV0V2l0aEluZGV4S2V5cyhjb25zdCBXZWJTZXJpYWxpemVk
U2NyaXB0VmFsdWUmIHZhbHVlLCBjb25zdCBXZWJJREJLZXkmIGtleSwgUHV0TW9kZSBwdXRNb2Rl
LCBXZWJJREJDYWxsYmFja3MqIGNhbGxiYWNrcywgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mIHRy
YW5zYWN0aW9uLCBjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYgd2ViSW5kZXhOYW1lcywgY29u
c3QgV2ViVmVjdG9yPFdlYkluZGV4S2V5cz4mIHdlYkluZGV4S2V5cywgV2ViRXhjZXB0aW9uQ29k
ZSYgZWMpCiB7CiAgICAgQVNTRVJUKHdlYkluZGV4TmFtZXMuc2l6ZSgpID09IHdlYkluZGV4S2V5
cy5zaXplKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURC
T2JqZWN0U3RvcmVJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJPYmpl
Y3RTdG9yZUltcGwuaAppbmRleCBlNmRjODhmNTRkMzY0N2JkN2FiMmY2ZjhhN2NmMjY3NGY2NmMz
YmQyLi45MzRjZmZhOTkzYzhiZjEwNjM2NDQ1OWY1MGI2ZjNiYmFhMDQyMDFkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJPYmplY3RTdG9yZUltcGwuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJPYmplY3RTdG9yZUltcGwuaApAQCAt
NDYsNyArNDYsNiBAQCBwdWJsaWM6CiAgICAgfldlYklEQk9iamVjdFN0b3JlSW1wbCgpOwogCiAg
ICAgdm9pZCBnZXQoY29uc3QgV2ViSURCS2V5UmFuZ2UmLCBXZWJJREJDYWxsYmFja3MqLCBjb25z
dCBXZWJJREJUcmFuc2FjdGlvbiYsIFdlYkV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHB1dChj
b25zdCBXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUmLCBjb25zdCBXZWJJREJLZXkmLCBQdXRNb2Rl
LCBXZWJJREJDYWxsYmFja3MqLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYsIFdlYkV4Y2VwdGlv
bkNvZGUmKTsKICAgICB2b2lkIHB1dFdpdGhJbmRleEtleXMoY29uc3QgV2ViU2VyaWFsaXplZFNj
cmlwdFZhbHVlJiwgY29uc3QgV2ViSURCS2V5JiwgUHV0TW9kZSwgV2ViSURCQ2FsbGJhY2tzKiwg
Y29uc3QgV2ViSURCVHJhbnNhY3Rpb24mLCBjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYgaW5k
ZXhOYW1lcywgY29uc3QgV2ViVmVjdG9yPFdlYkluZGV4S2V5cz4mLCBXZWJFeGNlcHRpb25Db2Rl
Jik7CiAgICAgdm9pZCBkZWxldGVGdW5jdGlvbihjb25zdCBXZWJJREJLZXlSYW5nZSYsIFdlYklE
QkNhbGxiYWNrcyosIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgV2ViRXhjZXB0aW9uQ29kZSYp
OwogICAgIHZvaWQgY2xlYXIoV2ViSURCQ2FsbGJhY2tzKiwgY29uc3QgV2ViSURCVHJhbnNhY3Rp
b24mLCBXZWJFeGNlcHRpb25Db2RlJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0lEQkZha2VCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvSURCRmFrZUJhY2tpbmdTdG9yZS5oCmluZGV4IDA4NDA1Y2UwYWI1OGM5NmZjMjk2YzNm
MGY4YTE0ZmY2OWQ2NWJhMTguLjUzNmQ3ODViOTNhZWU0M2I5ZjUzMzI1MjVjNjNlYzc5ZTcwOTU5
YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCRmFrZUJhY2tp
bmdTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCRmFrZUJhY2tp
bmdTdG9yZS5oCkBAIC01OSw3ICs1OSw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGVs
ZXRlSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0
X3QgaW5kZXhJZCkgT1ZFUlJJREUgeyB9CiAgICAgdmlydHVhbCBib29sIHB1dEluZGV4RGF0YUZv
clJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRf
dCBpbmRleElkLCBjb25zdCBJREJLZXkmLCBjb25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZp
ZXIqKSBPVkVSUklERSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBkZWxldGVJ
bmRleERhdGFGb3JSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKikg
T1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIFN0cmluZyBnZXRPYmplY3RW
aWFJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRf
dCBpbmRleElkLCBjb25zdCBJREJLZXkmKSBPVkVSUklERSB7IHJldHVybiBTdHJpbmcoKTsgfQog
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IGdldFByaW1hcnlLZXlWaWFJbmRleChpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBj
b25zdCBJREJLZXkmKSBPVkVSUklERSB7IHJldHVybiBQYXNzUmVmUHRyPElEQktleT4oKTsgfQog
ICAgIHZpcnR1YWwgYm9vbCBrZXlFeGlzdHNJbkluZGV4KGludDY0X3QgZGF0YWJhc2VpZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYgaW5kZXhL
ZXksIFJlZlB0cjxJREJLZXk+JiBmb3VuZFByaW1hcnlLZXkpIE9WRVJSSURFIHsgcmV0dXJuIGZh
bHNlOyB9CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwppbmRleCA0YzRmNDdiNDNmMDFjOWI3MWVlMGIxODAyNTQzOWE2N2JmNDY4ZDMw
Li5mMmVjYjE2ZDllNTk1Yzc3Yzk3YTQ0NWU1MmIxNTYzNGQ1NjEwMjQ2IDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTkgQEAKKzIwMTItMDctMjUgIEFsZWMgRmxldHQgIDxhbGVjZmxldHRAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIEluZGV4ZWREQjogaW5qZWN0IGluZGV4IGtleXMgb24gY3Vyc29yL29iamVj
dHN0b3JlL2luZGV4IGdldCBzdWNjZXNzIGhhbmRsZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MTEyMworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIE1pbm9yIHR3ZWFrcyB0byB0ZXN0cyB0byBtYWtlIGl0
IGVhc2llciB0byBmaWd1cmUgb3V0IHdoaWNoIGtleSBpcworICAgICAgICBiZWluZyB1cGRhdGVk
LgorCisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvbW96aWxsYS9hdXRvaW5jcmVtZW50LWlu
ZGV4ZXMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL21vemlsbGEv
cmVzb3VyY2VzL2F1dG9pbmNyZW1lbnQtaW5kZXhlcy5qczoKKyAgICAgICAgKHNldHVwT2JqZWN0
U3RvcmUpOgorICAgICAgICAoc2V0dXBJbmRleGVzKToKKyAgICAgICAgKHNldFZlcnNpb25Db21w
bGV0ZSk6CisKIDIwMTItMDctMjUgIEtvbnJhZCBQaWFzY2lrICA8a3BpYXNjaWtAcmltLmNvbT4K
IAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBHZW9sb2NhdGlvbiBvdmVycmlkZQpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW96aWxsYS9hdXRvaW5jcmVtZW50LWlu
ZGV4ZXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW96aWxs
YS9hdXRvaW5jcmVtZW50LWluZGV4ZXMtZXhwZWN0ZWQudHh0CmluZGV4IGY5NDUzNzQ3MTA5Zjlh
MDU0YWQ5ZDM4OGMxNmIwODg5ZmY2YjZhZWEuLjYxYmFhMjJmMmE3ZDA4YzRmYWIwMjc1ZjJhYmVm
Y2UxNGU1YWEyYmIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL21v
emlsbGEvYXV0b2luY3JlbWVudC1pbmRleGVzLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0
cy9zdG9yYWdlL2luZGV4ZWRkYi9tb3ppbGxhL2F1dG9pbmNyZW1lbnQtaW5kZXhlcy1leHBlY3Rl
ZC50eHQKQEAgLTksNyArOSw3IEBAIGluZGV4ZWREQi5vcGVuKG5hbWUpCiBkYiA9IGV2ZW50LnRh
cmdldC5yZXN1bHQKIHJlcXVlc3QgPSBkYi5zZXRWZXJzaW9uKCcxJykKIERlbGV0ZWQgYWxsIG9i
amVjdCBzdG9yZXMuCi1vYmplY3RTdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdmb28nLCB7
IGtleVBhdGg6ICdpZCcsIGF1dG9JbmNyZW1lbnQ6IHRydWUgfSk7CitvYmplY3RTdG9yZSA9IGRi
LmNyZWF0ZU9iamVjdFN0b3JlKCdhdXRvaW5jcmVtZW50LWlkJywgeyBrZXlQYXRoOiAnaWQnLCBh
dXRvSW5jcmVtZW50OiB0cnVlIH0pOwogb2JqZWN0U3RvcmUuY3JlYXRlSW5kZXgoJ2ZpcnN0Jywg
J2ZpcnN0Jyk7CiBvYmplY3RTdG9yZS5jcmVhdGVJbmRleCgnc2Vjb25kJywgJ3NlY29uZCcpOwog
b2JqZWN0U3RvcmUuY3JlYXRlSW5kZXgoJ3RoaXJkJywgJ3RoaXJkJyk7CkBAIC0xNyw3ICsxNyw4
IEBAIGRhdGEgPSB7IGZpcnN0OiAnZm9vJywgc2Vjb25kOiAnZm9vJywgdGhpcmQ6ICdmb28nIH07
CiByZXF1ZXN0ID0gb2JqZWN0U3RvcmUuYWRkKGRhdGEpOwoga2V5ID0gZXZlbnQudGFyZ2V0LnJl
c3VsdDsKIFBBU1Mga2V5ID09IG51bGwgaXMgZmFsc2UKLW9iamVjdFN0b3JlID0gZGIudHJhbnNh
Y3Rpb24oJ2ZvbycpLm9iamVjdFN0b3JlKCdmb28nKTsKK2V4cGVjdGVkIGtleSBpcyAxCitvYmpl
Y3RTdG9yZSA9IGRiLnRyYW5zYWN0aW9uKCdhdXRvaW5jcmVtZW50LWlkJykub2JqZWN0U3RvcmUo
J2F1dG9pbmNyZW1lbnQtaWQnKTsKIGZpcnN0ID0gb2JqZWN0U3RvcmUuaW5kZXgoJ2ZpcnN0Jyk7
CiByZXF1ZXN0ID0gZmlyc3QuZ2V0KCdmb28nKTsKIFBBU1MgZXZlbnQudGFyZ2V0LnJlc3VsdC5p
ZCBpcyBrZXkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL21vemls
bGEvcmVzb3VyY2VzL2F1dG9pbmNyZW1lbnQtaW5kZXhlcy5qcyBiL0xheW91dFRlc3RzL3N0b3Jh
Z2UvaW5kZXhlZGRiL21vemlsbGEvcmVzb3VyY2VzL2F1dG9pbmNyZW1lbnQtaW5kZXhlcy5qcwpp
bmRleCAxYzg1OTg0ODY1ZGJmOWE3ZmYzNzViNDkwMDdmZmFhMzhhNDg2NGViLi4yZGE5NmU3ZmZh
NTZlOTczODg5NjVjYzg1MmZlOTFlYzliZTM4NTlmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9z
dG9yYWdlL2luZGV4ZWRkYi9tb3ppbGxhL3Jlc291cmNlcy9hdXRvaW5jcmVtZW50LWluZGV4ZXMu
anMKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW96aWxsYS9yZXNvdXJjZXMv
YXV0b2luY3JlbWVudC1pbmRleGVzLmpzCkBAIC0zNSw3ICszNSw3IEBAIGZ1bmN0aW9uIHNldHVw
T2JqZWN0U3RvcmUoKQogICAgIHRyYW5zID0gZXZlbnQudGFyZ2V0LnJlc3VsdDsKICAgICBkZWxl
dGVBbGxPYmplY3RTdG9yZXMoZGIpOwogCi0gICAgb2JqZWN0U3RvcmUgPSBldmFsQW5kTG9nKCJv
YmplY3RTdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdmb28nLCB7IGtleVBhdGg6ICdpZCcs
IGF1dG9JbmNyZW1lbnQ6IHRydWUgfSk7Iik7CisgICAgb2JqZWN0U3RvcmUgPSBldmFsQW5kTG9n
KCJvYmplY3RTdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdhdXRvaW5jcmVtZW50LWlkJywg
eyBrZXlQYXRoOiAnaWQnLCBhdXRvSW5jcmVtZW50OiB0cnVlIH0pOyIpOwogICAgIGV2YWxBbmRM
b2coIm9iamVjdFN0b3JlLmNyZWF0ZUluZGV4KCdmaXJzdCcsICdmaXJzdCcpOyIpOwogICAgIGV2
YWxBbmRMb2coIm9iamVjdFN0b3JlLmNyZWF0ZUluZGV4KCdzZWNvbmQnLCAnc2Vjb25kJyk7Iik7
CiAgICAgZXZhbEFuZExvZygib2JqZWN0U3RvcmUuY3JlYXRlSW5kZXgoJ3RoaXJkJywgJ3RoaXJk
Jyk7Iik7CkBAIC00OSwxMiArNDksMTMgQEAgZnVuY3Rpb24gc2V0dXBJbmRleGVzKCkKIHsKICAg
ICBrZXkgPSBldmFsQW5kTG9nKCJrZXkgPSBldmVudC50YXJnZXQucmVzdWx0OyIpOwogICAgIHNo
b3VsZEJlRmFsc2UoImtleSA9PSBudWxsIik7CisgICAgZGVidWcoImV4cGVjdGVkIGtleSBpcyAi
ICsga2V5KTsKICAgICB0cmFucy5vbmNvbXBsZXRlID0gc2V0VmVyc2lvbkNvbXBsZXRlOwogfQog
CiBmdW5jdGlvbiBzZXRWZXJzaW9uQ29tcGxldGUoKQogewotICAgIG9iamVjdFN0b3JlID0gZXZh
bEFuZExvZygib2JqZWN0U3RvcmUgPSBkYi50cmFuc2FjdGlvbignZm9vJykub2JqZWN0U3RvcmUo
J2ZvbycpOyIpOworICAgIG9iamVjdFN0b3JlID0gZXZhbEFuZExvZygib2JqZWN0U3RvcmUgPSBk
Yi50cmFuc2FjdGlvbignYXV0b2luY3JlbWVudC1pZCcpLm9iamVjdFN0b3JlKCdhdXRvaW5jcmVt
ZW50LWlkJyk7Iik7CiAgICAgZmlyc3QgPSBldmFsQW5kTG9nKCJmaXJzdCA9IG9iamVjdFN0b3Jl
LmluZGV4KCdmaXJzdCcpOyIpOwogICAgIHJlcXVlc3QgPSBldmFsQW5kTG9nKCJyZXF1ZXN0ID0g
Zmlyc3QuZ2V0KCdmb28nKTsiKTsKICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGNoZWNrRmlyc3RJ
bmRleEFuZFByZXBhcmVTZWNvbmQ7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154487</attachid>
            <date>2012-07-25 16:49:44 -0700</date>
            <delta_ts>2012-07-26 14:17:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91123-20120725164934.patch</filename>
            <type>text/plain</type>
            <size>50211</size>
            <attacher name="Alec Flett">alecflett</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzNjM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDAzYWI4YzQyYWU3ODQx
MTkzOTEwMjZiNjYyZDgwYjg1MWZmNWM4YS4uY2MxYjgyYTY3NjE0NDEzYjI4ZjExODU0ODZmMGQ1
ZjE1NjI5NThlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYxIEBACisyMDEyLTA3LTI1ICBBbGVj
IEZsZXR0ICA8YWxlY2ZsZXR0QGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IGlu
amVjdCBpbmRleCBrZXlzIG9uIGN1cnNvci9vYmplY3RzdG9yZS9pbmRleCBnZXQgc3VjY2VzcyBo
YW5kbGVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTExMjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBN
b3ZlIGtleS1pbmplY3Rpb24gaW50byB0aGUgZnJvbnRlbmQsIGJ5IGluamVjdGluZyB0aGUga2V5
IGludG8KKyAgICAgICAgdGhlIHZhbHVlIG9uIGdldCByYXRoZXIgdGhhbiBzZXQgZm9yIGF1dG9p
bmNyZW1lbnRlZCBrZXlzLiBUaGlzCisgICAgICAgIGdpdmVzIGEgcG90ZW50aWFsIHBlcmZvcm1h
bmNlIHdpbiBieSBhdm9pZGluZyBhbiBJUEMgY2FsbCB0byB0aGUKKyAgICAgICAgVjggdXRpbGl0
eSBwcm9jZXNzIG9uIGNocm9taXVtLCBhbmQgZ2VuZXJhbGx5IGNsZWFucyB1cCB0aGUga2V5Cisg
ICAgICAgIG1hbmFnZW1lbnQuCisKKyAgICAgICAgTm90ZSB0aGF0IHRoaXMgZHVwbGljYXRlcyB0
aGUgbG9naWMgb2YgZ2VuZXJhdGVJbmRleEtleXMgaW50byB0aGUKKyAgICAgICAgZnJvbnRlbmQg
dW50aWwgdGhhdCBtZXRob2QgY2FuIGJlIGV4cHVuZ2VkIGZyb20gdGhlIGJhY2tlbmQuIFRoaXMK
KyAgICAgICAgd2lsbCBiZSBjbGVhbmVkIHVwIGluIGEgbGF0ZXIgcGF0Y2guCisKKyAgICAgICAg
SW4gb3JkZXIgdG8gYWNjb3VudCBmb3IgYm90aCBvbGQgZGF0YSAod2hpY2ggaGFzIHRoZSBkdXBs
aWNhdGUKKyAgICAgICAgcHJpbWFyeSBrZXkgYWxyZWFkeSBpbmplY3RlZCBhbmQgc2VyaWFsaXpl
ZCkgYW5kIGFueSBuZXcgZGF0YSwgYW4KKyAgICAgICAgYXNzZXJ0aW9uIHdhcyByZW1vdmVkIGZy
b20gSURCQmluZGluZ1V0aWxpdGllcy4KKworICAgICAgICBUaGlzIGFsc28gaW5jbHVkZXMgc29t
ZSBtaW5vciByZWZhY3RvcmluZyBzdWNoIGFzIHRoZSBkZXByZWNhdGlvbgorICAgICAgICBvZiBJ
REJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjp1cGRhdGUgaW4gZmF2b3Igb2YgYSBkaXJlY3QgY2Fs
bCB0bworICAgICAgICBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXQsIGFuZCByZW1vdmFs
IG9mIHRoZSBub3ctZGVmdW5jdAorICAgICAgICBJREJCYWNraW5nU3RvcmU6OmdldE9iamVjdFZp
YUluZGV4LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIHRoaXMgaXMgYSByZWZhY3Rv
cmluZywgYW5kIGFjdHVhbCBiZWhhdmlvcgorICAgICAgICBoYXNuJ3QgY2hhbmdlZC4KKworICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oOgorICAgICAgICAoSURC
QmFja2luZ1N0b3JlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yOjp1cGRhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCQ3Vyc29yOjpzZXRWYWx1ZVJlYWR5KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3JC
YWNrZW5kSW1wbDo6dXBkYXRlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRl
eEJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4QmFja2VuZEltcGw6
OmdldEludGVybmFsKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFj
a2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFj
a2luZ1N0b3JlLmg6CisgICAgICAgIChJREJMZXZlbERCQmFja2luZ1N0b3JlKToKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpnZW5lcmF0ZUluZGV4S2V5c0ZvclZhbHVlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJP
YmplY3RTdG9yZTo6cHV0KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RT
dG9yZS5oOgorICAgICAgICAoSURCT2JqZWN0U3RvcmUpOgorICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OnB1dFdpdGhJbmRleEtleXMpOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRl
cm5hbCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpvblN1Y2Nlc3MpOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisKIDIwMTIt
MDctMjUgIEFuZHJldyBXaWxzb24gIDxhdHdpbHNvbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
VW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEyMzU2MC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
aW5kZXggZjFiNDNmZTJiMjdiNDMwMDJhYTBmZWY0OGEzMDI0OTc2NWUyOTJjYy4uNTViNTExZjI4
MTMwOTUxZTlkNGZiNjY1MjM2MTNlZDVhYTRhZDdmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMi0wNy0yNSAgQWxlYyBGbGV0dCAgPGFsZWNmbGV0dEBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBpbmplY3QgaW5kZXgga2V5cyBvbiBj
dXJzb3Ivb2JqZWN0c3RvcmUvaW5kZXggZ2V0IHN1Y2Nlc3MgaGFuZGxlcnMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxMTIzCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlIG1ldGhvZCBubyBsb25n
ZXIgdXNlZC4KKworICAgICAgICAqIHRlc3RzL0lEQkZha2VCYWNraW5nU3RvcmUuaDoKKwogMjAx
Mi0wNy0yNSAgQWRyaWVubmUgV2Fsa2VyICA8ZW5uZUBnb29nbGUuY29tPgogCiAgICAgICAgIFtj
aHJvbWl1bV0gVW5pZnkgY29tcG9zaXRvciBxdWFkVHJhbnNmb3JtL2RyYXdUcmFuc2Zvcm0vb3Jp
Z2luVHJhbnNmb3JtCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkJhY2tpbmdTdG9yZS5oCmluZGV4IDc4YTlmNjY3YWRkMTMwZTYzZTNjMDc0NmQ0YTcwM2I0ODk1
NDZiZDcuLmY4ZGU2ODIwMjdmYzI1M2Y3N2ZhNTU5OTRjMWViMGViZmMzMDQxNTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oCkBA
IC04Myw3ICs4Myw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgoaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCkg
PSAwOwogICAgIHZpcnR1YWwgYm9vbCBwdXRJbmRleERhdGFGb3JSZWNvcmQoaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURC
S2V5JiwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKikgPSAwOwogICAgIHZpcnR1
YWwgYm9vbCBkZWxldGVJbmRleERhdGFGb3JSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgT2JqZWN0U3RvcmVSZWNv
cmRJZGVudGlmaWVyKikgPSAwOwotICAgIHZpcnR1YWwgU3RyaW5nIGdldE9iamVjdFZpYUluZGV4
KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4
SWQsIGNvbnN0IElEQktleSYpID0gMDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBn
ZXRQcmltYXJ5S2V5VmlhSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JikgPSAwOwogICAgIHZpcnR1YWwg
Ym9vbCBrZXlFeGlzdHNJbkluZGV4KGludDY0X3QgZGF0YWJhc2VpZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYgaW5kZXhLZXksIFJlZlB0cjxJ
REJLZXk+JiBmb3VuZFByaW1hcnlLZXkpID0gMDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHAKaW5kZXggZWYzNGNiOGM3ZmI3NjM2MTg0MTIyYjNj
YjgzNmQyNDhkMjFlYjkzMC4uMDVkZGIyNTFlNGZhMmMxNzk2ZWI1ZTIzYTg4N2RmMjhlN2E0N2Rh
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29y
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3Bw
CkBAIC0xNTksMTMgKzE1OSw3IEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCQ3Vyc29yOjp1
cGRhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlCiAgICAgICAgIH0K
ICAgICB9CiAKLSAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNy
ZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7
Ci0gICAgbV9iYWNrZW5kLT51cGRhdGUodmFsdWUsIHJlcXVlc3QsIGVjKTsKLSAgICBpZiAoZWMp
IHsKLSAgICAgICAgcmVxdWVzdC0+bWFya0Vhcmx5RGVhdGgoKTsKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgfQotICAgIHJldHVybiByZXF1ZXN0LnJlbGVhc2UoKTsKKyAgICByZXR1cm4gb2JqZWN0
U3RvcmUtPnB1dChJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OkN1cnNvclVwZGF0ZSwg
SURCQW55OjpjcmVhdGUodGhpcyksIGNvbnRleHQsIHZhbHVlLCBtX2N1cnJlbnRQcmltYXJ5S2V5
LCBlYyk7CiB9CiAKIHZvaWQgSURCQ3Vyc29yOjphZHZhbmNlKHVuc2lnbmVkIGxvbmcgY291bnQs
IEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMjU5LDE4ICsyNTMsMjEgQEAgdm9pZCBJREJDdXJzb3I6
OnNldFZhbHVlUmVhZHkoKQogICAgIG1fY3VycmVudFByaW1hcnlLZXkgPSBtX2JhY2tlbmQtPnBy
aW1hcnlLZXkoKTsKIAogICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlID0g
bV9iYWNrZW5kLT52YWx1ZSgpOwotI2lmbmRlZiBOREVCVUcKICAgICBpZiAoIWlzS2V5Q3Vyc29y
KCkpIHsKLSAgICAgICAgLy8gRklYTUU6IEFjdHVhbGx5IGluamVjdCB0aGUgcHJpbWFyeUtleSBh
dCB0aGUga2V5UGF0aC4KICAgICAgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlPiBvYmplY3RTdG9y
ZSA9IGVmZmVjdGl2ZU9iamVjdFN0b3JlKCk7Ci0gICAgICAgIGlmIChvYmplY3RTdG9yZS0+YXV0
b0luY3JlbWVudCgpICYmICFvYmplY3RTdG9yZS0+bWV0YWRhdGEoKS5rZXlQYXRoLmlzTnVsbCgp
KSB7Ci0gICAgICAgICAgICBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoID0gb2JqZWN0U3RvcmUt
Pm1ldGFkYXRhKCkua2V5UGF0aDsKLSAgICAgICAgICAgIFJlZlB0cjxJREJLZXk+IGV4cGVjdGVk
S2V5ID0gY3JlYXRlSURCS2V5RnJvbVNlcmlhbGl6ZWRWYWx1ZUFuZEtleVBhdGgodmFsdWUsIGtl
eVBhdGgpOwotICAgICAgICAgICAgQVNTRVJUKG1fY3VycmVudFByaW1hcnlLZXkpOwotICAgICAg
ICAgICAgQVNTRVJUKGV4cGVjdGVkS2V5LT5pc0VxdWFsKG1fY3VycmVudFByaW1hcnlLZXkuZ2V0
KCkpKTsKKyAgICAgICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBtZXRhZGF0YSA9IG9i
amVjdFN0b3JlLT5tZXRhZGF0YSgpOworICAgICAgICBpZiAobWV0YWRhdGEuYXV0b0luY3JlbWVu
dCAmJiAhbWV0YWRhdGEua2V5UGF0aC5pc051bGwoKSkgeworI2lmbmRlZiBOREVCVUcKKyAgICAg
ICAgICAgIFJlZlB0cjxJREJLZXk+IGV4cGVjdGVkS2V5ID0gY3JlYXRlSURCS2V5RnJvbVNlcmlh
bGl6ZWRWYWx1ZUFuZEtleVBhdGgodmFsdWUsIG1ldGFkYXRhLmtleVBhdGgpOworICAgICAgICAg
ICAgQVNTRVJUKCFleHBlY3RlZEtleSB8fCBleHBlY3RlZEtleS0+aXNFcXVhbChtX2N1cnJlbnRQ
cmltYXJ5S2V5LmdldCgpKSk7CisjZW5kaWYKKyAgICAgICAgICAgIFJlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+IHZhbHVlQWZ0ZXJJbmplY3Rpb24gPSBpbmplY3RJREJLZXlJbnRvU2VyaWFs
aXplZFZhbHVlKG1fY3VycmVudFByaW1hcnlLZXksIHZhbHVlLCBtZXRhZGF0YS5rZXlQYXRoKTsK
KyAgICAgICAgICAgIEFTU0VSVCh2YWx1ZUFmdGVySW5qZWN0aW9uKTsKKyAgICAgICAgICAgIC8v
IEZJWE1FOiBUaGVyZSBpcyBubyB3YXkgdG8gcmVwb3J0IGVycm9ycyBoZXJlLiBNb3ZlIHRoaXMg
aW50byBvblN1Y2Nlc3NXaXRoQ29udGludWF0aW9uIHNvIHRoYXQgd2UgY2FuIGFib3J0IHRoZSB0
cmFuc2FjdGlvbiB0aGVyZS4gU2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9OTIyNzgKKyAgICAgICAgICAgIGlmICh2YWx1ZUFmdGVySW5qZWN0aW9uKQorICAgICAg
ICAgICAgICAgIHZhbHVlID0gdmFsdWVBZnRlckluamVjdGlvbjsKICAgICAgICAgfQogICAgIH0K
LSNlbmRpZgogICAgIG1fY3VycmVudFZhbHVlID0gSURCQW55OjpjcmVhdGUodmFsdWUucmVsZWFz
ZSgpKTsKIAogICAgIG1fZ290VmFsdWUgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwCmluZGV4IGFl
MjdhZjhhMzJjNmJiNjk0OTJiZmYwODY2ZTJkMDI4NTI0NDY2MDMuLjBhMzlhOGZiYzY5ZTA2NzNm
NzM3Mjc2MTJiOTFlY2I1MWFkOWEwOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAKQEAgLTgzLDE3ICs4
Myw2IEBAIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBJREJDdXJzb3JCYWNrZW5k
SW1wbDo6dmFsdWUoKSBjb25zdAogICAgIHJldHVybiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNy
ZWF0ZUZyb21XaXJlKG1fY3Vyc29yLT52YWx1ZSgpKTsKIH0KIAotdm9pZCBJREJDdXJzb3JCYWNr
ZW5kSW1wbDo6dXBkYXRlKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgRXhjZXB0aW9uQ29kZSYgZWMpCi17
Ci0gICAgSURCX1RSQUNFKCJJREJDdXJzb3JCYWNrZW5kSW1wbDo6dXBkYXRlIik7Ci0gICAgQVNT
RVJUKG1fdHJhbnNhY3Rpb24tPm1vZGUoKSAhPSBJREJUcmFuc2FjdGlvbjo6UkVBRF9PTkxZKTsK
LQotICAgIEFTU0VSVChtX2N1cnNvcik7Ci0gICAgQVNTRVJUKG1fY3Vyc29yVHlwZSAhPSBJbmRl
eEtleUN1cnNvcik7Ci0KLSAgICBtX29iamVjdFN0b3JlLT5wdXQodmFsdWUsIG1fY3Vyc29yLT5w
cmltYXJ5S2V5KCksIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6Q3Vyc29yVXBkYXRl
LCBjYWxsYmFja3MsIG1fdHJhbnNhY3Rpb24uZ2V0KCksIGVjKTsKLX0KLQogdm9pZCBJREJDdXJz
b3JCYWNrZW5kSW1wbDo6Y29udGludWVGdW5jdGlvbihQYXNzUmVmUHRyPElEQktleT4gcHJwS2V5
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKICAgICBJREJfVFJBQ0UoIklEQkN1cnNvckJhY2tlbmRJbXBsOjpjb250aW51ZSIpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFj
a2VuZEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJh
Y2tlbmRJbXBsLmgKaW5kZXggMDQzYzQwMzUyY2RkM2EzZmQ2M2Y5OTcyZDE2NzIxZjA0OGUyYjA5
OS4uNTA5N2M1Mzg3NjhmMjlmMDkxOTRiMjk0OTBiMWQ0MTJkZTRlMWYzYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1w
bC5oCkBAIC01Nyw3ICs1Nyw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURC
S2V5PiBrZXkoKSBjb25zdDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5
S2V5KCkgY29uc3Q7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZT4gdmFsdWUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlKFBhc3NSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBFeGNlcHRpb25D
b2RlJik7CiAgICAgdmlydHVhbCB2b2lkIGFkdmFuY2UodW5zaWduZWQgbG9uZywgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+LCBFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIGNvbnRp
bnVlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4s
IEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRnVuY3Rpb24oUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+LCBFeGNlcHRpb25Db2RlJik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlLmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNl
LmgKaW5kZXggNDhkM2ExODI5ZjY1ODhlZGY2MTk3MzM3ZjMxOGIyYzA2ZTkwYmNmMy4uMWRmMjg0
NTZhNDFjODkzODNmZTJiODEyYWQzNzA2ZGUyNzQ4OTQzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbnRlcmZh
Y2UuaApAQCAtNTcsNyArNTcsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElE
QktleT4gcHJpbWFyeUtleSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSgpIGNvbnN0ID0gMDsKIAotICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGUoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4sIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGFkdmFu
Y2UodW5zaWduZWQgbG9uZyBjb3VudCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBFeGNlcHRp
b25Db2RlJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBjb250aW51ZUZ1bmN0aW9uKFBhc3NSZWZQ
dHI8SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgRXhjZXB0aW9uQ29kZSYp
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+LCBFeGNlcHRpb25Db2RlJikgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcAppbmRleCA5ZjVmZjNi
YWZjYTI1NDk3NWE0M2M0MzBlYmNhNWUyMTg2OTBlYzY2Li4xMzQwMDg0OTFmNWE3NDMxOTZlMmZj
OWFiODgyZGFlZTZjYjM5NTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcApAQCAtMTcyLDExICsxNzIsMTkg
QEAgdm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpnZXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgUGFzc1JlZlB0cjxJREJJbmQKICAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yLT5j
bG9zZSgpOwogICAgIH0KIAotICAgIFN0cmluZyB2YWx1ZSA9IGluZGV4LT5iYWNraW5nU3RvcmUo
KS0+Z2V0T2JqZWN0VmlhSW5kZXgoaW5kZXgtPmRhdGFiYXNlSWQoKSwgaW5kZXgtPm1fb2JqZWN0
U3RvcmVCYWNrZW5kLT5pZCgpLCBpbmRleC0+aWQoKSwgKmtleSk7CisgICAgUmVmUHRyPElEQktl
eT4gcHJpbWFyeUtleSA9IGluZGV4LT5iYWNraW5nU3RvcmUoKS0+Z2V0UHJpbWFyeUtleVZpYUlu
ZGV4KGluZGV4LT5kYXRhYmFzZUlkKCksIGluZGV4LT5tX29iamVjdFN0b3JlQmFja2VuZC0+aWQo
KSwgaW5kZXgtPmlkKCksICprZXkpOworCisgICAgU3RyaW5nIHZhbHVlID0gaW5kZXgtPmJhY2tp
bmdTdG9yZSgpLT5nZXRPYmplY3RTdG9yZVJlY29yZChpbmRleC0+ZGF0YWJhc2VJZCgpLCBpbmRl
eC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlkKCksICpwcmltYXJ5S2V5KTsKKwogICAgIGlmICh2
YWx1ZS5pc051bGwoKSkgewogICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVk
U2NyaXB0VmFsdWU6OnVuZGVmaW5lZFZhbHVlKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQor
ICAgIGlmIChpbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmF1dG9JbmNyZW1lbnQoKSAmJiAh
aW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5rZXlQYXRoKCkuaXNOdWxsKCkpIHsKKyAgICAg
ICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9t
V2lyZSh2YWx1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW1hcnlLZXksIGlu
ZGV4LT5tX29iamVjdFN0b3JlQmFja2VuZC0+a2V5UGF0aCgpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNy
ZWF0ZUZyb21XaXJlKHZhbHVlKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCS2V5UGF0aC5jcHAKaW5kZXggMGMzNWQyMGQ2MDZkN2Q1Y2ZiNDE3OTM1YTY3
ZDYwYmQ0NTJkZjNhOC4uZDM4OTk0MTk4NTc1MWYzMGMzMDY3YzdhYzc0ODBlOTY2YWRjNDM2YSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5jcHAK
QEAgLTIzNiw2ICsyMzYsMzEgQEAgSURCS2V5UGF0aDo6b3BlcmF0b3IgUGFzc1JlZlB0cjxJREJB
bnk+KCkgY29uc3QKICAgICByZXR1cm4gMDsKIH0KIAorYm9vbCBJREJLZXlQYXRoOjpvcGVyYXRv
cj09KFBhc3NSZWZQdHI8SURCQW55PiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAoIWlzVmFsaWQo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICBj
YXNlIE51bGxUeXBlOgorICAgICAgICByZXR1cm4gb3RoZXItPnR5cGUoKSA9PSBJREJBbnk6Ok51
bGxUeXBlOworICAgIGNhc2UgU3RyaW5nVHlwZToKKyAgICAgICAgcmV0dXJuIG90aGVyLT50eXBl
KCkgPT0gSURCQW55OjpTdHJpbmdUeXBlICYmIG90aGVyLT5zdHJpbmcoKSA9PSBzdHJpbmcoKTsK
KyAgICBjYXNlIEFycmF5VHlwZToKKyAgICAgICAgaWYgKG90aGVyLT50eXBlKCkgIT0gSURCQW55
OjpET01TdHJpbmdMaXN0VHlwZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAg
ICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gb3RoZXJMaXN0ID0gb3RoZXItPmRvbVN0cmluZ0xpc3Qo
KTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FycmF5LnNpemUoKTsgKytpKSB7
CisgICAgICAgICAgICBpZiAob3RoZXJMaXN0LT5pdGVtKGkpICE9IG1fYXJyYXlbaV0pCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJLZXlQYXRoLmgKaW5kZXggZjUyMzZjMTUyZjAyY2JkYTI4ZGI4YzMxNTFm
MmRkODU3ZWFhZWNlOS4uOTg4MjM0MDNhMGExY2ViYjhiMDFiNDdjZGE5MjAxMWJlZWMzMTE1OCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguaApAQCAt
NzIsNiArNzIsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiBt
X3R5cGUgPT0gTnVsbFR5cGU7IH0KICAgICBib29sIGlzVmFsaWQoKSBjb25zdDsKICAgICBvcGVy
YXRvciBQYXNzUmVmUHRyPElEQkFueT4oKSBjb25zdDsKKyAgICBib29sIG9wZXJhdG9yPT0oUGFz
c1JlZlB0cjxJREJBbnk+IG90aGVyKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBUeXBlIG1fdHlw
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVs
REJCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAKaW5kZXggMzJlMmY2ODE1Nzk0MDlhMDkwOGQyOWExODcy
YzBjZGM1NmI4OWVmOS4uMDUxM2MzNTMzZmNhYjBmZjg1MmRjMGE5MTM0NDU3ZWNmMzYyOTdmMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAKQEAgLTk2NywxNSArOTY3LDYgQEAgYm9vbCBJREJMZXZl
bERCQmFja2luZ1N0b3JlOjpkZWxldGVJbmRleERhdGFGb3JSZWNvcmQoaW50NjRfdCwgaW50NjRf
dCwgaW50NjRfdCwKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotU3RyaW5nIElEQkxldmVsREJCYWNr
aW5nU3RvcmU6OmdldE9iamVjdFZpYUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYga2V5KQotewotICAg
IFJlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkgPSBnZXRQcmltYXJ5S2V5VmlhSW5kZXgoZGF0YWJh
c2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5KTsKLSAgICBpZiAoIXByaW1hcnlLZXkp
Ci0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIHJldHVybiBnZXRPYmplY3RTdG9yZVJl
Y29yZChkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAqcHJpbWFyeUtleSk7Ci19Ci0KIHN0YXRp
YyBib29sIHZlcnNpb25FeGlzdHMoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgdmVyc2lvbiwg
Y29uc3QgVmVjdG9yPGNoYXI+JiBlbmNvZGVkUHJpbWFyeUtleSkKIHsKICAgICBjb25zdCBWZWN0
b3I8Y2hhcj4ga2V5ID0gRXhpc3RzRW50cnlLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RT
dG9yZUlkLCBlbmNvZGVkUHJpbWFyeUtleSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmgKaW5kZXggYzVhOWUy
ZWUzMDllOGNhM2ZkN2Y3MGYwYWEyYmI4MGNlYzA0NmIyZS4uMGJlOTM0ZmZkYTliY2Y4MDkxZDUz
NDEwYTZhYmNjODAwZjU5MGQzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaApAQCAtNjksNyArNjksNiBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUluZGV4KGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpOwogICAgIHZpcnR1YWwg
Ym9vbCBwdXRJbmRleERhdGFGb3JSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgT2JqZWN0
U3RvcmVSZWNvcmRJZGVudGlmaWVyKik7CiAgICAgdmlydHVhbCBib29sIGRlbGV0ZUluZGV4RGF0
YUZvclJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50
NjRfdCBpbmRleElkLCBjb25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqKTsKLSAgICB2
aXJ0dWFsIFN0cmluZyBnZXRPYmplY3RWaWFJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmKTsKICAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBnZXRQcmltYXJ5S2V5VmlhSW5kZXgoaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3Qg
SURCS2V5Jik7CiAgICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luSW5kZXgoaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURC
S2V5JiBpbmRleEtleSwgUmVmUHRyPElEQktleT4mIGZvdW5kUHJpbWFyeUtleSk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcApp
bmRleCBkYzliZWM1YjQ5MDViNmNiOGQxNjFlMmIwMDc1NTgyYzM5ZjU2NmU1Li43ZjdjZDc0YmIw
ZWRjYjYzZjg0NTQwYmViMGM5NTlkZWNlNjI2ZjE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCkBAIC0xMDIsMTkgKzEwMiw0
NCBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpnZXQoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzcwogICAgIHJldHVybiBnZXQoY29udGV4dCwga2V5
UmFuZ2UucmVsZWFzZSgpLCBlYyk7CiB9CiAKK3N0YXRpYyB2b2lkIGdlbmVyYXRlSW5kZXhLZXlz
Rm9yVmFsdWUoY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IG9iamVjdFZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBJREJPYmplY3RTdG9yZTo6SW5kZXhLZXlzKiBpbmRleEtleXMpCit7CisgICAgQVNTRVJUKGlu
ZGV4S2V5cyk7CisgICAgUmVmUHRyPElEQktleT4gaW5kZXhLZXkgPSBjcmVhdGVJREJLZXlGcm9t
U2VyaWFsaXplZFZhbHVlQW5kS2V5UGF0aChvYmplY3RWYWx1ZSwgaW5kZXhNZXRhZGF0YS5rZXlQ
YXRoKTsKKworICAgIGlmICghaW5kZXhLZXkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICgh
aW5kZXhNZXRhZGF0YS5tdWx0aUVudHJ5IHx8IGluZGV4S2V5LT50eXBlKCkgIT0gSURCS2V5OjpB
cnJheVR5cGUpIHsKKyAgICAgICAgaWYgKCFpbmRleEtleS0+aXNWYWxpZCgpKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIGluZGV4S2V5cy0+YXBwZW5kKGluZGV4S2V5KTsKKyAgICB9
IGVsc2UgeworICAgICAgICBBU1NFUlQoaW5kZXhNZXRhZGF0YS5tdWx0aUVudHJ5KTsKKyAgICAg
ICAgQVNTRVJUKGluZGV4S2V5LT50eXBlKCkgPT0gSURCS2V5OjpBcnJheVR5cGUpOworICAgICAg
ICBpbmRleEtleSA9IElEQktleTo6Y3JlYXRlTXVsdGlFbnRyeUFycmF5KGluZGV4S2V5LT5hcnJh
eSgpKTsKKworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluZGV4S2V5LT5hcnJheSgp
LnNpemUoKTsgKytpKQorICAgICAgICAgICAgaW5kZXhLZXlzLT5hcHBlbmQoaW5kZXhLZXktPmFy
cmF5KClbaV0pOworICAgIH0KK30KKwogUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RT
dG9yZTo6YWRkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgRXhjZXB0
aW9uQ29kZSYgZWMpCiB7CiAgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZTo6YWRkIik7Ci0g
ICAgcmV0dXJuIHB1dChJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OkFkZE9ubHksIGNv
bnRleHQsIHZhbHVlLCBrZXksIGVjKTsKKyAgICByZXR1cm4gcHV0KElEQk9iamVjdFN0b3JlQmFj
a2VuZEludGVyZmFjZTo6QWRkT25seSwgSURCQW55OjpjcmVhdGUodGhpcyksIGNvbnRleHQsIHZh
bHVlLCBrZXksIGVjKTsKIH0KIAogUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9y
ZTo6cHV0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8U2VyaWFs
aXplZFNjcmlwdFZhbHVlPiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgRXhjZXB0aW9u
Q29kZSYgZWMpCiB7CiAgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZTo6cHV0Iik7Ci0gICAg
cmV0dXJuIHB1dChJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OkFkZE9yVXBkYXRlLCBj
b250ZXh0LCB2YWx1ZSwga2V5LCBlYyk7CisgICAgcmV0dXJuIHB1dChJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbnRlcmZhY2U6OkFkZE9yVXBkYXRlLCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgY29udGV4
dCwgdmFsdWUsIGtleSwgZWMpOwogfQogCi1QYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVj
dFN0b3JlOjpwdXQoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpQdXRNb2RlIHB1dE1v
ZGUsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwgRXhjZXB0
aW9uQ29kZSYgZWMpCitQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpwdXQo
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQ
dHI8SURCQW55PiBzb3VyY2UsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+
IHBycEtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgSURCX1RSQUNFKCJJREJPYmplY3RT
dG9yZTo6cHV0Iik7CiAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUgPSBw
cnBWYWx1ZTsKQEAgLTE0MSw3ICsxNjYsNyBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9i
amVjdFN0b3JlOjpwdXQoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpQdXRNbwogICAg
IGNvbnN0IGJvb2wgdXNlc0luTGluZUtleXMgPSAha2V5UGF0aC5pc051bGwoKTsKICAgICBjb25z
dCBib29sIGhhc0tleUdlbmVyYXRvciA9IGF1dG9JbmNyZW1lbnQoKTsKIAotICAgIGlmICh1c2Vz
SW5MaW5lS2V5cyAmJiBrZXkpIHsKKyAgICBpZiAocHV0TW9kZSAhPSBJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbnRlcmZhY2U6OkN1cnNvclVwZGF0ZSAmJiB1c2VzSW5MaW5lS2V5cyAmJiBrZXkpIHsK
ICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7CiAgICAgICAgIHJl
dHVybiAwOwogICAgIH0KQEAgLTE2NywxNSArMTkyLDI2IEBAIFBhc3NSZWZQdHI8SURCUmVxdWVz
dD4gSURCT2JqZWN0U3RvcmU6OnB1dChJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OlB1
dE1vCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
KyAgICAgICAgaWYgKGtleVBhdGhLZXkpCisgICAgICAgICAgICBrZXkgPSBrZXlQYXRoS2V5Owog
ICAgIH0KICAgICBpZiAoa2V5ICYmICFrZXktPmlzVmFsaWQoKSkgewogICAgICAgICBlYyA9IElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQog
Ci0gICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29u
dGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgIC8v
IEZJWE1FOiBQYXNzIHRocm91Z2gga2V5UGF0aEtleSBhcyBrZXkgdG8gc2ltcGxpZnkgYmFjayBl
bmQgaW1wbGVtZW50YXRpb24uCi0gICAgbV9iYWNrZW5kLT5wdXQodmFsdWUucmVsZWFzZSgpLCBr
ZXkucmVsZWFzZSgpLCBwdXRNb2RlLCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCks
IGVjKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBpbmRleE5hbWVzOworICAgIFZlY3RvcjxJbmRleEtl
eXM+IGluZGV4S2V5czsKKyAgICBmb3IgKElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkluZGV4TWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fbWV0YWRhdGEuaW5kZXhlcy5iZWdpbigpOyBpdCAhPSBt
X21ldGFkYXRhLmluZGV4ZXMuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgSW5kZXhLZXlzIGtleXM7
CisgICAgICAgIGdlbmVyYXRlSW5kZXhLZXlzRm9yVmFsdWUoaXQtPnNlY29uZCwgdmFsdWUsICZr
ZXlzKTsKKyAgICAgICAgaW5kZXhOYW1lcy5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgaW5k
ZXhLZXlzLmFwcGVuZChrZXlzKTsKKyAgICB9CisgICAgQVNTRVJUKGluZGV4S2V5cy5zaXplKCkg
PT0gaW5kZXhOYW1lcy5zaXplKCkpOworCisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3Qg
PSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgc291cmNlLCBtX3RyYW5zYWN0aW9uLmdldCgp
KTsKKyAgICBtX2JhY2tlbmQtPnB1dFdpdGhJbmRleEtleXModmFsdWUucmVsZWFzZSgpLCBrZXku
cmVsZWFzZSgpLCBwdXRNb2RlLCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGlu
ZGV4TmFtZXMsIGluZGV4S2V5cywgZWMpOwogICAgIGlmIChlYykgewogICAgICAgICByZXF1ZXN0
LT5tYXJrRWFybHlEZWF0aCgpOwogICAgICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oCmluZGV4IGVmN2MwNjNiOGY4
MjI2NDE3YTdiZmY4ZjJmZTEzNjk4MjQzYjg1MzcuLjZmZWZjNGUyYmFkMDk1YWU2ZDEzMzRjM2Vi
Yjk2ZmU5MDg5Yjg4MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQk9iamVjdFN0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCT2JqZWN0U3RvcmUuaApAQCAtOTUsNyArOTUsNyBAQCBwdWJsaWM6CiAgICAgUGFzc1Jl
ZlB0cjxJREJSZXF1ZXN0PiBjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0
cjxJREJLZXlSYW5nZT4sIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBQYXNzUmVmUHRyPElEQlJlcXVl
c3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleT4sIEV4
Y2VwdGlvbkNvZGUmKTsKIAotICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gcHV0KElEQk9iamVj
dFN0b3JlQmFja2VuZEludGVyZmFjZTo6UHV0TW9kZSwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJREJLZXk+LCBF
eGNlcHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBwdXQoSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkFueT4gc291cmNl
LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+LCBQYXNzUmVmUHRyPElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIG1hcmtE
ZWxldGVkKCkgeyBtX2RlbGV0ZWQgPSB0cnVlOyB9CiAgICAgdm9pZCB0cmFuc2FjdGlvbkZpbmlz
aGVkKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKaW5kZXggYjk2MmU5NDg3YTIxNmZh
YzU4OThlMGEwNzJlYjA2NWIzNjhmYjU0NS4uZTc5MWU0ZTkyNDczOGFhMzk3ODViMTc3OTYyNDE4
ZTM1MDc5OGIxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKQEAgLTEyMCw0OCArMTIw
LDYgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpnZXRJbnRlcm5hbChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjwKICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhT
ZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlKHdpcmVEYXRhKSk7CiB9CiAKLXN0
YXRpYyBQYXNzUmVmUHRyPElEQktleT4gZmV0Y2hLZXlGcm9tS2V5UGF0aChTZXJpYWxpemVkU2Ny
aXB0VmFsdWUqIHZhbHVlLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKQotewotICAgIElEQl9U
UkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZmV0Y2hLZXlGcm9tS2V5UGF0aCIpOwot
ICAgIEFTU0VSVCgha2V5UGF0aC5pc051bGwoKSk7Ci0KLSAgICBWZWN0b3I8UmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gPiB2YWx1ZXM7Ci0gICAgdmFsdWVzLmFwcGVuZCh2YWx1ZSk7Ci0g
ICAgVmVjdG9yPFJlZlB0cjxJREJLZXk+ID4ga2V5czsKLSAgICBJREJLZXlQYXRoQmFja2VuZElt
cGw6OmNyZWF0ZUlEQktleXNGcm9tU2VyaWFsaXplZFZhbHVlc0FuZEtleVBhdGgodmFsdWVzLCBr
ZXlQYXRoLCBrZXlzKTsKLSAgICBpZiAoa2V5cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAw
OwotICAgIEFTU0VSVChrZXlzLnNpemUoKSA9PSAxKTsKLSAgICByZXR1cm4ga2V5c1swXS5yZWxl
YXNlKCk7Ci19Ci0KLXN0YXRpYyBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gaW5q
ZWN0S2V5SW50b0tleVBhdGgoUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKQotewot
ICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6aW5qZWN0S2V5SW50b0tl
eVBhdGgiKTsKLSAgICByZXR1cm4gSURCS2V5UGF0aEJhY2tlbmRJbXBsOjppbmplY3RJREJLZXlJ
bnRvU2VyaWFsaXplZFZhbHVlKGtleSwgdmFsdWUsIGtleVBhdGgpOwotfQotCi0vLyBGSVhNRTog
UmVtb3ZlIHRoaXMgbWV0aG9kIHdoZW4gZ2V0LXNpZGUga2V5IGluamVjdGlvbiBpcyB0aGUgbm9y
bS4KLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0KFBhc3NSZWZQdHI8U2VyaWFs
aXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwgUHV0
TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25Db2Rl
JiBlYykKLXsKLSAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dCIp
OwotICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0V2l0aEluZGV4
S2V5cyIpOwotCi0gICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0
b3JlID0gdGhpczsKLSAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSA9IHBy
cFZhbHVlOwotICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IHBycEtleTsKLSAgICBSZWZQdHI8SURC
Q2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7Ci0gICAgUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bDo6ZnJvbSh0cmFuc2FjdGlvblB0cik7Ci0gICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkg
IT0gSURCVHJhbnNhY3Rpb246OlJFQURfT05MWSk7Ci0KLSAgICAvLyBOdWxsIHBvaW50ZXJzIGhl
cmUgc2lnbmlmeSB0aGF0IGluZGV4IGtleXMgc2hvdWxkIGJlIGdlbmVyYXRlZCBhcyBhIHBhcnQg
b2YgdGhpcyBwdXQuCi0gICAgT3duUHRyPFZlY3RvcjxTdHJpbmc+ID4gbnVsbEluZGV4TmFtZXM7
Ci0gICAgT3duUHRyPFZlY3RvcjxJbmRleEtleXM+ID4gbnVsbEluZGV4S2V5czsKLSAgICBpZiAo
IXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soCi0gICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rh
c2soJklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsLCBvYmplY3RTdG9yZSwg
dmFsdWUsIGtleSwgcHV0TW9kZSwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbiwgbnVsbEluZGV4TmFt
ZXMucmVsZWFzZSgpLCBudWxsSW5kZXhLZXlzLnJlbGVhc2UoKSkpKQotICAgICAgICBlYyA9IElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9FUlI7Ci19Ci0KIHZvaWQg
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0V2l0aEluZGV4S2V5cyhQYXNzUmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBwcnBLZXks
IFB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgY29uc3QgVmVj
dG9yPFN0cmluZz4mIGluZGV4TmFtZXMsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiBpbmRleEtl
eXMsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6cHV0V2l0aEluZGV4S2V5cyIpOwpAQCAtMTc2LDYgKzEzNCw4IEBAIHZvaWQg
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0V2l0aEluZGV4S2V5cyhQYXNzUmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1CiAgICAgT3duUHRyPFZlY3RvcjxTdHJpbmc+ID4gbmV3SW5kZXhO
YW1lcyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8U3RyaW5nPihpbmRleE5hbWVzKSk7CiAgICAgT3du
UHRyPFZlY3RvcjxJbmRleEtleXM+ID4gbmV3SW5kZXhLZXlzID0gYWRvcHRQdHIobmV3IFZlY3Rv
cjxJbmRleEtleXM+KGluZGV4S2V5cykpOwogCisgICAgQVNTRVJUKGF1dG9JbmNyZW1lbnQoKSB8
fCBrZXkpOworCiAgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKAogICAgICAgICAg
ICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRl
cm5hbCwgb2JqZWN0U3RvcmUsIHZhbHVlLCBrZXksIHB1dE1vZGUsIGNhbGxiYWNrcywgdHJhbnNh
Y3Rpb24sIG5ld0luZGV4TmFtZXMucmVsZWFzZSgpLCBuZXdJbmRleEtleXMucmVsZWFzZSgpKSkp
CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZF
X0VSUjsKQEAgLTE5NCwxOCArMTU0LDE5IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2luZGV4S2V5
cyhpbmRleEtleXMpCiAgICAgeyB9CiAKLSAgICBib29sIGdlbmVyYXRlSW5kZXhLZXlzRm9yVmFs
dWUoU2VyaWFsaXplZFNjcmlwdFZhbHVlKiBvYmplY3RWYWx1ZSkKKyAgICAvLyBGSVhNRTogcmVt
b3ZlIHRoaXMgb25jZSBjcmVhdGVJbmRleCgpIGdlbmVyYXRlcyB0aGVzZSBpbiB0aGUgcmVuZGVy
ZXIuCisgICAgdm9pZCBnZW5lcmF0ZUluZGV4S2V5c0ZvclZhbHVlKFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZSogb2JqZWN0VmFsdWUpCiAgICAgewogICAgICAgICBtX2luZGV4S2V5cy5jbGVhcigpOwog
Ci0gICAgICAgIFJlZlB0cjxJREJLZXk+IGluZGV4S2V5ID0gZmV0Y2hLZXlGcm9tS2V5UGF0aChv
YmplY3RWYWx1ZSwgbV9pbmRleE1ldGFkYXRhLmtleVBhdGgpOworICAgICAgICBSZWZQdHI8SURC
S2V5PiBpbmRleEtleSA9IGZldGNoS2V5RnJvbUtleVBhdGgob2JqZWN0VmFsdWUpOwogCiAgICAg
ICAgIGlmICghaW5kZXhLZXkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
IHJldHVybjsKIAogICAgICAgICBpZiAoIW1faW5kZXhNZXRhZGF0YS5tdWx0aUVudHJ5IHx8IGlu
ZGV4S2V5LT50eXBlKCkgIT0gSURCS2V5OjpBcnJheVR5cGUpIHsKICAgICAgICAgICAgIGlmICgh
aW5kZXhLZXktPmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgICAgIG1faW5kZXhLZXlzLmFwcGVuZChpbmRl
eEtleSk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0yMTMsMTEgKzE3NCw5IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIEFTU0VSVChpbmRleEtleS0+dHlwZSgpID09IElEQktleTo6QXJyYXlUeXBlKTsK
ICAgICAgICAgICAgIGluZGV4S2V5ID0gSURCS2V5OjpjcmVhdGVNdWx0aUVudHJ5QXJyYXkoaW5k
ZXhLZXktPmFycmF5KCkpOwogCi0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGlu
ZGV4S2V5LT5hcnJheSgpLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGluZGV4S2V5LT5hcnJheSgpLnNpemUoKTsgKytpKQogICAgICAgICAgICAgICAg
IG1faW5kZXhLZXlzLmFwcGVuZChpbmRleEtleS0+YXJyYXkoKVtpXSk7Ci0gICAgICAgICAgICB9
CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgYm9vbCB2ZXJp
ZnlJbmRleEtleXMoSURCQmFja2luZ1N0b3JlJiBiYWNraW5nU3RvcmUsCkBAIC0yNjYsNiArMjI1
LDIxIEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KKworICAgIFBhc3NSZWZQdHI8SURCS2V5PiBmZXRjaEtleUZyb21LZXlQ
YXRoKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogdmFsdWUpCisgICAgeworICAgICAgICBJREJfVFJB
Q0UoIkluZGV4V3JpdGVyOjpmZXRjaEtleUZyb21LZXlQYXRoIik7CisKKyAgICAgICAgVmVjdG9y
PFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+ID4gdmFsdWVzOworICAgICAgICB2YWx1ZXMu
YXBwZW5kKHZhbHVlKTsKKyAgICAgICAgVmVjdG9yPFJlZlB0cjxJREJLZXk+ID4ga2V5czsKKyAg
ICAgICAgSURCS2V5UGF0aEJhY2tlbmRJbXBsOjpjcmVhdGVJREJLZXlzRnJvbVNlcmlhbGl6ZWRW
YWx1ZXNBbmRLZXlQYXRoKHZhbHVlcywgbV9pbmRleE1ldGFkYXRhLmtleVBhdGgsIGtleXMpOwor
ICAgICAgICBpZiAoa2V5cy5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgQVNTRVJUKGtleXMuc2l6ZSgpID09IDEpOworICAgICAgICByZXR1cm4ga2V5c1swXS5yZWxl
YXNlKCk7CisgICAgfQorCiAgICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSBtX2luZGV4TWV0YWRh
dGE7CiAgICAgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleXMgbV9pbmRl
eEtleXM7CiB9OwpAQCAtMjc5LDQwICsyNTMsMTggQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpwdXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjwK
ICAgICBSZWZQdHI8SURCS2V5PiBrZXkgPSBwcnBLZXk7CiAgICAgT3duUHRyPFZlY3RvcjxTdHJp
bmc+ID4gaW5kZXhOYW1lcyA9IHBvcEluZGV4TmFtZXM7CiAgICAgT3duUHRyPFZlY3RvcjxJbmRl
eEtleXM+ID4gaW5kZXhLZXlzID0gcG9wSW5kZXhLZXlzOwotICAgIEFTU0VSVCgoIWluZGV4TmFt
ZXMgJiYgIWluZGV4S2V5cykgfHwgaW5kZXhOYW1lcy0+c2l6ZSgpID09IGluZGV4S2V5cy0+c2l6
ZSgpKTsKKyAgICBBU1NFUlQoaW5kZXhOYW1lcyAmJiBpbmRleEtleXMgJiYgaW5kZXhOYW1lcy0+
c2l6ZSgpID09IGluZGV4S2V5cy0+c2l6ZSgpKTsKICAgICBjb25zdCBib29sIGF1dG9JbmNyZW1l
bnQgPSBvYmplY3RTdG9yZS0+YXV0b0luY3JlbWVudCgpOwogICAgIGJvb2wga2V5V2FzR2VuZXJh
dGVkID0gZmFsc2U7CiAKLSAgICBpZiAocHV0TW9kZSAhPSBDdXJzb3JVcGRhdGUpIHsKLSAgICAg
ICAgY29uc3QgYm9vbCBoYXNLZXlQYXRoID0gIW9iamVjdFN0b3JlLT5tX2tleVBhdGguaXNOdWxs
KCk7Ci0gICAgICAgIGlmIChoYXNLZXlQYXRoKSB7Ci0gICAgICAgICAgICBBU1NFUlQoIWtleSk7
Ci0gICAgICAgICAgICBSZWZQdHI8SURCS2V5PiBrZXlQYXRoS2V5ID0gZmV0Y2hLZXlGcm9tS2V5
UGF0aCh2YWx1ZS5nZXQoKSwgb2JqZWN0U3RvcmUtPm1fa2V5UGF0aCk7Ci0gICAgICAgICAgICBp
ZiAoa2V5UGF0aEtleSkKLSAgICAgICAgICAgICAgICBrZXkgPSBrZXlQYXRoS2V5OwotICAgICAg
ICB9Ci0gICAgICAgIGlmIChhdXRvSW5jcmVtZW50KSB7Ci0gICAgICAgICAgICBpZiAoIWtleSkg
ewotICAgICAgICAgICAgICAgIFJlZlB0cjxJREJLZXk+IGF1dG9JbmNLZXkgPSBvYmplY3RTdG9y
ZS0+Z2VuZXJhdGVLZXkoKTsKLSAgICAgICAgICAgICAgICBrZXlXYXNHZW5lcmF0ZWQgPSB0cnVl
OwotICAgICAgICAgICAgICAgIGlmICghYXV0b0luY0tleS0+aXNWYWxpZCgpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUo
SURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSLCAiTWF4aW11bSBrZXkgZ2VuZXJhdG9yIHZh
bHVlIHJlYWNoZWQuIikpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyB3aGVuIGdldC1z
aWRlIGtleSBpbmplY3Rpb24gaXMgdGhlIG5vcm0uCi0gICAgICAgICAgICAgICAgaWYgKGhhc0tl
eVBhdGgpIHsKLSAgICAgICAgICAgICAgICAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZT4gdmFsdWVBZnRlckluamVjdGlvbiA9IGluamVjdEtleUludG9LZXlQYXRoKGF1dG9JbmNLZXks
IHZhbHVlLCBvYmplY3RTdG9yZS0+bV9rZXlQYXRoKTsKLSAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKHZhbHVlQWZ0ZXJJbmplY3Rpb24pOwotICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbHVl
QWZ0ZXJJbmplY3Rpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrcyBpbiBw
dXQoKSBlbnN1cmUgdGhpcyBzaG91bGQgb25seSBoYXBwZW4gaWYgSS9PIGVycm9yIG9jY3Vycy4K
LSAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVy
cm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAiSW50ZXJuYWwg
ZXJyb3IgaW5zZXJ0aW5nIGdlbmVyYXRlZCBrZXkgaW50byB0aGUgb2JqZWN0LiIpKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlQWZ0ZXJJbmplY3Rpb247Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGtleSA9IGF1dG9JbmNLZXk7Ci0gICAgICAgICAgICB9Cisg
ICAgaWYgKHB1dE1vZGUgIT0gQ3Vyc29yVXBkYXRlICYmIGF1dG9JbmNyZW1lbnQgJiYgIWtleSkg
eworICAgICAgICBSZWZQdHI8SURCS2V5PiBhdXRvSW5jS2V5ID0gb2JqZWN0U3RvcmUtPmdlbmVy
YXRlS2V5KCk7CisgICAgICAgIGtleVdhc0dlbmVyYXRlZCA9IHRydWU7CisgICAgICAgIGlmICgh
YXV0b0luY0tleS0+aXNWYWxpZCgpKSB7CisgICAgICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3Io
SURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUiwg
Ik1heGltdW0ga2V5IGdlbmVyYXRvciB2YWx1ZSByZWFjaGVkLiIpKTsKKyAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQorICAgICAgICBrZXkgPSBhdXRvSW5jS2V5OwogICAgIH0KIAogICAg
IEFTU0VSVChrZXkgJiYga2V5LT5pc1ZhbGlkKCkpOwpAQCAtMzI1LDEyICsyNzcsOCBAQCB2b2lk
IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQYXNzUmVmUHRyPAogCiAgICAgVmVjdG9yPE93blB0cjxJbmRleFdyaXRlcj4gPiBp
bmRleFdyaXRlcnM7CiAgICAgSGFzaE1hcDxTdHJpbmcsIEluZGV4S2V5cz4gaW5kZXhLZXlNYXA7
Ci0gICAgLy8gRklYTUU6IFR1cm4gdGhpcyBpbnRvIGFuIEFTU0VSVChpbmRleEtleXMpIHdoZW4g
Z2V0LXNpZGUga2V5IGluamVjdGlvbiBpcyB0aGUgbm9ybS4KLSAgICBib29sIGhhdmVJbmRleEtl
eXMgPSBpbmRleEtleXMgJiYgIWluZGV4S2V5cy0+aXNFbXB0eSgpOwotICAgIGlmIChoYXZlSW5k
ZXhLZXlzKSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5kZXhOYW1lcy0+c2l6
ZSgpOyArK2kpCi0gICAgICAgICAgICBpbmRleEtleU1hcC5hZGQoaW5kZXhOYW1lcy0+YXQoaSks
IGluZGV4S2V5cy0+YXQoaSkpOwotICAgIH0KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGlu
ZGV4TmFtZXMtPnNpemUoKTsgKytpKQorICAgICAgICBpbmRleEtleU1hcC5hZGQoaW5kZXhOYW1l
cy0+YXQoaSksIGluZGV4S2V5cy0+YXQoaSkpOwogCiAgICAgZm9yIChJbmRleE1hcDo6aXRlcmF0
b3IgaXQgPSBvYmplY3RTdG9yZS0+bV9pbmRleGVzLmJlZ2luKCk7IGl0ICE9IG9iamVjdFN0b3Jl
LT5tX2luZGV4ZXMuZW5kKCk7ICsraXQpIHsKIApAQCAtMzM5LDEyICsyODcsOCBAQCB2b2lkIElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBQYXNzUmVmUHRyPAogICAgICAgICAgICAgY29udGludWU7IC8vIFRoZSBpbmRleCBvYmpl
Y3QgaGFzIGJlZW4gY3JlYXRlZCwgYnV0IGRvZXMgbm90IGV4aXN0IGluIHRoZSBkYXRhYmFzZSB5
ZXQuCiAKICAgICAgICAgT3duUHRyPEluZGV4V3JpdGVyPiBpbmRleFdyaXRlcjsKLSAgICAgICAg
aWYgKGhhdmVJbmRleEtleXMpCi0gICAgICAgICAgICBpbmRleFdyaXRlciA9IGFkb3B0UHRyKG5l
dyBJbmRleFdyaXRlcihpbmRleC0+bWV0YWRhdGEoKSwgaW5kZXhLZXlNYXAuZ2V0KGl0LT5maXJz
dCkpKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpbmRleFdyaXRlciA9IGFkb3B0UHRy
KG5ldyBJbmRleFdyaXRlcihpbmRleC0+bWV0YWRhdGEoKSkpOwotICAgICAgICAgICAgaW5kZXhX
cml0ZXItPmdlbmVyYXRlSW5kZXhLZXlzRm9yVmFsdWUodmFsdWUuZ2V0KCkpOwotICAgICAgICB9
CisgICAgICAgIGluZGV4V3JpdGVyID0gYWRvcHRQdHIobmV3IEluZGV4V3JpdGVyKGluZGV4LT5t
ZXRhZGF0YSgpLCBpbmRleEtleU1hcC5nZXQoaXQtPmZpcnN0KSkpOworCiAgICAgICAgIFN0cmlu
ZyBlcnJvck1lc3NhZ2U7CiAgICAgICAgIGlmICghaW5kZXhXcml0ZXItPnZlcmlmeUluZGV4S2V5
cygqb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZElt
cGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGwuaAppbmRleCA2NDdiYzI5Nzg0OWQ2NGY5MTc1OWNmODVjM2IxNDRhMWUxYzY0YzYy
Li41YjFiNTRmYzJkYjg1ZmQ0OTNhZWNkN2Q2N2JjNWRiZjk1YTU3MDQyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbC5oCkBAIC02Niw3ICs2Niw2IEBAIHB1YmxpYzoKIAogICAgIC8vIElEQk9iamVj
dFN0b3JlQmFja2VuZEludGVyZmFjZQogICAgIHZpcnR1YWwgdm9pZCBnZXQoUGFzc1JlZlB0cjxJ
REJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgdm9pZCBwdXQoUGFz
c1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIFB1dE1v
ZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlKiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBwdXRXaXRoSW5kZXhLZXlz
KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJREJLZXk+LCBQ
dXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZSosIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4m
LCBFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUZ1bmN0aW9uKFBhc3NS
ZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQg
Y2xlYXIoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2UqLCBFeGNlcHRpb25Db2RlJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZS5o
CmluZGV4IDM3ZDNlZTBmOTQzMGRjNTA3YjA5NGUzNDBmODljMzllNGEwZDZkMzQuLmYyZmQwODhj
MWM0MzE0ZDhiZDRhM2YzNjM1MmI5MzliMzQ5NWRmZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2Vu
ZEludGVyZmFjZS5oCkBAIC01Nyw3ICs1Nyw2IEBAIHB1YmxpYzoKICAgICB9OwogICAgIHR5cGVk
ZWYgVmVjdG9yPFJlZlB0cjxJREJLZXk+ID4gSW5kZXhLZXlzOwogCi0gICAgdmlydHVhbCB2b2lk
IHB1dChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NSZWZQdHI8SURCS2V5
PiwgUHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBwdXRX
aXRoSW5kZXhLZXlzKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0
cjxJREJLZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZSosIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgVmVjdG9y
PEluZGV4S2V5cz4mLCBFeGNlcHRpb25Db2RlJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkZWxl
dGVGdW5jdGlvbihQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgPSAw
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1
ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3Bw
CmluZGV4IGExZWFmMjkzMGMxYTFlYjhjMjdiY2VlOGU1MjIwOWU4MjY5ODQzNGUuLmQ5ZjQyMjUz
ZThmY2QwZmEzZGIwN2VmNTg0ODQwYWVkMmFiN2IwM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwCkBAIC0zMzksMjQgKzMzOSw0MiBAQCB2
b2lkIElEQlJlcXVlc3Q6Om9uU3VjY2VzcyhQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZT4gc2VyaWFsaXplZFNjcmlwdFZhbAogICAgIGVucXVldWVFdmVudChjcmVhdGVTdWNjZXNzRXZl
bnQoKSk7CiB9CiAKKyNpZm5kZWYgTkRFQlVHCitzdGF0aWMgUGFzc1JlZlB0cjxJREJPYmplY3RT
dG9yZT4gZWZmZWN0aXZlT2JqZWN0U3RvcmUoUGFzc1JlZlB0cjxJREJBbnk+IHNvdXJjZSkKK3sK
KyAgICBpZiAoc291cmNlLT50eXBlKCkgPT0gSURCQW55OjpJREJPYmplY3RTdG9yZVR5cGUpCisg
ICAgICAgIHJldHVybiBzb3VyY2UtPmlkYk9iamVjdFN0b3JlKCk7CisgICAgaWYgKHNvdXJjZS0+
dHlwZSgpID09IElEQkFueTo6SURCSW5kZXhUeXBlKQorICAgICAgICByZXR1cm4gc291cmNlLT5p
ZGJJbmRleCgpLT5vYmplY3RTdG9yZSgpOworCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKIAogdm9pZCBJREJSZXF1ZXN0OjpvblN1Y2Nlc3MoUGFz
c1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSwg
UGFzc1JlZlB0cjxJREJLZXk+IHBycFByaW1hcnlLZXksIGNvbnN0IElEQktleVBhdGgmIGtleVBh
dGgpCiB7Ci0gICAgTE9HX0VSUk9SKCJDSEVDS0lORzogb25TdWNjZXNzKHZhbHVlLCBrZXksIGtl
eXBhdGgpIik7Ci0gICAgQVNTRVJUKG1fcmVhZHlTdGF0ZSA9PSBQRU5ESU5HIHx8IG1fcmVhZHlT
dGF0ZSA9PSBET05FKTsKICAgICBpZiAobV9yZXF1ZXN0QWJvcnRlZCkKICAgICAgICAgcmV0dXJu
OwotICAgIEFTU0VSVChtX3JlYWR5U3RhdGUgPT0gUEVORElORyk7Ci0gICAgUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFNjcmlwdFZhbHVlID0gcHJwU2VyaWFsaXplZFNj
cmlwdFZhbHVlOwogI2lmbmRlZiBOREVCVUcKLSAgICAvLyBGSVhNRTogQXNzZXJ0IHVudGlsIHdl
IGNhbiBhY3R1YWxseSBpbmplY3QgdGhlIHJpZ2h0IHZhbHVlLgorICAgIEFTU0VSVChrZXlQYXRo
ID09IGVmZmVjdGl2ZU9iamVjdFN0b3JlKG1fc291cmNlKS0+a2V5UGF0aCgpKTsKKyNlbmRpZgor
ICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlID0gcHJwU2VyaWFsaXplZFNj
cmlwdFZhbHVlOworCiAgICAgUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSA9IHBycFByaW1hcnlL
ZXk7Ci0gICAgUmVmUHRyPElEQktleT4gZXhwZWN0ZWRLZXkgPQotICAgICAgICAgICAgICBjcmVh
dGVJREJLZXlGcm9tU2VyaWFsaXplZFZhbHVlQW5kS2V5UGF0aChzZXJpYWxpemVkU2NyaXB0VmFs
dWUsIGtleVBhdGgpOwotICAgIEFTU0VSVChwcmltYXJ5S2V5KTsKLSAgICBBU1NFUlQoZXhwZWN0
ZWRLZXktPmlzRXF1YWwocHJpbWFyeUtleS5nZXQoKSkpOworI2lmbmRlZiBOREVCVUcKKyAgICBS
ZWZQdHI8SURCS2V5PiBleHBlY3RlZEtleSA9IGNyZWF0ZUlEQktleUZyb21TZXJpYWxpemVkVmFs
dWVBbmRLZXlQYXRoKHZhbHVlLCBrZXlQYXRoKTsKKyAgICBBU1NFUlQoIWV4cGVjdGVkS2V5IHx8
IGV4cGVjdGVkS2V5LT5pc0VxdWFsKHByaW1hcnlLZXkuZ2V0KCkpKTsKICNlbmRpZgotICAgIG9u
U3VjY2VzcyhzZXJpYWxpemVkU2NyaXB0VmFsdWUucmVsZWFzZSgpKTsKKyAgICBSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZUFmdGVySW5qZWN0aW9uID0gaW5qZWN0SURCS2V5SW50
b1NlcmlhbGl6ZWRWYWx1ZShwcmltYXJ5S2V5LCB2YWx1ZSwga2V5UGF0aCk7CisgICAgQVNTRVJU
KHZhbHVlQWZ0ZXJJbmplY3Rpb24pOworICAgIGlmICghdmFsdWVBZnRlckluamVjdGlvbikgewor
ICAgICAgICAvLyBDaGVja3MgaW4gcHV0KCkgZW5zdXJlIHRoaXMgc2hvdWxkIG9ubHkgaGFwcGVu
IGlmIEkvTyBlcnJvciBvY2N1cnMuCisgICAgICAgIG9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6
Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgIkludGVybmFsIGVycm9y
IGluc2VydGluZyBnZW5lcmF0ZWQga2V5IGludG8gdGhlIG9iamVjdC4iKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgdmFsdWUgPSB2YWx1ZUFmdGVySW5qZWN0aW9uOworICAgIG9uU3Vj
Y2Vzcyh2YWx1ZS5yZWxlYXNlKCkpOwogfQogCiB2b2lkIElEQlJlcXVlc3Q6Om9uU3VjY2Vzc1dp
dGhDb250aW51YXRpb24oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
SURCQmluZGluZ1V0aWxpdGllcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9JREJC
aW5kaW5nVXRpbGl0aWVzLmNwcAppbmRleCA2NjFmZjAxNTk1ZGYwNTUwMGQ3ZjZjYWMzMTBlOGJj
NzEzNDRiM2U4Li4yMmY4MzE1YjIwNDZjNjU0NzgxNWI5NDU2MGI0OGQ4ODU4NjNlMWY0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVzLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVzLmNw
cApAQCAtMTAxLDcgKzEwMSw2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBib29sIHNldFZhbHVl
KHY4OjpIYW5kbGU8djg6OlZhbHVlPiYgdjhPYmplY3QsIFQgaW5kZXhPck5hbWUsIGNvbnN0IHY4
OjpIYW5kbGU8djg6OlZhbHVlPiYgdjhWYWx1ZSkKIHsKICAgICB2ODo6TG9jYWw8djg6Ok9iamVj
dD4gb2JqZWN0ID0gdjhPYmplY3QtPlRvT2JqZWN0KCk7Ci0gICAgQVNTRVJUKCFvYmplY3QtPkhh
cyhpbmRleE9yTmFtZSkpOwogICAgIHJldHVybiBvYmplY3QtPlNldChpbmRleE9yTmFtZSwgdjhW
YWx1ZSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkN1
cnNvckJhY2tlbmRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJDdXJz
b3JCYWNrZW5kUHJveHkuY3BwCmluZGV4IGNhMzkwYmE5MDc0MjdlMDhmZDQ3OGJiOTVjZjllMmM0
MTZjZDJmZmIuLjI3N2E2NjVjZjAwMGVlOTNlMDhjNGZhMWRjNDZjODUxYjk4MTlmMTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkN1cnNvckJhY2tlbmRQcm94eS5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCQ3Vyc29yQmFja2VuZFByb3h5
LmNwcApAQCAtNjksMTEgKzY5LDYgQEAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IElEQkN1cnNvckJhY2tlbmRQcm94eTo6dmFsdWUoKSBjb25zdAogICAgIHJldHVybiBtX2lkYkN1
cnNvci0+dmFsdWUoKTsKIH0KIAotdm9pZCBJREJDdXJzb3JCYWNrZW5kUHJveHk6OnVwZGF0ZShQ
YXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBjYWxsYmFja3MsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIG1faWRiQ3Vyc29y
LT51cGRhdGUodmFsdWUsIG5ldyBXZWJJREJDYWxsYmFja3NJbXBsKGNhbGxiYWNrcyksIGVjKTsK
LX0KLQogdm9pZCBJREJDdXJzb3JCYWNrZW5kUHJveHk6OmFkdmFuY2UodW5zaWduZWQgbG9uZyBj
b3VudCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgRXhjZXB0aW9uQ29kZSYg
ZWMpCiB7CiAgICAgbV9pZGJDdXJzb3ItPmFkdmFuY2UoY291bnQsIG5ldyBXZWJJREJDYWxsYmFj
a3NJbXBsKGNhbGxiYWNrcyksIGVjKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL0lEQkN1cnNvckJhY2tlbmRQcm94eS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvSURCQ3Vyc29yQmFja2VuZFByb3h5LmgKaW5kZXggOWU0YjU3MDA4MTI2ZjM5NmNkMTRmNjMz
YzZhM2E0MWQ2YjU5MDI4NS4uZDc0MmY2OGU1ZmU1NmYzN2RhYWMxNzUzNzM2ZmNlOTdmMGEyNjRh
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCQ3Vyc29yQmFja2Vu
ZFByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCQ3Vyc29yQmFja2Vu
ZFByb3h5LmgKQEAgLTQ1LDcgKzQ1LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxXZWJDb3JlOjpJREJLZXk+IGtleSgpIGNvbnN0OwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxX
ZWJDb3JlOjpJREJLZXk+IHByaW1hcnlLZXkoKSBjb25zdDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8V2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSgpIGNvbnN0OwotICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGUoUGFzc1JlZlB0cjxXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFs
dWU+LCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkNhbGxiYWNrcz4sIFdlYkNvcmU6OkV4Y2VwdGlv
bkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgYWR2YW5jZSh1bnNpZ25lZCBsb25nLCBQYXNzUmVm
UHRyPFdlYkNvcmU6OklEQkNhbGxiYWNrcz4sIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUmKTsKICAg
ICB2aXJ0dWFsIHZvaWQgY29udGludWVGdW5jdGlvbihQYXNzUmVmUHRyPFdlYkNvcmU6OklEQktl
eT4sIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJhY2tzPiwgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVGdW5jdGlvbihQYXNzUmVmUHRyPFdlYkNv
cmU6OklEQkNhbGxiYWNrcz4sIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUmKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5LmNw
cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5
LmNwcAppbmRleCA4MjY0MDczMzBhMDI3YTE2ZGI3ZmIxYzNkY2QwZWZkYzFmNGIzNTE3Li40ZDFj
OTFkMDc1ZmY2MDdhNzM3YjIyMDEwN2ZkYjdiMGJmMjRiNzU5IDEwMDc1NQotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9JREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eS5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHkuY3Bw
CkBAIC02NywxNCArNjcsNiBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5OjpnZXQo
UGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdAogICAgIG1fd2ViSURC
T2JqZWN0U3RvcmUtPmdldChrZXlSYW5nZSwgbmV3IFdlYklEQkNhbGxiYWNrc0ltcGwoY2FsbGJh
Y2tzKSwgKnRyYW5zYWN0aW9uUHJveHktPmdldFdlYklEQlRyYW5zYWN0aW9uKCksIGVjKTsKIH0K
IAotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eTo6cHV0KFBhc3NSZWZQdHI8U2VyaWFs
aXplZFNjcmlwdFZhbHVlPiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUHV0TW9kZSBw
dXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAg
ICAvLyBUaGUgdHJhbnNhY3Rpb24gcG9pbnRlciBpcyBndWFyYW50ZWVkIHRvIGJlIGEgcG9pbnRl
ciB0byBhIHByb3h5IG9iamVjdCBhcywgaW4gdGhlIHJlbmRlcmVyLAotICAgIC8vIGFsbCBpbXBs
ZW1lbnRhdGlvbnMgb2YgSURCIGludGVyZmFjZXMgYXJlIHByb3h5IG9iamVjdHMuCi0gICAgSURC
VHJhbnNhY3Rpb25CYWNrZW5kUHJveHkqIHRyYW5zYWN0aW9uUHJveHkgPSBzdGF0aWNfY2FzdDxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eSo+KHRyYW5zYWN0aW9uKTsKLSAgICBtX3dlYklEQk9i
amVjdFN0b3JlLT5wdXQodmFsdWUsIGtleSwgc3RhdGljX2Nhc3Q8V2ViSURCT2JqZWN0U3RvcmU6
OlB1dE1vZGU+KHB1dE1vZGUpLCBuZXcgV2ViSURCQ2FsbGJhY2tzSW1wbChjYWxsYmFja3MpLCAq
dHJhbnNhY3Rpb25Qcm94eS0+Z2V0V2ViSURCVHJhbnNhY3Rpb24oKSwgZWMpOwotfQotCiB2b2lk
IElEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5OjpwdXRXaXRoSW5kZXhLZXlzKFBhc3NSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUHV0
TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBjb25zdCBWZWN0b3I8U3RyaW5n
PiYgaW5kZXhOYW1lcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cywgRXhjZXB0
aW9uQ29kZSYgZWMpCiB7CiAgICAgLy8gVGhlIHRyYW5zYWN0aW9uIHBvaW50ZXIgaXMgZ3VhcmFu
dGVlZCB0byBiZSBhIHBvaW50ZXIgdG8gYSBwcm94eSBvYmplY3QgYXMsIGluIHRoZSByZW5kZXJl
ciwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQk9iamVjdFN0b3Jl
QmFja2VuZFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJPYmplY3RTdG9y
ZUJhY2tlbmRQcm94eS5oCmluZGV4IGM2NDAyOGNmZmI2MGYyZDhhMjQ0YTcxNWM3M2MwYjc2NWFl
ZWY0NGMuLjAyMzUwNzdmYTk3M2ZlOGYxNjE5MmU0MTM2ZmEyMDA5OTdlMmE2M2EgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5
LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCT2JqZWN0U3RvcmVCYWNrZW5k
UHJveHkuaApAQCAtNDQsNyArNDQsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+SURCT2JqZWN0
U3RvcmVCYWNrZW5kUHJveHkoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBnZXQoUGFzc1JlZlB0cjxX
ZWJDb3JlOjpJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJhY2tzPiwg
V2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgV2ViQ29yZTo6RXhjZXB0
aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgdm9pZCBwdXQoUGFzc1JlZlB0cjxXZWJDb3JlOjpTZXJp
YWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQktleT4sIFB1dE1vZGUs
IFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJhY2tzPiwgV2ViQ29yZTo6SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlKiwgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1
YWwgdm9pZCBwdXRXaXRoSW5kZXhLZXlzKFBhc3NSZWZQdHI8V2ViQ29yZTo6U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJLZXk+LCBQdXRNb2RlLCBQYXNzUmVm
UHRyPFdlYkNvcmU6OklEQkNhbGxiYWNrcz4sIFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZSosIGNvbnN0IFdURjo6VmVjdG9yPFdURjo6U3RyaW5nPiYsIGNvbnN0IFdURjo6
VmVjdG9yPEluZGV4S2V5cz4mLCBXZWJDb3JlOjpFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVh
bCB2b2lkIGRlbGV0ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCS2V5UmFuZ2U+LCBQ
YXNzUmVmUHRyPFdlYkNvcmU6OklEQkNhbGxiYWNrcz4sIFdlYkNvcmU6OklEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZSosIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFs
IHZvaWQgY2xlYXIoUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+LCBXZWJDb3JlOjpJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBXZWJDb3JlOjpFeGNlcHRpb25Db2RlJik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJDdXJzb3JJbXBs
LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkN1cnNvckltcGwuY3BwCmlu
ZGV4IGU5YzBlMDRhZjAzNzMyNGM0MTY0YzNjNWExMmNkMWI3YTFmYjFjZTguLjBkNjVhODdiZWUw
YWM0ZjZlMjI4NjFkYWYxNzE4YWVhY2Y4ZGIzYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYklEQkN1cnNvckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYklEQkN1cnNvckltcGwuY3BwCkBAIC02MiwxMSArNjIsNiBAQCBXZWJTZXJp
YWxpemVkU2NyaXB0VmFsdWUgV2ViSURCQ3Vyc29ySW1wbDo6dmFsdWUoKSBjb25zdAogICAgIHJl
dHVybiBtX2lkYkN1cnNvckJhY2tlbmQtPnZhbHVlKCk7CiB9CiAKLXZvaWQgV2ViSURCQ3Vyc29y
SW1wbDo6dXBkYXRlKGNvbnN0IFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSYgdmFsdWUsIFdlYklE
QkNhbGxiYWNrcyogY2FsbGJhY2tzLCBXZWJFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBtX2lk
YkN1cnNvckJhY2tlbmQtPnVwZGF0ZSh2YWx1ZSwgSURCQ2FsbGJhY2tzUHJveHk6OmNyZWF0ZShh
ZG9wdFB0cihjYWxsYmFja3MpKSwgZWMpOwotfQotCiB2b2lkIFdlYklEQkN1cnNvckltcGw6OmFk
dmFuY2UodW5zaWduZWQgbG9uZyBjb3VudCwgV2ViSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsIFdl
YkV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIG1faWRiQ3Vyc29yQmFja2VuZC0+YWR2YW5jZShj
b3VudCwgSURCQ2FsbGJhY2tzUHJveHk6OmNyZWF0ZShhZG9wdFB0cihjYWxsYmFja3MpKSwgZWMp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCQ3Vyc29ySW1w
bC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCQ3Vyc29ySW1wbC5oCmluZGV4
IGYwZDM4N2I2MjE5NzY4N2E4MTZhZDFkYzc1NTVjZGMyN2VmYmFmYzUuLjQ1YTIyOWIzODMwMTky
NjkxZmE3OGQwZGE4NmJlMzk3Njg3MWJiN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYklEQkN1cnNvckltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJJREJDdXJzb3JJbXBsLmgKQEAgLTQ3LDcgKzQ3LDYgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgV2ViSURCS2V5IGtleSgpIGNvbnN0OwogICAgIHZpcnR1YWwgV2ViSURCS2V5IHByaW1h
cnlLZXkoKSBjb25zdDsKICAgICB2aXJ0dWFsIFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB2YWx1
ZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGUoY29uc3QgV2ViU2VyaWFsaXplZFNj
cmlwdFZhbHVlJiwgV2ViSURCQ2FsbGJhY2tzKiwgV2ViRXhjZXB0aW9uQ29kZSYpOwogICAgIHZp
cnR1YWwgdm9pZCBhZHZhbmNlKHVuc2lnbmVkIGxvbmcsIFdlYklEQkNhbGxiYWNrcyosIFdlYkV4
Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgY29udGludWVGdW5jdGlvbihjb25zdCBX
ZWJJREJLZXkmLCBXZWJJREJDYWxsYmFja3MqLCBXZWJFeGNlcHRpb25Db2RlJik7CiAgICAgdmly
dHVhbCB2b2lkIGRlbGV0ZUZ1bmN0aW9uKFdlYklEQkNhbGxiYWNrcyosIFdlYkV4Y2VwdGlvbkNv
ZGUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQk9iamVj
dFN0b3JlSW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJPYmplY3RT
dG9yZUltcGwuY3BwCmluZGV4IDUzZDE0MGY0MmJlOThiM2FiZTczYTc0YmIzMzVkZjNjZWI2NWQy
OWMuLjIyYTA2NjgwNzc0NDRkYWMzMWRlZTdiMGI1OTQxMjcyZGVkZjNkYmYgMTAwNzU1Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQk9iamVjdFN0b3JlSW1wbC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCT2JqZWN0U3RvcmVJbXBsLmNwcApA
QCAtNTgsMTEgKzU4LDYgQEAgdm9pZCBXZWJJREJPYmplY3RTdG9yZUltcGw6OmdldChjb25zdCBX
ZWJJREJLZXlSYW5nZSYga2V5UmFuZ2UsIFdlYklEQkNhbGxiYWNrcyoKICAgICBtX29iamVjdFN0
b3JlLT5nZXQoa2V5UmFuZ2UsIElEQkNhbGxiYWNrc1Byb3h5OjpjcmVhdGUoYWRvcHRQdHIoY2Fs
bGJhY2tzKSksIHRyYW5zYWN0aW9uLmdldElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSgp
LCBlYyk7CiB9CiAKLXZvaWQgV2ViSURCT2JqZWN0U3RvcmVJbXBsOjpwdXQoY29uc3QgV2ViU2Vy
aWFsaXplZFNjcmlwdFZhbHVlJiB2YWx1ZSwgY29uc3QgV2ViSURCS2V5JiBrZXksIFB1dE1vZGUg
cHV0TW9kZSwgV2ViSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsIGNvbnN0IFdlYklEQlRyYW5zYWN0
aW9uJiB0cmFuc2FjdGlvbiwgV2ViRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgbV9vYmplY3RT
dG9yZS0+cHV0KHZhbHVlLCBrZXksIHN0YXRpY19jYXN0PElEQk9iamVjdFN0b3JlQmFja2VuZElu
dGVyZmFjZTo6UHV0TW9kZT4ocHV0TW9kZSksIElEQkNhbGxiYWNrc1Byb3h5OjpjcmVhdGUoYWRv
cHRQdHIoY2FsbGJhY2tzKSksIHRyYW5zYWN0aW9uLmdldElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZSgpLCBlYyk7Ci19Ci0KIHZvaWQgV2ViSURCT2JqZWN0U3RvcmVJbXBsOjpwdXRXaXRo
SW5kZXhLZXlzKGNvbnN0IFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSYgdmFsdWUsIGNvbnN0IFdl
YklEQktleSYga2V5LCBQdXRNb2RlIHB1dE1vZGUsIFdlYklEQkNhbGxiYWNrcyogY2FsbGJhY2tz
LCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIGNvbnN0IFdlYlZlY3RvcjxX
ZWJTdHJpbmc+JiB3ZWJJbmRleE5hbWVzLCBjb25zdCBXZWJWZWN0b3I8V2ViSW5kZXhLZXlzPiYg
d2ViSW5kZXhLZXlzLCBXZWJFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBBU1NFUlQod2ViSW5k
ZXhOYW1lcy5zaXplKCkgPT0gd2ViSW5kZXhLZXlzLnNpemUoKSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJPYmplY3RTdG9yZUltcGwuaCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQk9iamVjdFN0b3JlSW1wbC5oCmluZGV4IGU2ZGM4OGY1
NGQzNjQ3YmQ3YWIyZjZmOGE3Y2YyNjc0ZjY2YzNiZDIuLjkzNGNmZmE5OTNjOGJmMTA2MzY0NDU5
ZjUwYjZmM2JiYWEwNDIwMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYklEQk9iamVjdFN0b3JlSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYklEQk9iamVjdFN0b3JlSW1wbC5oCkBAIC00Niw3ICs0Niw2IEBAIHB1YmxpYzoKICAgICB+
V2ViSURCT2JqZWN0U3RvcmVJbXBsKCk7CiAKICAgICB2b2lkIGdldChjb25zdCBXZWJJREJLZXlS
YW5nZSYsIFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgV2ViRXhj
ZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgcHV0KGNvbnN0IFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZSYsIGNvbnN0IFdlYklEQktleSYsIFB1dE1vZGUsIFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdl
YklEQlRyYW5zYWN0aW9uJiwgV2ViRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgcHV0V2l0aElu
ZGV4S2V5cyhjb25zdCBXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUmLCBjb25zdCBXZWJJREJLZXkm
LCBQdXRNb2RlLCBXZWJJREJDYWxsYmFja3MqLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYsIGNv
bnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiBpbmRleE5hbWVzLCBjb25zdCBXZWJWZWN0b3I8V2Vi
SW5kZXhLZXlzPiYsIFdlYkV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIGRlbGV0ZUZ1bmN0aW9u
KGNvbnN0IFdlYklEQktleVJhbmdlJiwgV2ViSURCQ2FsbGJhY2tzKiwgY29uc3QgV2ViSURCVHJh
bnNhY3Rpb24mLCBXZWJFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBjbGVhcihXZWJJREJDYWxs
YmFja3MqLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYsIFdlYkV4Y2VwdGlvbkNvZGUmKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCRmFrZUJhY2tpbmdTdG9y
ZS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJGYWtlQmFja2luZ1N0b3JlLmgK
aW5kZXggMDg0MDVjZTBhYjU4Yzk2ZmMyOTZjM2YwZjhhMTRmZjY5ZDY1YmExOC4uNTM2ZDc4NWI5
M2FlZTQzYjlmNTMzMjUyNWM2M2VjNzllNzA5NTliZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9JREJGYWtlQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9JREJGYWtlQmFja2luZ1N0b3JlLmgKQEAgLTU5LDcgKzU5LDYgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKSBPVkVSUklERSB7IH0KICAg
ICB2aXJ0dWFsIGJvb2wgcHV0SW5kZXhEYXRhRm9yUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYsIGNv
bnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciopIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNl
OyB9CiAgICAgdmlydHVhbCBib29sIGRlbGV0ZUluZGV4RGF0YUZvclJlY29yZChpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBP
YmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqKSBPVkVSUklERSB7IHJldHVybiBmYWxzZTsgfQot
ICAgIHZpcnR1YWwgU3RyaW5nIGdldE9iamVjdFZpYUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYpIE9W
RVJSSURFIHsgcmV0dXJuIFN0cmluZygpOyB9CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQktl
eT4gZ2V0UHJpbWFyeUtleVZpYUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYpIE9WRVJSSURFIHsgcmV0
dXJuIFBhc3NSZWZQdHI8SURCS2V5PigpOyB9CiAgICAgdmlydHVhbCBib29sIGtleUV4aXN0c0lu
SW5kZXgoaW50NjRfdCBkYXRhYmFzZWlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCwgY29uc3QgSURCS2V5JiBpbmRleEtleSwgUmVmUHRyPElEQktleT4mIGZvdW5kUHJp
bWFyeUtleSkgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KIApkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDRjNGY0N2I0M2Yw
MWM5YjcxZWUwYjE4MDI1NDM5YTY3YmY0NjhkMzAuLmYyZWNiMTZkOWU1OTVjNzdjOTdhNDQ1ZTUy
YjE1NjM0ZDU2MTAyNDYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAxMi0wNy0yNSAgQWxlYyBG
bGV0dCAgPGFsZWNmbGV0dEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBpbmpl
Y3QgaW5kZXgga2V5cyBvbiBjdXJzb3Ivb2JqZWN0c3RvcmUvaW5kZXggZ2V0IHN1Y2Nlc3MgaGFu
ZGxlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkx
MTIzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTWlu
b3IgdHdlYWtzIHRvIHRlc3RzIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGZpZ3VyZSBvdXQgd2hpY2gg
a2V5IGlzCisgICAgICAgIGJlaW5nIHVwZGF0ZWQuCisKKyAgICAgICAgKiBzdG9yYWdlL2luZGV4
ZWRkYi9tb3ppbGxhL2F1dG9pbmNyZW1lbnQtaW5kZXhlcy1leHBlY3RlZC50eHQ6CisgICAgICAg
ICogc3RvcmFnZS9pbmRleGVkZGIvbW96aWxsYS9yZXNvdXJjZXMvYXV0b2luY3JlbWVudC1pbmRl
eGVzLmpzOgorICAgICAgICAoc2V0dXBPYmplY3RTdG9yZSk6CisgICAgICAgIChzZXR1cEluZGV4
ZXMpOgorICAgICAgICAoc2V0VmVyc2lvbkNvbXBsZXRlKToKKwogMjAxMi0wNy0yNSAgS29ucmFk
IFBpYXNjaWsgIDxrcGlhc2Npa0ByaW0uY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IEdl
b2xvY2F0aW9uIG92ZXJyaWRlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4
ZWRkYi9tb3ppbGxhL2F1dG9pbmNyZW1lbnQtaW5kZXhlcy1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9tb3ppbGxhL2F1dG9pbmNyZW1lbnQtaW5kZXhlcy1leHBl
Y3RlZC50eHQKaW5kZXggZjk0NTM3NDcxMDlmOWEwNTRhZDlkMzg4YzE2YjA4ODlmZjZiNmFlYS4u
NjFiYWEyMmYyYTdkMDhjNGZhYjAyNzVmMmFiZWZjZTE0ZTVhYTJiYiAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW96aWxsYS9hdXRvaW5jcmVtZW50LWluZGV4ZXMt
ZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL21vemlsbGEv
YXV0b2luY3JlbWVudC1pbmRleGVzLWV4cGVjdGVkLnR4dApAQCAtOSw3ICs5LDcgQEAgaW5kZXhl
ZERCLm9wZW4obmFtZSkKIGRiID0gZXZlbnQudGFyZ2V0LnJlc3VsdAogcmVxdWVzdCA9IGRiLnNl
dFZlcnNpb24oJzEnKQogRGVsZXRlZCBhbGwgb2JqZWN0IHN0b3Jlcy4KLW9iamVjdFN0b3JlID0g
ZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ2ZvbycsIHsga2V5UGF0aDogJ2lkJywgYXV0b0luY3JlbWVu
dDogdHJ1ZSB9KTsKK29iamVjdFN0b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ2F1dG9pbmNy
ZW1lbnQtaWQnLCB7IGtleVBhdGg6ICdpZCcsIGF1dG9JbmNyZW1lbnQ6IHRydWUgfSk7CiBvYmpl
Y3RTdG9yZS5jcmVhdGVJbmRleCgnZmlyc3QnLCAnZmlyc3QnKTsKIG9iamVjdFN0b3JlLmNyZWF0
ZUluZGV4KCdzZWNvbmQnLCAnc2Vjb25kJyk7CiBvYmplY3RTdG9yZS5jcmVhdGVJbmRleCgndGhp
cmQnLCAndGhpcmQnKTsKQEAgLTE3LDcgKzE3LDggQEAgZGF0YSA9IHsgZmlyc3Q6ICdmb28nLCBz
ZWNvbmQ6ICdmb28nLCB0aGlyZDogJ2ZvbycgfTsKIHJlcXVlc3QgPSBvYmplY3RTdG9yZS5hZGQo
ZGF0YSk7CiBrZXkgPSBldmVudC50YXJnZXQucmVzdWx0OwogUEFTUyBrZXkgPT0gbnVsbCBpcyBm
YWxzZQotb2JqZWN0U3RvcmUgPSBkYi50cmFuc2FjdGlvbignZm9vJykub2JqZWN0U3RvcmUoJ2Zv
bycpOworZXhwZWN0ZWQga2V5IGlzIDEKK29iamVjdFN0b3JlID0gZGIudHJhbnNhY3Rpb24oJ2F1
dG9pbmNyZW1lbnQtaWQnKS5vYmplY3RTdG9yZSgnYXV0b2luY3JlbWVudC1pZCcpOwogZmlyc3Qg
PSBvYmplY3RTdG9yZS5pbmRleCgnZmlyc3QnKTsKIHJlcXVlc3QgPSBmaXJzdC5nZXQoJ2Zvbycp
OwogUEFTUyBldmVudC50YXJnZXQucmVzdWx0LmlkIGlzIGtleQpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW96aWxsYS9yZXNvdXJjZXMvYXV0b2luY3JlbWVudC1p
bmRleGVzLmpzIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW96aWxsYS9yZXNvdXJj
ZXMvYXV0b2luY3JlbWVudC1pbmRleGVzLmpzCmluZGV4IDFjODU5ODQ4NjVkYmY5YTdmZjM3NWI0
OTAwN2ZmYWEzOGE0ODY0ZWIuLjJkYTk2ZTdmZmE1NmU5NzM4ODk2NWNjODUyZmU5MWVjOWJlMzg1
OWYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL21vemlsbGEvcmVz
b3VyY2VzL2F1dG9pbmNyZW1lbnQtaW5kZXhlcy5qcworKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdl
L2luZGV4ZWRkYi9tb3ppbGxhL3Jlc291cmNlcy9hdXRvaW5jcmVtZW50LWluZGV4ZXMuanMKQEAg
LTM1LDcgKzM1LDcgQEAgZnVuY3Rpb24gc2V0dXBPYmplY3RTdG9yZSgpCiAgICAgdHJhbnMgPSBl
dmVudC50YXJnZXQucmVzdWx0OwogICAgIGRlbGV0ZUFsbE9iamVjdFN0b3JlcyhkYik7CiAKLSAg
ICBvYmplY3RTdG9yZSA9IGV2YWxBbmRMb2coIm9iamVjdFN0b3JlID0gZGIuY3JlYXRlT2JqZWN0
U3RvcmUoJ2ZvbycsIHsga2V5UGF0aDogJ2lkJywgYXV0b0luY3JlbWVudDogdHJ1ZSB9KTsiKTsK
KyAgICBvYmplY3RTdG9yZSA9IGV2YWxBbmRMb2coIm9iamVjdFN0b3JlID0gZGIuY3JlYXRlT2Jq
ZWN0U3RvcmUoJ2F1dG9pbmNyZW1lbnQtaWQnLCB7IGtleVBhdGg6ICdpZCcsIGF1dG9JbmNyZW1l
bnQ6IHRydWUgfSk7Iik7CiAgICAgZXZhbEFuZExvZygib2JqZWN0U3RvcmUuY3JlYXRlSW5kZXgo
J2ZpcnN0JywgJ2ZpcnN0Jyk7Iik7CiAgICAgZXZhbEFuZExvZygib2JqZWN0U3RvcmUuY3JlYXRl
SW5kZXgoJ3NlY29uZCcsICdzZWNvbmQnKTsiKTsKICAgICBldmFsQW5kTG9nKCJvYmplY3RTdG9y
ZS5jcmVhdGVJbmRleCgndGhpcmQnLCAndGhpcmQnKTsiKTsKQEAgLTQ5LDEyICs0OSwxMyBAQCBm
dW5jdGlvbiBzZXR1cEluZGV4ZXMoKQogewogICAgIGtleSA9IGV2YWxBbmRMb2coImtleSA9IGV2
ZW50LnRhcmdldC5yZXN1bHQ7Iik7CiAgICAgc2hvdWxkQmVGYWxzZSgia2V5ID09IG51bGwiKTsK
KyAgICBkZWJ1ZygiZXhwZWN0ZWQga2V5IGlzICIgKyBrZXkpOwogICAgIHRyYW5zLm9uY29tcGxl
dGUgPSBzZXRWZXJzaW9uQ29tcGxldGU7CiB9CiAKIGZ1bmN0aW9uIHNldFZlcnNpb25Db21wbGV0
ZSgpCiB7Ci0gICAgb2JqZWN0U3RvcmUgPSBldmFsQW5kTG9nKCJvYmplY3RTdG9yZSA9IGRiLnRy
YW5zYWN0aW9uKCdmb28nKS5vYmplY3RTdG9yZSgnZm9vJyk7Iik7CisgICAgb2JqZWN0U3RvcmUg
PSBldmFsQW5kTG9nKCJvYmplY3RTdG9yZSA9IGRiLnRyYW5zYWN0aW9uKCdhdXRvaW5jcmVtZW50
LWlkJykub2JqZWN0U3RvcmUoJ2F1dG9pbmNyZW1lbnQtaWQnKTsiKTsKICAgICBmaXJzdCA9IGV2
YWxBbmRMb2coImZpcnN0ID0gb2JqZWN0U3RvcmUuaW5kZXgoJ2ZpcnN0Jyk7Iik7CiAgICAgcmVx
dWVzdCA9IGV2YWxBbmRMb2coInJlcXVlc3QgPSBmaXJzdC5nZXQoJ2ZvbycpOyIpOwogICAgIHJl
cXVlc3Qub25zdWNjZXNzID0gY2hlY2tGaXJzdEluZGV4QW5kUHJlcGFyZVNlY29uZDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154748</attachid>
            <date>2012-07-26 14:17:26 -0700</date>
            <delta_ts>2012-07-26 15:37:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91123-20120726141714.patch</filename>
            <type>text/plain</type>
            <size>57188</size>
            <attacher name="Alec Flett">alecflett</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzNjU2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTNhNzVlZGZlN2ZlY2Fk
Y2FjOGU2YTYzOGZiYjEzMTQ5NjdkOWQzOC4uNTJlZjVhNjIwNTY1YTA1YzI3MDAyNjY2MzJiNmJl
NTVlNDk0OGRlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYxIEBACisyMDEyLTA3LTI1ICBBbGVj
IEZsZXR0ICA8YWxlY2ZsZXR0QGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IGlu
amVjdCBpbmRleCBrZXlzIG9uIGN1cnNvci9vYmplY3RzdG9yZS9pbmRleCBnZXQgc3VjY2VzcyBo
YW5kbGVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTExMjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBN
b3ZlIGtleS1pbmplY3Rpb24gaW50byB0aGUgZnJvbnRlbmQsIGJ5IGluamVjdGluZyB0aGUga2V5
IGludG8KKyAgICAgICAgdGhlIHZhbHVlIG9uIGdldCByYXRoZXIgdGhhbiBzZXQgZm9yIGF1dG9p
bmNyZW1lbnRlZCBrZXlzLiBUaGlzCisgICAgICAgIGdpdmVzIGEgcG90ZW50aWFsIHBlcmZvcm1h
bmNlIHdpbiBieSBhdm9pZGluZyBhbiBJUEMgY2FsbCB0byB0aGUKKyAgICAgICAgVjggdXRpbGl0
eSBwcm9jZXNzIG9uIGNocm9taXVtLCBhbmQgZ2VuZXJhbGx5IGNsZWFucyB1cCB0aGUga2V5Cisg
ICAgICAgIG1hbmFnZW1lbnQuCisKKyAgICAgICAgTm90ZSB0aGF0IHRoaXMgZHVwbGljYXRlcyB0
aGUgbG9naWMgb2YgZ2VuZXJhdGVJbmRleEtleXMgaW50byB0aGUKKyAgICAgICAgZnJvbnRlbmQg
dW50aWwgdGhhdCBtZXRob2QgY2FuIGJlIGV4cHVuZ2VkIGZyb20gdGhlIGJhY2tlbmQuIFRoaXMK
KyAgICAgICAgd2lsbCBiZSBjbGVhbmVkIHVwIGluIGEgbGF0ZXIgcGF0Y2guCisKKyAgICAgICAg
SW4gb3JkZXIgdG8gYWNjb3VudCBmb3IgYm90aCBvbGQgZGF0YSAod2hpY2ggaGFzIHRoZSBkdXBs
aWNhdGUKKyAgICAgICAgcHJpbWFyeSBrZXkgYWxyZWFkeSBpbmplY3RlZCBhbmQgc2VyaWFsaXpl
ZCkgYW5kIGFueSBuZXcgZGF0YSwgYW4KKyAgICAgICAgYXNzZXJ0aW9uIHdhcyByZW1vdmVkIGZy
b20gSURCQmluZGluZ1V0aWxpdGllcy4KKworICAgICAgICBUaGlzIGFsc28gaW5jbHVkZXMgc29t
ZSBtaW5vciByZWZhY3RvcmluZyBzdWNoIGFzIHRoZSBkZXByZWNhdGlvbgorICAgICAgICBvZiBJ
REJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjp1cGRhdGUgaW4gZmF2b3Igb2YgYSBkaXJlY3QgY2Fs
bCB0bworICAgICAgICBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXQsIGFuZCByZW1vdmFs
IG9mIHRoZSBub3ctZGVmdW5jdAorICAgICAgICBJREJCYWNraW5nU3RvcmU6OmdldE9iamVjdFZp
YUluZGV4LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIHRoaXMgaXMgYSByZWZhY3Rv
cmluZywgYW5kIGFjdHVhbCBiZWhhdmlvcgorICAgICAgICBoYXNuJ3QgY2hhbmdlZC4KKworICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oOgorICAgICAgICAoSURC
QmFja2luZ1N0b3JlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yOjp1cGRhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCQ3Vyc29yOjpzZXRWYWx1ZVJlYWR5KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3JC
YWNrZW5kSW1wbDo6dXBkYXRlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRl
eEJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4QmFja2VuZEltcGw6
OmdldEludGVybmFsKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFj
a2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFj
a2luZ1N0b3JlLmg6CisgICAgICAgIChJREJMZXZlbERCQmFja2luZ1N0b3JlKToKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpnZW5lcmF0ZUluZGV4S2V5c0ZvclZhbHVlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJP
YmplY3RTdG9yZTo6cHV0KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RT
dG9yZS5oOgorICAgICAgICAoSURCT2JqZWN0U3RvcmUpOgorICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OnB1dFdpdGhJbmRleEtleXMpOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRl
cm5hbCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpvblN1Y2Nlc3MpOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisKIDIwMTIt
MDctMjQgIFNoYXduIFNpbmdoICA8c2hhd25zaW5naEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
W2Nocm9taXVtXSBSZWZhY3RvciBDQ0xheWVyVHJlZUhvc3RDb21tb246IG1vdmUgcm9vdCBsYXll
ciBzcGVjaWFsIGNhc2UgaW5pdGlhbGl6YXRpb24gaW50byBpbnRlcm5hbCBjb2RlLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwppbmRleCAyN2I1NTJiZTRkODFhMmIzYTZjZmJiMGRiYzE2NjA1M2E4
ZGQ0NjNlLi5jNmE4NWM3YjlmNmQyNTkzMmVlNWI4MzRmOWFjYTg3ODIzOGNhNTAxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDEyLTA3LTI1ICBBbGVjIEZs
ZXR0ICA8YWxlY2ZsZXR0QGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IGluamVj
dCBpbmRleCBrZXlzIG9uIGN1cnNvci9vYmplY3RzdG9yZS9pbmRleCBnZXQgc3VjY2VzcyBoYW5k
bGVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTEx
MjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1v
dmUgbWV0aG9kIG5vIGxvbmdlciB1c2VkLgorCisgICAgICAgICogdGVzdHMvSURCRmFrZUJhY2tp
bmdTdG9yZS5oOgorCiAyMDEyLTA3LTI0ICBTaGF3biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gUmVmYWN0b3IgQ0NMYXllclRyZWVIb3N0Q29t
bW9uOiBtb3ZlIHJvb3QgbGF5ZXIgc3BlY2lhbCBjYXNlIGluaXRpYWxpemF0aW9uIGludG8gaW50
ZXJuYWwgY29kZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
QmFja2luZ1N0b3JlLmgKaW5kZXggNzhhOWY2NjdhZGQxMzBlNjNlM2MwNzQ2ZDRhNzAzYjQ4OTU0
NmJkNy4uZjhkZTY4MjAyN2ZjMjUzZjc3ZmE1NTk5NGMxZWIwZWJmYzMwNDE1NiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmgKQEAg
LTgzLDcgKzgzLDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVJbmRleChpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKSA9
IDA7CiAgICAgdmlydHVhbCBib29sIHB1dEluZGV4RGF0YUZvclJlY29yZChpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJL
ZXkmLCBjb25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqKSA9IDA7CiAgICAgdmlydHVh
bCBib29sIGRlbGV0ZUluZGV4RGF0YUZvclJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBPYmplY3RTdG9yZVJlY29y
ZElkZW50aWZpZXIqKSA9IDA7Ci0gICAgdmlydHVhbCBTdHJpbmcgZ2V0T2JqZWN0VmlhSW5kZXgo
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJ
ZCwgY29uc3QgSURCS2V5JikgPSAwOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IGdl
dFByaW1hcnlLZXlWaWFJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmKSA9IDA7CiAgICAgdmlydHVhbCBi
b29sIGtleUV4aXN0c0luSW5kZXgoaW50NjRfdCBkYXRhYmFzZWlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBpbmRleEtleSwgUmVmUHRyPElE
QktleT4mIGZvdW5kUHJpbWFyeUtleSkgPSAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcAppbmRleCBlZjM0Y2I4YzdmYjc2MzYxODQxMjJiM2Ni
ODM2ZDI0OGQyMWViOTMwLi4wNWRkYjI1MWU0ZmEyYzE3OTZlYjVlMjNhODg3ZGYyOGU3YTQ3ZGE2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3Iu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHAK
QEAgLTE1OSwxMyArMTU5LDcgQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJDdXJzb3I6OnVw
ZGF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmUKICAgICAgICAgfQog
ICAgIH0KIAotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3Jl
YXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsK
LSAgICBtX2JhY2tlbmQtPnVwZGF0ZSh2YWx1ZSwgcmVxdWVzdCwgZWMpOwotICAgIGlmIChlYykg
ewotICAgICAgICByZXF1ZXN0LT5tYXJrRWFybHlEZWF0aCgpOwotICAgICAgICByZXR1cm4gMDsK
LSAgICB9Ci0gICAgcmV0dXJuIHJlcXVlc3QucmVsZWFzZSgpOworICAgIHJldHVybiBvYmplY3RT
dG9yZS0+cHV0KElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6Q3Vyc29yVXBkYXRlLCBJ
REJBbnk6OmNyZWF0ZSh0aGlzKSwgY29udGV4dCwgdmFsdWUsIG1fY3VycmVudFByaW1hcnlLZXks
IGVjKTsKIH0KIAogdm9pZCBJREJDdXJzb3I6OmFkdmFuY2UodW5zaWduZWQgbG9uZyBjb3VudCwg
RXhjZXB0aW9uQ29kZSYgZWMpCkBAIC0yNTksMTggKzI1MywyMSBAQCB2b2lkIElEQkN1cnNvcjo6
c2V0VmFsdWVSZWFkeSgpCiAgICAgbV9jdXJyZW50UHJpbWFyeUtleSA9IG1fYmFja2VuZC0+cHJp
bWFyeUtleSgpOwogCiAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUgPSBt
X2JhY2tlbmQtPnZhbHVlKCk7Ci0jaWZuZGVmIE5ERUJVRwogICAgIGlmICghaXNLZXlDdXJzb3Io
KSkgewotICAgICAgICAvLyBGSVhNRTogQWN0dWFsbHkgaW5qZWN0IHRoZSBwcmltYXJ5S2V5IGF0
IHRoZSBrZXlQYXRoLgogICAgICAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG9iamVjdFN0b3Jl
ID0gZWZmZWN0aXZlT2JqZWN0U3RvcmUoKTsKLSAgICAgICAgaWYgKG9iamVjdFN0b3JlLT5hdXRv
SW5jcmVtZW50KCkgJiYgIW9iamVjdFN0b3JlLT5tZXRhZGF0YSgpLmtleVBhdGguaXNOdWxsKCkp
IHsKLSAgICAgICAgICAgIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGggPSBvYmplY3RTdG9yZS0+
bWV0YWRhdGEoKS5rZXlQYXRoOwotICAgICAgICAgICAgUmVmUHRyPElEQktleT4gZXhwZWN0ZWRL
ZXkgPSBjcmVhdGVJREJLZXlGcm9tU2VyaWFsaXplZFZhbHVlQW5kS2V5UGF0aCh2YWx1ZSwga2V5
UGF0aCk7Ci0gICAgICAgICAgICBBU1NFUlQobV9jdXJyZW50UHJpbWFyeUtleSk7Ci0gICAgICAg
ICAgICBBU1NFUlQoZXhwZWN0ZWRLZXktPmlzRXF1YWwobV9jdXJyZW50UHJpbWFyeUtleS5nZXQo
KSkpOworICAgICAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG1ldGFkYXRhID0gb2Jq
ZWN0U3RvcmUtPm1ldGFkYXRhKCk7CisgICAgICAgIGlmIChtZXRhZGF0YS5hdXRvSW5jcmVtZW50
ICYmICFtZXRhZGF0YS5rZXlQYXRoLmlzTnVsbCgpKSB7CisjaWZuZGVmIE5ERUJVRworICAgICAg
ICAgICAgUmVmUHRyPElEQktleT4gZXhwZWN0ZWRLZXkgPSBjcmVhdGVJREJLZXlGcm9tU2VyaWFs
aXplZFZhbHVlQW5kS2V5UGF0aCh2YWx1ZSwgbWV0YWRhdGEua2V5UGF0aCk7CisgICAgICAgICAg
ICBBU1NFUlQoIWV4cGVjdGVkS2V5IHx8IGV4cGVjdGVkS2V5LT5pc0VxdWFsKG1fY3VycmVudFBy
aW1hcnlLZXkuZ2V0KCkpKTsKKyNlbmRpZgorICAgICAgICAgICAgUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4gdmFsdWVBZnRlckluamVjdGlvbiA9IGluamVjdElEQktleUludG9TZXJpYWxp
emVkVmFsdWUobV9jdXJyZW50UHJpbWFyeUtleSwgdmFsdWUsIG1ldGFkYXRhLmtleVBhdGgpOwor
ICAgICAgICAgICAgQVNTRVJUKHZhbHVlQWZ0ZXJJbmplY3Rpb24pOworICAgICAgICAgICAgLy8g
RklYTUU6IFRoZXJlIGlzIG5vIHdheSB0byByZXBvcnQgZXJyb3JzIGhlcmUuIE1vdmUgdGhpcyBp
bnRvIG9uU3VjY2Vzc1dpdGhDb250aW51YXRpb24gc28gdGhhdCB3ZSBjYW4gYWJvcnQgdGhlIHRy
YW5zYWN0aW9uIHRoZXJlLiBTZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD05MjI3OAorICAgICAgICAgICAgaWYgKHZhbHVlQWZ0ZXJJbmplY3Rpb24pCisgICAgICAg
ICAgICAgICAgdmFsdWUgPSB2YWx1ZUFmdGVySW5qZWN0aW9uOwogICAgICAgICB9CiAgICAgfQot
I2VuZGlmCiAgICAgbV9jdXJyZW50VmFsdWUgPSBJREJBbnk6OmNyZWF0ZSh2YWx1ZS5yZWxlYXNl
KCkpOwogCiAgICAgbV9nb3RWYWx1ZSA9IHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAKaW5kZXggYWUy
N2FmOGEzMmM2YmI2OTQ5MmJmZjA4NjZlMmQwMjg1MjQ0NjYwMy4uMGEzOWE4ZmJjNjllMDY3M2Y3
MzcyNzYxMmI5MWVjYjUxYWQ5YTA5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcApAQCAtODMsMTcgKzgz
LDYgQEAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IElEQkN1cnNvckJhY2tlbmRJ
bXBsOjp2YWx1ZSgpIGNvbnN0CiAgICAgcmV0dXJuIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3Jl
YXRlRnJvbVdpcmUobV9jdXJzb3ItPnZhbHVlKCkpOwogfQogCi12b2lkIElEQkN1cnNvckJhY2tl
bmRJbXBsOjp1cGRhdGUoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBFeGNlcHRpb25Db2RlJiBlYykKLXsK
LSAgICBJREJfVFJBQ0UoIklEQkN1cnNvckJhY2tlbmRJbXBsOjp1cGRhdGUiKTsKLSAgICBBU1NF
UlQobV90cmFuc2FjdGlvbi0+bW9kZSgpICE9IElEQlRyYW5zYWN0aW9uOjpSRUFEX09OTFkpOwot
Ci0gICAgQVNTRVJUKG1fY3Vyc29yKTsKLSAgICBBU1NFUlQobV9jdXJzb3JUeXBlICE9IEluZGV4
S2V5Q3Vyc29yKTsKLQotICAgIG1fb2JqZWN0U3RvcmUtPnB1dCh2YWx1ZSwgbV9jdXJzb3ItPnBy
aW1hcnlLZXkoKSwgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpDdXJzb3JVcGRhdGUs
IGNhbGxiYWNrcywgbV90cmFuc2FjdGlvbi5nZXQoKSwgZWMpOwotfQotCiB2b2lkIElEQkN1cnNv
ckJhY2tlbmRJbXBsOjpjb250aW51ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5PiBwcnBLZXks
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIEV4Y2VwdGlvbkNvZGUmIGVj
KQogewogICAgIElEQl9UUkFDRSgiSURCQ3Vyc29yQmFja2VuZEltcGw6OmNvbnRpbnVlIik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNr
ZW5kSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFj
a2VuZEltcGwuaAppbmRleCAwNDNjNDAzNTJjZGQzYTNmZDYzZjk5NzJkMTY3MjFmMDQ4ZTJiMDk5
Li41MDk3YzUzODc2OGYyOWYwOTE5NGIyOTQ5MGIxZDQxMmRlNGUxZjNiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBs
LmgKQEAgLTU3LDcgKzU3LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJL
ZXk+IGtleSgpIGNvbnN0OwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlL
ZXkoKSBjb25zdDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiB2YWx1ZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGUoUGFzc1JlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIEV4Y2VwdGlvbkNv
ZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgYWR2YW5jZSh1bnNpZ25lZCBsb25nLCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4sIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgY29udGlu
dWVGdW5jdGlvbihQYXNzUmVmUHRyPElEQktleT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwg
RXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVGdW5jdGlvbihQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4sIEV4Y2VwdGlvbkNvZGUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2UuaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2Uu
aAppbmRleCA0OGQzYTE4MjlmNjU4OGVkZjYxOTczMzdmMzE4YjJjMDZlOTBiY2YzLi4xZGYyODQ1
NmE0MWM4OTM4M2ZlMmI4MTJhZDM3MDZkZTI3NDg5NDM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEludGVyZmFj
ZS5oCkBAIC01Nyw3ICs1Nyw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURC
S2V5PiBwcmltYXJ5S2V5KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlKCkgY29uc3QgPSAwOwogCi0gICAgdmlydHVhbCB2b2lk
IHVwZGF0ZShQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgYWR2YW5j
ZSh1bnNpZ25lZCBsb25nIGNvdW50LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIEV4Y2VwdGlv
bkNvZGUmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNvbnRpbnVlRnVuY3Rpb24oUGFzc1JlZlB0
cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBFeGNlcHRpb25Db2RlJikg
PSAwOwogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVGdW5jdGlvbihQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4sIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuY3BwCmluZGV4IDlmNWZmM2Jh
ZmNhMjU0OTc1YTQzYzQzMGViY2E1ZTIxODY5MGVjNjYuLjEzNDAwODQ5MWY1YTc0MzE5NmUyZmM5
YWI4ODJkYWVlNmNiMzk1OTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuY3BwCkBAIC0xNzIsMTEgKzE3MiwxOSBA
QCB2b2lkIElEQkluZGV4QmFja2VuZEltcGw6OmdldEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQYXNzUmVmUHRyPElEQkluZAogICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3ItPmNs
b3NlKCk7CiAgICAgfQogCi0gICAgU3RyaW5nIHZhbHVlID0gaW5kZXgtPmJhY2tpbmdTdG9yZSgp
LT5nZXRPYmplY3RWaWFJbmRleChpbmRleC0+ZGF0YWJhc2VJZCgpLCBpbmRleC0+bV9vYmplY3RT
dG9yZUJhY2tlbmQtPmlkKCksIGluZGV4LT5pZCgpLCAqa2V5KTsKKyAgICBSZWZQdHI8SURCS2V5
PiBwcmltYXJ5S2V5ID0gaW5kZXgtPmJhY2tpbmdTdG9yZSgpLT5nZXRQcmltYXJ5S2V5VmlhSW5k
ZXgoaW5kZXgtPmRhdGFiYXNlSWQoKSwgaW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5pZCgp
LCBpbmRleC0+aWQoKSwgKmtleSk7CisKKyAgICBTdHJpbmcgdmFsdWUgPSBpbmRleC0+YmFja2lu
Z1N0b3JlKCktPmdldE9iamVjdFN0b3JlUmVjb3JkKGluZGV4LT5kYXRhYmFzZUlkKCksIGluZGV4
LT5tX29iamVjdFN0b3JlQmFja2VuZC0+aWQoKSwgKnByaW1hcnlLZXkpOworCiAgICAgaWYgKHZh
bHVlLmlzTnVsbCgpKSB7CiAgICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZTo6dW5kZWZpbmVkVmFsdWUoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Cisg
ICAgaWYgKGluZGV4LT5tX29iamVjdFN0b3JlQmFja2VuZC0+YXV0b0luY3JlbWVudCgpICYmICFp
bmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmtleVBhdGgoKS5pc051bGwoKSkgeworICAgICAg
ICBjYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21X
aXJlKHZhbHVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbWFyeUtleSwgaW5k
ZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5rZXlQYXRoKCkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQogICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3Jl
YXRlRnJvbVdpcmUodmFsdWUpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJLZXlQYXRoLmNwcAppbmRleCAwYzM1ZDIwZDYwNmQ3ZDVjZmI0MTc5MzVhNjdk
NjBiZDQ1MmRmM2E4Li5kMzg5OTQxOTg1NzUxZjMwYzMwNjdjN2FjNzQ4MGU5NjZhZGM0MzZhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoLmNwcApA
QCAtMjM2LDYgKzIzNiwzMSBAQCBJREJLZXlQYXRoOjpvcGVyYXRvciBQYXNzUmVmUHRyPElEQkFu
eT4oKSBjb25zdAogICAgIHJldHVybiAwOwogfQogCitib29sIElEQktleVBhdGg6Om9wZXJhdG9y
PT0oUGFzc1JlZlB0cjxJREJBbnk+IG90aGVyKSBjb25zdAoreworICAgIGlmICghaXNWYWxpZCgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNh
c2UgTnVsbFR5cGU6CisgICAgICAgIHJldHVybiBvdGhlci0+dHlwZSgpID09IElEQkFueTo6TnVs
bFR5cGU7CisgICAgY2FzZSBTdHJpbmdUeXBlOgorICAgICAgICByZXR1cm4gb3RoZXItPnR5cGUo
KSA9PSBJREJBbnk6OlN0cmluZ1R5cGUgJiYgb3RoZXItPnN0cmluZygpID09IHN0cmluZygpOwor
ICAgIGNhc2UgQXJyYXlUeXBlOgorICAgICAgICBpZiAob3RoZXItPnR5cGUoKSAhPSBJREJBbnk6
OkRPTVN0cmluZ0xpc3RUeXBlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAg
IFJlZlB0cjxET01TdHJpbmdMaXN0PiBvdGhlckxpc3QgPSBvdGhlci0+ZG9tU3RyaW5nTGlzdCgp
OworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYXJyYXkuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgICAgIGlmIChvdGhlckxpc3QtPml0ZW0oaSkgIT0gbV9hcnJheVtpXSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30K
KwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQktleVBhdGguaAppbmRleCBmNTIzNmMxNTJmMDJjYmRhMjhkYjhjMzE1MWYy
ZGQ4NTdlYWFlY2U5Li45ODgyMzQwM2EwYTFjZWJiOGIwMWI0N2NkYTkyMDExYmVlYzMxMTU4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5oCkBAIC03
Miw2ICs3Miw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1f
dHlwZSA9PSBOdWxsVHlwZTsgfQogICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0OwogICAgIG9wZXJh
dG9yIFBhc3NSZWZQdHI8SURCQW55PigpIGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3I9PShQYXNz
UmVmUHRyPElEQkFueT4gb3RoZXIpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIFR5cGUgbV90eXBl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJM
ZXZlbERCQmFja2luZ1N0b3JlLmNwcAppbmRleCAzMmUyZjY4MTU3OTQwOWEwOTA4ZDI5YTE4NzJj
MGNkYzU2Yjg5ZWY5Li4wNTEzYzM1MzNmY2FiMGZmODUyZGMwYTkxMzQ0NTdlY2YzNjI5N2YzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFj
a2luZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJM
ZXZlbERCQmFja2luZ1N0b3JlLmNwcApAQCAtOTY3LDE1ICs5NjcsNiBAQCBib29sIElEQkxldmVs
REJCYWNraW5nU3RvcmU6OmRlbGV0ZUluZGV4RGF0YUZvclJlY29yZChpbnQ2NF90LCBpbnQ2NF90
LCBpbnQ2NF90LAogICAgIHJldHVybiB0cnVlOwogfQogCi1TdHJpbmcgSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZTo6Z2V0T2JqZWN0VmlhSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBrZXkpCi17Ci0gICAg
UmVmUHRyPElEQktleT4gcHJpbWFyeUtleSA9IGdldFByaW1hcnlLZXlWaWFJbmRleChkYXRhYmFz
ZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXkpOwotICAgIGlmICghcHJpbWFyeUtleSkK
LSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgcmV0dXJuIGdldE9iamVjdFN0b3JlUmVj
b3JkKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsICpwcmltYXJ5S2V5KTsKLX0KLQogc3RhdGlj
IGJvb2wgdmVyc2lvbkV4aXN0cyhMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCB2ZXJzaW9uLCBj
b25zdCBWZWN0b3I8Y2hhcj4mIGVuY29kZWRQcmltYXJ5S2V5KQogewogICAgIGNvbnN0IFZlY3Rv
cjxjaGFyPiBrZXkgPSBFeGlzdHNFbnRyeUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0
b3JlSWQsIGVuY29kZWRQcmltYXJ5S2V5KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaAppbmRleCBjNWE5ZTJl
ZTMwOWU4Y2EzZmQ3ZjcwZjBhYTJiYjgwY2VjMDQ2YjJlLi4wYmU5MzRmZmRhOWJjZjgwOTFkNTM0
MTBhNmFiY2M4MDBmNTkwZDM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oCkBAIC02OSw3ICs2OSw2IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCk7CiAgICAgdmlydHVhbCBi
b29sIHB1dEluZGV4RGF0YUZvclJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmLCBjb25zdCBPYmplY3RT
dG9yZVJlY29yZElkZW50aWZpZXIqKTsKICAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlSW5kZXhEYXRh
Rm9yUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2
NF90IGluZGV4SWQsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciopOwotICAgIHZp
cnR1YWwgU3RyaW5nIGdldE9iamVjdFZpYUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYpOwogICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IGdldFByaW1hcnlLZXlWaWFJbmRleChpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJ
REJLZXkmKTsKICAgICB2aXJ0dWFsIGJvb2wga2V5RXhpc3RzSW5JbmRleChpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJL
ZXkmIGluZGV4S2V5LCBSZWZQdHI8SURCS2V5PiYgZm91bmRQcmltYXJ5S2V5KTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCmlu
ZGV4IGRjOWJlYzViNDkwNWI2Y2I4ZDE2MWUyYjAwNzU1ODJjMzlmNTY2ZTUuLjdmN2NkNzRiYjBl
ZGNiNjNmODQ1NDBiZWIwYzk1OWRlY2U2MjZmMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKQEAgLTEwMiwxOSArMTAyLDQ0
IEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OmdldChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzCiAgICAgcmV0dXJuIGdldChjb250ZXh0LCBrZXlS
YW5nZS5yZWxlYXNlKCksIGVjKTsKIH0KIAorc3RhdGljIHZvaWQgZ2VuZXJhdGVJbmRleEtleXNG
b3JWYWx1ZShjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gb2JqZWN0VmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IElEQk9iamVjdFN0b3JlOjpJbmRleEtleXMqIGluZGV4S2V5cykKK3sKKyAgICBBU1NFUlQoaW5k
ZXhLZXlzKTsKKyAgICBSZWZQdHI8SURCS2V5PiBpbmRleEtleSA9IGNyZWF0ZUlEQktleUZyb21T
ZXJpYWxpemVkVmFsdWVBbmRLZXlQYXRoKG9iamVjdFZhbHVlLCBpbmRleE1ldGFkYXRhLmtleVBh
dGgpOworCisgICAgaWYgKCFpbmRleEtleSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFp
bmRleE1ldGFkYXRhLm11bHRpRW50cnkgfHwgaW5kZXhLZXktPnR5cGUoKSAhPSBJREJLZXk6OkFy
cmF5VHlwZSkgeworICAgICAgICBpZiAoIWluZGV4S2V5LT5pc1ZhbGlkKCkpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgaW5kZXhLZXlzLT5hcHBlbmQoaW5kZXhLZXkpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIEFTU0VSVChpbmRleE1ldGFkYXRhLm11bHRpRW50cnkpOworICAgICAg
ICBBU1NFUlQoaW5kZXhLZXktPnR5cGUoKSA9PSBJREJLZXk6OkFycmF5VHlwZSk7CisgICAgICAg
IGluZGV4S2V5ID0gSURCS2V5OjpjcmVhdGVNdWx0aUVudHJ5QXJyYXkoaW5kZXhLZXktPmFycmF5
KCkpOworCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5kZXhLZXktPmFycmF5KCku
c2l6ZSgpOyArK2kpCisgICAgICAgICAgICBpbmRleEtleXMtPmFwcGVuZChpbmRleEtleS0+YXJy
YXkoKVtpXSk7CisgICAgfQorfQorCiBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0
b3JlOjphZGQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBFeGNlcHRp
b25Db2RlJiBlYykKIHsKICAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlOjphZGQiKTsKLSAg
ICByZXR1cm4gcHV0KElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6QWRkT25seSwgY29u
dGV4dCwgdmFsdWUsIGtleSwgZWMpOworICAgIHJldHVybiBwdXQoSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW50ZXJmYWNlOjpBZGRPbmx5LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgY29udGV4dCwgdmFs
dWUsIGtleSwgZWMpOwogfQogCiBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3Jl
OjpwdXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxTZXJpYWxp
emVkU2NyaXB0VmFsdWU+IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBFeGNlcHRpb25D
b2RlJiBlYykKIHsKICAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlOjpwdXQiKTsKLSAgICBy
ZXR1cm4gcHV0KElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6QWRkT3JVcGRhdGUsIGNv
bnRleHQsIHZhbHVlLCBrZXksIGVjKTsKKyAgICByZXR1cm4gcHV0KElEQk9iamVjdFN0b3JlQmFj
a2VuZEludGVyZmFjZTo6QWRkT3JVcGRhdGUsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBjb250ZXh0
LCB2YWx1ZSwga2V5LCBlYyk7CiB9CiAKLVBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0
U3RvcmU6OnB1dChJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vZGUgcHV0TW9k
ZSwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+IHBycFZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4gcHJwS2V5LCBFeGNlcHRp
b25Db2RlJiBlYykKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dChJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0
cjxJREJBbnk+IHNvdXJjZSwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1Jl
ZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4g
cHJwS2V5LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0
b3JlOjpwdXQiKTsKICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSA9IHBy
cFZhbHVlOwpAQCAtMTQxLDcgKzE2Niw3IEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2Jq
ZWN0U3RvcmU6OnB1dChJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vCiAgICAg
Y29uc3QgYm9vbCB1c2VzSW5MaW5lS2V5cyA9ICFrZXlQYXRoLmlzTnVsbCgpOwogICAgIGNvbnN0
IGJvb2wgaGFzS2V5R2VuZXJhdG9yID0gYXV0b0luY3JlbWVudCgpOwogCi0gICAgaWYgKHVzZXNJ
bkxpbmVLZXlzICYmIGtleSkgeworICAgIGlmIChwdXRNb2RlICE9IElEQk9iamVjdFN0b3JlQmFj
a2VuZEludGVyZmFjZTo6Q3Vyc29yVXBkYXRlICYmIHVzZXNJbkxpbmVLZXlzICYmIGtleSkgewog
ICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgfQpAQCAtMTY3LDE1ICsxOTIsMjYgQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0
PiBJREJPYmplY3RTdG9yZTo6cHV0KElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6UHV0
TW8KICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQor
ICAgICAgICBpZiAoa2V5UGF0aEtleSkKKyAgICAgICAgICAgIGtleSA9IGtleVBhdGhLZXk7CiAg
ICAgfQogICAgIGlmIChrZXkgJiYgIWtleS0+aXNWYWxpZCgpKSB7CiAgICAgICAgIGVjID0gSURC
RGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAK
LSAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250
ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7Ci0gICAgLy8g
RklYTUU6IFBhc3MgdGhyb3VnaCBrZXlQYXRoS2V5IGFzIGtleSB0byBzaW1wbGlmeSBiYWNrIGVu
ZCBpbXBsZW1lbnRhdGlvbi4KLSAgICBtX2JhY2tlbmQtPnB1dCh2YWx1ZS5yZWxlYXNlKCksIGtl
eS5yZWxlYXNlKCksIHB1dE1vZGUsIHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwg
ZWMpOworICAgIFZlY3RvcjxTdHJpbmc+IGluZGV4TmFtZXM7CisgICAgVmVjdG9yPEluZGV4S2V5
cz4gaW5kZXhLZXlzOworICAgIGZvciAoSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6SW5kZXhNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9tZXRhZGF0YS5pbmRleGVzLmJlZ2luKCk7IGl0ICE9IG1f
bWV0YWRhdGEuaW5kZXhlcy5lbmQoKTsgKytpdCkgeworICAgICAgICBJbmRleEtleXMga2V5czsK
KyAgICAgICAgZ2VuZXJhdGVJbmRleEtleXNGb3JWYWx1ZShpdC0+c2Vjb25kLCB2YWx1ZSwgJmtl
eXMpOworICAgICAgICBpbmRleE5hbWVzLmFwcGVuZChpdC0+Zmlyc3QpOworICAgICAgICBpbmRl
eEtleXMuYXBwZW5kKGtleXMpOworICAgIH0KKyAgICBBU1NFUlQoaW5kZXhLZXlzLnNpemUoKSA9
PSBpbmRleE5hbWVzLnNpemUoKSk7CisKKyAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9
IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBzb3VyY2UsIG1fdHJhbnNhY3Rpb24uZ2V0KCkp
OworICAgIG1fYmFja2VuZC0+cHV0V2l0aEluZGV4S2V5cyh2YWx1ZS5yZWxlYXNlKCksIGtleS5y
ZWxlYXNlKCksIHB1dE1vZGUsIHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgaW5k
ZXhOYW1lcywgaW5kZXhLZXlzLCBlYyk7CiAgICAgaWYgKGVjKSB7CiAgICAgICAgIHJlcXVlc3Qt
Pm1hcmtFYXJseURlYXRoKCk7CiAgICAgICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmgKaW5kZXggZWY3YzA2M2I4Zjgy
MjY0MTdhN2JmZjhmMmZlMTM2OTgyNDNiODUzNy4uNmZlZmM0ZTJiYWQwOTVhZTZkMTMzNGMzZWJi
OTZmZTkwODliODgwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCT2JqZWN0U3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJPYmplY3RTdG9yZS5oCkBAIC05NSw3ICs5NSw3IEBAIHB1YmxpYzoKICAgICBQYXNzUmVm
UHRyPElEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRy
PElEQktleVJhbmdlPiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFBhc3NSZWZQdHI8SURCUmVxdWVz
dD4gY291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5PiwgRXhj
ZXB0aW9uQ29kZSYpOwogCi0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBwdXQoSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpQdXRNb2RlLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
UGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IHB1dChJREJPYmplY3RT
dG9yZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQW55PiBzb3VyY2Us
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZT4sIFBhc3NSZWZQdHI8SURCS2V5PiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgbWFya0Rl
bGV0ZWQoKSB7IG1fZGVsZXRlZCA9IHRydWU7IH0KICAgICB2b2lkIHRyYW5zYWN0aW9uRmluaXNo
ZWQoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAppbmRleCBiOTYyZTk0ODdhMjE2ZmFj
NTg5OGUwYTA3MmViMDY1YjM2OGZiNTQ1Li43NDY5MzNlZjA0ZGU2NjQwMDQyM2JhZWM5OGNkODU1
NmNkZmJhODgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcApAQCAtMTIwLDQ4ICsxMjAs
NiBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmdldEludGVybmFsKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPAogICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUod2lyZURhdGEpKTsKIH0KIAotc3Rh
dGljIFBhc3NSZWZQdHI8SURCS2V5PiBmZXRjaEtleUZyb21LZXlQYXRoKFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZSogdmFsdWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgpCi17Ci0gICAgSURCX1RS
QUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpmZXRjaEtleUZyb21LZXlQYXRoIik7Ci0g
ICAgQVNTRVJUKCFrZXlQYXRoLmlzTnVsbCgpKTsKLQotICAgIFZlY3RvcjxSZWZQdHI8U2VyaWFs
aXplZFNjcmlwdFZhbHVlPiA+IHZhbHVlczsKLSAgICB2YWx1ZXMuYXBwZW5kKHZhbHVlKTsKLSAg
ICBWZWN0b3I8UmVmUHRyPElEQktleT4gPiBrZXlzOwotICAgIElEQktleVBhdGhCYWNrZW5kSW1w
bDo6Y3JlYXRlSURCS2V5c0Zyb21TZXJpYWxpemVkVmFsdWVzQW5kS2V5UGF0aCh2YWx1ZXMsIGtl
eVBhdGgsIGtleXMpOwotICAgIGlmIChrZXlzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgQVNTRVJUKGtleXMuc2l6ZSgpID09IDEpOwotICAgIHJldHVybiBrZXlzWzBdLnJlbGVh
c2UoKTsKLX0KLQotc3RhdGljIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBpbmpl
Y3RLZXlJbnRvS2V5UGF0aChQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgpCi17Ci0g
ICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjppbmplY3RLZXlJbnRvS2V5
UGF0aCIpOwotICAgIHJldHVybiBJREJLZXlQYXRoQmFja2VuZEltcGw6OmluamVjdElEQktleUlu
dG9TZXJpYWxpemVkVmFsdWUoa2V5LCB2YWx1ZSwga2V5UGF0aCk7Ci19Ci0KLS8vIEZJWE1FOiBS
ZW1vdmUgdGhpcyBtZXRob2Qgd2hlbiBnZXQtc2lkZSBrZXkgaW5qZWN0aW9uIGlzIHRoZSBub3Jt
Lgotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXQoUGFzc1JlZlB0cjxTZXJpYWxp
emVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4gcHJwS2V5LCBQdXRN
b2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNvZGUm
IGVjKQotewotICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0Iik7
Ci0gICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRXaXRoSW5kZXhL
ZXlzIik7Ci0KLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3Rv
cmUgPSB0aGlzOwotICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlID0gcHJw
VmFsdWU7Ci0gICAgUmVmUHRyPElEQktleT4ga2V5ID0gcHJwS2V5OwotICAgIFJlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKLSAgICBSZWZQdHI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
Ojpmcm9tKHRyYW5zYWN0aW9uUHRyKTsKLSAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSAh
PSBJREJUcmFuc2FjdGlvbjo6UkVBRF9PTkxZKTsKLQotICAgIC8vIE51bGwgcG9pbnRlcnMgaGVy
ZSBzaWduaWZ5IHRoYXQgaW5kZXgga2V5cyBzaG91bGQgYmUgZ2VuZXJhdGVkIGFzIGEgcGFydCBv
ZiB0aGlzIHB1dC4KLSAgICBPd25QdHI8VmVjdG9yPFN0cmluZz4gPiBudWxsSW5kZXhOYW1lczsK
LSAgICBPd25QdHI8VmVjdG9yPEluZGV4S2V5cz4gPiBudWxsSW5kZXhLZXlzOwotICAgIGlmICgh
dHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzaygKLSAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFz
aygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwsIG9iamVjdFN0b3JlLCB2
YWx1ZSwga2V5LCBwdXRNb2RlLCBjYWxsYmFja3MsIHRyYW5zYWN0aW9uLCBudWxsSW5kZXhOYW1l
cy5yZWxlYXNlKCksIG51bGxJbmRleEtleXMucmVsZWFzZSgpKSkpCi0gICAgICAgIGVjID0gSURC
RGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKLX0KLQogdm9pZCBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRXaXRoSW5kZXhLZXlzKFBhc3NSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwg
UHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgaW5kZXhOYW1lcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5
cywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpwdXRXaXRoSW5kZXhLZXlzIik7CkBAIC0xNzYsNiArMTM0LDggQEAgdm9pZCBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRXaXRoSW5kZXhLZXlzKFBhc3NSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHUKICAgICBPd25QdHI8VmVjdG9yPFN0cmluZz4gPiBuZXdJbmRleE5h
bWVzID0gYWRvcHRQdHIobmV3IFZlY3RvcjxTdHJpbmc+KGluZGV4TmFtZXMpKTsKICAgICBPd25Q
dHI8VmVjdG9yPEluZGV4S2V5cz4gPiBuZXdJbmRleEtleXMgPSBhZG9wdFB0cihuZXcgVmVjdG9y
PEluZGV4S2V5cz4oaW5kZXhLZXlzKSk7CiAKKyAgICBBU1NFUlQoYXV0b0luY3JlbWVudCgpIHx8
IGtleSk7CisKICAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soCiAgICAgICAgICAg
ICBjcmVhdGVDYWxsYmFja1Rhc2soJklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVy
bmFsLCBvYmplY3RTdG9yZSwgdmFsdWUsIGtleSwgcHV0TW9kZSwgY2FsbGJhY2tzLCB0cmFuc2Fj
dGlvbiwgbmV3SW5kZXhOYW1lcy5yZWxlYXNlKCksIG5ld0luZGV4S2V5cy5yZWxlYXNlKCkpKSkK
ICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVf
RVJSOwpAQCAtMTk0LDE4ICsxNTQsMTkgQEAgcHVibGljOgogICAgICAgICAsIG1faW5kZXhLZXlz
KGluZGV4S2V5cykKICAgICB7IH0KIAotICAgIGJvb2wgZ2VuZXJhdGVJbmRleEtleXNGb3JWYWx1
ZShTZXJpYWxpemVkU2NyaXB0VmFsdWUqIG9iamVjdFZhbHVlKQorICAgIC8vIEZJWE1FOiByZW1v
dmUgdGhpcyBvbmNlIGNyZWF0ZUluZGV4KCkgZ2VuZXJhdGVzIHRoZXNlIGluIHRoZSByZW5kZXJl
ci4KKyAgICB2b2lkIGdlbmVyYXRlSW5kZXhLZXlzRm9yVmFsdWUoU2VyaWFsaXplZFNjcmlwdFZh
bHVlKiBvYmplY3RWYWx1ZSkKICAgICB7CiAgICAgICAgIG1faW5kZXhLZXlzLmNsZWFyKCk7CiAK
LSAgICAgICAgUmVmUHRyPElEQktleT4gaW5kZXhLZXkgPSBmZXRjaEtleUZyb21LZXlQYXRoKG9i
amVjdFZhbHVlLCBtX2luZGV4TWV0YWRhdGEua2V5UGF0aCk7CisgICAgICAgIFJlZlB0cjxJREJL
ZXk+IGluZGV4S2V5ID0gZmV0Y2hLZXlGcm9tS2V5UGF0aChvYmplY3RWYWx1ZSk7CiAKICAgICAg
ICAgaWYgKCFpbmRleEtleSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
cmV0dXJuOwogCiAgICAgICAgIGlmICghbV9pbmRleE1ldGFkYXRhLm11bHRpRW50cnkgfHwgaW5k
ZXhLZXktPnR5cGUoKSAhPSBJREJLZXk6OkFycmF5VHlwZSkgewogICAgICAgICAgICAgaWYgKCFp
bmRleEtleS0+aXNWYWxpZCgpKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAgICAgbV9pbmRleEtleXMuYXBwZW5kKGluZGV4
S2V5KTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTIxMywxMSArMTc0LDkgQEAgcHVibGljOgogICAg
ICAgICAgICAgQVNTRVJUKGluZGV4S2V5LT50eXBlKCkgPT0gSURCS2V5OjpBcnJheVR5cGUpOwog
ICAgICAgICAgICAgaW5kZXhLZXkgPSBJREJLZXk6OmNyZWF0ZU11bHRpRW50cnlBcnJheShpbmRl
eEtleS0+YXJyYXkoKSk7CiAKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5k
ZXhLZXktPmFycmF5KCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgaW5kZXhLZXktPmFycmF5KCkuc2l6ZSgpOyArK2kpCiAgICAgICAgICAgICAgICAg
bV9pbmRleEtleXMuYXBwZW5kKGluZGV4S2V5LT5hcnJheSgpW2ldKTsKLSAgICAgICAgICAgIH0K
ICAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICBib29sIHZlcmlm
eUluZGV4S2V5cyhJREJCYWNraW5nU3RvcmUmIGJhY2tpbmdTdG9yZSwKQEAgLTI2Niw2ICsyMjUs
MjEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQorCisgICAgUGFzc1JlZlB0cjxJREJLZXk+IGZldGNoS2V5RnJvbUtleVBh
dGgoU2VyaWFsaXplZFNjcmlwdFZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIElEQl9UUkFD
RSgiSW5kZXhXcml0ZXI6OmZldGNoS2V5RnJvbUtleVBhdGgiKTsKKworICAgICAgICBWZWN0b3I8
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gPiB2YWx1ZXM7CisgICAgICAgIHZhbHVlcy5h
cHBlbmQodmFsdWUpOworICAgICAgICBWZWN0b3I8UmVmUHRyPElEQktleT4gPiBrZXlzOworICAg
ICAgICBJREJLZXlQYXRoQmFja2VuZEltcGw6OmNyZWF0ZUlEQktleXNGcm9tU2VyaWFsaXplZFZh
bHVlc0FuZEtleVBhdGgodmFsdWVzLCBtX2luZGV4TWV0YWRhdGEua2V5UGF0aCwga2V5cyk7Cisg
ICAgICAgIGlmIChrZXlzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICBBU1NFUlQoa2V5cy5zaXplKCkgPT0gMSk7CisgICAgICAgIHJldHVybiBrZXlzWzBdLnJlbGVh
c2UoKTsKKyAgICB9CisKICAgICBjb25zdCBJREJJbmRleE1ldGFkYXRhIG1faW5kZXhNZXRhZGF0
YTsKICAgICBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5cyBtX2luZGV4
S2V5czsKIH07CkBAIC0yNzksNDAgKzI1MywxOCBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6OnB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPAog
ICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IHBycEtleTsKICAgICBPd25QdHI8VmVjdG9yPFN0cmlu
Zz4gPiBpbmRleE5hbWVzID0gcG9wSW5kZXhOYW1lczsKICAgICBPd25QdHI8VmVjdG9yPEluZGV4
S2V5cz4gPiBpbmRleEtleXMgPSBwb3BJbmRleEtleXM7Ci0gICAgQVNTRVJUKCghaW5kZXhOYW1l
cyAmJiAhaW5kZXhLZXlzKSB8fCBpbmRleE5hbWVzLT5zaXplKCkgPT0gaW5kZXhLZXlzLT5zaXpl
KCkpOworICAgIEFTU0VSVChpbmRleE5hbWVzICYmIGluZGV4S2V5cyAmJiBpbmRleE5hbWVzLT5z
aXplKCkgPT0gaW5kZXhLZXlzLT5zaXplKCkpOwogICAgIGNvbnN0IGJvb2wgYXV0b0luY3JlbWVu
dCA9IG9iamVjdFN0b3JlLT5hdXRvSW5jcmVtZW50KCk7CiAgICAgYm9vbCBrZXlXYXNHZW5lcmF0
ZWQgPSBmYWxzZTsKIAotICAgIGlmIChwdXRNb2RlICE9IEN1cnNvclVwZGF0ZSkgewotICAgICAg
ICBjb25zdCBib29sIGhhc0tleVBhdGggPSAhb2JqZWN0U3RvcmUtPm1fa2V5UGF0aC5pc051bGwo
KTsKLSAgICAgICAgaWYgKGhhc0tleVBhdGgpIHsKLSAgICAgICAgICAgIEFTU0VSVCgha2V5KTsK
LSAgICAgICAgICAgIFJlZlB0cjxJREJLZXk+IGtleVBhdGhLZXkgPSBmZXRjaEtleUZyb21LZXlQ
YXRoKHZhbHVlLmdldCgpLCBvYmplY3RTdG9yZS0+bV9rZXlQYXRoKTsKLSAgICAgICAgICAgIGlm
IChrZXlQYXRoS2V5KQotICAgICAgICAgICAgICAgIGtleSA9IGtleVBhdGhLZXk7Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKGF1dG9JbmNyZW1lbnQpIHsKLSAgICAgICAgICAgIGlmICgha2V5KSB7
Ci0gICAgICAgICAgICAgICAgUmVmUHRyPElEQktleT4gYXV0b0luY0tleSA9IG9iamVjdFN0b3Jl
LT5nZW5lcmF0ZUtleSgpOwotICAgICAgICAgICAgICAgIGtleVdhc0dlbmVyYXRlZCA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgaWYgKCFhdXRvSW5jS2V5LT5pc1ZhbGlkKCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlIsICJNYXhpbXVtIGtleSBnZW5lcmF0b3IgdmFs
dWUgcmVhY2hlZC4iKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIHdoZW4gZ2V0LXNp
ZGUga2V5IGluamVjdGlvbiBpcyB0aGUgbm9ybS4KLSAgICAgICAgICAgICAgICBpZiAoaGFzS2V5
UGF0aCkgewotICAgICAgICAgICAgICAgICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiB2YWx1ZUFmdGVySW5qZWN0aW9uID0gaW5qZWN0S2V5SW50b0tleVBhdGgoYXV0b0luY0tleSwg
dmFsdWUsIG9iamVjdFN0b3JlLT5tX2tleVBhdGgpOwotICAgICAgICAgICAgICAgICAgICBBU1NF
UlQodmFsdWVBZnRlckluamVjdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghdmFsdWVB
ZnRlckluamVjdGlvbikgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2tzIGluIHB1
dCgpIGVuc3VyZSB0aGlzIHNob3VsZCBvbmx5IGhhcHBlbiBpZiBJL08gZXJyb3Igb2NjdXJzLgot
ICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJy
b3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJJbnRlcm5hbCBl
cnJvciBpbnNlcnRpbmcgZ2VuZXJhdGVkIGtleSBpbnRvIHRoZSBvYmplY3QuIikpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIHZhbHVlID0gdmFsdWVBZnRlckluamVjdGlvbjsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAga2V5ID0gYXV0b0luY0tleTsKLSAgICAgICAgICAgIH0KKyAg
ICBpZiAocHV0TW9kZSAhPSBDdXJzb3JVcGRhdGUgJiYgYXV0b0luY3JlbWVudCAmJiAha2V5KSB7
CisgICAgICAgIFJlZlB0cjxJREJLZXk+IGF1dG9JbmNLZXkgPSBvYmplY3RTdG9yZS0+Z2VuZXJh
dGVLZXkoKTsKKyAgICAgICAga2V5V2FzR2VuZXJhdGVkID0gdHJ1ZTsKKyAgICAgICAgaWYgKCFh
dXRvSW5jS2V5LT5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJ
REJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSLCAi
TWF4aW11bSBrZXkgZ2VuZXJhdG9yIHZhbHVlIHJlYWNoZWQuIikpOworICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CisgICAgICAgIGtleSA9IGF1dG9JbmNLZXk7CiAgICAgfQogCiAgICAg
QVNTRVJUKGtleSAmJiBrZXktPmlzVmFsaWQoKSk7CkBAIC0zMjUsMTEgKzI3NywxNyBAQCB2b2lk
IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQYXNzUmVmUHRyPAogCiAgICAgVmVjdG9yPE93blB0cjxJbmRleFdyaXRlcj4gPiBp
bmRleFdyaXRlcnM7CiAgICAgSGFzaE1hcDxTdHJpbmcsIEluZGV4S2V5cz4gaW5kZXhLZXlNYXA7
Ci0gICAgLy8gRklYTUU6IFR1cm4gdGhpcyBpbnRvIGFuIEFTU0VSVChpbmRleEtleXMpIHdoZW4g
Z2V0LXNpZGUga2V5IGluamVjdGlvbiBpcyB0aGUgbm9ybS4KLSAgICBib29sIGhhdmVJbmRleEtl
eXMgPSBpbmRleEtleXMgJiYgIWluZGV4S2V5cy0+aXNFbXB0eSgpOwotICAgIGlmIChoYXZlSW5k
ZXhLZXlzKSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5kZXhOYW1lcy0+c2l6
ZSgpOyArK2kpCi0gICAgICAgICAgICBpbmRleEtleU1hcC5hZGQoaW5kZXhOYW1lcy0+YXQoaSks
IGluZGV4S2V5cy0+YXQoaSkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5kZXhOYW1l
cy0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgSW5kZXhLZXlzIGtleXMgPSBpbmRleEtleXMtPmF0
KGkpOworCisgICAgICAgIC8vIElmIHRoZSBvYmplY3RTdG9yZSBpcyB1c2luZyBhdXRvSW5jcmVt
ZW50LCB0aGVuIGFueSBpbmRleGVzIHdpdGggYW4gaWRlbnRpY2FsIGtleVBhdGggbmVlZCB0byBh
bHNvIHVzZSB0aGUgcHJpbWFyeSAoZ2VuZXJhdGVkKSBrZXkgYXMgYSBrZXkuCisgICAgICAgIGlm
IChrZXlXYXNHZW5lcmF0ZWQpIHsKKyAgICAgICAgICAgIGNvbnN0IElEQktleVBhdGgmIGluZGV4
S2V5UGF0aCA9IG9iamVjdFN0b3JlLT5tX2luZGV4ZXMuZ2V0KGluZGV4TmFtZXMtPmF0KGkpKS0+
a2V5UGF0aCgpOworICAgICAgICAgICAgaWYgKGluZGV4S2V5UGF0aCA9PSBvYmplY3RTdG9yZS0+
a2V5UGF0aCgpKQorICAgICAgICAgICAgICAgIGtleXMuYXBwZW5kKGtleSk7CisgICAgICAgIH0K
KworICAgICAgICBpbmRleEtleU1hcC5hZGQoaW5kZXhOYW1lcy0+YXQoaSksIGtleXMpOwogICAg
IH0KIAogICAgIGZvciAoSW5kZXhNYXA6Oml0ZXJhdG9yIGl0ID0gb2JqZWN0U3RvcmUtPm1faW5k
ZXhlcy5iZWdpbigpOyBpdCAhPSBvYmplY3RTdG9yZS0+bV9pbmRleGVzLmVuZCgpOyArK2l0KSB7
CkBAIC0zMzksMTIgKzI5Nyw4IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0
SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8CiAgICAgICAgICAg
ICBjb250aW51ZTsgLy8gVGhlIGluZGV4IG9iamVjdCBoYXMgYmVlbiBjcmVhdGVkLCBidXQgZG9l
cyBub3QgZXhpc3QgaW4gdGhlIGRhdGFiYXNlIHlldC4KIAogICAgICAgICBPd25QdHI8SW5kZXhX
cml0ZXI+IGluZGV4V3JpdGVyOwotICAgICAgICBpZiAoaGF2ZUluZGV4S2V5cykKLSAgICAgICAg
ICAgIGluZGV4V3JpdGVyID0gYWRvcHRQdHIobmV3IEluZGV4V3JpdGVyKGluZGV4LT5tZXRhZGF0
YSgpLCBpbmRleEtleU1hcC5nZXQoaXQtPmZpcnN0KSkpOwotICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgIGluZGV4V3JpdGVyID0gYWRvcHRQdHIobmV3IEluZGV4V3JpdGVyKGluZGV4LT5tZXRh
ZGF0YSgpKSk7Ci0gICAgICAgICAgICBpbmRleFdyaXRlci0+Z2VuZXJhdGVJbmRleEtleXNGb3JW
YWx1ZSh2YWx1ZS5nZXQoKSk7Ci0gICAgICAgIH0KKyAgICAgICAgaW5kZXhXcml0ZXIgPSBhZG9w
dFB0cihuZXcgSW5kZXhXcml0ZXIoaW5kZXgtPm1ldGFkYXRhKCksIGluZGV4S2V5TWFwLmdldChp
dC0+Zmlyc3QpKSk7CisKICAgICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKICAgICAgICAgaWYg
KCFpbmRleFdyaXRlci0+dmVyaWZ5SW5kZXhLZXlzKCpvYmplY3RTdG9yZS0+YmFja2luZ1N0b3Jl
KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RTdG9y
ZS0+ZGF0YWJhc2VJZCgpLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oCmluZGV4IDY0N2JjMjk3ODQ5
ZDY0ZjkxNzU5Y2Y4NWMzYjE0NGExZTFjNjRjNjIuLjViMWI1NGZjMmRiODVmZDQ5M2FlY2Q3ZDY3
YmM1ZGJmOTVhNTcwNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgKQEAgLTY2LDcgKzY2LDYg
QEAgcHVibGljOgogCiAgICAgLy8gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlCiAgICAg
dmlydHVhbCB2b2lkIGdldChQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2Rl
Jik7Ci0gICAgdmlydHVhbCB2b2lkIHB1dChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZT4sIFBhc3NSZWZQdHI8SURCS2V5PiwgUHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7CiAgICAg
dmlydHVhbCB2b2lkIHB1dFdpdGhJbmRleEtleXMoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIFB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0
dWFsIHZvaWQgZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0
aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBjbGVhcihQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3Jl
QmFja2VuZEludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmgKaW5kZXggMzdkM2VlMGY5NDMwZGM1MDdiMDk0
ZTM0MGY4OWMzOWU0YTBkNmQzNC4uZjJmZDA4OGMxYzQzMTRkOGJkNGEzZjM2MzUyYjkzOWIzNDk1
ZGZlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmgKQEAgLTU3LDcgKzU3LDYg
QEAgcHVibGljOgogICAgIH07CiAgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPElEQktleT4gPiBJ
bmRleEtleXM7CiAKLSAgICB2aXJ0dWFsIHZvaWQgcHV0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJREJLZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUm
KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHB1dFdpdGhJbmRleEtleXMoUGFzc1JlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIFB1dE1vZGUsIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgY29uc3Qg
VmVjdG9yPFN0cmluZz4mLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYsIEV4Y2VwdGlvbkNvZGUm
KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5
UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAKaW5kZXggYTFlYWYyOTMwYzFhMWViOGMyN2Jj
ZWU4ZTUyMjA5ZTgyNjk4NDM0ZS4uZDlmNDIyNTNlOGZjZDBmYTNkYjA3ZWY1ODQ4NDBhZWQyYWI3
YjAzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVx
dWVzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVz
dC5jcHAKQEAgLTMzOSwyNCArMzM5LDQyIEBAIHZvaWQgSURCUmVxdWVzdDo6b25TdWNjZXNzKFBh
c3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkU2NyaXB0VmFsCiAgICAg
ZW5xdWV1ZUV2ZW50KGNyZWF0ZVN1Y2Nlc3NFdmVudCgpKTsKIH0KIAorI2lmbmRlZiBOREVCVUcK
K3N0YXRpYyBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBlZmZlY3RpdmVPYmplY3RTdG9yZShQ
YXNzUmVmUHRyPElEQkFueT4gc291cmNlKQoreworICAgIGlmIChzb3VyY2UtPnR5cGUoKSA9PSBJ
REJBbnk6OklEQk9iamVjdFN0b3JlVHlwZSkKKyAgICAgICAgcmV0dXJuIHNvdXJjZS0+aWRiT2Jq
ZWN0U3RvcmUoKTsKKyAgICBpZiAoc291cmNlLT50eXBlKCkgPT0gSURCQW55OjpJREJJbmRleFR5
cGUpCisgICAgICAgIHJldHVybiBzb3VyY2UtPmlkYkluZGV4KCktPm9iamVjdFN0b3JlKCk7CisK
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZgogCiB2
b2lkIElEQlJlcXVlc3Q6Om9uU3VjY2VzcyhQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZT4gcHJwU2VyaWFsaXplZFNjcmlwdFZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4gcHJwUHJpbWFy
eUtleSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKIHsKLSAgICBMT0dfRVJST1IoIkNIRUNL
SU5HOiBvblN1Y2Nlc3ModmFsdWUsIGtleSwga2V5cGF0aCkiKTsKLSAgICBBU1NFUlQobV9yZWFk
eVN0YXRlID09IFBFTkRJTkcgfHwgbV9yZWFkeVN0YXRlID09IERPTkUpOwogICAgIGlmIChtX3Jl
cXVlc3RBYm9ydGVkKQogICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKG1fcmVhZHlTdGF0ZSA9
PSBQRU5ESU5HKTsKLSAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVk
U2NyaXB0VmFsdWUgPSBwcnBTZXJpYWxpemVkU2NyaXB0VmFsdWU7CiAjaWZuZGVmIE5ERUJVRwot
ICAgIC8vIEZJWE1FOiBBc3NlcnQgdW50aWwgd2UgY2FuIGFjdHVhbGx5IGluamVjdCB0aGUgcmln
aHQgdmFsdWUuCisgICAgQVNTRVJUKGtleVBhdGggPT0gZWZmZWN0aXZlT2JqZWN0U3RvcmUobV9z
b3VyY2UpLT5rZXlQYXRoKCkpOworI2VuZGlmCisgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gdmFsdWUgPSBwcnBTZXJpYWxpemVkU2NyaXB0VmFsdWU7CisKICAgICBSZWZQdHI8SURC
S2V5PiBwcmltYXJ5S2V5ID0gcHJwUHJpbWFyeUtleTsKLSAgICBSZWZQdHI8SURCS2V5PiBleHBl
Y3RlZEtleSA9Ci0gICAgICAgICAgICAgIGNyZWF0ZUlEQktleUZyb21TZXJpYWxpemVkVmFsdWVB
bmRLZXlQYXRoKHNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSwga2V5UGF0aCk7Ci0gICAgQVNTRVJUKHBy
aW1hcnlLZXkpOwotICAgIEFTU0VSVChleHBlY3RlZEtleS0+aXNFcXVhbChwcmltYXJ5S2V5Lmdl
dCgpKSk7CisjaWZuZGVmIE5ERUJVRworICAgIFJlZlB0cjxJREJLZXk+IGV4cGVjdGVkS2V5ID0g
Y3JlYXRlSURCS2V5RnJvbVNlcmlhbGl6ZWRWYWx1ZUFuZEtleVBhdGgodmFsdWUsIGtleVBhdGgp
OworICAgIEFTU0VSVCghZXhwZWN0ZWRLZXkgfHwgZXhwZWN0ZWRLZXktPmlzRXF1YWwocHJpbWFy
eUtleS5nZXQoKSkpOwogI2VuZGlmCi0gICAgb25TdWNjZXNzKHNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZS5yZWxlYXNlKCkpOworICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlQWZ0
ZXJJbmplY3Rpb24gPSBpbmplY3RJREJLZXlJbnRvU2VyaWFsaXplZFZhbHVlKHByaW1hcnlLZXks
IHZhbHVlLCBrZXlQYXRoKTsKKyAgICBBU1NFUlQodmFsdWVBZnRlckluamVjdGlvbik7CisgICAg
aWYgKCF2YWx1ZUFmdGVySW5qZWN0aW9uKSB7CisgICAgICAgIC8vIENoZWNrcyBpbiBwdXQoKSBl
bnN1cmUgdGhpcyBzaG91bGQgb25seSBoYXBwZW4gaWYgSS9PIGVycm9yIG9jY3Vycy4KKyAgICAg
ICAgb25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246
OlVOS05PV05fRVJSLCAiSW50ZXJuYWwgZXJyb3IgaW5zZXJ0aW5nIGdlbmVyYXRlZCBrZXkgaW50
byB0aGUgb2JqZWN0LiIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICB2YWx1ZSA9IHZh
bHVlQWZ0ZXJJbmplY3Rpb247CisgICAgb25TdWNjZXNzKHZhbHVlLnJlbGVhc2UoKSk7CiB9CiAK
IHZvaWQgSURCUmVxdWVzdDo6b25TdWNjZXNzV2l0aENvbnRpbnVhdGlvbigpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwCmluZGV4IDY2
MWZmMDE1OTVkZjA1NTAwZDdmNmNhYzMxMGU4YmM3MTM0NGIzZTguLjIyZjgzMTViMjA0NmM2NTQ3
ODE1Yjk0NTYwYjQ4ZDg4NTg2M2UxZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwCkBAIC0xMDEsNyArMTAxLDYgQEAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4KIGJvb2wgc2V0VmFsdWUodjg6OkhhbmRsZTx2ODo6VmFsdWU+JiB2OE9i
amVjdCwgVCBpbmRleE9yTmFtZSwgY29uc3Qgdjg6OkhhbmRsZTx2ODo6VmFsdWU+JiB2OFZhbHVl
KQogewogICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBvYmplY3QgPSB2OE9iamVjdC0+VG9PYmpl
Y3QoKTsKLSAgICBBU1NFUlQoIW9iamVjdC0+SGFzKGluZGV4T3JOYW1lKSk7CiAgICAgcmV0dXJu
IG9iamVjdC0+U2V0KGluZGV4T3JOYW1lLCB2OFZhbHVlKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCQ3Vyc29yQmFja2VuZFByb3h5LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkN1cnNvckJhY2tlbmRQcm94eS5jcHAKaW5kZXggY2Ez
OTBiYTkwNzQyN2UwOGZkNDc4YmI5NWNmOWUyYzQxNmNkMmZmYi4uMjc3YTY2NWNmMDAwZWU5M2Uw
OGM0ZmExZGM0NmM4NTFiOTgxOWYxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvSURCQ3Vyc29yQmFja2VuZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9JREJDdXJzb3JCYWNrZW5kUHJveHkuY3BwCkBAIC02OSwxMSArNjksNiBAQCBQYXNz
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gSURCQ3Vyc29yQmFja2VuZFByb3h5Ojp2YWx1
ZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1faWRiQ3Vyc29yLT52YWx1ZSgpOwogfQogCi12b2lkIElE
QkN1cnNvckJhY2tlbmRQcm94eTo6dXBkYXRlKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgRXhjZXB0aW9u
Q29kZSYgZWMpCi17Ci0gICAgbV9pZGJDdXJzb3ItPnVwZGF0ZSh2YWx1ZSwgbmV3IFdlYklEQkNh
bGxiYWNrc0ltcGwoY2FsbGJhY2tzKSwgZWMpOwotfQotCiB2b2lkIElEQkN1cnNvckJhY2tlbmRQ
cm94eTo6YWR2YW5jZSh1bnNpZ25lZCBsb25nIGNvdW50LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4gY2FsbGJhY2tzLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBtX2lkYkN1cnNvci0+YWR2
YW5jZShjb3VudCwgbmV3IFdlYklEQkNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzKSwgZWMpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCQ3Vyc29yQmFja2VuZFByb3h5
LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJDdXJzb3JCYWNrZW5kUHJveHkuaApp
bmRleCA5ZTRiNTcwMDgxMjZmMzk2Y2QxNGY2MzNjNmEzYTQxZDZiNTkwMjg1Li5kNzQyZjY4ZTVm
ZTU2ZjM3ZGFhYzE3NTM3MzZmY2U5N2YwYTI2NGFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9JREJDdXJzb3JCYWNrZW5kUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9JREJDdXJzb3JCYWNrZW5kUHJveHkuaApAQCAtNDUsNyArNDUsNiBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQktleT4ga2V5KCkgY29u
c3Q7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQktleT4gcHJpbWFyeUtleSgp
IGNvbnN0OwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IHZhbHVlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZShQYXNzUmVmUHRy
PFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURC
Q2FsbGJhY2tzPiwgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBh
ZHZhbmNlKHVuc2lnbmVkIGxvbmcsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJhY2tzPiwg
V2ViQ29yZTo6RXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBjb250aW51ZUZ1bmN0
aW9uKFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCS2V5PiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJD
YWxsYmFja3M+LCBXZWJDb3JlOjpFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIGRl
bGV0ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJhY2tzPiwgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
SURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHkuY3BwCmluZGV4IDgyNjQwNzMzMGEwMjdhMTZk
YjdmYjFjM2RjZDBlZmRjMWY0YjM1MTcuLjRkMWM5MWQwNzVmZjYwN2E3MzdiMjIwMTA3ZmRiN2Iw
YmYyNGI3NTkgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQk9iamVj
dFN0b3JlQmFja2VuZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9J
REJPYmplY3RTdG9yZUJhY2tlbmRQcm94eS5jcHAKQEAgLTY3LDE0ICs2Nyw2IEBAIHZvaWQgSURC
T2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6OmdldChQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlS
YW5nZSwgUGFzc1JlZlB0CiAgICAgbV93ZWJJREJPYmplY3RTdG9yZS0+Z2V0KGtleVJhbmdlLCBu
ZXcgV2ViSURCQ2FsbGJhY2tzSW1wbChjYWxsYmFja3MpLCAqdHJhbnNhY3Rpb25Qcm94eS0+Z2V0
V2ViSURCVHJhbnNhY3Rpb24oKSwgZWMpOwogfQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2Vu
ZFByb3h5OjpwdXQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBQYXNz
UmVmUHRyPElEQktleT4ga2V5LCBQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiBjYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rp
b24sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIC8vIFRoZSB0cmFuc2FjdGlvbiBwb2ludGVy
IGlzIGd1YXJhbnRlZWQgdG8gYmUgYSBwb2ludGVyIHRvIGEgcHJveHkgb2JqZWN0IGFzLCBpbiB0
aGUgcmVuZGVyZXIsCi0gICAgLy8gYWxsIGltcGxlbWVudGF0aW9ucyBvZiBJREIgaW50ZXJmYWNl
cyBhcmUgcHJveHkgb2JqZWN0cy4KLSAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eSogdHJh
bnNhY3Rpb25Qcm94eSA9IHN0YXRpY19jYXN0PElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5Kj4o
dHJhbnNhY3Rpb24pOwotICAgIG1fd2ViSURCT2JqZWN0U3RvcmUtPnB1dCh2YWx1ZSwga2V5LCBz
dGF0aWNfY2FzdDxXZWJJREJPYmplY3RTdG9yZTo6UHV0TW9kZT4ocHV0TW9kZSksIG5ldyBXZWJJ
REJDYWxsYmFja3NJbXBsKGNhbGxiYWNrcyksICp0cmFuc2FjdGlvblByb3h5LT5nZXRXZWJJREJU
cmFuc2FjdGlvbigpLCBlYyk7Ci19Ci0KIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6
OnB1dFdpdGhJbmRleEtleXMoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVl
LCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiBjYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJh
bnNhY3Rpb24sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBpbmRleE5hbWVzLCBjb25zdCBWZWN0b3I8
SW5kZXhLZXlzPiYgaW5kZXhLZXlzLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICAvLyBUaGUg
dHJhbnNhY3Rpb24gcG9pbnRlciBpcyBndWFyYW50ZWVkIHRvIGJlIGEgcG9pbnRlciB0byBhIHBy
b3h5IG9iamVjdCBhcywgaW4gdGhlIHJlbmRlcmVyLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHkuaCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL0lEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5LmgKaW5kZXggYzY0MDI4
Y2ZmYjYwZjJkOGEyNDRhNzE1YzczYzBiNzY1YWVlZjQ0Yy4uMDIzNTA3N2ZhOTczZmU4ZjE2MTky
ZTQxMzZmYTIwMDk5N2UyYTYzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9JREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eS5oCkBAIC00NCw3ICs0NCw2IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIH5JREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eSgpOwogCiAgICAg
dmlydHVhbCB2b2lkIGdldChQYXNzUmVmUHRyPFdlYkNvcmU6OklEQktleVJhbmdlPiwgUGFzc1Jl
ZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+LCBXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UqLCBXZWJDb3JlOjpFeGNlcHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCB2b2lk
IHB1dChQYXNzUmVmUHRyPFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NSZWZQ
dHI8V2ViQ29yZTo6SURCS2V5PiwgUHV0TW9kZSwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxs
YmFja3M+LCBXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBXZWJDb3Jl
OjpFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIHB1dFdpdGhJbmRleEtleXMoUGFz
c1JlZlB0cjxXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPFdlYkNv
cmU6OklEQktleT4sIFB1dE1vZGUsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJhY2tzPiwg
V2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgY29uc3QgV1RGOjpWZWN0
b3I8V1RGOjpTdHJpbmc+JiwgY29uc3QgV1RGOjpWZWN0b3I8SW5kZXhLZXlzPiYsIFdlYkNvcmU6
OkV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRnVuY3Rpb24oUGFzc1Jl
ZlB0cjxXZWJDb3JlOjpJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJh
Y2tzPiwgV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBjbGVhcihQYXNzUmVmUHRyPFdlYkNv
cmU6OklEQkNhbGxiYWNrcz4sIFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZSosIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYklEQkN1cnNvckltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViSURCQ3Vyc29ySW1wbC5jcHAKaW5kZXggZTljMGUwNGFmMDM3MzI0YzQxNjRjM2M1
YTEyY2QxYjdhMWZiMWNlOC4uMGQ2NWE4N2JlZTBhYzRmNmUyMjg2MWRhZjE3MThhZWFjZjhkYjNh
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCQ3Vyc29ySW1w
bC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCQ3Vyc29ySW1wbC5j
cHAKQEAgLTYyLDExICs2Miw2IEBAIFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSBXZWJJREJDdXJz
b3JJbXBsOjp2YWx1ZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1faWRiQ3Vyc29yQmFja2VuZC0+dmFs
dWUoKTsKIH0KIAotdm9pZCBXZWJJREJDdXJzb3JJbXBsOjp1cGRhdGUoY29uc3QgV2ViU2VyaWFs
aXplZFNjcmlwdFZhbHVlJiB2YWx1ZSwgV2ViSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsIFdlYkV4
Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIG1faWRiQ3Vyc29yQmFja2VuZC0+dXBkYXRlKHZhbHVl
LCBJREJDYWxsYmFja3NQcm94eTo6Y3JlYXRlKGFkb3B0UHRyKGNhbGxiYWNrcykpLCBlYyk7Ci19
Ci0KIHZvaWQgV2ViSURCQ3Vyc29ySW1wbDo6YWR2YW5jZSh1bnNpZ25lZCBsb25nIGNvdW50LCBX
ZWJJREJDYWxsYmFja3MqIGNhbGxiYWNrcywgV2ViRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAg
bV9pZGJDdXJzb3JCYWNrZW5kLT5hZHZhbmNlKGNvdW50LCBJREJDYWxsYmFja3NQcm94eTo6Y3Jl
YXRlKGFkb3B0UHRyKGNhbGxiYWNrcykpLCBlYyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJJREJDdXJzb3JJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJJREJDdXJzb3JJbXBsLmgKaW5kZXggZjBkMzg3YjYyMTk3Njg3YTgxNmFkMWRjNzU1
NWNkYzI3ZWZiYWZjNS4uNDVhMjI5YjM4MzAxOTI2OTFmYTc4ZDBkYTg2YmUzOTc2ODcxYmI3YSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCQ3Vyc29ySW1wbC5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkN1cnNvckltcGwuaApAQCAt
NDcsNyArNDcsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBXZWJJREJLZXkga2V5KCkgY29uc3Q7
CiAgICAgdmlydHVhbCBXZWJJREJLZXkgcHJpbWFyeUtleSgpIGNvbnN0OwogICAgIHZpcnR1YWwg
V2ViU2VyaWFsaXplZFNjcmlwdFZhbHVlIHZhbHVlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lk
IHVwZGF0ZShjb25zdCBXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUmLCBXZWJJREJDYWxsYmFja3Mq
LCBXZWJFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIGFkdmFuY2UodW5zaWduZWQg
bG9uZywgV2ViSURCQ2FsbGJhY2tzKiwgV2ViRXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwg
dm9pZCBjb250aW51ZUZ1bmN0aW9uKGNvbnN0IFdlYklEQktleSYsIFdlYklEQkNhbGxiYWNrcyos
IFdlYkV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRnVuY3Rpb24oV2Vi
SURCQ2FsbGJhY2tzKiwgV2ViRXhjZXB0aW9uQ29kZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViSURCT2JqZWN0U3RvcmVJbXBsLmNwcCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYklEQk9iamVjdFN0b3JlSW1wbC5jcHAKaW5kZXggNTNkMTQwZjQy
YmU5OGIzYWJlNzNhNzRiYjMzNWRmM2NlYjY1ZDI5Yy4uMjJhMDY2ODA3NzQ0NGRhYzMxZGVlN2Iw
YjU5NDEyNzJkZWRmM2RiZiAxMDA3NTUKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViSURCT2JqZWN0U3RvcmVJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJJREJPYmplY3RTdG9yZUltcGwuY3BwCkBAIC01OCwxMSArNTgsNiBAQCB2b2lkIFdlYklE
Qk9iamVjdFN0b3JlSW1wbDo6Z2V0KGNvbnN0IFdlYklEQktleVJhbmdlJiBrZXlSYW5nZSwgV2Vi
SURCQ2FsbGJhY2tzKgogICAgIG1fb2JqZWN0U3RvcmUtPmdldChrZXlSYW5nZSwgSURCQ2FsbGJh
Y2tzUHJveHk6OmNyZWF0ZShhZG9wdFB0cihjYWxsYmFja3MpKSwgdHJhbnNhY3Rpb24uZ2V0SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKCksIGVjKTsKIH0KIAotdm9pZCBXZWJJREJPYmpl
Y3RTdG9yZUltcGw6OnB1dChjb25zdCBXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUmIHZhbHVlLCBj
b25zdCBXZWJJREJLZXkmIGtleSwgUHV0TW9kZSBwdXRNb2RlLCBXZWJJREJDYWxsYmFja3MqIGNh
bGxiYWNrcywgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBXZWJFeGNlcHRp
b25Db2RlJiBlYykKLXsKLSAgICBtX29iamVjdFN0b3JlLT5wdXQodmFsdWUsIGtleSwgc3RhdGlj
X2Nhc3Q8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpQdXRNb2RlPihwdXRNb2RlKSwg
SURCQ2FsbGJhY2tzUHJveHk6OmNyZWF0ZShhZG9wdFB0cihjYWxsYmFja3MpKSwgdHJhbnNhY3Rp
b24uZ2V0SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKCksIGVjKTsKLX0KLQogdm9pZCBX
ZWJJREJPYmplY3RTdG9yZUltcGw6OnB1dFdpdGhJbmRleEtleXMoY29uc3QgV2ViU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlJiB2YWx1ZSwgY29uc3QgV2ViSURCS2V5JiBrZXksIFB1dE1vZGUgcHV0TW9k
ZSwgV2ViSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiB0
cmFuc2FjdGlvbiwgY29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mIHdlYkluZGV4TmFtZXMsIGNv
bnN0IFdlYlZlY3RvcjxXZWJJbmRleEtleXM+JiB3ZWJJbmRleEtleXMsIFdlYkV4Y2VwdGlvbkNv
ZGUmIGVjKQogewogICAgIEFTU0VSVCh3ZWJJbmRleE5hbWVzLnNpemUoKSA9PSB3ZWJJbmRleEtl
eXMuc2l6ZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklE
Qk9iamVjdFN0b3JlSW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCT2Jq
ZWN0U3RvcmVJbXBsLmgKaW5kZXggZTZkYzg4ZjU0ZDM2NDdiZDdhYjJmNmY4YTdjZjI2NzRmNjZj
M2JkMi4uOTM0Y2ZmYTk5M2M4YmYxMDYzNjQ0NTlmNTBiNmYzYmJhYTA0MjAxZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCT2JqZWN0U3RvcmVJbXBsLmgKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCT2JqZWN0U3RvcmVJbXBsLmgKQEAg
LTQ2LDcgKzQ2LDYgQEAgcHVibGljOgogICAgIH5XZWJJREJPYmplY3RTdG9yZUltcGwoKTsKIAog
ICAgIHZvaWQgZ2V0KGNvbnN0IFdlYklEQktleVJhbmdlJiwgV2ViSURCQ2FsbGJhY2tzKiwgY29u
c3QgV2ViSURCVHJhbnNhY3Rpb24mLCBXZWJFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBwdXQo
Y29uc3QgV2ViU2VyaWFsaXplZFNjcmlwdFZhbHVlJiwgY29uc3QgV2ViSURCS2V5JiwgUHV0TW9k
ZSwgV2ViSURCQ2FsbGJhY2tzKiwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mLCBXZWJFeGNlcHRp
b25Db2RlJik7CiAgICAgdm9pZCBwdXRXaXRoSW5kZXhLZXlzKGNvbnN0IFdlYlNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZSYsIGNvbnN0IFdlYklEQktleSYsIFB1dE1vZGUsIFdlYklEQkNhbGxiYWNrcyos
IGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgY29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mIGlu
ZGV4TmFtZXMsIGNvbnN0IFdlYlZlY3RvcjxXZWJJbmRleEtleXM+JiwgV2ViRXhjZXB0aW9uQ29k
ZSYpOwogICAgIHZvaWQgZGVsZXRlRnVuY3Rpb24oY29uc3QgV2ViSURCS2V5UmFuZ2UmLCBXZWJJ
REJDYWxsYmFja3MqLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYsIFdlYkV4Y2VwdGlvbkNvZGUm
KTsKICAgICB2b2lkIGNsZWFyKFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYklEQlRyYW5zYWN0
aW9uJiwgV2ViRXhjZXB0aW9uQ29kZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9JREJGYWtlQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0lEQkZha2VCYWNraW5nU3RvcmUuaAppbmRleCAwODQwNWNlMGFiNThjOTZmYzI5NmMz
ZjBmOGExNGZmNjlkNjViYTE4Li41MzZkNzg1YjkzYWVlNDNiOWY1MzMyNTI1YzYzZWM3OWU3MDk1
OWJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQkZha2VCYWNr
aW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQkZha2VCYWNr
aW5nU3RvcmUuaApAQCAtNTksNyArNTksNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRl
bGV0ZUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2
NF90IGluZGV4SWQpIE9WRVJSSURFIHsgfQogICAgIHZpcnR1YWwgYm9vbCBwdXRJbmRleERhdGFG
b3JSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0
X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlm
aWVyKikgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgZGVsZXRl
SW5kZXhEYXRhRm9yUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciop
IE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBTdHJpbmcgZ2V0T2JqZWN0
VmlhSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0
X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JikgT1ZFUlJJREUgeyByZXR1cm4gU3RyaW5nKCk7IH0K
ICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBnZXRQcmltYXJ5S2V5VmlhSW5kZXgoaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwg
Y29uc3QgSURCS2V5JikgT1ZFUlJJREUgeyByZXR1cm4gUGFzc1JlZlB0cjxJREJLZXk+KCk7IH0K
ICAgICB2aXJ0dWFsIGJvb2wga2V5RXhpc3RzSW5JbmRleChpbnQ2NF90IGRhdGFiYXNlaWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGluZGV4
S2V5LCBSZWZQdHI8SURCS2V5PiYgZm91bmRQcmltYXJ5S2V5KSBPVkVSUklERSB7IHJldHVybiBm
YWxzZTsgfQogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKaW5kZXggMzQ4OWEwOWMwNThjOGYyNTEyYWZkODhlNTNhMTZmYTBkNzM2NDNh
MC4uNDlkMWZlNDNhMWU2MjAzNjEzN2ZkNDhmOTk5OGQ0NWRkOTM0NmQwZSAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDIxIEBACisyMDEyLTA3LTI1ICBBbGVjIEZsZXR0ICA8YWxlY2ZsZXR0QGNocm9taXVtLm9y
Zz4KKworICAgICAgICBJbmRleGVkREI6IGluamVjdCBpbmRleCBrZXlzIG9uIGN1cnNvci9vYmpl
Y3RzdG9yZS9pbmRleCBnZXQgc3VjY2VzcyBoYW5kbGVycworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTExMjMKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBPbmUgbmV3IHRlc3QgdG8gbWFrZSBzdXJlIHRoYXQg
aW5kZXhlcyB3aXRoIHRoZSBzYW1lIGtleXBhdGggYXMgYW4KKyAgICAgICAgYXV0b0luY3JlbWVu
dCdlZCBvYmplY3RTdG9yZSBzdGlsbCBpbmRleCB0aGVpciB2YWx1ZXMuIEFsc28gbWlub3IKKyAg
ICAgICAgdHdlYWtzIHRvIHRlc3RzIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGZpZ3VyZSBvdXQgd2hp
Y2gga2V5IGlzIGJlaW5nCisgICAgICAgIHVwZGF0ZWQuCisKKyAgICAgICAgKiBzdG9yYWdlL2lu
ZGV4ZWRkYi9pbmRleC1kdXBsaWNhdGUta2V5cGF0aHMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9pbmRleC1kdXBsaWNhdGUta2V5cGF0aHMuaHRtbDog
QWRkZWQuCisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvbW96aWxsYS9hdXRvaW5jcmVtZW50
LWluZGV4ZXMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL21vemls
bGEvcmVzb3VyY2VzL2F1dG9pbmNyZW1lbnQtaW5kZXhlcy5qczoKKyAgICAgICAgKiBzdG9yYWdl
L2luZGV4ZWRkYi9yZXNvdXJjZXMvaW5kZXgtZHVwbGljYXRlLWtleXBhdGhzLmpzOiBBZGRlZC4K
KwogMjAxMi0wNy0yNSAgQW5kcmV3IFdpbHNvbiAgPGF0d2lsc29uQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBVbnJldmlld2VkIGNocm9taXVtIGV4cGVjdGF0aW9ucyBjaGFuZ2UuCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9pbmRleC1kdXBsaWNhdGUta2V5cGF0
aHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvaW5kZXgtZHVw
bGljYXRlLWtleXBhdGhzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZWI3ZmQ2YmNiYmMxMDEw
ZDEwZjRkNTIwNjM0Y2M1NzdhMTVjZGU0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
c3RvcmFnZS9pbmRleGVkZGIvaW5kZXgtZHVwbGljYXRlLWtleXBhdGhzLWV4cGVjdGVkLnR4dApA
QCAtMCwwICsxLDM1IEBACitUZXN0IHRoZSB1c2Ugb2YgaWRlbnRpY2FsIGtleXBhdGhzIGJldHdl
ZW4gb2JqZWN0c3RvcmVzIGFuZCBpbmRleGVzCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBh
IHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4K
KworCitpbmRleGVkREIgPSBzZWxmLmluZGV4ZWREQiB8fCBzZWxmLndlYmtpdEluZGV4ZWREQiB8
fCBzZWxmLm1vekluZGV4ZWREQiB8fCBzZWxmLm1zSW5kZXhlZERCIHx8IHNlbGYuT0luZGV4ZWRE
QjsKKworaW5kZXhlZERCLm9wZW4oJ29ianN0b3JlLWluZGV4LWNvbGxpc2lvbicpCitkYiA9IGV2
ZW50LnRhcmdldC5yZXN1bHQKK2RiLnNldFZlcnNpb24oJzEnKQorRGVsZXRlZCBhbGwgb2JqZWN0
IHN0b3Jlcy4KK0RlbGV0ZWQgYWxsIG9iamVjdCBzdG9yZXMuCitzdG9yZSA9IGRiLmNyZWF0ZU9i
amVjdFN0b3JlKCdjb2xsaWRlV2l0aEluZGV4Jywge2tleVBhdGg6ICdmb28nfSkKK2luZGV4ID0g
c3RvcmUuY3JlYXRlSW5kZXgoJ2ZvbycsICdmb28nKQorb2JqZWN0U3RvcmUucHV0KHtmb286IDEw
fSkKK29iamVjdFN0b3JlLmdldCgxMCkKK2luZGV4LmdldCgxMCkKK1BBU1MgSlNPTi5zdHJpbmdp
ZnkocmVzdWx0KSBpcyAie1wiZm9vXCI6MTB9IgorUEFTUyBKU09OLnN0cmluZ2lmeShyZXN1bHQp
IGlzICJ7XCJmb29cIjoxMH0iCitkYi5zZXRWZXJzaW9uKCcyJykKK0RlbGV0ZWQgYWxsIG9iamVj
dCBzdG9yZXMuCitEZWxldGVkIGFsbCBvYmplY3Qgc3RvcmVzLgorc3RvcmUgPSBkYi5jcmVhdGVP
YmplY3RTdG9yZSgnY29sbGlkZVdpdGhBdXRvSW5jcmVtZW50Jywge2tleVBhdGg6ICdmb28nLCBh
dXRvSW5jcmVtZW50OiB0cnVlfSkKK2luZGV4ID0gc3RvcmUuY3JlYXRlSW5kZXgoJ2ZvbycsICdm
b28nKQorb2JqZWN0U3RvcmUucHV0KHsnYmFyJzogJ2Jheid9KQorZ290IGJhY2sgMTAKK1BBU1Mg
ZXZlbnQudGFyZ2V0LnJlc3VsdCBpcyAxMAorb2JqZWN0U3RvcmUuZ2V0KDEwKQoraW5kZXguZ2V0
KDEwKQorUEFTUyBKU09OLnN0cmluZ2lmeShyZXN1bHQpIGlzICJ7XCJiYXJcIjpcImJhelwiLFwi
Zm9vXCI6MTB9IgorUEFTUyBKU09OLnN0cmluZ2lmeShyZXN1bHQpIGlzICJ7XCJiYXJcIjpcImJh
elwiLFwiZm9vXCI6MTB9IgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNU
IENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2lu
ZGV4LWR1cGxpY2F0ZS1rZXlwYXRocy5odG1sIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVk
ZGIvaW5kZXgtZHVwbGljYXRlLWtleXBhdGhzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDI3NGVmZmYzYWFi
Y2VkNDA2ZmM0ZmRkYzRmOTQyZWExN2Y3NDUxMwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2luZGV4LWR1cGxpY2F0ZS1rZXlwYXRocy5odG1sCkBAIC0w
LDAgKzEsMTAgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNl
cy9zaGFyZWQuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0icmVz
b3VyY2VzL2luZGV4LWR1cGxpY2F0ZS1rZXlwYXRocy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwv
Ym9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRi
L21vemlsbGEvYXV0b2luY3JlbWVudC1pbmRleGVzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L3N0b3JhZ2UvaW5kZXhlZGRiL21vemlsbGEvYXV0b2luY3JlbWVudC1pbmRleGVzLWV4cGVjdGVk
LnR4dAppbmRleCBmOTQ1Mzc0NzEwOWY5YTA1NGFkOWQzODhjMTZiMDg4OWZmNmI2YWVhLi42MWJh
YTIyZjJhN2QwOGM0ZmFiMDI3NWYyYWJlZmNlMTRlNWFhMmJiIDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9tb3ppbGxhL2F1dG9pbmNyZW1lbnQtaW5kZXhlcy1leHBl
Y3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW96aWxsYS9hdXRv
aW5jcmVtZW50LWluZGV4ZXMtZXhwZWN0ZWQudHh0CkBAIC05LDcgKzksNyBAQCBpbmRleGVkREIu
b3BlbihuYW1lKQogZGIgPSBldmVudC50YXJnZXQucmVzdWx0CiByZXF1ZXN0ID0gZGIuc2V0VmVy
c2lvbignMScpCiBEZWxldGVkIGFsbCBvYmplY3Qgc3RvcmVzLgotb2JqZWN0U3RvcmUgPSBkYi5j
cmVhdGVPYmplY3RTdG9yZSgnZm9vJywgeyBrZXlQYXRoOiAnaWQnLCBhdXRvSW5jcmVtZW50OiB0
cnVlIH0pOworb2JqZWN0U3RvcmUgPSBkYi5jcmVhdGVPYmplY3RTdG9yZSgnYXV0b2luY3JlbWVu
dC1pZCcsIHsga2V5UGF0aDogJ2lkJywgYXV0b0luY3JlbWVudDogdHJ1ZSB9KTsKIG9iamVjdFN0
b3JlLmNyZWF0ZUluZGV4KCdmaXJzdCcsICdmaXJzdCcpOwogb2JqZWN0U3RvcmUuY3JlYXRlSW5k
ZXgoJ3NlY29uZCcsICdzZWNvbmQnKTsKIG9iamVjdFN0b3JlLmNyZWF0ZUluZGV4KCd0aGlyZCcs
ICd0aGlyZCcpOwpAQCAtMTcsNyArMTcsOCBAQCBkYXRhID0geyBmaXJzdDogJ2ZvbycsIHNlY29u
ZDogJ2ZvbycsIHRoaXJkOiAnZm9vJyB9OwogcmVxdWVzdCA9IG9iamVjdFN0b3JlLmFkZChkYXRh
KTsKIGtleSA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7CiBQQVNTIGtleSA9PSBudWxsIGlzIGZhbHNl
Ci1vYmplY3RTdG9yZSA9IGRiLnRyYW5zYWN0aW9uKCdmb28nKS5vYmplY3RTdG9yZSgnZm9vJyk7
CitleHBlY3RlZCBrZXkgaXMgMQorb2JqZWN0U3RvcmUgPSBkYi50cmFuc2FjdGlvbignYXV0b2lu
Y3JlbWVudC1pZCcpLm9iamVjdFN0b3JlKCdhdXRvaW5jcmVtZW50LWlkJyk7CiBmaXJzdCA9IG9i
amVjdFN0b3JlLmluZGV4KCdmaXJzdCcpOwogcmVxdWVzdCA9IGZpcnN0LmdldCgnZm9vJyk7CiBQ
QVNTIGV2ZW50LnRhcmdldC5yZXN1bHQuaWQgaXMga2V5CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9zdG9yYWdlL2luZGV4ZWRkYi9tb3ppbGxhL3Jlc291cmNlcy9hdXRvaW5jcmVtZW50LWluZGV4
ZXMuanMgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9tb3ppbGxhL3Jlc291cmNlcy9h
dXRvaW5jcmVtZW50LWluZGV4ZXMuanMKaW5kZXggMWM4NTk4NDg2NWRiZjlhN2ZmMzc1YjQ5MDA3
ZmZhYTM4YTQ4NjRlYi4uMmRhOTZlN2ZmYTU2ZTk3Mzg4OTY1Y2M4NTJmZTkxZWM5YmUzODU5ZiAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW96aWxsYS9yZXNvdXJj
ZXMvYXV0b2luY3JlbWVudC1pbmRleGVzLmpzCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5k
ZXhlZGRiL21vemlsbGEvcmVzb3VyY2VzL2F1dG9pbmNyZW1lbnQtaW5kZXhlcy5qcwpAQCAtMzUs
NyArMzUsNyBAQCBmdW5jdGlvbiBzZXR1cE9iamVjdFN0b3JlKCkKICAgICB0cmFucyA9IGV2ZW50
LnRhcmdldC5yZXN1bHQ7CiAgICAgZGVsZXRlQWxsT2JqZWN0U3RvcmVzKGRiKTsKIAotICAgIG9i
amVjdFN0b3JlID0gZXZhbEFuZExvZygib2JqZWN0U3RvcmUgPSBkYi5jcmVhdGVPYmplY3RTdG9y
ZSgnZm9vJywgeyBrZXlQYXRoOiAnaWQnLCBhdXRvSW5jcmVtZW50OiB0cnVlIH0pOyIpOworICAg
IG9iamVjdFN0b3JlID0gZXZhbEFuZExvZygib2JqZWN0U3RvcmUgPSBkYi5jcmVhdGVPYmplY3RT
dG9yZSgnYXV0b2luY3JlbWVudC1pZCcsIHsga2V5UGF0aDogJ2lkJywgYXV0b0luY3JlbWVudDog
dHJ1ZSB9KTsiKTsKICAgICBldmFsQW5kTG9nKCJvYmplY3RTdG9yZS5jcmVhdGVJbmRleCgnZmly
c3QnLCAnZmlyc3QnKTsiKTsKICAgICBldmFsQW5kTG9nKCJvYmplY3RTdG9yZS5jcmVhdGVJbmRl
eCgnc2Vjb25kJywgJ3NlY29uZCcpOyIpOwogICAgIGV2YWxBbmRMb2coIm9iamVjdFN0b3JlLmNy
ZWF0ZUluZGV4KCd0aGlyZCcsICd0aGlyZCcpOyIpOwpAQCAtNDksMTIgKzQ5LDEzIEBAIGZ1bmN0
aW9uIHNldHVwSW5kZXhlcygpCiB7CiAgICAga2V5ID0gZXZhbEFuZExvZygia2V5ID0gZXZlbnQu
dGFyZ2V0LnJlc3VsdDsiKTsKICAgICBzaG91bGRCZUZhbHNlKCJrZXkgPT0gbnVsbCIpOworICAg
IGRlYnVnKCJleHBlY3RlZCBrZXkgaXMgIiArIGtleSk7CiAgICAgdHJhbnMub25jb21wbGV0ZSA9
IHNldFZlcnNpb25Db21wbGV0ZTsKIH0KIAogZnVuY3Rpb24gc2V0VmVyc2lvbkNvbXBsZXRlKCkK
IHsKLSAgICBvYmplY3RTdG9yZSA9IGV2YWxBbmRMb2coIm9iamVjdFN0b3JlID0gZGIudHJhbnNh
Y3Rpb24oJ2ZvbycpLm9iamVjdFN0b3JlKCdmb28nKTsiKTsKKyAgICBvYmplY3RTdG9yZSA9IGV2
YWxBbmRMb2coIm9iamVjdFN0b3JlID0gZGIudHJhbnNhY3Rpb24oJ2F1dG9pbmNyZW1lbnQtaWQn
KS5vYmplY3RTdG9yZSgnYXV0b2luY3JlbWVudC1pZCcpOyIpOwogICAgIGZpcnN0ID0gZXZhbEFu
ZExvZygiZmlyc3QgPSBvYmplY3RTdG9yZS5pbmRleCgnZmlyc3QnKTsiKTsKICAgICByZXF1ZXN0
ID0gZXZhbEFuZExvZygicmVxdWVzdCA9IGZpcnN0LmdldCgnZm9vJyk7Iik7CiAgICAgcmVxdWVz
dC5vbnN1Y2Nlc3MgPSBjaGVja0ZpcnN0SW5kZXhBbmRQcmVwYXJlU2Vjb25kOwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvcmVzb3VyY2VzL2luZGV4LWR1cGxpY2F0
ZS1rZXlwYXRocy5qcyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3Jlc291cmNlcy9p
bmRleC1kdXBsaWNhdGUta2V5cGF0aHMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzFjZTdlMzQ1MDU2YjQ3Yzhl
ZDFjZmQ1NDNhODkxOWZiNzZkZTkwNgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N0
b3JhZ2UvaW5kZXhlZGRiL3Jlc291cmNlcy9pbmRleC1kdXBsaWNhdGUta2V5cGF0aHMuanMKQEAg
LTAsMCArMSwxMDUgQEAKK2lmICh0aGlzLmltcG9ydFNjcmlwdHMpIHsKKyAgICBpbXBvcnRTY3Jp
cHRzKCcuLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcycpOworICAgIGlt
cG9ydFNjcmlwdHMoJ3NoYXJlZC5qcycpOworfQorCitkZXNjcmlwdGlvbigiVGVzdCB0aGUgdXNl
IG9mIGlkZW50aWNhbCBrZXlwYXRocyBiZXR3ZWVuIG9iamVjdHN0b3JlcyBhbmQgaW5kZXhlcyIp
OworCitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAgICByZW1vdmVWZW5kb3JQcmVmaXhlcygpOworICAg
IHJlcXVlc3QgPSBldmFsQW5kTG9nKCJpbmRleGVkREIub3Blbignb2Jqc3RvcmUtaW5kZXgtY29s
bGlzaW9uJykiKTsKKyAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IHRlc3RDb2xsaWRlT2Jqc3RvcmVJ
bmRleFNldHVwOworICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNr
OworfQorCitmdW5jdGlvbiB0ZXN0Q29sbGlkZU9ianN0b3JlSW5kZXhTZXR1cCgpCit7CisgICAg
ZXZhbEFuZExvZygiZGIgPSBldmVudC50YXJnZXQucmVzdWx0Iik7CisgICAgcmVxdWVzdCA9IGV2
YWxBbmRMb2coImRiLnNldFZlcnNpb24oJzEnKSIpOworICAgIHJlcXVlc3Qub25zdWNjZXNzID0g
dGVzdENvbGxpZGVPYmpzdG9yZUluZGV4OworICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0
ZWRFcnJvckNhbGxiYWNrOworfQorCitmdW5jdGlvbiB0ZXN0Q29sbGlkZU9ianN0b3JlSW5kZXgo
KQoreworICAgIGRlbGV0ZUFsbE9iamVjdFN0b3JlcyhkYik7CisgICAgdHJhbnMgPSBldmVudC50
YXJnZXQucmVzdWx0OworICAgIGRlbGV0ZUFsbE9iamVjdFN0b3JlcyhkYik7CisgICAgZXZhbEFu
ZExvZygic3RvcmUgPSBkYi5jcmVhdGVPYmplY3RTdG9yZSgnY29sbGlkZVdpdGhJbmRleCcsIHtr
ZXlQYXRoOiAnZm9vJ30pIik7CisgICAgZXZhbEFuZExvZygiaW5kZXggPSBzdG9yZS5jcmVhdGVJ
bmRleCgnZm9vJywgJ2ZvbycpIik7CisKKyAgICB0cmFucy5vbmNvbXBsZXRlID0gc3RvcmVDb2xs
aWRlZE9ianN0b3JlSW5kZXhEYXRhOworICAgIHRyYW5zLm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJy
b3JDYWxsYmFjazsKKyAgICB0cmFucy5vbmFib3J0ID0gdW5leHBlY3RlZEFib3J0Q2FsbGJhY2s7
Cit9CisKK2Z1bmN0aW9uIHJlc3VsdFNob3VsZEJlKHYpIHsKKyAgICByZXR1cm4gZnVuY3Rpb24o
ZXZlbnQpIHsKKyAgICAgICAgcmVzdWx0ID0gZXZlbnQudGFyZ2V0LnJlc3VsdDsKKyAgICAgICAg
c2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJKU09OLnN0cmluZ2lmeShyZXN1bHQpIiwgdik7CisgICAg
fQorfTsKKworZnVuY3Rpb24gc3RvcmVDb2xsaWRlZE9ianN0b3JlSW5kZXhEYXRhKCkgeworICAg
IHZhciB0cmFucyA9IGRiLnRyYW5zYWN0aW9uKCdjb2xsaWRlV2l0aEluZGV4JywgJ3JlYWR3cml0
ZScpOworCisgICAgb2JqZWN0U3RvcmUgPSB0cmFucy5vYmplY3RTdG9yZSgnY29sbGlkZVdpdGhJ
bmRleCcpOworICAgIGluZGV4ID0gb2JqZWN0U3RvcmUuaW5kZXgoJ2ZvbycpOworICAgIGV2YWxB
bmRMb2coIm9iamVjdFN0b3JlLnB1dCh7Zm9vOiAxMH0pIikub25zdWNjZXNzID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIGV2YWxBbmRMb2coIm9iamVjdFN0b3JlLmdldCgxMCkiKS5vbnN1Y2Nlc3Mg
PSByZXN1bHRTaG91bGRCZSgneyJmb28iOjEwfScpOworICAgICAgICBldmFsQW5kTG9nKCJpbmRl
eC5nZXQoMTApIikub25zdWNjZXNzID0gcmVzdWx0U2hvdWxkQmUoJ3siZm9vIjoxMH0nKTsKKyAg
ICB9OworCisgICAgdHJhbnMub25jb21wbGV0ZSA9IHRlc3RDb2xsaWRlQXV0b0luY3JlbWVudFNl
dHVwOworICAgIHRyYW5zLm9uYWJvcnQgPSB1bmV4cGVjdGVkQWJvcnRDYWxsYmFjazsKK30KKwor
ZnVuY3Rpb24gdGVzdENvbGxpZGVBdXRvSW5jcmVtZW50U2V0dXAoKQoreworICAgIHJlcXVlc3Qg
PSBldmFsQW5kTG9nKCJkYi5zZXRWZXJzaW9uKCcyJykiKTsKKyAgICByZXF1ZXN0Lm9uc3VjY2Vz
cyA9IHRlc3RDb2xsaWRlQXV0b0luY3JlbWVudDsKKyAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4
cGVjdGVkRXJyb3JDYWxsYmFjazsKK30KKworZnVuY3Rpb24gdGVzdENvbGxpZGVBdXRvSW5jcmVt
ZW50KCkKK3sKKyAgICBkZWxldGVBbGxPYmplY3RTdG9yZXMoZGIpOworICAgIHRyYW5zID0gZXZl
bnQudGFyZ2V0LnJlc3VsdDsKKyAgICBkZWxldGVBbGxPYmplY3RTdG9yZXMoZGIpOworICAgIGV2
YWxBbmRMb2coInN0b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ2NvbGxpZGVXaXRoQXV0b0lu
Y3JlbWVudCcsIHtrZXlQYXRoOiAnZm9vJywgYXV0b0luY3JlbWVudDogdHJ1ZX0pIik7CisgICAg
ZXZhbEFuZExvZygiaW5kZXggPSBzdG9yZS5jcmVhdGVJbmRleCgnZm9vJywgJ2ZvbycpIik7CisK
KyAgICB0cmFucy5vbmNvbXBsZXRlID0gc3RvcmVDb2xsaWRlZEF1dG9JbmNyZW1lbnREYXRhOwor
ICAgIHRyYW5zLm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKKyAgICB0cmFucy5v
bmFib3J0ID0gdW5leHBlY3RlZEFib3J0Q2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIHN0b3JlQ29s
bGlkZWRBdXRvSW5jcmVtZW50RGF0YSgpCit7CisgICAgdmFyIHRyYW5zID0gZGIudHJhbnNhY3Rp
b24oJ2NvbGxpZGVXaXRoQXV0b0luY3JlbWVudCcsICdyZWFkd3JpdGUnKTsKKworICAgIG9iamVj
dFN0b3JlID0gdHJhbnMub2JqZWN0U3RvcmUoJ2NvbGxpZGVXaXRoQXV0b0luY3JlbWVudCcpOwor
ICAgIGluZGV4ID0gb2JqZWN0U3RvcmUuaW5kZXgoJ2ZvbycpOworICAgIC8vIGluc2VydCBzb21l
IGRhdGEgdG8gZnV0eiB3aXRoIHRoZSBhdXRvSW5jcmVtZW50IHN0YXRlCisgICAgZm9yICh2YXIg
aSA9IDU7IGkgPCAxMDsgaSsrKSB7CisgICAgICAgIG9iamVjdFN0b3JlLnB1dCh7Zm9vOiBpfSk7
CisgICAgfQorICAgIC8vIFdpdGhvdXQgYSB2YWx1ZSwgdGhpcyByZXF1aXJlcyB0aGUgYmFja2Vu
ZCB0byBnZW5lcmF0ZSBhIGtleSwgd2hpY2ggbXVzdCBhbHNvIGJlIGluZGV4ZWQuCisgICAgZXZh
bEFuZExvZygib2JqZWN0U3RvcmUucHV0KHsnYmFyJzogJ2Jheid9KSIpLm9uc3VjY2VzcyA9IGZ1
bmN0aW9uKCkgeworICAgICAgICBkZWJ1ZygiZ290IGJhY2sgIiArIEpTT04uc3RyaW5naWZ5KGV2
ZW50LnRhcmdldC5yZXN1bHQpKTsKKyAgICAgICAgc2hvdWxkQmUoImV2ZW50LnRhcmdldC5yZXN1
bHQiLCAiMTAiKTsKKyAgICAgICAgZXZhbEFuZExvZygib2JqZWN0U3RvcmUuZ2V0KDEwKSIpLm9u
c3VjY2VzcyA9IHJlc3VsdFNob3VsZEJlKCd7ImJhciI6ImJheiIsImZvbyI6MTB9Jyk7CisgICAg
ICAgIGV2YWxBbmRMb2coImluZGV4LmdldCgxMCkiKS5vbnN1Y2Nlc3MgPSByZXN1bHRTaG91bGRC
ZSgneyJiYXIiOiJiYXoiLCJmb28iOjEwfScpOworICAgIH07CisKKyAgICB0cmFucy5vbmNvbXBs
ZXRlID0gdGVzdENvbGxpZGVJbmRleEluZGV4U2V0dXA7CisgICAgdHJhbnMub25hYm9ydCA9IHVu
ZXhwZWN0ZWRBYm9ydENhbGxiYWNrOworfQorCitmdW5jdGlvbiB0ZXN0Q29sbGlkZUluZGV4SW5k
ZXhTZXR1cCgpIHsKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30KKwordmFyIGpzVGVzdElzQXN5bmMg
PSB0cnVlOwordGVzdCgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154772</attachid>
            <date>2012-07-26 15:37:11 -0700</date>
            <delta_ts>2012-07-26 16:01:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91123-20120726153659.patch</filename>
            <type>text/plain</type>
            <size>57267</size>
            <attacher name="Alec Flett">alecflett</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzNjU2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTNhNzVlZGZlN2ZlY2Fk
Y2FjOGU2YTYzOGZiYjEzMTQ5NjdkOWQzOC4uODJiNDg1ZWM1MmIxNmQ5ZjViMjRjMGIxM2QxNzI0
YTY0ZjE0OTM5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYwIEBACisyMDEyLTA3LTI1ICBBbGVj
IEZsZXR0ICA8YWxlY2ZsZXR0QGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IGlu
amVjdCBpbmRleCBrZXlzIG9uIGN1cnNvci9vYmplY3RzdG9yZS9pbmRleCBnZXQgc3VjY2VzcyBo
YW5kbGVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTExMjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBN
b3ZlIGtleS1pbmplY3Rpb24gaW50byB0aGUgZnJvbnRlbmQsIGJ5IGluamVjdGluZyB0aGUga2V5
IGludG8KKyAgICAgICAgdGhlIHZhbHVlIG9uIGdldCByYXRoZXIgdGhhbiBzZXQgZm9yIGF1dG9p
bmNyZW1lbnRlZCBrZXlzLiBUaGlzCisgICAgICAgIGdpdmVzIGEgcG90ZW50aWFsIHBlcmZvcm1h
bmNlIHdpbiBieSBhdm9pZGluZyBhbiBJUEMgY2FsbCB0byB0aGUKKyAgICAgICAgVjggdXRpbGl0
eSBwcm9jZXNzIG9uIGNocm9taXVtLCBhbmQgZ2VuZXJhbGx5IGNsZWFucyB1cCB0aGUga2V5Cisg
ICAgICAgIG1hbmFnZW1lbnQuCisKKyAgICAgICAgTm90ZSB0aGF0IHRoaXMgZHVwbGljYXRlcyB0
aGUgbG9naWMgb2YgZ2VuZXJhdGVJbmRleEtleXMgaW50byB0aGUKKyAgICAgICAgZnJvbnRlbmQg
dW50aWwgdGhhdCBtZXRob2QgY2FuIGJlIGV4cHVuZ2VkIGZyb20gdGhlIGJhY2tlbmQuIFRoaXMK
KyAgICAgICAgd2lsbCBiZSBjbGVhbmVkIHVwIGluIGEgbGF0ZXIgcGF0Y2guCisKKyAgICAgICAg
SW4gb3JkZXIgdG8gYWNjb3VudCBmb3IgYm90aCBvbGQgZGF0YSAod2hpY2ggaGFzIHRoZSBkdXBs
aWNhdGUKKyAgICAgICAgcHJpbWFyeSBrZXkgYWxyZWFkeSBpbmplY3RlZCBhbmQgc2VyaWFsaXpl
ZCkgYW5kIGFueSBuZXcgZGF0YSwgYW4KKyAgICAgICAgYXNzZXJ0aW9uIHdhcyByZW1vdmVkIGZy
b20gSURCQmluZGluZ1V0aWxpdGllcy4KKworICAgICAgICBUaGlzIGFsc28gaW5jbHVkZXMgc29t
ZSBtaW5vciByZWZhY3RvcmluZyBzdWNoIGFzIHRoZSBkZXByZWNhdGlvbgorICAgICAgICBvZiBJ
REJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjp1cGRhdGUgaW4gZmF2b3Igb2YgYSBkaXJlY3QgY2Fs
bCB0bworICAgICAgICBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXQsIGFuZCByZW1vdmFs
IG9mIHRoZSBub3ctZGVmdW5jdAorICAgICAgICBJREJCYWNraW5nU3RvcmU6OmdldE9iamVjdFZp
YUluZGV4LgorCisgICAgICAgIFRlc3RzOiBzdG9yYWdlL2luZGV4ZGIvaW5kZXgtZHVwbGljYXRl
LWtleXBhdGhzLmh0bWwKKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdT
dG9yZS5oOgorICAgICAgICAoSURCQmFja2luZ1N0b3JlKToKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJDdXJzb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yOjp1cGRh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yOjpzZXRWYWx1ZVJlYWR5KToKKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJREJDdXJzb3JCYWNrZW5kSW1wbDo6dXBkYXRlKToKKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OklEQkluZGV4QmFja2VuZEltcGw6OmdldEludGVybmFsKToKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmg6CisgICAgICAgIChJREJMZXZlbERCQmFj
a2luZ1N0b3JlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpnZW5lcmF0ZUluZGV4S2V5c0ZvclZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmFkZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6cHV0KToKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oOgorICAgICAgICAoSURCT2JqZWN0U3RvcmUpOgor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0KToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dFdpdGhJbmRleEtl
eXMpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
SURCUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpvblN1Y2Nlc3Mp
OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwOgorICAgICAg
ICAoV2ViQ29yZSk6CisKIDIwMTItMDctMjQgIFNoYXduIFNpbmdoICA8c2hhd25zaW5naEBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBSZWZhY3RvciBDQ0xheWVyVHJlZUhvc3RD
b21tb246IG1vdmUgcm9vdCBsYXllciBzcGVjaWFsIGNhc2UgaW5pdGlhbGl6YXRpb24gaW50byBp
bnRlcm5hbCBjb2RlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAyN2I1NTJiZTRkODFh
MmIzYTZjZmJiMGRiYzE2NjA1M2E4ZGQ0NjNlLi5jNmE4NWM3YjlmNmQyNTkzMmVlNWI4MzRmOWFj
YTg3ODIzOGNhNTAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBA
CisyMDEyLTA3LTI1ICBBbGVjIEZsZXR0ICA8YWxlY2ZsZXR0QGNocm9taXVtLm9yZz4KKworICAg
ICAgICBJbmRleGVkREI6IGluamVjdCBpbmRleCBrZXlzIG9uIGN1cnNvci9vYmplY3RzdG9yZS9p
bmRleCBnZXQgc3VjY2VzcyBoYW5kbGVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9OTExMjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBSZW1vdmUgbWV0aG9kIG5vIGxvbmdlciB1c2VkLgorCisgICAgICAg
ICogdGVzdHMvSURCRmFrZUJhY2tpbmdTdG9yZS5oOgorCiAyMDEyLTA3LTI0ICBTaGF3biBTaW5n
aCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gUmVmYWN0
b3IgQ0NMYXllclRyZWVIb3N0Q29tbW9uOiBtb3ZlIHJvb3QgbGF5ZXIgc3BlY2lhbCBjYXNlIGlu
aXRpYWxpemF0aW9uIGludG8gaW50ZXJuYWwgY29kZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmgKaW5kZXggNzhhOWY2NjdhZGQxMzBl
NjNlM2MwNzQ2ZDRhNzAzYjQ4OTU0NmJkNy4uZjhkZTY4MjAyN2ZjMjUzZjc3ZmE1NTk5NGMxZWIw
ZWJmYzMwNDE1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCQmFja2luZ1N0b3JlLmgKQEAgLTgzLDcgKzgzLDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBkZWxldGVJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCBpbmRleElkKSA9IDA7CiAgICAgdmlydHVhbCBib29sIHB1dEluZGV4RGF0YUZv
clJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRf
dCBpbmRleElkLCBjb25zdCBJREJLZXkmLCBjb25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZp
ZXIqKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGRlbGV0ZUluZGV4RGF0YUZvclJlY29yZChpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBj
b25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqKSA9IDA7Ci0gICAgdmlydHVhbCBTdHJp
bmcgZ2V0T2JqZWN0VmlhSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JikgPSAwOwogICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxJREJLZXk+IGdldFByaW1hcnlLZXlWaWFJbmRleChpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkm
KSA9IDA7CiAgICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luSW5kZXgoaW50NjRfdCBkYXRhYmFz
ZWlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5
JiBpbmRleEtleSwgUmVmUHRyPElEQktleT4mIGZvdW5kUHJpbWFyeUtleSkgPSAwOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcAppbmRleCBlZjM0
Y2I4YzdmYjc2MzYxODQxMjJiM2NiODM2ZDI0OGQyMWViOTMwLi4wNWRkYjI1MWU0ZmEyYzE3OTZl
YjVlMjNhODg3ZGYyOGU3YTQ3ZGE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkN1cnNvci5jcHAKQEAgLTE1OSwxMyArMTU5LDcgQEAgUGFzc1JlZlB0cjxJREJS
ZXF1ZXN0PiBJREJDdXJzb3I6OnVwZGF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
LCBQYXNzUmUKICAgICAgICAgfQogICAgIH0KIAotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1
ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBt
X3RyYW5zYWN0aW9uLmdldCgpKTsKLSAgICBtX2JhY2tlbmQtPnVwZGF0ZSh2YWx1ZSwgcmVxdWVz
dCwgZWMpOwotICAgIGlmIChlYykgewotICAgICAgICByZXF1ZXN0LT5tYXJrRWFybHlEZWF0aCgp
OwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgcmV0dXJuIHJlcXVlc3QucmVsZWFzZSgp
OworICAgIHJldHVybiBvYmplY3RTdG9yZS0+cHV0KElEQk9iamVjdFN0b3JlQmFja2VuZEludGVy
ZmFjZTo6Q3Vyc29yVXBkYXRlLCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgY29udGV4dCwgdmFsdWUs
IG1fY3VycmVudFByaW1hcnlLZXksIGVjKTsKIH0KIAogdm9pZCBJREJDdXJzb3I6OmFkdmFuY2Uo
dW5zaWduZWQgbG9uZyBjb3VudCwgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC0yNTksMTggKzI1Mywy
MSBAQCB2b2lkIElEQkN1cnNvcjo6c2V0VmFsdWVSZWFkeSgpCiAgICAgbV9jdXJyZW50UHJpbWFy
eUtleSA9IG1fYmFja2VuZC0+cHJpbWFyeUtleSgpOwogCiAgICAgUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4gdmFsdWUgPSBtX2JhY2tlbmQtPnZhbHVlKCk7Ci0jaWZuZGVmIE5ERUJVRwog
ICAgIGlmICghaXNLZXlDdXJzb3IoKSkgewotICAgICAgICAvLyBGSVhNRTogQWN0dWFsbHkgaW5q
ZWN0IHRoZSBwcmltYXJ5S2V5IGF0IHRoZSBrZXlQYXRoLgogICAgICAgICBSZWZQdHI8SURCT2Jq
ZWN0U3RvcmU+IG9iamVjdFN0b3JlID0gZWZmZWN0aXZlT2JqZWN0U3RvcmUoKTsKLSAgICAgICAg
aWYgKG9iamVjdFN0b3JlLT5hdXRvSW5jcmVtZW50KCkgJiYgIW9iamVjdFN0b3JlLT5tZXRhZGF0
YSgpLmtleVBhdGguaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGNvbnN0IElEQktleVBhdGgmIGtl
eVBhdGggPSBvYmplY3RTdG9yZS0+bWV0YWRhdGEoKS5rZXlQYXRoOwotICAgICAgICAgICAgUmVm
UHRyPElEQktleT4gZXhwZWN0ZWRLZXkgPSBjcmVhdGVJREJLZXlGcm9tU2VyaWFsaXplZFZhbHVl
QW5kS2V5UGF0aCh2YWx1ZSwga2V5UGF0aCk7Ci0gICAgICAgICAgICBBU1NFUlQobV9jdXJyZW50
UHJpbWFyeUtleSk7Ci0gICAgICAgICAgICBBU1NFUlQoZXhwZWN0ZWRLZXktPmlzRXF1YWwobV9j
dXJyZW50UHJpbWFyeUtleS5nZXQoKSkpOworICAgICAgICBjb25zdCBJREJPYmplY3RTdG9yZU1l
dGFkYXRhIG1ldGFkYXRhID0gb2JqZWN0U3RvcmUtPm1ldGFkYXRhKCk7CisgICAgICAgIGlmICht
ZXRhZGF0YS5hdXRvSW5jcmVtZW50ICYmICFtZXRhZGF0YS5rZXlQYXRoLmlzTnVsbCgpKSB7Cisj
aWZuZGVmIE5ERUJVRworICAgICAgICAgICAgUmVmUHRyPElEQktleT4gZXhwZWN0ZWRLZXkgPSBj
cmVhdGVJREJLZXlGcm9tU2VyaWFsaXplZFZhbHVlQW5kS2V5UGF0aCh2YWx1ZSwgbWV0YWRhdGEu
a2V5UGF0aCk7CisgICAgICAgICAgICBBU1NFUlQoIWV4cGVjdGVkS2V5IHx8IGV4cGVjdGVkS2V5
LT5pc0VxdWFsKG1fY3VycmVudFByaW1hcnlLZXkuZ2V0KCkpKTsKKyNlbmRpZgorICAgICAgICAg
ICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWVBZnRlckluamVjdGlvbiA9IGlu
amVjdElEQktleUludG9TZXJpYWxpemVkVmFsdWUobV9jdXJyZW50UHJpbWFyeUtleSwgdmFsdWUs
IG1ldGFkYXRhLmtleVBhdGgpOworICAgICAgICAgICAgQVNTRVJUKHZhbHVlQWZ0ZXJJbmplY3Rp
b24pOworICAgICAgICAgICAgLy8gRklYTUU6IFRoZXJlIGlzIG5vIHdheSB0byByZXBvcnQgZXJy
b3JzIGhlcmUuIE1vdmUgdGhpcyBpbnRvIG9uU3VjY2Vzc1dpdGhDb250aW51YXRpb24gc28gdGhh
dCB3ZSBjYW4gYWJvcnQgdGhlIHRyYW5zYWN0aW9uIHRoZXJlLiBTZWU6IGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MjI3OAorICAgICAgICAgICAgaWYgKHZhbHVlQWZ0
ZXJJbmplY3Rpb24pCisgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZUFmdGVySW5qZWN0aW9u
OwogICAgICAgICB9CiAgICAgfQotI2VuZGlmCiAgICAgbV9jdXJyZW50VmFsdWUgPSBJREJBbnk6
OmNyZWF0ZSh2YWx1ZS5yZWxlYXNlKCkpOwogCiAgICAgbV9nb3RWYWx1ZSA9IHRydWU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5k
SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNr
ZW5kSW1wbC5jcHAKaW5kZXggYWUyN2FmOGEzMmM2YmI2OTQ5MmJmZjA4NjZlMmQwMjg1MjQ0NjYw
My4uMGEzOWE4ZmJjNjllMDY3M2Y3MzcyNzYxMmI5MWVjYjUxYWQ5YTA5NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJ
bXBsLmNwcApAQCAtODMsMTcgKzgzLDYgQEAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IElEQkN1cnNvckJhY2tlbmRJbXBsOjp2YWx1ZSgpIGNvbnN0CiAgICAgcmV0dXJuIFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUobV9jdXJzb3ItPnZhbHVlKCkpOwogfQog
Ci12b2lkIElEQkN1cnNvckJhY2tlbmRJbXBsOjp1cGRhdGUoUGFzc1JlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+IHZhbHVlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBF
eGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBJREJfVFJBQ0UoIklEQkN1cnNvckJhY2tlbmRJbXBs
Ojp1cGRhdGUiKTsKLSAgICBBU1NFUlQobV90cmFuc2FjdGlvbi0+bW9kZSgpICE9IElEQlRyYW5z
YWN0aW9uOjpSRUFEX09OTFkpOwotCi0gICAgQVNTRVJUKG1fY3Vyc29yKTsKLSAgICBBU1NFUlQo
bV9jdXJzb3JUeXBlICE9IEluZGV4S2V5Q3Vyc29yKTsKLQotICAgIG1fb2JqZWN0U3RvcmUtPnB1
dCh2YWx1ZSwgbV9jdXJzb3ItPnByaW1hcnlLZXkoKSwgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50
ZXJmYWNlOjpDdXJzb3JVcGRhdGUsIGNhbGxiYWNrcywgbV90cmFuc2FjdGlvbi5nZXQoKSwgZWMp
OwotfQotCiB2b2lkIElEQkN1cnNvckJhY2tlbmRJbXBsOjpjb250aW51ZUZ1bmN0aW9uKFBhc3NS
ZWZQdHI8SURCS2V5PiBwcnBLZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFj
a3MsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIElEQl9UUkFDRSgiSURCQ3Vyc29yQmFja2Vu
ZEltcGw6OmNvbnRpbnVlIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuaAppbmRleCAwNDNjNDAzNTJjZGQzYTNmZDYz
Zjk5NzJkMTY3MjFmMDQ4ZTJiMDk5Li41MDk3YzUzODc2OGYyOWYwOTE5NGIyOTQ5MGIxZDQxMmRl
NGUxZjNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJD
dXJzb3JCYWNrZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkN1cnNvckJhY2tlbmRJbXBsLmgKQEAgLTU3LDcgKzU3LDYgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSgpIGNvbnN0OwogICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxJREJLZXk+IHByaW1hcnlLZXkoKSBjb25zdDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGUoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4sIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgYWR2YW5jZSh1bnNp
Z25lZCBsb25nLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIEV4Y2VwdGlvbkNvZGUmKTsKICAg
ICB2aXJ0dWFsIHZvaWQgY29udGludWVGdW5jdGlvbihQYXNzUmVmUHRyPElEQktleT4sIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBk
ZWxldGVGdW5jdGlvbihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIEV4Y2VwdGlvbkNvZGUmKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJh
Y2tlbmRJbnRlcmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1
cnNvckJhY2tlbmRJbnRlcmZhY2UuaAppbmRleCA0OGQzYTE4MjlmNjU4OGVkZjYxOTczMzdmMzE4
YjJjMDZlOTBiY2YzLi4xZGYyODQ1NmE0MWM4OTM4M2ZlMmI4MTJhZDM3MDZkZTI3NDg5NDM4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNr
ZW5kSW50ZXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
Q3Vyc29yQmFja2VuZEludGVyZmFjZS5oCkBAIC01Nyw3ICs1Nyw2IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5KCkgY29uc3QgPSAwOwogICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlKCkgY29uc3QgPSAw
OwogCi0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZShQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKICAg
ICB2aXJ0dWFsIHZvaWQgYWR2YW5jZSh1bnNpZ25lZCBsb25nIGNvdW50LCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4sIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNvbnRp
bnVlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+LCBFeGNlcHRpb25Db2RlJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVGdW5jdGlv
bihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBs
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZElt
cGwuY3BwCmluZGV4IDlmNWZmM2JhZmNhMjU0OTc1YTQzYzQzMGViY2E1ZTIxODY5MGVjNjYuLjEz
NDAwODQ5MWY1YTc0MzE5NmUyZmM5YWI4ODJkYWVlNmNiMzk1OTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuY3Bw
CkBAIC0xNzIsMTEgKzE3MiwxOSBAQCB2b2lkIElEQkluZGV4QmFja2VuZEltcGw6OmdldEludGVy
bmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkluZAogICAgICAgICBi
YWNraW5nU3RvcmVDdXJzb3ItPmNsb3NlKCk7CiAgICAgfQogCi0gICAgU3RyaW5nIHZhbHVlID0g
aW5kZXgtPmJhY2tpbmdTdG9yZSgpLT5nZXRPYmplY3RWaWFJbmRleChpbmRleC0+ZGF0YWJhc2VJ
ZCgpLCBpbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlkKCksIGluZGV4LT5pZCgpLCAqa2V5
KTsKKyAgICBSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5ID0gaW5kZXgtPmJhY2tpbmdTdG9yZSgp
LT5nZXRQcmltYXJ5S2V5VmlhSW5kZXgoaW5kZXgtPmRhdGFiYXNlSWQoKSwgaW5kZXgtPm1fb2Jq
ZWN0U3RvcmVCYWNrZW5kLT5pZCgpLCBpbmRleC0+aWQoKSwgKmtleSk7CisKKyAgICBTdHJpbmcg
dmFsdWUgPSBpbmRleC0+YmFja2luZ1N0b3JlKCktPmdldE9iamVjdFN0b3JlUmVjb3JkKGluZGV4
LT5kYXRhYmFzZUlkKCksIGluZGV4LT5tX29iamVjdFN0b3JlQmFja2VuZC0+aWQoKSwgKnByaW1h
cnlLZXkpOworCiAgICAgaWYgKHZhbHVlLmlzTnVsbCgpKSB7CiAgICAgICAgIGNhbGxiYWNrcy0+
b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6dW5kZWZpbmVkVmFsdWUoKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CisgICAgaWYgKGluZGV4LT5tX29iamVjdFN0b3JlQmFja2VuZC0+
YXV0b0luY3JlbWVudCgpICYmICFpbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmtleVBhdGgo
KS5pc051bGwoKSkgeworICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlKHZhbHVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHJpbWFyeUtleSwgaW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5rZXlQYXRoKCkp
OworICAgICAgICByZXR1cm47CisgICAgfQogICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUodmFsdWUpKTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoLmNwcAppbmRleCAwYzM1ZDIw
ZDYwNmQ3ZDVjZmI0MTc5MzVhNjdkNjBiZDQ1MmRmM2E4Li5kMzg5OTQxOTg1NzUxZjMwYzMwNjdj
N2FjNzQ4MGU5NjZhZGM0MzZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJLZXlQYXRoLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJLZXlQYXRoLmNwcApAQCAtMjM2LDYgKzIzNiwzMSBAQCBJREJLZXlQYXRoOjpvcGVy
YXRvciBQYXNzUmVmUHRyPElEQkFueT4oKSBjb25zdAogICAgIHJldHVybiAwOwogfQogCitib29s
IElEQktleVBhdGg6Om9wZXJhdG9yPT0oUGFzc1JlZlB0cjxJREJBbnk+IG90aGVyKSBjb25zdAor
eworICAgIGlmICghaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0
Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgTnVsbFR5cGU6CisgICAgICAgIHJldHVybiBvdGhlci0+
dHlwZSgpID09IElEQkFueTo6TnVsbFR5cGU7CisgICAgY2FzZSBTdHJpbmdUeXBlOgorICAgICAg
ICByZXR1cm4gb3RoZXItPnR5cGUoKSA9PSBJREJBbnk6OlN0cmluZ1R5cGUgJiYgb3RoZXItPnN0
cmluZygpID09IHN0cmluZygpOworICAgIGNhc2UgQXJyYXlUeXBlOgorICAgICAgICBpZiAob3Ro
ZXItPnR5cGUoKSAhPSBJREJBbnk6OkRPTVN0cmluZ0xpc3RUeXBlKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBvdGhlckxpc3QgPSBv
dGhlci0+ZG9tU3RyaW5nTGlzdCgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
YXJyYXkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChvdGhlckxpc3QtPml0ZW0oaSkg
IT0gbV9hcnJheVtpXSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIHJldHVybiBmYWxzZTsKK30KKwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguaAppbmRleCBmNTIzNmMx
NTJmMDJjYmRhMjhkYjhjMzE1MWYyZGQ4NTdlYWFlY2U5Li45ODgyMzQwM2EwYTFjZWJiOGIwMWI0
N2NkYTkyMDExYmVlYzMxMTU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJLZXlQYXRoLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCS2V5UGF0aC5oCkBAIC03Miw2ICs3Miw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzTnVs
bCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBOdWxsVHlwZTsgfQogICAgIGJvb2wgaXNWYWxp
ZCgpIGNvbnN0OwogICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8SURCQW55PigpIGNvbnN0OworICAg
IGJvb2wgb3BlcmF0b3I9PShQYXNzUmVmUHRyPElEQkFueT4gb3RoZXIpIGNvbnN0OwogCiBwcml2
YXRlOgogICAgIFR5cGUgbV90eXBlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcAppbmRleCAzMmUyZjY4
MTU3OTQwOWEwOTA4ZDI5YTE4NzJjMGNkYzU2Yjg5ZWY5Li4wNTEzYzM1MzNmY2FiMGZmODUyZGMw
YTkxMzQ0NTdlY2YzNjI5N2YzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcApAQCAtOTY3LDE1ICs5
NjcsNiBAQCBib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZUluZGV4RGF0YUZvclJl
Y29yZChpbnQ2NF90LCBpbnQ2NF90LCBpbnQ2NF90LAogICAgIHJldHVybiB0cnVlOwogfQogCi1T
dHJpbmcgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0T2JqZWN0VmlhSW5kZXgoaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3Qg
SURCS2V5JiBrZXkpCi17Ci0gICAgUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSA9IGdldFByaW1h
cnlLZXlWaWFJbmRleChkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXkpOwot
ICAgIGlmICghcHJpbWFyeUtleSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgcmV0
dXJuIGdldE9iamVjdFN0b3JlUmVjb3JkKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsICpwcmlt
YXJ5S2V5KTsKLX0KLQogc3RhdGljIGJvb2wgdmVyc2lvbkV4aXN0cyhMZXZlbERCVHJhbnNhY3Rp
b24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCB2ZXJzaW9uLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGVuY29kZWRQcmltYXJ5S2V5
KQogewogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBrZXkgPSBFeGlzdHNFbnRyeUtleTo6ZW5jb2Rl
KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGVuY29kZWRQcmltYXJ5S2V5KTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3Rv
cmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5n
U3RvcmUuaAppbmRleCBjNWE5ZTJlZTMwOWU4Y2EzZmQ3ZjcwZjBhYTJiYjgwY2VjMDQ2YjJlLi4w
YmU5MzRmZmRhOWJjZjgwOTFkNTM0MTBhNmFiY2M4MDBmNTkwZDM2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZS5oCkBAIC02OSw3ICs2OSw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5k
ZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5k
ZXhJZCk7CiAgICAgdmlydHVhbCBib29sIHB1dEluZGV4RGF0YUZvclJlY29yZChpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJ
REJLZXkmLCBjb25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqKTsKICAgICB2aXJ0dWFs
IGJvb2wgZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3Jk
SWRlbnRpZmllciopOwotICAgIHZpcnR1YWwgU3RyaW5nIGdldE9iamVjdFZpYUluZGV4KGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNv
bnN0IElEQktleSYpOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IGdldFByaW1hcnlL
ZXlWaWFJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50
NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmKTsKICAgICB2aXJ0dWFsIGJvb2wga2V5RXhpc3Rz
SW5JbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRf
dCBpbmRleElkLCBjb25zdCBJREJLZXkmIGluZGV4S2V5LCBSZWZQdHI8SURCS2V5PiYgZm91bmRQ
cmltYXJ5S2V5KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCT2JqZWN0U3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmUuY3BwCmluZGV4IGRjOWJlYzViNDkwNWI2Y2I4ZDE2MWUyYjAwNzU1ODJj
MzlmNTY2ZTUuLjdmN2NkNzRiYjBlZGNiNjNmODQ1NDBiZWIwYzk1OWRlY2U2MjZmMTkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5j
cHAKQEAgLTEwMiwxOSArMTAyLDQ0IEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0
U3RvcmU6OmdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzCiAgICAgcmV0
dXJuIGdldChjb250ZXh0LCBrZXlSYW5nZS5yZWxlYXNlKCksIGVjKTsKIH0KIAorc3RhdGljIHZv
aWQgZ2VuZXJhdGVJbmRleEtleXNGb3JWYWx1ZShjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRl
eE1ldGFkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gb2JqZWN0VmFsdWUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIElEQk9iamVjdFN0b3JlOjpJbmRleEtleXMqIGluZGV4S2V5
cykKK3sKKyAgICBBU1NFUlQoaW5kZXhLZXlzKTsKKyAgICBSZWZQdHI8SURCS2V5PiBpbmRleEtl
eSA9IGNyZWF0ZUlEQktleUZyb21TZXJpYWxpemVkVmFsdWVBbmRLZXlQYXRoKG9iamVjdFZhbHVl
LCBpbmRleE1ldGFkYXRhLmtleVBhdGgpOworCisgICAgaWYgKCFpbmRleEtleSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKCFpbmRleE1ldGFkYXRhLm11bHRpRW50cnkgfHwgaW5kZXhLZXkt
PnR5cGUoKSAhPSBJREJLZXk6OkFycmF5VHlwZSkgeworICAgICAgICBpZiAoIWluZGV4S2V5LT5p
c1ZhbGlkKCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaW5kZXhLZXlzLT5hcHBl
bmQoaW5kZXhLZXkpOworICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVChpbmRleE1ldGFkYXRh
Lm11bHRpRW50cnkpOworICAgICAgICBBU1NFUlQoaW5kZXhLZXktPnR5cGUoKSA9PSBJREJLZXk6
OkFycmF5VHlwZSk7CisgICAgICAgIGluZGV4S2V5ID0gSURCS2V5OjpjcmVhdGVNdWx0aUVudHJ5
QXJyYXkoaW5kZXhLZXktPmFycmF5KCkpOworCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgaW5kZXhLZXktPmFycmF5KCkuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBpbmRleEtleXMt
PmFwcGVuZChpbmRleEtleS0+YXJyYXkoKVtpXSk7CisgICAgfQorfQorCiBQYXNzUmVmUHRyPElE
QlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjphZGQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBQYXNzUmVmUHRy
PElEQktleT4ga2V5LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBJREJfVFJBQ0UoIklEQk9i
amVjdFN0b3JlOjphZGQiKTsKLSAgICByZXR1cm4gcHV0KElEQk9iamVjdFN0b3JlQmFja2VuZElu
dGVyZmFjZTo6QWRkT25seSwgY29udGV4dCwgdmFsdWUsIGtleSwgZWMpOworICAgIHJldHVybiBw
dXQoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpBZGRPbmx5LCBJREJBbnk6OmNyZWF0
ZSh0aGlzKSwgY29udGV4dCwgdmFsdWUsIGtleSwgZWMpOwogfQogCiBQYXNzUmVmUHRyPElEQlJl
cXVlc3Q+IElEQk9iamVjdFN0b3JlOjpwdXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBQYXNzUmVmUHRyPElE
QktleT4ga2V5LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBJREJfVFJBQ0UoIklEQk9iamVj
dFN0b3JlOjpwdXQiKTsKLSAgICByZXR1cm4gcHV0KElEQk9iamVjdFN0b3JlQmFja2VuZEludGVy
ZmFjZTo6QWRkT3JVcGRhdGUsIGNvbnRleHQsIHZhbHVlLCBrZXksIGVjKTsKKyAgICByZXR1cm4g
cHV0KElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6QWRkT3JVcGRhdGUsIElEQkFueTo6
Y3JlYXRlKHRoaXMpLCBjb250ZXh0LCB2YWx1ZSwga2V5LCBlYyk7CiB9CiAKLVBhc3NSZWZQdHI8
SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dChJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRl
cmZhY2U6OlB1dE1vZGUgcHV0TW9kZSwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
UGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLCBQYXNzUmVmUHRyPElE
QktleT4gcHJwS2V5LCBFeGNlcHRpb25Db2RlJiBlYykKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4g
SURCT2JqZWN0U3RvcmU6OnB1dChJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1v
ZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJBbnk+IHNvdXJjZSwgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVl
LCBQYXNzUmVmUHRyPElEQktleT4gcHJwS2V5LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBJ
REJfVFJBQ0UoIklEQk9iamVjdFN0b3JlOjpwdXQiKTsKICAgICBSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiB2YWx1ZSA9IHBycFZhbHVlOwpAQCAtMTQxLDcgKzE2Niw3IEBAIFBhc3NSZWZQ
dHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dChJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bnRlcmZhY2U6OlB1dE1vCiAgICAgY29uc3QgYm9vbCB1c2VzSW5MaW5lS2V5cyA9ICFrZXlQYXRo
LmlzTnVsbCgpOwogICAgIGNvbnN0IGJvb2wgaGFzS2V5R2VuZXJhdG9yID0gYXV0b0luY3JlbWVu
dCgpOwogCi0gICAgaWYgKHVzZXNJbkxpbmVLZXlzICYmIGtleSkgeworICAgIGlmIChwdXRNb2Rl
ICE9IElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6Q3Vyc29yVXBkYXRlICYmIHVzZXNJ
bkxpbmVLZXlzICYmIGtleSkgewogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpE
QVRBX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpAQCAtMTY3LDE1ICsxOTIsMjYgQEAg
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0KElEQk9iamVjdFN0b3Jl
QmFja2VuZEludGVyZmFjZTo6UHV0TW8KICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQorICAgICAgICBpZiAoa2V5UGF0aEtleSkKKyAgICAgICAgICAg
IGtleSA9IGtleVBhdGhLZXk7CiAgICAgfQogICAgIGlmIChrZXkgJiYgIWtleS0+aXNWYWxpZCgp
KSB7CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOwogICAgICAg
ICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElE
QlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2Fj
dGlvbi5nZXQoKSk7Ci0gICAgLy8gRklYTUU6IFBhc3MgdGhyb3VnaCBrZXlQYXRoS2V5IGFzIGtl
eSB0byBzaW1wbGlmeSBiYWNrIGVuZCBpbXBsZW1lbnRhdGlvbi4KLSAgICBtX2JhY2tlbmQtPnB1
dCh2YWx1ZS5yZWxlYXNlKCksIGtleS5yZWxlYXNlKCksIHB1dE1vZGUsIHJlcXVlc3QsIG1fdHJh
bnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOworICAgIFZlY3RvcjxTdHJpbmc+IGluZGV4TmFtZXM7
CisgICAgVmVjdG9yPEluZGV4S2V5cz4gaW5kZXhLZXlzOworICAgIGZvciAoSURCT2JqZWN0U3Rv
cmVNZXRhZGF0YTo6SW5kZXhNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9tZXRhZGF0YS5pbmRl
eGVzLmJlZ2luKCk7IGl0ICE9IG1fbWV0YWRhdGEuaW5kZXhlcy5lbmQoKTsgKytpdCkgeworICAg
ICAgICBJbmRleEtleXMga2V5czsKKyAgICAgICAgZ2VuZXJhdGVJbmRleEtleXNGb3JWYWx1ZShp
dC0+c2Vjb25kLCB2YWx1ZSwgJmtleXMpOworICAgICAgICBpbmRleE5hbWVzLmFwcGVuZChpdC0+
Zmlyc3QpOworICAgICAgICBpbmRleEtleXMuYXBwZW5kKGtleXMpOworICAgIH0KKyAgICBBU1NF
UlQoaW5kZXhLZXlzLnNpemUoKSA9PSBpbmRleE5hbWVzLnNpemUoKSk7CisKKyAgICBSZWZQdHI8
SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBzb3VyY2Us
IG1fdHJhbnNhY3Rpb24uZ2V0KCkpOworICAgIG1fYmFja2VuZC0+cHV0V2l0aEluZGV4S2V5cyh2
YWx1ZS5yZWxlYXNlKCksIGtleS5yZWxlYXNlKCksIHB1dE1vZGUsIHJlcXVlc3QsIG1fdHJhbnNh
Y3Rpb24tPmJhY2tlbmQoKSwgaW5kZXhOYW1lcywgaW5kZXhLZXlzLCBlYyk7CiAgICAgaWYgKGVj
KSB7CiAgICAgICAgIHJlcXVlc3QtPm1hcmtFYXJseURlYXRoKCk7CiAgICAgICAgIHJldHVybiAw
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0
U3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3Jl
LmgKaW5kZXggZWY3YzA2M2I4ZjgyMjY0MTdhN2JmZjhmMmZlMTM2OTgyNDNiODUzNy4uNmZlZmM0
ZTJiYWQwOTVhZTZkMTMzNGMzZWJiOTZmZTkwODliODgwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oCkBAIC05NSw3ICs5NSw3IEBA
IHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgRXhjZXB0aW9uQ29kZSYpOwogICAg
IFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gY291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBh
c3NSZWZQdHI8SURCS2V5PiwgRXhjZXB0aW9uQ29kZSYpOwogCi0gICAgUGFzc1JlZlB0cjxJREJS
ZXF1ZXN0PiBwdXQoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpQdXRNb2RlLCBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQ
YXNzUmVmUHRyPElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQlJl
cXVlc3Q+IHB1dChJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vZGUsIFBhc3NS
ZWZQdHI8SURCQW55PiBzb3VyY2UsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NSZWZQdHI8SURCS2V5PiwgRXhjZXB0aW9uQ29k
ZSYpOwogICAgIHZvaWQgbWFya0RlbGV0ZWQoKSB7IG1fZGVsZXRlZCA9IHRydWU7IH0KICAgICB2
b2lkIHRyYW5zYWN0aW9uRmluaXNoZWQoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcApp
bmRleCBiOTYyZTk0ODdhMjE2ZmFjNTg5OGUwYTA3MmViMDY1YjM2OGZiNTQ1Li43NDY5MzNlZjA0
ZGU2NjQwMDQyM2JhZWM5OGNkODU1NmNkZmJhODgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
LmNwcApAQCAtMTIwLDQ4ICsxMjAsNiBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
OmdldEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPAogICAgIGNh
bGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUo
d2lyZURhdGEpKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5PiBmZXRjaEtleUZyb21L
ZXlQYXRoKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogdmFsdWUsIGNvbnN0IElEQktleVBhdGgmIGtl
eVBhdGgpCi17Ci0gICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpmZXRj
aEtleUZyb21LZXlQYXRoIik7Ci0gICAgQVNTRVJUKCFrZXlQYXRoLmlzTnVsbCgpKTsKLQotICAg
IFZlY3RvcjxSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiA+IHZhbHVlczsKLSAgICB2YWx1
ZXMuYXBwZW5kKHZhbHVlKTsKLSAgICBWZWN0b3I8UmVmUHRyPElEQktleT4gPiBrZXlzOwotICAg
IElEQktleVBhdGhCYWNrZW5kSW1wbDo6Y3JlYXRlSURCS2V5c0Zyb21TZXJpYWxpemVkVmFsdWVz
QW5kS2V5UGF0aCh2YWx1ZXMsIGtleVBhdGgsIGtleXMpOwotICAgIGlmIChrZXlzLmlzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgQVNTRVJUKGtleXMuc2l6ZSgpID09IDEpOwotICAg
IHJldHVybiBrZXlzWzBdLnJlbGVhc2UoKTsKLX0KLQotc3RhdGljIFBhc3NSZWZQdHI8U2VyaWFs
aXplZFNjcmlwdFZhbHVlPiBpbmplY3RLZXlJbnRvS2V5UGF0aChQYXNzUmVmUHRyPElEQktleT4g
a2V5LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIGNvbnN0IElEQktl
eVBhdGgmIGtleVBhdGgpCi17Ci0gICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsOjppbmplY3RLZXlJbnRvS2V5UGF0aCIpOwotICAgIHJldHVybiBJREJLZXlQYXRoQmFja2Vu
ZEltcGw6OmluamVjdElEQktleUludG9TZXJpYWxpemVkVmFsdWUoa2V5LCB2YWx1ZSwga2V5UGF0
aCk7Ci19Ci0KLS8vIEZJWE1FOiBSZW1vdmUgdGhpcyBtZXRob2Qgd2hlbiBnZXQtc2lkZSBrZXkg
aW5qZWN0aW9uIGlzIHRoZSBub3JtLgotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpw
dXQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLCBQYXNzUmVmUHRy
PElEQktleT4gcHJwS2V5LCBQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rp
b25QdHIsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6cHV0Iik7Ci0gICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpwdXRXaXRoSW5kZXhLZXlzIik7Ci0KLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUgPSB0aGlzOwotICAgIFJlZlB0cjxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+IHZhbHVlID0gcHJwVmFsdWU7Ci0gICAgUmVmUHRyPElEQktleT4ga2V5ID0gcHJw
S2V5OwotICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsK
LSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9uUHRyKTsKLSAgICBBU1NFUlQo
dHJhbnNhY3Rpb24tPm1vZGUoKSAhPSBJREJUcmFuc2FjdGlvbjo6UkVBRF9PTkxZKTsKLQotICAg
IC8vIE51bGwgcG9pbnRlcnMgaGVyZSBzaWduaWZ5IHRoYXQgaW5kZXgga2V5cyBzaG91bGQgYmUg
Z2VuZXJhdGVkIGFzIGEgcGFydCBvZiB0aGlzIHB1dC4KLSAgICBPd25QdHI8VmVjdG9yPFN0cmlu
Zz4gPiBudWxsSW5kZXhOYW1lczsKLSAgICBPd25QdHI8VmVjdG9yPEluZGV4S2V5cz4gPiBudWxs
SW5kZXhLZXlzOwotICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzaygKLSAgICAgICAg
ICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50
ZXJuYWwsIG9iamVjdFN0b3JlLCB2YWx1ZSwga2V5LCBwdXRNb2RlLCBjYWxsYmFja3MsIHRyYW5z
YWN0aW9uLCBudWxsSW5kZXhOYW1lcy5yZWxlYXNlKCksIG51bGxJbmRleEtleXMucmVsZWFzZSgp
KSkpCi0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNU
SVZFX0VSUjsKLX0KLQogdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRXaXRoSW5k
ZXhLZXlzKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwgUGFzc1Jl
ZlB0cjxJREJLZXk+IHBycEtleSwgUHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5z
YWN0aW9uUHRyLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgaW5kZXhOYW1lcywgY29uc3QgVmVjdG9y
PEluZGV4S2V5cz4mIGluZGV4S2V5cywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgSURCX1RS
QUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRXaXRoSW5kZXhLZXlzIik7CkBAIC0x
NzYsNiArMTM0LDggQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRXaXRoSW5k
ZXhLZXlzKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHUKICAgICBPd25QdHI8VmVjdG9y
PFN0cmluZz4gPiBuZXdJbmRleE5hbWVzID0gYWRvcHRQdHIobmV3IFZlY3RvcjxTdHJpbmc+KGlu
ZGV4TmFtZXMpKTsKICAgICBPd25QdHI8VmVjdG9yPEluZGV4S2V5cz4gPiBuZXdJbmRleEtleXMg
PSBhZG9wdFB0cihuZXcgVmVjdG9yPEluZGV4S2V5cz4oaW5kZXhLZXlzKSk7CiAKKyAgICBBU1NF
UlQoYXV0b0luY3JlbWVudCgpIHx8IGtleSk7CisKICAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hl
ZHVsZVRhc2soCiAgICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJklEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OnB1dEludGVybmFsLCBvYmplY3RTdG9yZSwgdmFsdWUsIGtleSwgcHV0TW9k
ZSwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbiwgbmV3SW5kZXhOYW1lcy5yZWxlYXNlKCksIG5ld0lu
ZGV4S2V5cy5yZWxlYXNlKCkpKSkKICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOwpAQCAtMTk0LDE4ICsxNTQsMTkgQEAgcHVibGljOgog
ICAgICAgICAsIG1faW5kZXhLZXlzKGluZGV4S2V5cykKICAgICB7IH0KIAotICAgIGJvb2wgZ2Vu
ZXJhdGVJbmRleEtleXNGb3JWYWx1ZShTZXJpYWxpemVkU2NyaXB0VmFsdWUqIG9iamVjdFZhbHVl
KQorICAgIC8vIEZJWE1FOiByZW1vdmUgdGhpcyBvbmNlIGNyZWF0ZUluZGV4KCkgZ2VuZXJhdGVz
IHRoZXNlIGluIHRoZSByZW5kZXJlci4KKyAgICB2b2lkIGdlbmVyYXRlSW5kZXhLZXlzRm9yVmFs
dWUoU2VyaWFsaXplZFNjcmlwdFZhbHVlKiBvYmplY3RWYWx1ZSkKICAgICB7CiAgICAgICAgIG1f
aW5kZXhLZXlzLmNsZWFyKCk7CiAKLSAgICAgICAgUmVmUHRyPElEQktleT4gaW5kZXhLZXkgPSBm
ZXRjaEtleUZyb21LZXlQYXRoKG9iamVjdFZhbHVlLCBtX2luZGV4TWV0YWRhdGEua2V5UGF0aCk7
CisgICAgICAgIFJlZlB0cjxJREJLZXk+IGluZGV4S2V5ID0gZmV0Y2hLZXlGcm9tS2V5UGF0aChv
YmplY3RWYWx1ZSk7CiAKICAgICAgICAgaWYgKCFpbmRleEtleSkKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGlmICghbV9pbmRleE1ldGFk
YXRhLm11bHRpRW50cnkgfHwgaW5kZXhLZXktPnR5cGUoKSAhPSBJREJLZXk6OkFycmF5VHlwZSkg
ewogICAgICAgICAgICAgaWYgKCFpbmRleEtleS0+aXNWYWxpZCgpKQotICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAgICAgbV9p
bmRleEtleXMuYXBwZW5kKGluZGV4S2V5KTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTIxMywxMSAr
MTc0LDkgQEAgcHVibGljOgogICAgICAgICAgICAgQVNTRVJUKGluZGV4S2V5LT50eXBlKCkgPT0g
SURCS2V5OjpBcnJheVR5cGUpOwogICAgICAgICAgICAgaW5kZXhLZXkgPSBJREJLZXk6OmNyZWF0
ZU11bHRpRW50cnlBcnJheShpbmRleEtleS0+YXJyYXkoKSk7CiAKLSAgICAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgaW5kZXhLZXktPmFycmF5KCkuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5kZXhLZXktPmFycmF5KCkuc2l6ZSgpOyAr
K2kpCiAgICAgICAgICAgICAgICAgbV9pbmRleEtleXMuYXBwZW5kKGluZGV4S2V5LT5hcnJheSgp
W2ldKTsKLSAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAKICAgICBib29sIHZlcmlmeUluZGV4S2V5cyhJREJCYWNraW5nU3RvcmUmIGJhY2tpbmdT
dG9yZSwKQEAgLTI2Niw2ICsyMjUsMjEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQorCisgICAgUGFzc1JlZlB0cjxJREJL
ZXk+IGZldGNoS2V5RnJvbUtleVBhdGgoU2VyaWFsaXplZFNjcmlwdFZhbHVlKiB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIElEQl9UUkFDRSgiSW5kZXhXcml0ZXI6OmZldGNoS2V5RnJvbUtleVBhdGgi
KTsKKworICAgICAgICBWZWN0b3I8UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gPiB2YWx1
ZXM7CisgICAgICAgIHZhbHVlcy5hcHBlbmQodmFsdWUpOworICAgICAgICBWZWN0b3I8UmVmUHRy
PElEQktleT4gPiBrZXlzOworICAgICAgICBJREJLZXlQYXRoQmFja2VuZEltcGw6OmNyZWF0ZUlE
QktleXNGcm9tU2VyaWFsaXplZFZhbHVlc0FuZEtleVBhdGgodmFsdWVzLCBtX2luZGV4TWV0YWRh
dGEua2V5UGF0aCwga2V5cyk7CisgICAgICAgIGlmIChrZXlzLmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICBBU1NFUlQoa2V5cy5zaXplKCkgPT0gMSk7CisgICAgICAg
IHJldHVybiBrZXlzWzBdLnJlbGVhc2UoKTsKKyAgICB9CisKICAgICBjb25zdCBJREJJbmRleE1l
dGFkYXRhIG1faW5kZXhNZXRhZGF0YTsKICAgICBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZh
Y2U6OkluZGV4S2V5cyBtX2luZGV4S2V5czsKIH07CkBAIC0yNzksNDAgKzI1MywxOCBAQCB2b2lk
IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQYXNzUmVmUHRyPAogICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IHBycEtleTsKICAg
ICBPd25QdHI8VmVjdG9yPFN0cmluZz4gPiBpbmRleE5hbWVzID0gcG9wSW5kZXhOYW1lczsKICAg
ICBPd25QdHI8VmVjdG9yPEluZGV4S2V5cz4gPiBpbmRleEtleXMgPSBwb3BJbmRleEtleXM7Ci0g
ICAgQVNTRVJUKCghaW5kZXhOYW1lcyAmJiAhaW5kZXhLZXlzKSB8fCBpbmRleE5hbWVzLT5zaXpl
KCkgPT0gaW5kZXhLZXlzLT5zaXplKCkpOworICAgIEFTU0VSVChpbmRleE5hbWVzICYmIGluZGV4
S2V5cyAmJiBpbmRleE5hbWVzLT5zaXplKCkgPT0gaW5kZXhLZXlzLT5zaXplKCkpOwogICAgIGNv
bnN0IGJvb2wgYXV0b0luY3JlbWVudCA9IG9iamVjdFN0b3JlLT5hdXRvSW5jcmVtZW50KCk7CiAg
ICAgYm9vbCBrZXlXYXNHZW5lcmF0ZWQgPSBmYWxzZTsKIAotICAgIGlmIChwdXRNb2RlICE9IEN1
cnNvclVwZGF0ZSkgewotICAgICAgICBjb25zdCBib29sIGhhc0tleVBhdGggPSAhb2JqZWN0U3Rv
cmUtPm1fa2V5UGF0aC5pc051bGwoKTsKLSAgICAgICAgaWYgKGhhc0tleVBhdGgpIHsKLSAgICAg
ICAgICAgIEFTU0VSVCgha2V5KTsKLSAgICAgICAgICAgIFJlZlB0cjxJREJLZXk+IGtleVBhdGhL
ZXkgPSBmZXRjaEtleUZyb21LZXlQYXRoKHZhbHVlLmdldCgpLCBvYmplY3RTdG9yZS0+bV9rZXlQ
YXRoKTsKLSAgICAgICAgICAgIGlmIChrZXlQYXRoS2V5KQotICAgICAgICAgICAgICAgIGtleSA9
IGtleVBhdGhLZXk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGF1dG9JbmNyZW1lbnQpIHsKLSAg
ICAgICAgICAgIGlmICgha2V5KSB7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPElEQktleT4gYXV0
b0luY0tleSA9IG9iamVjdFN0b3JlLT5nZW5lcmF0ZUtleSgpOwotICAgICAgICAgICAgICAgIGtl
eVdhc0dlbmVyYXRlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgaWYgKCFhdXRvSW5jS2V5LT5p
c1ZhbGlkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRh
dGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlIsICJNYXhp
bXVtIGtleSBnZW5lcmF0b3IgdmFsdWUgcmVhY2hlZC4iKSk7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IFJl
bW92ZSB0aGlzIHdoZW4gZ2V0LXNpZGUga2V5IGluamVjdGlvbiBpcyB0aGUgbm9ybS4KLSAgICAg
ICAgICAgICAgICBpZiAoaGFzS2V5UGF0aCkgewotICAgICAgICAgICAgICAgICAgICBSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZUFmdGVySW5qZWN0aW9uID0gaW5qZWN0S2V5SW50
b0tleVBhdGgoYXV0b0luY0tleSwgdmFsdWUsIG9iamVjdFN0b3JlLT5tX2tleVBhdGgpOwotICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQodmFsdWVBZnRlckluamVjdGlvbik7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICghdmFsdWVBZnRlckluamVjdGlvbikgewotICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gQ2hlY2tzIGluIHB1dCgpIGVuc3VyZSB0aGlzIHNob3VsZCBvbmx5IGhhcHBlbiBp
ZiBJL08gZXJyb3Igb2NjdXJzLgotICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzLT5v
bkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5L
Tk9XTl9FUlIsICJJbnRlcm5hbCBlcnJvciBpbnNlcnRpbmcgZ2VuZXJhdGVkIGtleSBpbnRvIHRo
ZSBvYmplY3QuIikpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWVBZnRlckluamVj
dGlvbjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAga2V5ID0gYXV0b0luY0tl
eTsKLSAgICAgICAgICAgIH0KKyAgICBpZiAocHV0TW9kZSAhPSBDdXJzb3JVcGRhdGUgJiYgYXV0
b0luY3JlbWVudCAmJiAha2V5KSB7CisgICAgICAgIFJlZlB0cjxJREJLZXk+IGF1dG9JbmNLZXkg
PSBvYmplY3RTdG9yZS0+Z2VuZXJhdGVLZXkoKTsKKyAgICAgICAga2V5V2FzR2VuZXJhdGVkID0g
dHJ1ZTsKKyAgICAgICAgaWYgKCFhdXRvSW5jS2V5LT5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAg
IGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VF
eGNlcHRpb246OkRBVEFfRVJSLCAiTWF4aW11bSBrZXkgZ2VuZXJhdG9yIHZhbHVlIHJlYWNoZWQu
IikpOworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisgICAgICAgIGtleSA9IGF1dG9J
bmNLZXk7CiAgICAgfQogCiAgICAgQVNTRVJUKGtleSAmJiBrZXktPmlzVmFsaWQoKSk7CkBAIC0z
MjUsMTEgKzI3NywxNyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVy
bmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPAogCiAgICAgVmVjdG9yPE93
blB0cjxJbmRleFdyaXRlcj4gPiBpbmRleFdyaXRlcnM7CiAgICAgSGFzaE1hcDxTdHJpbmcsIElu
ZGV4S2V5cz4gaW5kZXhLZXlNYXA7Ci0gICAgLy8gRklYTUU6IFR1cm4gdGhpcyBpbnRvIGFuIEFT
U0VSVChpbmRleEtleXMpIHdoZW4gZ2V0LXNpZGUga2V5IGluamVjdGlvbiBpcyB0aGUgbm9ybS4K
LSAgICBib29sIGhhdmVJbmRleEtleXMgPSBpbmRleEtleXMgJiYgIWluZGV4S2V5cy0+aXNFbXB0
eSgpOwotICAgIGlmIChoYXZlSW5kZXhLZXlzKSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgaW5kZXhOYW1lcy0+c2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBpbmRleEtleU1hcC5h
ZGQoaW5kZXhOYW1lcy0+YXQoaSksIGluZGV4S2V5cy0+YXQoaSkpOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgaW5kZXhOYW1lcy0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgSW5kZXhLZXlz
IGtleXMgPSBpbmRleEtleXMtPmF0KGkpOworCisgICAgICAgIC8vIElmIHRoZSBvYmplY3RTdG9y
ZSBpcyB1c2luZyBhdXRvSW5jcmVtZW50LCB0aGVuIGFueSBpbmRleGVzIHdpdGggYW4gaWRlbnRp
Y2FsIGtleVBhdGggbmVlZCB0byBhbHNvIHVzZSB0aGUgcHJpbWFyeSAoZ2VuZXJhdGVkKSBrZXkg
YXMgYSBrZXkuCisgICAgICAgIGlmIChrZXlXYXNHZW5lcmF0ZWQpIHsKKyAgICAgICAgICAgIGNv
bnN0IElEQktleVBhdGgmIGluZGV4S2V5UGF0aCA9IG9iamVjdFN0b3JlLT5tX2luZGV4ZXMuZ2V0
KGluZGV4TmFtZXMtPmF0KGkpKS0+a2V5UGF0aCgpOworICAgICAgICAgICAgaWYgKGluZGV4S2V5
UGF0aCA9PSBvYmplY3RTdG9yZS0+a2V5UGF0aCgpKQorICAgICAgICAgICAgICAgIGtleXMuYXBw
ZW5kKGtleSk7CisgICAgICAgIH0KKworICAgICAgICBpbmRleEtleU1hcC5hZGQoaW5kZXhOYW1l
cy0+YXQoaSksIGtleXMpOwogICAgIH0KIAogICAgIGZvciAoSW5kZXhNYXA6Oml0ZXJhdG9yIGl0
ID0gb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5iZWdpbigpOyBpdCAhPSBvYmplY3RTdG9yZS0+bV9p
bmRleGVzLmVuZCgpOyArK2l0KSB7CkBAIC0zMzksMTIgKzI5Nyw4IEBAIHZvaWQgSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBh
c3NSZWZQdHI8CiAgICAgICAgICAgICBjb250aW51ZTsgLy8gVGhlIGluZGV4IG9iamVjdCBoYXMg
YmVlbiBjcmVhdGVkLCBidXQgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGRhdGFiYXNlIHlldC4KIAog
ICAgICAgICBPd25QdHI8SW5kZXhXcml0ZXI+IGluZGV4V3JpdGVyOwotICAgICAgICBpZiAoaGF2
ZUluZGV4S2V5cykKLSAgICAgICAgICAgIGluZGV4V3JpdGVyID0gYWRvcHRQdHIobmV3IEluZGV4
V3JpdGVyKGluZGV4LT5tZXRhZGF0YSgpLCBpbmRleEtleU1hcC5nZXQoaXQtPmZpcnN0KSkpOwot
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGluZGV4V3JpdGVyID0gYWRvcHRQdHIobmV3IElu
ZGV4V3JpdGVyKGluZGV4LT5tZXRhZGF0YSgpKSk7Ci0gICAgICAgICAgICBpbmRleFdyaXRlci0+
Z2VuZXJhdGVJbmRleEtleXNGb3JWYWx1ZSh2YWx1ZS5nZXQoKSk7Ci0gICAgICAgIH0KKyAgICAg
ICAgaW5kZXhXcml0ZXIgPSBhZG9wdFB0cihuZXcgSW5kZXhXcml0ZXIoaW5kZXgtPm1ldGFkYXRh
KCksIGluZGV4S2V5TWFwLmdldChpdC0+Zmlyc3QpKSk7CisKICAgICAgICAgU3RyaW5nIGVycm9y
TWVzc2FnZTsKICAgICAgICAgaWYgKCFpbmRleFdyaXRlci0+dmVyaWZ5SW5kZXhLZXlzKCpvYmpl
Y3RTdG9yZS0+YmFja2luZ1N0b3JlKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bC5oCmluZGV4IDY0N2JjMjk3ODQ5ZDY0ZjkxNzU5Y2Y4NWMzYjE0NGExZTFjNjRjNjIuLjViMWI1
NGZjMmRiODVmZDQ5M2FlY2Q3ZDY3YmM1ZGJmOTVhNTcwNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsLmgKQEAgLTY2LDcgKzY2LDYgQEAgcHVibGljOgogCiAgICAgLy8gSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW50ZXJmYWNlCiAgICAgdmlydHVhbCB2b2lkIGdldChQYXNzUmVmUHRyPElEQktleVJh
bmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2UqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCB2b2lkIHB1dChQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NSZWZQdHI8SURCS2V5PiwgUHV0TW9kZSwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBF
eGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIHB1dFdpdGhJbmRleEtleXMoUGFzc1Jl
ZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIFB1dE1vZGUs
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
KiwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYsIEV4Y2Vw
dGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJ
REJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBjbGVhcihQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSos
IEV4Y2VwdGlvbkNvZGUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmgKaW5kZXgg
MzdkM2VlMGY5NDMwZGM1MDdiMDk0ZTM0MGY4OWMzOWU0YTBkNmQzNC4uZjJmZDA4OGMxYzQzMTRk
OGJkNGEzZjM2MzUyYjkzOWIzNDk1ZGZlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJm
YWNlLmgKQEAgLTU3LDcgKzU3LDYgQEAgcHVibGljOgogICAgIH07CiAgICAgdHlwZWRlZiBWZWN0
b3I8UmVmUHRyPElEQktleT4gPiBJbmRleEtleXM7CiAKLSAgICB2aXJ0dWFsIHZvaWQgcHV0KFBh
c3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJREJLZXk+LCBQdXRN
b2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHB1dFdpdGhJbmRl
eEtleXMoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktl
eT4sIFB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlKiwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBWZWN0b3I8SW5kZXhL
ZXlzPiYsIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUZ1bmN0
aW9uKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAKaW5kZXgg
YTFlYWYyOTMwYzFhMWViOGMyN2JjZWU4ZTUyMjA5ZTgyNjk4NDM0ZS4uZDlmNDIyNTNlOGZjZDBm
YTNkYjA3ZWY1ODQ4NDBhZWQyYWI3YjAzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAKQEAgLTMzOSwyNCArMzM5LDQyIEBAIHZvaWQgSURC
UmVxdWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJp
YWxpemVkU2NyaXB0VmFsCiAgICAgZW5xdWV1ZUV2ZW50KGNyZWF0ZVN1Y2Nlc3NFdmVudCgpKTsK
IH0KIAorI2lmbmRlZiBOREVCVUcKK3N0YXRpYyBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBl
ZmZlY3RpdmVPYmplY3RTdG9yZShQYXNzUmVmUHRyPElEQkFueT4gc291cmNlKQoreworICAgIGlm
IChzb3VyY2UtPnR5cGUoKSA9PSBJREJBbnk6OklEQk9iamVjdFN0b3JlVHlwZSkKKyAgICAgICAg
cmV0dXJuIHNvdXJjZS0+aWRiT2JqZWN0U3RvcmUoKTsKKyAgICBpZiAoc291cmNlLT50eXBlKCkg
PT0gSURCQW55OjpJREJJbmRleFR5cGUpCisgICAgICAgIHJldHVybiBzb3VyY2UtPmlkYkluZGV4
KCktPm9iamVjdFN0b3JlKCk7CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4gMDsKK30KKyNlbmRpZgogCiB2b2lkIElEQlJlcXVlc3Q6Om9uU3VjY2VzcyhQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwU2VyaWFsaXplZFNjcmlwdFZhbHVlLCBQYXNzUmVm
UHRyPElEQktleT4gcHJwUHJpbWFyeUtleSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKIHsK
LSAgICBMT0dfRVJST1IoIkNIRUNLSU5HOiBvblN1Y2Nlc3ModmFsdWUsIGtleSwga2V5cGF0aCki
KTsKLSAgICBBU1NFUlQobV9yZWFkeVN0YXRlID09IFBFTkRJTkcgfHwgbV9yZWFkeVN0YXRlID09
IERPTkUpOwogICAgIGlmIChtX3JlcXVlc3RBYm9ydGVkKQogICAgICAgICByZXR1cm47Ci0gICAg
QVNTRVJUKG1fcmVhZHlTdGF0ZSA9PSBQRU5ESU5HKTsKLSAgICBSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiBzZXJpYWxpemVkU2NyaXB0VmFsdWUgPSBwcnBTZXJpYWxpemVkU2NyaXB0VmFs
dWU7CiAjaWZuZGVmIE5ERUJVRwotICAgIC8vIEZJWE1FOiBBc3NlcnQgdW50aWwgd2UgY2FuIGFj
dHVhbGx5IGluamVjdCB0aGUgcmlnaHQgdmFsdWUuCisgICAgQVNTRVJUKGtleVBhdGggPT0gZWZm
ZWN0aXZlT2JqZWN0U3RvcmUobV9zb3VyY2UpLT5rZXlQYXRoKCkpOworI2VuZGlmCisgICAgUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUgPSBwcnBTZXJpYWxpemVkU2NyaXB0VmFs
dWU7CisKICAgICBSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5ID0gcHJwUHJpbWFyeUtleTsKLSAg
ICBSZWZQdHI8SURCS2V5PiBleHBlY3RlZEtleSA9Ci0gICAgICAgICAgICAgIGNyZWF0ZUlEQktl
eUZyb21TZXJpYWxpemVkVmFsdWVBbmRLZXlQYXRoKHNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSwga2V5
UGF0aCk7Ci0gICAgQVNTRVJUKHByaW1hcnlLZXkpOwotICAgIEFTU0VSVChleHBlY3RlZEtleS0+
aXNFcXVhbChwcmltYXJ5S2V5LmdldCgpKSk7CisjaWZuZGVmIE5ERUJVRworICAgIFJlZlB0cjxJ
REJLZXk+IGV4cGVjdGVkS2V5ID0gY3JlYXRlSURCS2V5RnJvbVNlcmlhbGl6ZWRWYWx1ZUFuZEtl
eVBhdGgodmFsdWUsIGtleVBhdGgpOworICAgIEFTU0VSVCghZXhwZWN0ZWRLZXkgfHwgZXhwZWN0
ZWRLZXktPmlzRXF1YWwocHJpbWFyeUtleS5nZXQoKSkpOwogI2VuZGlmCi0gICAgb25TdWNjZXNz
KHNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5yZWxlYXNlKCkpOworICAgIFJlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+IHZhbHVlQWZ0ZXJJbmplY3Rpb24gPSBpbmplY3RJREJLZXlJbnRvU2VyaWFs
aXplZFZhbHVlKHByaW1hcnlLZXksIHZhbHVlLCBrZXlQYXRoKTsKKyAgICBBU1NFUlQodmFsdWVB
ZnRlckluamVjdGlvbik7CisgICAgaWYgKCF2YWx1ZUFmdGVySW5qZWN0aW9uKSB7CisgICAgICAg
IC8vIENoZWNrcyBpbiBwdXQoKSBlbnN1cmUgdGhpcyBzaG91bGQgb25seSBoYXBwZW4gaWYgSS9P
IGVycm9yIG9jY3Vycy4KKyAgICAgICAgb25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUo
SURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAiSW50ZXJuYWwgZXJyb3IgaW5zZXJ0
aW5nIGdlbmVyYXRlZCBrZXkgaW50byB0aGUgb2JqZWN0LiIpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICB2YWx1ZSA9IHZhbHVlQWZ0ZXJJbmplY3Rpb247CisgICAgb25TdWNjZXNzKHZh
bHVlLnJlbGVhc2UoKSk7CiB9CiAKIHZvaWQgSURCUmVxdWVzdDo6b25TdWNjZXNzV2l0aENvbnRp
bnVhdGlvbigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9JREJCaW5k
aW5nVXRpbGl0aWVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0lEQkJpbmRpbmdV
dGlsaXRpZXMuY3BwCmluZGV4IDY2MWZmMDE1OTVkZjA1NTAwZDdmNmNhYzMxMGU4YmM3MTM0NGIz
ZTguLjIyZjgzMTViMjA0NmM2NTQ3ODE1Yjk0NTYwYjQ4ZDg4NTg2M2UxZjQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwCkBAIC0x
MDEsNyArMTAxLDYgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KIGJvb2wgc2V0VmFsdWUodjg6Okhh
bmRsZTx2ODo6VmFsdWU+JiB2OE9iamVjdCwgVCBpbmRleE9yTmFtZSwgY29uc3Qgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+JiB2OFZhbHVlKQogewogICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBvYmpl
Y3QgPSB2OE9iamVjdC0+VG9PYmplY3QoKTsKLSAgICBBU1NFUlQoIW9iamVjdC0+SGFzKGluZGV4
T3JOYW1lKSk7CiAgICAgcmV0dXJuIG9iamVjdC0+U2V0KGluZGV4T3JOYW1lLCB2OFZhbHVlKTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCQ3Vyc29yQmFj
a2VuZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkN1cnNvckJhY2tl
bmRQcm94eS5jcHAKaW5kZXggY2EzOTBiYTkwNzQyN2UwOGZkNDc4YmI5NWNmOWUyYzQxNmNkMmZm
Yi4uMjc3YTY2NWNmMDAwZWU5M2UwOGM0ZmExZGM0NmM4NTFiOTgxOWYxNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCQ3Vyc29yQmFja2VuZFByb3h5LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJDdXJzb3JCYWNrZW5kUHJveHkuY3BwCkBA
IC02OSwxMSArNjksNiBAQCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gSURCQ3Vy
c29yQmFja2VuZFByb3h5Ojp2YWx1ZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1faWRiQ3Vyc29yLT52
YWx1ZSgpOwogfQogCi12b2lkIElEQkN1cnNvckJhY2tlbmRQcm94eTo6dXBkYXRlKFBhc3NSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
IGNhbGxiYWNrcywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgbV9pZGJDdXJzb3ItPnVwZGF0
ZSh2YWx1ZSwgbmV3IFdlYklEQkNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzKSwgZWMpOwotfQotCiB2
b2lkIElEQkN1cnNvckJhY2tlbmRQcm94eTo6YWR2YW5jZSh1bnNpZ25lZCBsb25nIGNvdW50LCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBFeGNlcHRpb25Db2RlJiBlYykKIHsK
ICAgICBtX2lkYkN1cnNvci0+YWR2YW5jZShjb3VudCwgbmV3IFdlYklEQkNhbGxiYWNrc0ltcGwo
Y2FsbGJhY2tzKSwgZWMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
SURCQ3Vyc29yQmFja2VuZFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJD
dXJzb3JCYWNrZW5kUHJveHkuaAppbmRleCA5ZTRiNTcwMDgxMjZmMzk2Y2QxNGY2MzNjNmEzYTQx
ZDZiNTkwMjg1Li5kNzQyZjY4ZTVmZTU2ZjM3ZGFhYzE3NTM3MzZmY2U5N2YwYTI2NGFlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJDdXJzb3JCYWNrZW5kUHJveHku
aAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJDdXJzb3JCYWNrZW5kUHJveHku
aApAQCAtNDUsNyArNDUsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNv
cmU6OklEQktleT4ga2V5KCkgY29uc3Q7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6
OklEQktleT4gcHJpbWFyeUtleSgpIGNvbnN0OwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJD
b3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2
b2lkIHVwZGF0ZShQYXNzUmVmUHRyPFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBh
c3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJhY2tzPiwgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSYp
OwogICAgIHZpcnR1YWwgdm9pZCBhZHZhbmNlKHVuc2lnbmVkIGxvbmcsIFBhc3NSZWZQdHI8V2Vi
Q29yZTo6SURCQ2FsbGJhY2tzPiwgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1
YWwgdm9pZCBjb250aW51ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCS2V5PiwgUGFz
c1JlZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+LCBXZWJDb3JlOjpFeGNlcHRpb25Db2RlJik7
CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8V2ViQ29yZTo6SURC
Q2FsbGJhY2tzPiwgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHkuY3BwIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHkuY3BwCmlu
ZGV4IDgyNjQwNzMzMGEwMjdhMTZkYjdmYjFjM2RjZDBlZmRjMWY0YjM1MTcuLjRkMWM5MWQwNzVm
ZjYwN2E3MzdiMjIwMTA3ZmRiN2IwYmYyNGI3NTkgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL0lEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9JREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eS5jcHAKQEAgLTY3
LDE0ICs2Nyw2IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6OmdldChQYXNzUmVm
UHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0CiAgICAgbV93ZWJJREJPYmplY3RT
dG9yZS0+Z2V0KGtleVJhbmdlLCBuZXcgV2ViSURCQ2FsbGJhY2tzSW1wbChjYWxsYmFja3MpLCAq
dHJhbnNhY3Rpb25Qcm94eS0+Z2V0V2ViSURCVHJhbnNhY3Rpb24oKSwgZWMpOwogfQogCi12b2lk
IElEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5OjpwdXQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQdXRNb2RlIHB1dE1vZGUs
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIC8vIFRo
ZSB0cmFuc2FjdGlvbiBwb2ludGVyIGlzIGd1YXJhbnRlZWQgdG8gYmUgYSBwb2ludGVyIHRvIGEg
cHJveHkgb2JqZWN0IGFzLCBpbiB0aGUgcmVuZGVyZXIsCi0gICAgLy8gYWxsIGltcGxlbWVudGF0
aW9ucyBvZiBJREIgaW50ZXJmYWNlcyBhcmUgcHJveHkgb2JqZWN0cy4KLSAgICBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRQcm94eSogdHJhbnNhY3Rpb25Qcm94eSA9IHN0YXRpY19jYXN0PElEQlRyYW5z
YWN0aW9uQmFja2VuZFByb3h5Kj4odHJhbnNhY3Rpb24pOwotICAgIG1fd2ViSURCT2JqZWN0U3Rv
cmUtPnB1dCh2YWx1ZSwga2V5LCBzdGF0aWNfY2FzdDxXZWJJREJPYmplY3RTdG9yZTo6UHV0TW9k
ZT4ocHV0TW9kZSksIG5ldyBXZWJJREJDYWxsYmFja3NJbXBsKGNhbGxiYWNrcyksICp0cmFuc2Fj
dGlvblByb3h5LT5nZXRXZWJJREJUcmFuc2FjdGlvbigpLCBlYyk7Ci19Ci0KIHZvaWQgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kUHJveHk6OnB1dFdpdGhJbmRleEtleXMoUGFzc1JlZlB0cjxTZXJpYWxp
emVkU2NyaXB0VmFsdWU+IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQdXRNb2RlIHB1
dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBpbmRl
eE5hbWVzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5kZXhLZXlzLCBFeGNlcHRpb25Db2Rl
JiBlYykKIHsKICAgICAvLyBUaGUgdHJhbnNhY3Rpb24gcG9pbnRlciBpcyBndWFyYW50ZWVkIHRv
IGJlIGEgcG9pbnRlciB0byBhIHByb3h5IG9iamVjdCBhcywgaW4gdGhlIHJlbmRlcmVyLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCT2JqZWN0U3RvcmVCYWNrZW5k
UHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQk9iamVjdFN0b3JlQmFja2Vu
ZFByb3h5LmgKaW5kZXggYzY0MDI4Y2ZmYjYwZjJkOGEyNDRhNzE1YzczYzBiNzY1YWVlZjQ0Yy4u
MDIzNTA3N2ZhOTczZmU4ZjE2MTkyZTQxMzZmYTIwMDk5N2UyYTYzYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHkuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eS5o
CkBAIC00NCw3ICs0NCw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5JREJPYmplY3RTdG9yZUJh
Y2tlbmRQcm94eSgpOwogCiAgICAgdmlydHVhbCB2b2lkIGdldChQYXNzUmVmUHRyPFdlYkNvcmU6
OklEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+LCBXZWJDb3Jl
OjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBXZWJDb3JlOjpFeGNlcHRpb25Db2Rl
Jik7Ci0gICAgdmlydHVhbCB2b2lkIHB1dChQYXNzUmVmUHRyPFdlYkNvcmU6OlNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4sIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCS2V5PiwgUHV0TW9kZSwgUGFzc1Jl
ZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+LCBXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UqLCBXZWJDb3JlOjpFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lk
IHB1dFdpdGhJbmRleEtleXMoUGFzc1JlZlB0cjxXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFs
dWU+LCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQktleT4sIFB1dE1vZGUsIFBhc3NSZWZQdHI8V2Vi
Q29yZTo6SURCQ2FsbGJhY2tzPiwgV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlKiwgY29uc3QgV1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+JiwgY29uc3QgV1RGOjpWZWN0b3I8
SW5kZXhLZXlzPiYsIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQg
ZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJLZXlSYW5nZT4sIFBhc3NSZWZQ
dHI8V2ViQ29yZTo6SURCQ2FsbGJhY2tzPiwgV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlKiwgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBj
bGVhcihQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkNhbGxiYWNrcz4sIFdlYkNvcmU6OklEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZSosIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUmKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkN1cnNvckltcGwuY3BwIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCQ3Vyc29ySW1wbC5jcHAKaW5kZXggZTlj
MGUwNGFmMDM3MzI0YzQxNjRjM2M1YTEyY2QxYjdhMWZiMWNlOC4uMGQ2NWE4N2JlZTBhYzRmNmUy
Mjg2MWRhZjE3MThhZWFjZjhkYjNhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViSURCQ3Vyc29ySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViSURCQ3Vyc29ySW1wbC5jcHAKQEAgLTYyLDExICs2Miw2IEBAIFdlYlNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZSBXZWJJREJDdXJzb3JJbXBsOjp2YWx1ZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1f
aWRiQ3Vyc29yQmFja2VuZC0+dmFsdWUoKTsKIH0KIAotdm9pZCBXZWJJREJDdXJzb3JJbXBsOjp1
cGRhdGUoY29uc3QgV2ViU2VyaWFsaXplZFNjcmlwdFZhbHVlJiB2YWx1ZSwgV2ViSURCQ2FsbGJh
Y2tzKiBjYWxsYmFja3MsIFdlYkV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIG1faWRiQ3Vyc29y
QmFja2VuZC0+dXBkYXRlKHZhbHVlLCBJREJDYWxsYmFja3NQcm94eTo6Y3JlYXRlKGFkb3B0UHRy
KGNhbGxiYWNrcykpLCBlYyk7Ci19Ci0KIHZvaWQgV2ViSURCQ3Vyc29ySW1wbDo6YWR2YW5jZSh1
bnNpZ25lZCBsb25nIGNvdW50LCBXZWJJREJDYWxsYmFja3MqIGNhbGxiYWNrcywgV2ViRXhjZXB0
aW9uQ29kZSYgZWMpCiB7CiAgICAgbV9pZGJDdXJzb3JCYWNrZW5kLT5hZHZhbmNlKGNvdW50LCBJ
REJDYWxsYmFja3NQcm94eTo6Y3JlYXRlKGFkb3B0UHRyKGNhbGxiYWNrcykpLCBlYyk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJDdXJzb3JJbXBsLmggYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJDdXJzb3JJbXBsLmgKaW5kZXggZjBkMzg3
YjYyMTk3Njg3YTgxNmFkMWRjNzU1NWNkYzI3ZWZiYWZjNS4uNDVhMjI5YjM4MzAxOTI2OTFmYTc4
ZDBkYTg2YmUzOTc2ODcxYmI3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViSURCQ3Vyc29ySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YklEQkN1cnNvckltcGwuaApAQCAtNDcsNyArNDcsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBX
ZWJJREJLZXkga2V5KCkgY29uc3Q7CiAgICAgdmlydHVhbCBXZWJJREJLZXkgcHJpbWFyeUtleSgp
IGNvbnN0OwogICAgIHZpcnR1YWwgV2ViU2VyaWFsaXplZFNjcmlwdFZhbHVlIHZhbHVlKCkgY29u
c3Q7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZShjb25zdCBXZWJTZXJpYWxpemVkU2NyaXB0VmFs
dWUmLCBXZWJJREJDYWxsYmFja3MqLCBXZWJFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2
b2lkIGFkdmFuY2UodW5zaWduZWQgbG9uZywgV2ViSURCQ2FsbGJhY2tzKiwgV2ViRXhjZXB0aW9u
Q29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBjb250aW51ZUZ1bmN0aW9uKGNvbnN0IFdlYklEQktl
eSYsIFdlYklEQkNhbGxiYWNrcyosIFdlYkV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZv
aWQgZGVsZXRlRnVuY3Rpb24oV2ViSURCQ2FsbGJhY2tzKiwgV2ViRXhjZXB0aW9uQ29kZSYpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCT2JqZWN0U3RvcmVJ
bXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQk9iamVjdFN0b3JlSW1w
bC5jcHAKaW5kZXggNTNkMTQwZjQyYmU5OGIzYWJlNzNhNzRiYjMzNWRmM2NlYjY1ZDI5Yy4uMjJh
MDY2ODA3NzQ0NGRhYzMxZGVlN2IwYjU5NDEyNzJkZWRmM2RiZiAxMDA3NTUKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCT2JqZWN0U3RvcmVJbXBsLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJPYmplY3RTdG9yZUltcGwuY3BwCkBAIC01OCwx
MSArNTgsNiBAQCB2b2lkIFdlYklEQk9iamVjdFN0b3JlSW1wbDo6Z2V0KGNvbnN0IFdlYklEQktl
eVJhbmdlJiBrZXlSYW5nZSwgV2ViSURCQ2FsbGJhY2tzKgogICAgIG1fb2JqZWN0U3RvcmUtPmdl
dChrZXlSYW5nZSwgSURCQ2FsbGJhY2tzUHJveHk6OmNyZWF0ZShhZG9wdFB0cihjYWxsYmFja3Mp
KSwgdHJhbnNhY3Rpb24uZ2V0SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKCksIGVjKTsK
IH0KIAotdm9pZCBXZWJJREJPYmplY3RTdG9yZUltcGw6OnB1dChjb25zdCBXZWJTZXJpYWxpemVk
U2NyaXB0VmFsdWUmIHZhbHVlLCBjb25zdCBXZWJJREJLZXkmIGtleSwgUHV0TW9kZSBwdXRNb2Rl
LCBXZWJJREJDYWxsYmFja3MqIGNhbGxiYWNrcywgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mIHRy
YW5zYWN0aW9uLCBXZWJFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBtX29iamVjdFN0b3JlLT5w
dXQodmFsdWUsIGtleSwgc3RhdGljX2Nhc3Q8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNl
OjpQdXRNb2RlPihwdXRNb2RlKSwgSURCQ2FsbGJhY2tzUHJveHk6OmNyZWF0ZShhZG9wdFB0cihj
YWxsYmFja3MpKSwgdHJhbnNhY3Rpb24uZ2V0SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
KCksIGVjKTsKLX0KLQogdm9pZCBXZWJJREJPYmplY3RTdG9yZUltcGw6OnB1dFdpdGhJbmRleEtl
eXMoY29uc3QgV2ViU2VyaWFsaXplZFNjcmlwdFZhbHVlJiB2YWx1ZSwgY29uc3QgV2ViSURCS2V5
JiBrZXksIFB1dE1vZGUgcHV0TW9kZSwgV2ViSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsIGNvbnN0
IFdlYklEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgY29uc3QgV2ViVmVjdG9yPFdlYlN0cmlu
Zz4mIHdlYkluZGV4TmFtZXMsIGNvbnN0IFdlYlZlY3RvcjxXZWJJbmRleEtleXM+JiB3ZWJJbmRl
eEtleXMsIFdlYkV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIEFTU0VSVCh3ZWJJbmRleE5hbWVz
LnNpemUoKSA9PSB3ZWJJbmRleEtleXMuc2l6ZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYklEQk9iamVjdFN0b3JlSW1wbC5oIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViSURCT2JqZWN0U3RvcmVJbXBsLmgKaW5kZXggZTZkYzg4ZjU0ZDM2NDdi
ZDdhYjJmNmY4YTdjZjI2NzRmNjZjM2JkMi4uOTM0Y2ZmYTk5M2M4YmYxMDYzNjQ0NTlmNTBiNmYz
YmJhYTA0MjAxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURC
T2JqZWN0U3RvcmVJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURC
T2JqZWN0U3RvcmVJbXBsLmgKQEAgLTQ2LDcgKzQ2LDYgQEAgcHVibGljOgogICAgIH5XZWJJREJP
YmplY3RTdG9yZUltcGwoKTsKIAogICAgIHZvaWQgZ2V0KGNvbnN0IFdlYklEQktleVJhbmdlJiwg
V2ViSURCQ2FsbGJhY2tzKiwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mLCBXZWJFeGNlcHRpb25D
b2RlJik7Ci0gICAgdm9pZCBwdXQoY29uc3QgV2ViU2VyaWFsaXplZFNjcmlwdFZhbHVlJiwgY29u
c3QgV2ViSURCS2V5JiwgUHV0TW9kZSwgV2ViSURCQ2FsbGJhY2tzKiwgY29uc3QgV2ViSURCVHJh
bnNhY3Rpb24mLCBXZWJFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBwdXRXaXRoSW5kZXhLZXlz
KGNvbnN0IFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSYsIGNvbnN0IFdlYklEQktleSYsIFB1dE1v
ZGUsIFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgY29uc3QgV2Vi
VmVjdG9yPFdlYlN0cmluZz4mIGluZGV4TmFtZXMsIGNvbnN0IFdlYlZlY3RvcjxXZWJJbmRleEtl
eXM+JiwgV2ViRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgZGVsZXRlRnVuY3Rpb24oY29uc3Qg
V2ViSURCS2V5UmFuZ2UmLCBXZWJJREJDYWxsYmFja3MqLCBjb25zdCBXZWJJREJUcmFuc2FjdGlv
biYsIFdlYkV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIGNsZWFyKFdlYklEQkNhbGxiYWNrcyos
IGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgV2ViRXhjZXB0aW9uQ29kZSYpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJGYWtlQmFja2luZ1N0b3JlLmggYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQkZha2VCYWNraW5nU3RvcmUuaAppbmRleCAw
ODQwNWNlMGFiNThjOTZmYzI5NmMzZjBmOGExNGZmNjlkNjViYTE4Li41MzZkNzg1YjkzYWVlNDNi
OWY1MzMyNTI1YzYzZWM3OWU3MDk1OWJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0lEQkZha2VCYWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0lEQkZha2VCYWNraW5nU3RvcmUuaApAQCAtNTksNyArNTksNiBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpIE9WRVJSSURFIHsgfQogICAgIHZpcnR1
YWwgYm9vbCBwdXRJbmRleERhdGFGb3JSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgT2Jq
ZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKikgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KICAg
ICB2aXJ0dWFsIGJvb2wgZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IE9iamVjdFN0
b3JlUmVjb3JkSWRlbnRpZmllciopIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmly
dHVhbCBTdHJpbmcgZ2V0T2JqZWN0VmlhSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JikgT1ZFUlJJREUg
eyByZXR1cm4gU3RyaW5nKCk7IH0KICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBnZXRQ
cmltYXJ5S2V5VmlhSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JikgT1ZFUlJJREUgeyByZXR1cm4gUGFz
c1JlZlB0cjxJREJLZXk+KCk7IH0KICAgICB2aXJ0dWFsIGJvb2wga2V5RXhpc3RzSW5JbmRleChp
bnQ2NF90IGRhdGFiYXNlaWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElk
LCBjb25zdCBJREJLZXkmIGluZGV4S2V5LCBSZWZQdHI8SURCS2V5PiYgZm91bmRQcmltYXJ5S2V5
KSBPVkVSUklERSB7IHJldHVybiBmYWxzZTsgfQogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMzQ4OWEwOWMwNThjOGYyNTEy
YWZkODhlNTNhMTZmYTBkNzM2NDNhMC4uNDlkMWZlNDNhMWU2MjAzNjEzN2ZkNDhmOTk5OGQ0NWRk
OTM0NmQwZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRl
c3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDEyLTA3LTI1ICBBbGVjIEZsZXR0ICA8
YWxlY2ZsZXR0QGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IGluamVjdCBpbmRl
eCBrZXlzIG9uIGN1cnNvci9vYmplY3RzdG9yZS9pbmRleCBnZXQgc3VjY2VzcyBoYW5kbGVycwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTExMjMKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBPbmUgbmV3IHRl
c3QgdG8gbWFrZSBzdXJlIHRoYXQgaW5kZXhlcyB3aXRoIHRoZSBzYW1lIGtleXBhdGggYXMgYW4K
KyAgICAgICAgYXV0b0luY3JlbWVudCdlZCBvYmplY3RTdG9yZSBzdGlsbCBpbmRleCB0aGVpciB2
YWx1ZXMuIEFsc28gbWlub3IKKyAgICAgICAgdHdlYWtzIHRvIHRlc3RzIHRvIG1ha2UgaXQgZWFz
aWVyIHRvIGZpZ3VyZSBvdXQgd2hpY2gga2V5IGlzIGJlaW5nCisgICAgICAgIHVwZGF0ZWQuCisK
KyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9pbmRleC1kdXBsaWNhdGUta2V5cGF0aHMtZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9pbmRleC1kdXBs
aWNhdGUta2V5cGF0aHMuaHRtbDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIv
bW96aWxsYS9hdXRvaW5jcmVtZW50LWluZGV4ZXMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHN0
b3JhZ2UvaW5kZXhlZGRiL21vemlsbGEvcmVzb3VyY2VzL2F1dG9pbmNyZW1lbnQtaW5kZXhlcy5q
czoKKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9yZXNvdXJjZXMvaW5kZXgtZHVwbGljYXRl
LWtleXBhdGhzLmpzOiBBZGRlZC4KKwogMjAxMi0wNy0yNSAgQW5kcmV3IFdpbHNvbiAgPGF0d2ls
c29uQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkIGNocm9taXVtIGV4cGVjdGF0
aW9ucyBjaGFuZ2UuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9p
bmRleC1kdXBsaWNhdGUta2V5cGF0aHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3RvcmFn
ZS9pbmRleGVkZGIvaW5kZXgtZHVwbGljYXRlLWtleXBhdGhzLWV4cGVjdGVkLnR4dApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5kYmUzNjk5YTg4ZGI3YmZmM2QxYTFiY2I4YmE1MDViZmI0Y2I3OGJjCi0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvaW5kZXgtZHVwbGljYXRlLWtl
eXBhdGhzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDM4IEBACitUZXN0IHRoZSB1c2Ugb2YgaWRl
bnRpY2FsIGtleXBhdGhzIGJldHdlZW4gb2JqZWN0c3RvcmVzIGFuZCBpbmRleGVzCisKK09uIHN1
Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2Vk
IGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitpbmRleGVkREIgPSBzZWxmLmluZGV4ZWREQiB8fCBz
ZWxmLndlYmtpdEluZGV4ZWREQiB8fCBzZWxmLm1vekluZGV4ZWREQiB8fCBzZWxmLm1zSW5kZXhl
ZERCIHx8IHNlbGYuT0luZGV4ZWREQjsKKworaW5kZXhlZERCLm9wZW4oJ3N0b3JlLWluZGV4LWNv
bGxpc2lvbicpCitkYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQKK2RiLnNldFZlcnNpb24oJzEnKQor
RGVsZXRlZCBhbGwgb2JqZWN0IHN0b3Jlcy4KK0RlbGV0ZWQgYWxsIG9iamVjdCBzdG9yZXMuCitz
dG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdjb2xsaWRlV2l0aEluZGV4Jywge2tleVBhdGg6
ICdmb28nfSkKK2luZGV4ID0gc3RvcmUuY3JlYXRlSW5kZXgoJ2ZvbycsICdmb28nKQorb2JqZWN0
U3RvcmUucHV0KHtmb286IDEwfSkKK29iamVjdFN0b3JlLmdldCgxMCkKK2luZGV4LmdldCgxMCkK
K1BBU1MgSlNPTi5zdHJpbmdpZnkocmVzdWx0KSBpcyAie1wiZm9vXCI6MTB9IgorUEFTUyBKU09O
LnN0cmluZ2lmeShyZXN1bHQpIGlzICJ7XCJmb29cIjoxMH0iCitkYi5zZXRWZXJzaW9uKCcyJykK
K0RlbGV0ZWQgYWxsIG9iamVjdCBzdG9yZXMuCitzdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3Jl
KCdjb2xsaWRlV2l0aEF1dG9JbmNyZW1lbnQnLCB7a2V5UGF0aDogJ2ZvbycsIGF1dG9JbmNyZW1l
bnQ6IHRydWV9KQoraW5kZXggPSBzdG9yZS5jcmVhdGVJbmRleCgnZm9vJywgJ2ZvbycpCitvYmpl
Y3RTdG9yZS5wdXQoe2Zvbzo1fSkKK29iamVjdFN0b3JlLnB1dCh7Zm9vOjZ9KQorb2JqZWN0U3Rv
cmUucHV0KHtmb286N30pCitvYmplY3RTdG9yZS5wdXQoe2Zvbzo4fSkKK29iamVjdFN0b3JlLnB1
dCh7Zm9vOjl9KQorb2JqZWN0U3RvcmUucHV0KHsnYmFyJzogJ2Jheid9KQorUEFTUyBldmVudC50
YXJnZXQucmVzdWx0IGlzIDEwCitvYmplY3RTdG9yZS5nZXQoMTApCitpbmRleC5nZXQoMTApCitQ
QVNTIEpTT04uc3RyaW5naWZ5KHJlc3VsdCkgaXMgIntcImJhclwiOlwiYmF6XCIsXCJmb29cIjox
MH0iCitQQVNTIEpTT04uc3RyaW5naWZ5KHJlc3VsdCkgaXMgIntcImJhclwiOlwiYmF6XCIsXCJm
b29cIjoxMH0iCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExF
VEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvaW5kZXgtZHVw
bGljYXRlLWtleXBhdGhzLmh0bWwgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9pbmRl
eC1kdXBsaWNhdGUta2V5cGF0aHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMjc0ZWZmZjNhYWJjZWQ0MDZm
YzRmZGRjNGY5NDJlYTE3Zjc0NTEzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3Rv
cmFnZS9pbmRleGVkZGIvaW5kZXgtZHVwbGljYXRlLWtleXBhdGhzLmh0bWwKQEAgLTAsMCArMSwx
MCBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNl
cy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3NoYXJl
ZC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMv
aW5kZXgtZHVwbGljYXRlLWtleXBhdGhzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8u
Li9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW96aWxs
YS9hdXRvaW5jcmVtZW50LWluZGV4ZXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3RvcmFn
ZS9pbmRleGVkZGIvbW96aWxsYS9hdXRvaW5jcmVtZW50LWluZGV4ZXMtZXhwZWN0ZWQudHh0Cmlu
ZGV4IGY5NDUzNzQ3MTA5ZjlhMDU0YWQ5ZDM4OGMxNmIwODg5ZmY2YjZhZWEuLjYxYmFhMjJmMmE3
ZDA4YzRmYWIwMjc1ZjJhYmVmY2UxNGU1YWEyYmIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N0
b3JhZ2UvaW5kZXhlZGRiL21vemlsbGEvYXV0b2luY3JlbWVudC1pbmRleGVzLWV4cGVjdGVkLnR4
dAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9tb3ppbGxhL2F1dG9pbmNyZW1l
bnQtaW5kZXhlcy1leHBlY3RlZC50eHQKQEAgLTksNyArOSw3IEBAIGluZGV4ZWREQi5vcGVuKG5h
bWUpCiBkYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQKIHJlcXVlc3QgPSBkYi5zZXRWZXJzaW9uKCcx
JykKIERlbGV0ZWQgYWxsIG9iamVjdCBzdG9yZXMuCi1vYmplY3RTdG9yZSA9IGRiLmNyZWF0ZU9i
amVjdFN0b3JlKCdmb28nLCB7IGtleVBhdGg6ICdpZCcsIGF1dG9JbmNyZW1lbnQ6IHRydWUgfSk7
CitvYmplY3RTdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdhdXRvaW5jcmVtZW50LWlkJywg
eyBrZXlQYXRoOiAnaWQnLCBhdXRvSW5jcmVtZW50OiB0cnVlIH0pOwogb2JqZWN0U3RvcmUuY3Jl
YXRlSW5kZXgoJ2ZpcnN0JywgJ2ZpcnN0Jyk7CiBvYmplY3RTdG9yZS5jcmVhdGVJbmRleCgnc2Vj
b25kJywgJ3NlY29uZCcpOwogb2JqZWN0U3RvcmUuY3JlYXRlSW5kZXgoJ3RoaXJkJywgJ3RoaXJk
Jyk7CkBAIC0xNyw3ICsxNyw4IEBAIGRhdGEgPSB7IGZpcnN0OiAnZm9vJywgc2Vjb25kOiAnZm9v
JywgdGhpcmQ6ICdmb28nIH07CiByZXF1ZXN0ID0gb2JqZWN0U3RvcmUuYWRkKGRhdGEpOwoga2V5
ID0gZXZlbnQudGFyZ2V0LnJlc3VsdDsKIFBBU1Mga2V5ID09IG51bGwgaXMgZmFsc2UKLW9iamVj
dFN0b3JlID0gZGIudHJhbnNhY3Rpb24oJ2ZvbycpLm9iamVjdFN0b3JlKCdmb28nKTsKK2V4cGVj
dGVkIGtleSBpcyAxCitvYmplY3RTdG9yZSA9IGRiLnRyYW5zYWN0aW9uKCdhdXRvaW5jcmVtZW50
LWlkJykub2JqZWN0U3RvcmUoJ2F1dG9pbmNyZW1lbnQtaWQnKTsKIGZpcnN0ID0gb2JqZWN0U3Rv
cmUuaW5kZXgoJ2ZpcnN0Jyk7CiByZXF1ZXN0ID0gZmlyc3QuZ2V0KCdmb28nKTsKIFBBU1MgZXZl
bnQudGFyZ2V0LnJlc3VsdC5pZCBpcyBrZXkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3Jh
Z2UvaW5kZXhlZGRiL21vemlsbGEvcmVzb3VyY2VzL2F1dG9pbmNyZW1lbnQtaW5kZXhlcy5qcyBi
L0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL21vemlsbGEvcmVzb3VyY2VzL2F1dG9pbmNy
ZW1lbnQtaW5kZXhlcy5qcwppbmRleCAxYzg1OTg0ODY1ZGJmOWE3ZmYzNzViNDkwMDdmZmFhMzhh
NDg2NGViLi4yZGE5NmU3ZmZhNTZlOTczODg5NjVjYzg1MmZlOTFlYzliZTM4NTlmIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9tb3ppbGxhL3Jlc291cmNlcy9hdXRv
aW5jcmVtZW50LWluZGV4ZXMuanMKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIv
bW96aWxsYS9yZXNvdXJjZXMvYXV0b2luY3JlbWVudC1pbmRleGVzLmpzCkBAIC0zNSw3ICszNSw3
IEBAIGZ1bmN0aW9uIHNldHVwT2JqZWN0U3RvcmUoKQogICAgIHRyYW5zID0gZXZlbnQudGFyZ2V0
LnJlc3VsdDsKICAgICBkZWxldGVBbGxPYmplY3RTdG9yZXMoZGIpOwogCi0gICAgb2JqZWN0U3Rv
cmUgPSBldmFsQW5kTG9nKCJvYmplY3RTdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdmb28n
LCB7IGtleVBhdGg6ICdpZCcsIGF1dG9JbmNyZW1lbnQ6IHRydWUgfSk7Iik7CisgICAgb2JqZWN0
U3RvcmUgPSBldmFsQW5kTG9nKCJvYmplY3RTdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdh
dXRvaW5jcmVtZW50LWlkJywgeyBrZXlQYXRoOiAnaWQnLCBhdXRvSW5jcmVtZW50OiB0cnVlIH0p
OyIpOwogICAgIGV2YWxBbmRMb2coIm9iamVjdFN0b3JlLmNyZWF0ZUluZGV4KCdmaXJzdCcsICdm
aXJzdCcpOyIpOwogICAgIGV2YWxBbmRMb2coIm9iamVjdFN0b3JlLmNyZWF0ZUluZGV4KCdzZWNv
bmQnLCAnc2Vjb25kJyk7Iik7CiAgICAgZXZhbEFuZExvZygib2JqZWN0U3RvcmUuY3JlYXRlSW5k
ZXgoJ3RoaXJkJywgJ3RoaXJkJyk7Iik7CkBAIC00OSwxMiArNDksMTMgQEAgZnVuY3Rpb24gc2V0
dXBJbmRleGVzKCkKIHsKICAgICBrZXkgPSBldmFsQW5kTG9nKCJrZXkgPSBldmVudC50YXJnZXQu
cmVzdWx0OyIpOwogICAgIHNob3VsZEJlRmFsc2UoImtleSA9PSBudWxsIik7CisgICAgZGVidWco
ImV4cGVjdGVkIGtleSBpcyAiICsga2V5KTsKICAgICB0cmFucy5vbmNvbXBsZXRlID0gc2V0VmVy
c2lvbkNvbXBsZXRlOwogfQogCiBmdW5jdGlvbiBzZXRWZXJzaW9uQ29tcGxldGUoKQogewotICAg
IG9iamVjdFN0b3JlID0gZXZhbEFuZExvZygib2JqZWN0U3RvcmUgPSBkYi50cmFuc2FjdGlvbign
Zm9vJykub2JqZWN0U3RvcmUoJ2ZvbycpOyIpOworICAgIG9iamVjdFN0b3JlID0gZXZhbEFuZExv
Zygib2JqZWN0U3RvcmUgPSBkYi50cmFuc2FjdGlvbignYXV0b2luY3JlbWVudC1pZCcpLm9iamVj
dFN0b3JlKCdhdXRvaW5jcmVtZW50LWlkJyk7Iik7CiAgICAgZmlyc3QgPSBldmFsQW5kTG9nKCJm
aXJzdCA9IG9iamVjdFN0b3JlLmluZGV4KCdmaXJzdCcpOyIpOwogICAgIHJlcXVlc3QgPSBldmFs
QW5kTG9nKCJyZXF1ZXN0ID0gZmlyc3QuZ2V0KCdmb28nKTsiKTsKICAgICByZXF1ZXN0Lm9uc3Vj
Y2VzcyA9IGNoZWNrRmlyc3RJbmRleEFuZFByZXBhcmVTZWNvbmQ7CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9yZXNvdXJjZXMvaW5kZXgtZHVwbGljYXRlLWtleXBh
dGhzLmpzIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvcmVzb3VyY2VzL2luZGV4LWR1
cGxpY2F0ZS1rZXlwYXRocy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jODg4ZDg0NDk1MDUwMzg4YWMyOTVmNDk0
MDJhMzAyYzVmNDVkNWY5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9p
bmRleGVkZGIvcmVzb3VyY2VzL2luZGV4LWR1cGxpY2F0ZS1rZXlwYXRocy5qcwpAQCAtMCwwICsx
LDEwNiBAQAoraWYgKHRoaXMuaW1wb3J0U2NyaXB0cykgeworICAgIGltcG9ydFNjcmlwdHMoJy4u
Ly4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzJyk7CisgICAgaW1wb3J0U2Ny
aXB0cygnc2hhcmVkLmpzJyk7Cit9CisKK2Rlc2NyaXB0aW9uKCJUZXN0IHRoZSB1c2Ugb2YgaWRl
bnRpY2FsIGtleXBhdGhzIGJldHdlZW4gb2JqZWN0c3RvcmVzIGFuZCBpbmRleGVzIik7CisKK2Z1
bmN0aW9uIHRlc3QoKQoreworICAgIHJlbW92ZVZlbmRvclByZWZpeGVzKCk7CisgICAgcmVxdWVz
dCA9IGV2YWxBbmRMb2coImluZGV4ZWREQi5vcGVuKCdzdG9yZS1pbmRleC1jb2xsaXNpb24nKSIp
OworICAgIHJlcXVlc3Qub25zdWNjZXNzID0gdGVzdENvbGxpZGVTdG9yZUluZGV4U2V0dXA7Cisg
ICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9CisKK2Z1bmN0
aW9uIHRlc3RDb2xsaWRlU3RvcmVJbmRleFNldHVwKGV2dCkKK3sKKyAgICBldmVudCA9IGV2dDsK
KyAgICBldmFsQW5kTG9nKCJkYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQiKTsKKyAgICByZXF1ZXN0
ID0gZXZhbEFuZExvZygiZGIuc2V0VmVyc2lvbignMScpIik7CisgICAgcmVxdWVzdC5vbnN1Y2Nl
c3MgPSB0ZXN0Q29sbGlkZVN0b3JlSW5kZXg7CisgICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBl
Y3RlZEVycm9yQ2FsbGJhY2s7CisgICAgcmVxdWVzdC5vbmJsb2NrZWQgPSB1bmV4cGVjdGVkQmxv
Y2tlZENhbGxiYWNrOworfQorCitmdW5jdGlvbiB0ZXN0Q29sbGlkZVN0b3JlSW5kZXgoZXZlbnQp
Cit7CisgICAgZGVsZXRlQWxsT2JqZWN0U3RvcmVzKGRiKTsKKyAgICB2YXIgdHJhbnMgPSBldmVu
dC50YXJnZXQucmVzdWx0OworICAgIGV2YWxBbmRMb2coInN0b3JlID0gZGIuY3JlYXRlT2JqZWN0
U3RvcmUoJ2NvbGxpZGVXaXRoSW5kZXgnLCB7a2V5UGF0aDogJ2Zvbyd9KSIpOworICAgIGV2YWxB
bmRMb2coImluZGV4ID0gc3RvcmUuY3JlYXRlSW5kZXgoJ2ZvbycsICdmb28nKSIpOworCisgICAg
dHJhbnMub25jb21wbGV0ZSA9IHN0b3JlQ29sbGlkZWRTdG9yZUluZGV4RGF0YTsKKyAgICB0cmFu
cy5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7CisgICAgdHJhbnMub25hYm9ydCA9
IHVuZXhwZWN0ZWRBYm9ydENhbGxiYWNrOworfQorCitmdW5jdGlvbiByZXN1bHRTaG91bGRCZSh2
KSB7CisgICAgcmV0dXJuIGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIHJlc3VsdCA9IGV2ZW50
LnRhcmdldC5yZXN1bHQ7CisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygiSlNPTi5zdHJp
bmdpZnkocmVzdWx0KSIsIHYpOworICAgIH0KK307CisKK2Z1bmN0aW9uIHN0b3JlQ29sbGlkZWRT
dG9yZUluZGV4RGF0YSgpIHsKKyAgICB2YXIgdHJhbnMgPSBkYi50cmFuc2FjdGlvbignY29sbGlk
ZVdpdGhJbmRleCcsICdyZWFkd3JpdGUnKTsKKworICAgIG9iamVjdFN0b3JlID0gdHJhbnMub2Jq
ZWN0U3RvcmUoJ2NvbGxpZGVXaXRoSW5kZXgnKTsKKyAgICBpbmRleCA9IG9iamVjdFN0b3JlLmlu
ZGV4KCdmb28nKTsKKyAgICBldmFsQW5kTG9nKCJvYmplY3RTdG9yZS5wdXQoe2ZvbzogMTB9KSIp
Lm9uc3VjY2VzcyA9IGZ1bmN0aW9uKCkgeworICAgICAgICBldmFsQW5kTG9nKCJvYmplY3RTdG9y
ZS5nZXQoMTApIikub25zdWNjZXNzID0gcmVzdWx0U2hvdWxkQmUoJ3siZm9vIjoxMH0nKTsKKyAg
ICAgICAgZXZhbEFuZExvZygiaW5kZXguZ2V0KDEwKSIpLm9uc3VjY2VzcyA9IHJlc3VsdFNob3Vs
ZEJlKCd7ImZvbyI6MTB9Jyk7CisgICAgfTsKKworICAgIHRyYW5zLm9uY29tcGxldGUgPSB0ZXN0
Q29sbGlkZUF1dG9JbmNyZW1lbnRTZXR1cDsKKyAgICB0cmFucy5vbmFib3J0ID0gdW5leHBlY3Rl
ZEFib3J0Q2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIHRlc3RDb2xsaWRlQXV0b0luY3JlbWVudFNl
dHVwKCkKK3sKKyAgICByZXF1ZXN0ID0gZXZhbEFuZExvZygiZGIuc2V0VmVyc2lvbignMicpIik7
CisgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSB0ZXN0Q29sbGlkZUF1dG9JbmNyZW1lbnQ7CisgICAg
cmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7CisgICAgcmVxdWVzdC5v
bmJsb2NrZWQgPSB1bmV4cGVjdGVkQmxvY2tlZENhbGxiYWNrOworfQorCitmdW5jdGlvbiB0ZXN0
Q29sbGlkZUF1dG9JbmNyZW1lbnQoKQoreworICAgIGRlbGV0ZUFsbE9iamVjdFN0b3JlcyhkYik7
CisgICAgdmFyIHRyYW5zID0gcmVxdWVzdC5yZXN1bHQ7CisgICAgZXZhbEFuZExvZygic3RvcmUg
PSBkYi5jcmVhdGVPYmplY3RTdG9yZSgnY29sbGlkZVdpdGhBdXRvSW5jcmVtZW50Jywge2tleVBh
dGg6ICdmb28nLCBhdXRvSW5jcmVtZW50OiB0cnVlfSkiKTsKKyAgICBldmFsQW5kTG9nKCJpbmRl
eCA9IHN0b3JlLmNyZWF0ZUluZGV4KCdmb28nLCAnZm9vJykiKTsKKworICAgIHRyYW5zLm9uY29t
cGxldGUgPSBzdG9yZUNvbGxpZGVkQXV0b0luY3JlbWVudERhdGE7CisgICAgdHJhbnMub25lcnJv
ciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworICAgIHRyYW5zLm9uYWJvcnQgPSB1bmV4cGVj
dGVkQWJvcnRDYWxsYmFjazsKK30KKworZnVuY3Rpb24gc3RvcmVDb2xsaWRlZEF1dG9JbmNyZW1l
bnREYXRhKCkKK3sKKyAgICB2YXIgdHJhbnMgPSBkYi50cmFuc2FjdGlvbignY29sbGlkZVdpdGhB
dXRvSW5jcmVtZW50JywgJ3JlYWR3cml0ZScpOworCisgICAgb2JqZWN0U3RvcmUgPSB0cmFucy5v
YmplY3RTdG9yZSgnY29sbGlkZVdpdGhBdXRvSW5jcmVtZW50Jyk7CisgICAgaW5kZXggPSBvYmpl
Y3RTdG9yZS5pbmRleCgnZm9vJyk7CisgICAgLy8gSW5zZXJ0IHNvbWUgZGF0YSB0byBmdXR6IHdp
dGggdGhlIGF1dG9JbmNyZW1lbnQgc3RhdGUuCisgICAgZm9yICh2YXIgaSA9IDU7IGkgPCAxMDsg
aSsrKSB7CisgICAgICAgIGV2YWxBbmRMb2coIm9iamVjdFN0b3JlLnB1dCh7Zm9vOiIgKyAgaSAr
ICJ9KSIpOworICAgIH0KKyAgICAvLyBXaXRob3V0IGEgdmFsdWUsIHRoaXMgcmVxdWlyZXMgdGhl
IGJhY2tlbmQgdG8gZ2VuZXJhdGUgYSBrZXksIHdoaWNoIG11c3QgYWxzbyBiZSBpbmRleGVkLgor
ICAgIGV2YWxBbmRMb2coIm9iamVjdFN0b3JlLnB1dCh7J2Jhcic6ICdiYXonfSkiKS5vbnN1Y2Nl
c3MgPSBmdW5jdGlvbihldnQpIHsKKyAgICAgICAgZXZlbnQgPSBldnQ7CisgICAgICAgIHNob3Vs
ZEJlKCJldmVudC50YXJnZXQucmVzdWx0IiwgIjEwIik7CisgICAgICAgIGV2YWxBbmRMb2coIm9i
amVjdFN0b3JlLmdldCgxMCkiKS5vbnN1Y2Nlc3MgPSByZXN1bHRTaG91bGRCZSgneyJiYXIiOiJi
YXoiLCJmb28iOjEwfScpOworICAgICAgICBldmFsQW5kTG9nKCJpbmRleC5nZXQoMTApIikub25z
dWNjZXNzID0gcmVzdWx0U2hvdWxkQmUoJ3siYmFyIjoiYmF6IiwiZm9vIjoxMH0nKTsKKyAgICB9
OworCisgICAgdHJhbnMub25jb21wbGV0ZSA9IHRlc3RDb2xsaWRlSW5kZXhJbmRleFNldHVwOwor
ICAgIHRyYW5zLm9uYWJvcnQgPSB1bmV4cGVjdGVkQWJvcnRDYWxsYmFjazsKK30KKworZnVuY3Rp
b24gdGVzdENvbGxpZGVJbmRleEluZGV4U2V0dXAoKSB7CisgICAgZmluaXNoSlNUZXN0KCk7Cit9
CisKK3ZhciBqc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK3Rlc3QoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154776</attachid>
            <date>2012-07-26 16:01:19 -0700</date>
            <delta_ts>2012-07-26 16:10:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91123-20120726160108.patch</filename>
            <type>text/plain</type>
            <size>57693</size>
            <attacher name="Alec Flett">alecflett</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzNjU2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTNhNzVlZGZlN2ZlY2Fk
Y2FjOGU2YTYzOGZiYjEzMTQ5NjdkOWQzOC4uODJiNDg1ZWM1MmIxNmQ5ZjViMjRjMGIxM2QxNzI0
YTY0ZjE0OTM5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYwIEBACisyMDEyLTA3LTI1ICBBbGVj
IEZsZXR0ICA8YWxlY2ZsZXR0QGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IGlu
amVjdCBpbmRleCBrZXlzIG9uIGN1cnNvci9vYmplY3RzdG9yZS9pbmRleCBnZXQgc3VjY2VzcyBo
YW5kbGVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTExMjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBN
b3ZlIGtleS1pbmplY3Rpb24gaW50byB0aGUgZnJvbnRlbmQsIGJ5IGluamVjdGluZyB0aGUga2V5
IGludG8KKyAgICAgICAgdGhlIHZhbHVlIG9uIGdldCByYXRoZXIgdGhhbiBzZXQgZm9yIGF1dG9p
bmNyZW1lbnRlZCBrZXlzLiBUaGlzCisgICAgICAgIGdpdmVzIGEgcG90ZW50aWFsIHBlcmZvcm1h
bmNlIHdpbiBieSBhdm9pZGluZyBhbiBJUEMgY2FsbCB0byB0aGUKKyAgICAgICAgVjggdXRpbGl0
eSBwcm9jZXNzIG9uIGNocm9taXVtLCBhbmQgZ2VuZXJhbGx5IGNsZWFucyB1cCB0aGUga2V5Cisg
ICAgICAgIG1hbmFnZW1lbnQuCisKKyAgICAgICAgTm90ZSB0aGF0IHRoaXMgZHVwbGljYXRlcyB0
aGUgbG9naWMgb2YgZ2VuZXJhdGVJbmRleEtleXMgaW50byB0aGUKKyAgICAgICAgZnJvbnRlbmQg
dW50aWwgdGhhdCBtZXRob2QgY2FuIGJlIGV4cHVuZ2VkIGZyb20gdGhlIGJhY2tlbmQuIFRoaXMK
KyAgICAgICAgd2lsbCBiZSBjbGVhbmVkIHVwIGluIGEgbGF0ZXIgcGF0Y2guCisKKyAgICAgICAg
SW4gb3JkZXIgdG8gYWNjb3VudCBmb3IgYm90aCBvbGQgZGF0YSAod2hpY2ggaGFzIHRoZSBkdXBs
aWNhdGUKKyAgICAgICAgcHJpbWFyeSBrZXkgYWxyZWFkeSBpbmplY3RlZCBhbmQgc2VyaWFsaXpl
ZCkgYW5kIGFueSBuZXcgZGF0YSwgYW4KKyAgICAgICAgYXNzZXJ0aW9uIHdhcyByZW1vdmVkIGZy
b20gSURCQmluZGluZ1V0aWxpdGllcy4KKworICAgICAgICBUaGlzIGFsc28gaW5jbHVkZXMgc29t
ZSBtaW5vciByZWZhY3RvcmluZyBzdWNoIGFzIHRoZSBkZXByZWNhdGlvbgorICAgICAgICBvZiBJ
REJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjp1cGRhdGUgaW4gZmF2b3Igb2YgYSBkaXJlY3QgY2Fs
bCB0bworICAgICAgICBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXQsIGFuZCByZW1vdmFs
IG9mIHRoZSBub3ctZGVmdW5jdAorICAgICAgICBJREJCYWNraW5nU3RvcmU6OmdldE9iamVjdFZp
YUluZGV4LgorCisgICAgICAgIFRlc3RzOiBzdG9yYWdlL2luZGV4ZGIvaW5kZXgtZHVwbGljYXRl
LWtleXBhdGhzLmh0bWwKKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdT
dG9yZS5oOgorICAgICAgICAoSURCQmFja2luZ1N0b3JlKToKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJDdXJzb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yOjp1cGRh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yOjpzZXRWYWx1ZVJlYWR5KToKKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJREJDdXJzb3JCYWNrZW5kSW1wbDo6dXBkYXRlKToKKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OklEQkluZGV4QmFja2VuZEltcGw6OmdldEludGVybmFsKToKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmg6CisgICAgICAgIChJREJMZXZlbERCQmFj
a2luZ1N0b3JlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpnZW5lcmF0ZUluZGV4S2V5c0ZvclZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmFkZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6cHV0KToKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oOgorICAgICAgICAoSURCT2JqZWN0U3RvcmUpOgor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0KToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dFdpdGhJbmRleEtl
eXMpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
SURCUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpvblN1Y2Nlc3Mp
OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwOgorICAgICAg
ICAoV2ViQ29yZSk6CisKIDIwMTItMDctMjQgIFNoYXduIFNpbmdoICA8c2hhd25zaW5naEBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBSZWZhY3RvciBDQ0xheWVyVHJlZUhvc3RD
b21tb246IG1vdmUgcm9vdCBsYXllciBzcGVjaWFsIGNhc2UgaW5pdGlhbGl6YXRpb24gaW50byBp
bnRlcm5hbCBjb2RlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAyN2I1NTJiZTRkODFh
MmIzYTZjZmJiMGRiYzE2NjA1M2E4ZGQ0NjNlLi5jNmE4NWM3YjlmNmQyNTkzMmVlNWI4MzRmOWFj
YTg3ODIzOGNhNTAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBA
CisyMDEyLTA3LTI1ICBBbGVjIEZsZXR0ICA8YWxlY2ZsZXR0QGNocm9taXVtLm9yZz4KKworICAg
ICAgICBJbmRleGVkREI6IGluamVjdCBpbmRleCBrZXlzIG9uIGN1cnNvci9vYmplY3RzdG9yZS9p
bmRleCBnZXQgc3VjY2VzcyBoYW5kbGVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9OTExMjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBSZW1vdmUgbWV0aG9kIG5vIGxvbmdlciB1c2VkLgorCisgICAgICAg
ICogdGVzdHMvSURCRmFrZUJhY2tpbmdTdG9yZS5oOgorCiAyMDEyLTA3LTI0ICBTaGF3biBTaW5n
aCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gUmVmYWN0
b3IgQ0NMYXllclRyZWVIb3N0Q29tbW9uOiBtb3ZlIHJvb3QgbGF5ZXIgc3BlY2lhbCBjYXNlIGlu
aXRpYWxpemF0aW9uIGludG8gaW50ZXJuYWwgY29kZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmgKaW5kZXggNzhhOWY2NjdhZGQxMzBl
NjNlM2MwNzQ2ZDRhNzAzYjQ4OTU0NmJkNy4uZjhkZTY4MjAyN2ZjMjUzZjc3ZmE1NTk5NGMxZWIw
ZWJmYzMwNDE1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCQmFja2luZ1N0b3JlLmgKQEAgLTgzLDcgKzgzLDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBkZWxldGVJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCBpbmRleElkKSA9IDA7CiAgICAgdmlydHVhbCBib29sIHB1dEluZGV4RGF0YUZv
clJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRf
dCBpbmRleElkLCBjb25zdCBJREJLZXkmLCBjb25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZp
ZXIqKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGRlbGV0ZUluZGV4RGF0YUZvclJlY29yZChpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBj
b25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqKSA9IDA7Ci0gICAgdmlydHVhbCBTdHJp
bmcgZ2V0T2JqZWN0VmlhSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JikgPSAwOwogICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxJREJLZXk+IGdldFByaW1hcnlLZXlWaWFJbmRleChpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkm
KSA9IDA7CiAgICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luSW5kZXgoaW50NjRfdCBkYXRhYmFz
ZWlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5
JiBpbmRleEtleSwgUmVmUHRyPElEQktleT4mIGZvdW5kUHJpbWFyeUtleSkgPSAwOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcAppbmRleCBlZjM0
Y2I4YzdmYjc2MzYxODQxMjJiM2NiODM2ZDI0OGQyMWViOTMwLi4wNWRkYjI1MWU0ZmEyYzE3OTZl
YjVlMjNhODg3ZGYyOGU3YTQ3ZGE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkN1cnNvci5jcHAKQEAgLTE1OSwxMyArMTU5LDcgQEAgUGFzc1JlZlB0cjxJREJS
ZXF1ZXN0PiBJREJDdXJzb3I6OnVwZGF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
LCBQYXNzUmUKICAgICAgICAgfQogICAgIH0KIAotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1
ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBt
X3RyYW5zYWN0aW9uLmdldCgpKTsKLSAgICBtX2JhY2tlbmQtPnVwZGF0ZSh2YWx1ZSwgcmVxdWVz
dCwgZWMpOwotICAgIGlmIChlYykgewotICAgICAgICByZXF1ZXN0LT5tYXJrRWFybHlEZWF0aCgp
OwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgcmV0dXJuIHJlcXVlc3QucmVsZWFzZSgp
OworICAgIHJldHVybiBvYmplY3RTdG9yZS0+cHV0KElEQk9iamVjdFN0b3JlQmFja2VuZEludGVy
ZmFjZTo6Q3Vyc29yVXBkYXRlLCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgY29udGV4dCwgdmFsdWUs
IG1fY3VycmVudFByaW1hcnlLZXksIGVjKTsKIH0KIAogdm9pZCBJREJDdXJzb3I6OmFkdmFuY2Uo
dW5zaWduZWQgbG9uZyBjb3VudCwgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC0yNTksMTggKzI1Mywy
MSBAQCB2b2lkIElEQkN1cnNvcjo6c2V0VmFsdWVSZWFkeSgpCiAgICAgbV9jdXJyZW50UHJpbWFy
eUtleSA9IG1fYmFja2VuZC0+cHJpbWFyeUtleSgpOwogCiAgICAgUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4gdmFsdWUgPSBtX2JhY2tlbmQtPnZhbHVlKCk7Ci0jaWZuZGVmIE5ERUJVRwog
ICAgIGlmICghaXNLZXlDdXJzb3IoKSkgewotICAgICAgICAvLyBGSVhNRTogQWN0dWFsbHkgaW5q
ZWN0IHRoZSBwcmltYXJ5S2V5IGF0IHRoZSBrZXlQYXRoLgogICAgICAgICBSZWZQdHI8SURCT2Jq
ZWN0U3RvcmU+IG9iamVjdFN0b3JlID0gZWZmZWN0aXZlT2JqZWN0U3RvcmUoKTsKLSAgICAgICAg
aWYgKG9iamVjdFN0b3JlLT5hdXRvSW5jcmVtZW50KCkgJiYgIW9iamVjdFN0b3JlLT5tZXRhZGF0
YSgpLmtleVBhdGguaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGNvbnN0IElEQktleVBhdGgmIGtl
eVBhdGggPSBvYmplY3RTdG9yZS0+bWV0YWRhdGEoKS5rZXlQYXRoOwotICAgICAgICAgICAgUmVm
UHRyPElEQktleT4gZXhwZWN0ZWRLZXkgPSBjcmVhdGVJREJLZXlGcm9tU2VyaWFsaXplZFZhbHVl
QW5kS2V5UGF0aCh2YWx1ZSwga2V5UGF0aCk7Ci0gICAgICAgICAgICBBU1NFUlQobV9jdXJyZW50
UHJpbWFyeUtleSk7Ci0gICAgICAgICAgICBBU1NFUlQoZXhwZWN0ZWRLZXktPmlzRXF1YWwobV9j
dXJyZW50UHJpbWFyeUtleS5nZXQoKSkpOworICAgICAgICBjb25zdCBJREJPYmplY3RTdG9yZU1l
dGFkYXRhIG1ldGFkYXRhID0gb2JqZWN0U3RvcmUtPm1ldGFkYXRhKCk7CisgICAgICAgIGlmICht
ZXRhZGF0YS5hdXRvSW5jcmVtZW50ICYmICFtZXRhZGF0YS5rZXlQYXRoLmlzTnVsbCgpKSB7Cisj
aWZuZGVmIE5ERUJVRworICAgICAgICAgICAgUmVmUHRyPElEQktleT4gZXhwZWN0ZWRLZXkgPSBj
cmVhdGVJREJLZXlGcm9tU2VyaWFsaXplZFZhbHVlQW5kS2V5UGF0aCh2YWx1ZSwgbWV0YWRhdGEu
a2V5UGF0aCk7CisgICAgICAgICAgICBBU1NFUlQoIWV4cGVjdGVkS2V5IHx8IGV4cGVjdGVkS2V5
LT5pc0VxdWFsKG1fY3VycmVudFByaW1hcnlLZXkuZ2V0KCkpKTsKKyNlbmRpZgorICAgICAgICAg
ICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWVBZnRlckluamVjdGlvbiA9IGlu
amVjdElEQktleUludG9TZXJpYWxpemVkVmFsdWUobV9jdXJyZW50UHJpbWFyeUtleSwgdmFsdWUs
IG1ldGFkYXRhLmtleVBhdGgpOworICAgICAgICAgICAgQVNTRVJUKHZhbHVlQWZ0ZXJJbmplY3Rp
b24pOworICAgICAgICAgICAgLy8gRklYTUU6IFRoZXJlIGlzIG5vIHdheSB0byByZXBvcnQgZXJy
b3JzIGhlcmUuIE1vdmUgdGhpcyBpbnRvIG9uU3VjY2Vzc1dpdGhDb250aW51YXRpb24gc28gdGhh
dCB3ZSBjYW4gYWJvcnQgdGhlIHRyYW5zYWN0aW9uIHRoZXJlLiBTZWU6IGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MjI3OAorICAgICAgICAgICAgaWYgKHZhbHVlQWZ0
ZXJJbmplY3Rpb24pCisgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZUFmdGVySW5qZWN0aW9u
OwogICAgICAgICB9CiAgICAgfQotI2VuZGlmCiAgICAgbV9jdXJyZW50VmFsdWUgPSBJREJBbnk6
OmNyZWF0ZSh2YWx1ZS5yZWxlYXNlKCkpOwogCiAgICAgbV9nb3RWYWx1ZSA9IHRydWU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5k
SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNr
ZW5kSW1wbC5jcHAKaW5kZXggYWUyN2FmOGEzMmM2YmI2OTQ5MmJmZjA4NjZlMmQwMjg1MjQ0NjYw
My4uMGEzOWE4ZmJjNjllMDY3M2Y3MzcyNzYxMmI5MWVjYjUxYWQ5YTA5NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJ
bXBsLmNwcApAQCAtODMsMTcgKzgzLDYgQEAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IElEQkN1cnNvckJhY2tlbmRJbXBsOjp2YWx1ZSgpIGNvbnN0CiAgICAgcmV0dXJuIFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUobV9jdXJzb3ItPnZhbHVlKCkpOwogfQog
Ci12b2lkIElEQkN1cnNvckJhY2tlbmRJbXBsOjp1cGRhdGUoUGFzc1JlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+IHZhbHVlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBF
eGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBJREJfVFJBQ0UoIklEQkN1cnNvckJhY2tlbmRJbXBs
Ojp1cGRhdGUiKTsKLSAgICBBU1NFUlQobV90cmFuc2FjdGlvbi0+bW9kZSgpICE9IElEQlRyYW5z
YWN0aW9uOjpSRUFEX09OTFkpOwotCi0gICAgQVNTRVJUKG1fY3Vyc29yKTsKLSAgICBBU1NFUlQo
bV9jdXJzb3JUeXBlICE9IEluZGV4S2V5Q3Vyc29yKTsKLQotICAgIG1fb2JqZWN0U3RvcmUtPnB1
dCh2YWx1ZSwgbV9jdXJzb3ItPnByaW1hcnlLZXkoKSwgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50
ZXJmYWNlOjpDdXJzb3JVcGRhdGUsIGNhbGxiYWNrcywgbV90cmFuc2FjdGlvbi5nZXQoKSwgZWMp
OwotfQotCiB2b2lkIElEQkN1cnNvckJhY2tlbmRJbXBsOjpjb250aW51ZUZ1bmN0aW9uKFBhc3NS
ZWZQdHI8SURCS2V5PiBwcnBLZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFj
a3MsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIElEQl9UUkFDRSgiSURCQ3Vyc29yQmFja2Vu
ZEltcGw6OmNvbnRpbnVlIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuaAppbmRleCAwNDNjNDAzNTJjZGQzYTNmZDYz
Zjk5NzJkMTY3MjFmMDQ4ZTJiMDk5Li41MDk3YzUzODc2OGYyOWYwOTE5NGIyOTQ5MGIxZDQxMmRl
NGUxZjNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJD
dXJzb3JCYWNrZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkN1cnNvckJhY2tlbmRJbXBsLmgKQEAgLTU3LDcgKzU3LDYgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSgpIGNvbnN0OwogICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxJREJLZXk+IHByaW1hcnlLZXkoKSBjb25zdDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGUoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4sIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgYWR2YW5jZSh1bnNp
Z25lZCBsb25nLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIEV4Y2VwdGlvbkNvZGUmKTsKICAg
ICB2aXJ0dWFsIHZvaWQgY29udGludWVGdW5jdGlvbihQYXNzUmVmUHRyPElEQktleT4sIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBk
ZWxldGVGdW5jdGlvbihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIEV4Y2VwdGlvbkNvZGUmKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJh
Y2tlbmRJbnRlcmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1
cnNvckJhY2tlbmRJbnRlcmZhY2UuaAppbmRleCA0OGQzYTE4MjlmNjU4OGVkZjYxOTczMzdmMzE4
YjJjMDZlOTBiY2YzLi4xZGYyODQ1NmE0MWM4OTM4M2ZlMmI4MTJhZDM3MDZkZTI3NDg5NDM4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNr
ZW5kSW50ZXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
Q3Vyc29yQmFja2VuZEludGVyZmFjZS5oCkBAIC01Nyw3ICs1Nyw2IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5KCkgY29uc3QgPSAwOwogICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlKCkgY29uc3QgPSAw
OwogCi0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZShQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKICAg
ICB2aXJ0dWFsIHZvaWQgYWR2YW5jZSh1bnNpZ25lZCBsb25nIGNvdW50LCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4sIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNvbnRp
bnVlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+LCBFeGNlcHRpb25Db2RlJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVGdW5jdGlv
bihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBs
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZElt
cGwuY3BwCmluZGV4IDlmNWZmM2JhZmNhMjU0OTc1YTQzYzQzMGViY2E1ZTIxODY5MGVjNjYuLjEz
NDAwODQ5MWY1YTc0MzE5NmUyZmM5YWI4ODJkYWVlNmNiMzk1OTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuY3Bw
CkBAIC0xNzIsMTEgKzE3MiwxOSBAQCB2b2lkIElEQkluZGV4QmFja2VuZEltcGw6OmdldEludGVy
bmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkluZAogICAgICAgICBi
YWNraW5nU3RvcmVDdXJzb3ItPmNsb3NlKCk7CiAgICAgfQogCi0gICAgU3RyaW5nIHZhbHVlID0g
aW5kZXgtPmJhY2tpbmdTdG9yZSgpLT5nZXRPYmplY3RWaWFJbmRleChpbmRleC0+ZGF0YWJhc2VJ
ZCgpLCBpbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlkKCksIGluZGV4LT5pZCgpLCAqa2V5
KTsKKyAgICBSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5ID0gaW5kZXgtPmJhY2tpbmdTdG9yZSgp
LT5nZXRQcmltYXJ5S2V5VmlhSW5kZXgoaW5kZXgtPmRhdGFiYXNlSWQoKSwgaW5kZXgtPm1fb2Jq
ZWN0U3RvcmVCYWNrZW5kLT5pZCgpLCBpbmRleC0+aWQoKSwgKmtleSk7CisKKyAgICBTdHJpbmcg
dmFsdWUgPSBpbmRleC0+YmFja2luZ1N0b3JlKCktPmdldE9iamVjdFN0b3JlUmVjb3JkKGluZGV4
LT5kYXRhYmFzZUlkKCksIGluZGV4LT5tX29iamVjdFN0b3JlQmFja2VuZC0+aWQoKSwgKnByaW1h
cnlLZXkpOworCiAgICAgaWYgKHZhbHVlLmlzTnVsbCgpKSB7CiAgICAgICAgIGNhbGxiYWNrcy0+
b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6dW5kZWZpbmVkVmFsdWUoKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CisgICAgaWYgKGluZGV4LT5tX29iamVjdFN0b3JlQmFja2VuZC0+
YXV0b0luY3JlbWVudCgpICYmICFpbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmtleVBhdGgo
KS5pc051bGwoKSkgeworICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlKHZhbHVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHJpbWFyeUtleSwgaW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5rZXlQYXRoKCkp
OworICAgICAgICByZXR1cm47CisgICAgfQogICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUodmFsdWUpKTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoLmNwcAppbmRleCAwYzM1ZDIw
ZDYwNmQ3ZDVjZmI0MTc5MzVhNjdkNjBiZDQ1MmRmM2E4Li44YzdiODRmOWU4NGFkZWNjNWI4MGVl
YmViZGY0YjIwMDQyOTI5N2Q4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJLZXlQYXRoLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJLZXlQYXRoLmNwcApAQCAtMjM2LDYgKzIzNiw0OCBAQCBJREJLZXlQYXRoOjpvcGVy
YXRvciBQYXNzUmVmUHRyPElEQkFueT4oKSBjb25zdAogICAgIHJldHVybiAwOwogfQogCitib29s
IElEQktleVBhdGg6Om9wZXJhdG9yPT0oUGFzc1JlZlB0cjxJREJBbnk+IG90aGVyKSBjb25zdAor
eworICAgIGlmICghaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0
Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgTnVsbFR5cGU6CisgICAgICAgIHJldHVybiBvdGhlci0+
dHlwZSgpID09IElEQkFueTo6TnVsbFR5cGU7CisgICAgY2FzZSBTdHJpbmdUeXBlOgorICAgICAg
ICByZXR1cm4gb3RoZXItPnR5cGUoKSA9PSBJREJBbnk6OlN0cmluZ1R5cGUgJiYgb3RoZXItPnN0
cmluZygpID09IHN0cmluZygpOworICAgIGNhc2UgQXJyYXlUeXBlOgorICAgICAgICBpZiAob3Ro
ZXItPnR5cGUoKSAhPSBJREJBbnk6OkRPTVN0cmluZ0xpc3RUeXBlKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBvdGhlckxpc3QgPSBv
dGhlci0+ZG9tU3RyaW5nTGlzdCgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
YXJyYXkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChvdGhlckxpc3QtPml0ZW0oaSkg
IT0gbV9hcnJheVtpXSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBJREJLZXlQYXRoOjpvcGVyYXRvcj09KGNvbnN0
IElEQktleVBhdGgmIG90aGVyKSBjb25zdAoreworICAgIGlmIChtX3R5cGUgIT0gb3RoZXIubV90
eXBlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAg
IGNhc2UgTnVsbFR5cGU6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2UgU3RyaW5nVHlw
ZToKKyAgICAgICAgcmV0dXJuIG1fc3RyaW5nID09IG90aGVyLm1fc3RyaW5nOworICAgIGNhc2Ug
QXJyYXlUeXBlOgorICAgICAgICByZXR1cm4gbV9hcnJheSA9PSBvdGhlci5tX2FycmF5OworICAg
IH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJLZXlQYXRoLmgKaW5kZXggZjUyMzZjMTUyZjAyY2JkYTI4ZGI4YzMxNTFmMmRkODU3
ZWFhZWNlOS4uZGYzMWUyYWJjNjVlYjdhMzI3YzlmNTkxNzgzNWNjMzg2YTI0YTlmMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguaApAQCAtNzIsNiAr
NzIsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiBtX3R5cGUg
PT0gTnVsbFR5cGU7IH0KICAgICBib29sIGlzVmFsaWQoKSBjb25zdDsKICAgICBvcGVyYXRvciBQ
YXNzUmVmUHRyPElEQkFueT4oKSBjb25zdDsKKyAgICBib29sIG9wZXJhdG9yPT0oUGFzc1JlZlB0
cjxJREJBbnk+IG90aGVyKSBjb25zdDsKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSURCS2V5
UGF0aCYgb3RoZXIpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIFR5cGUgbV90eXBlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFj
a2luZ1N0b3JlLmNwcAppbmRleCAzMmUyZjY4MTU3OTQwOWEwOTA4ZDI5YTE4NzJjMGNkYzU2Yjg5
ZWY5Li4wNTEzYzM1MzNmY2FiMGZmODUyZGMwYTkxMzQ0NTdlY2YzNjI5N2YzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3Jl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFj
a2luZ1N0b3JlLmNwcApAQCAtOTY3LDE1ICs5NjcsNiBAQCBib29sIElEQkxldmVsREJCYWNraW5n
U3RvcmU6OmRlbGV0ZUluZGV4RGF0YUZvclJlY29yZChpbnQ2NF90LCBpbnQ2NF90LCBpbnQ2NF90
LAogICAgIHJldHVybiB0cnVlOwogfQogCi1TdHJpbmcgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6
Z2V0T2JqZWN0VmlhSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBrZXkpCi17Ci0gICAgUmVmUHRyPElE
QktleT4gcHJpbWFyeUtleSA9IGdldFByaW1hcnlLZXlWaWFJbmRleChkYXRhYmFzZUlkLCBvYmpl
Y3RTdG9yZUlkLCBpbmRleElkLCBrZXkpOwotICAgIGlmICghcHJpbWFyeUtleSkKLSAgICAgICAg
cmV0dXJuIFN0cmluZygpOwotCi0gICAgcmV0dXJuIGdldE9iamVjdFN0b3JlUmVjb3JkKGRhdGFi
YXNlSWQsIG9iamVjdFN0b3JlSWQsICpwcmltYXJ5S2V5KTsKLX0KLQogc3RhdGljIGJvb2wgdmVy
c2lvbkV4aXN0cyhMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCB2ZXJzaW9uLCBjb25zdCBWZWN0
b3I8Y2hhcj4mIGVuY29kZWRQcmltYXJ5S2V5KQogewogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBr
ZXkgPSBFeGlzdHNFbnRyeUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGVu
Y29kZWRQcmltYXJ5S2V5KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaAppbmRleCBjNWE5ZTJlZTMwOWU4Y2Ez
ZmQ3ZjcwZjBhYTJiYjgwY2VjMDQ2YjJlLi4wYmU5MzRmZmRhOWJjZjgwOTFkNTM0MTBhNmFiY2M4
MDBmNTkwZDM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJMZXZlbERCQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oCkBAIC02OSw3ICs2OSw2IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCk7CiAgICAgdmlydHVhbCBib29sIHB1dElu
ZGV4RGF0YUZvclJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmLCBjb25zdCBPYmplY3RTdG9yZVJlY29y
ZElkZW50aWZpZXIqKTsKICAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3Jk
KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4
SWQsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciopOwotICAgIHZpcnR1YWwgU3Ry
aW5nIGdldE9iamVjdFZpYUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYpOwogICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxJREJLZXk+IGdldFByaW1hcnlLZXlWaWFJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmKTsK
ICAgICB2aXJ0dWFsIGJvb2wga2V5RXhpc3RzSW5JbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGluZGV4
S2V5LCBSZWZQdHI8SURCS2V5PiYgZm91bmRQcmltYXJ5S2V5KTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCmluZGV4IGRjOWJl
YzViNDkwNWI2Y2I4ZDE2MWUyYjAwNzU1ODJjMzlmNTY2ZTUuLjdmN2NkNzRiYjBlZGNiNjNmODQ1
NDBiZWIwYzk1OWRlY2U2MjZmMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKQEAgLTEwMiwxOSArMTAyLDQ0IEBAIFBhc3NS
ZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OmdldChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LCBQYXNzCiAgICAgcmV0dXJuIGdldChjb250ZXh0LCBrZXlSYW5nZS5yZWxl
YXNlKCksIGVjKTsKIH0KIAorc3RhdGljIHZvaWQgZ2VuZXJhdGVJbmRleEtleXNGb3JWYWx1ZShj
b25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gb2Jq
ZWN0VmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElEQk9iamVj
dFN0b3JlOjpJbmRleEtleXMqIGluZGV4S2V5cykKK3sKKyAgICBBU1NFUlQoaW5kZXhLZXlzKTsK
KyAgICBSZWZQdHI8SURCS2V5PiBpbmRleEtleSA9IGNyZWF0ZUlEQktleUZyb21TZXJpYWxpemVk
VmFsdWVBbmRLZXlQYXRoKG9iamVjdFZhbHVlLCBpbmRleE1ldGFkYXRhLmtleVBhdGgpOworCisg
ICAgaWYgKCFpbmRleEtleSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFpbmRleE1ldGFk
YXRhLm11bHRpRW50cnkgfHwgaW5kZXhLZXktPnR5cGUoKSAhPSBJREJLZXk6OkFycmF5VHlwZSkg
eworICAgICAgICBpZiAoIWluZGV4S2V5LT5pc1ZhbGlkKCkpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgaW5kZXhLZXlzLT5hcHBlbmQoaW5kZXhLZXkpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIEFTU0VSVChpbmRleE1ldGFkYXRhLm11bHRpRW50cnkpOworICAgICAgICBBU1NFUlQo
aW5kZXhLZXktPnR5cGUoKSA9PSBJREJLZXk6OkFycmF5VHlwZSk7CisgICAgICAgIGluZGV4S2V5
ID0gSURCS2V5OjpjcmVhdGVNdWx0aUVudHJ5QXJyYXkoaW5kZXhLZXktPmFycmF5KCkpOworCisg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5kZXhLZXktPmFycmF5KCkuc2l6ZSgpOyAr
K2kpCisgICAgICAgICAgICBpbmRleEtleXMtPmFwcGVuZChpbmRleEtleS0+YXJyYXkoKVtpXSk7
CisgICAgfQorfQorCiBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjphZGQo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKICAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlOjphZGQiKTsKLSAgICByZXR1cm4g
cHV0KElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6QWRkT25seSwgY29udGV4dCwgdmFs
dWUsIGtleSwgZWMpOworICAgIHJldHVybiBwdXQoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJm
YWNlOjpBZGRPbmx5LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgY29udGV4dCwgdmFsdWUsIGtleSwg
ZWMpOwogfQogCiBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpwdXQoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBFeGNlcHRpb25Db2RlJiBlYykK
IHsKICAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlOjpwdXQiKTsKLSAgICByZXR1cm4gcHV0
KElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6QWRkT3JVcGRhdGUsIGNvbnRleHQsIHZh
bHVlLCBrZXksIGVjKTsKKyAgICByZXR1cm4gcHV0KElEQk9iamVjdFN0b3JlQmFja2VuZEludGVy
ZmFjZTo6QWRkT3JVcGRhdGUsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBjb250ZXh0LCB2YWx1ZSwg
a2V5LCBlYyk7CiB9CiAKLVBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1
dChJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vZGUgcHV0TW9kZSwgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IHBycFZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4gcHJwS2V5LCBFeGNlcHRpb25Db2RlJiBl
YykKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dChJREJPYmplY3RT
dG9yZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJBbnk+
IHNvdXJjZSwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4gcHJwS2V5LCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlOjpwdXQi
KTsKICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSA9IHBycFZhbHVlOwpA
QCAtMTQxLDcgKzE2Niw3IEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6
OnB1dChJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vCiAgICAgY29uc3QgYm9v
bCB1c2VzSW5MaW5lS2V5cyA9ICFrZXlQYXRoLmlzTnVsbCgpOwogICAgIGNvbnN0IGJvb2wgaGFz
S2V5R2VuZXJhdG9yID0gYXV0b0luY3JlbWVudCgpOwogCi0gICAgaWYgKHVzZXNJbkxpbmVLZXlz
ICYmIGtleSkgeworICAgIGlmIChwdXRNb2RlICE9IElEQk9iamVjdFN0b3JlQmFja2VuZEludGVy
ZmFjZTo6Q3Vyc29yVXBkYXRlICYmIHVzZXNJbkxpbmVLZXlzICYmIGtleSkgewogICAgICAgICBl
YyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgfQpAQCAtMTY3LDE1ICsxOTIsMjYgQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmpl
Y3RTdG9yZTo6cHV0KElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6UHV0TW8KICAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgICAgICBp
ZiAoa2V5UGF0aEtleSkKKyAgICAgICAgICAgIGtleSA9IGtleVBhdGhLZXk7CiAgICAgfQogICAg
IGlmIChrZXkgJiYgIWtleS0+aXNWYWxpZCgpKSB7CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VF
eGNlcHRpb246OkRBVEFfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBSZWZQ
dHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJB
bnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7Ci0gICAgLy8gRklYTUU6IFBh
c3MgdGhyb3VnaCBrZXlQYXRoS2V5IGFzIGtleSB0byBzaW1wbGlmeSBiYWNrIGVuZCBpbXBsZW1l
bnRhdGlvbi4KLSAgICBtX2JhY2tlbmQtPnB1dCh2YWx1ZS5yZWxlYXNlKCksIGtleS5yZWxlYXNl
KCksIHB1dE1vZGUsIHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOworICAg
IFZlY3RvcjxTdHJpbmc+IGluZGV4TmFtZXM7CisgICAgVmVjdG9yPEluZGV4S2V5cz4gaW5kZXhL
ZXlzOworICAgIGZvciAoSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6SW5kZXhNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbV9tZXRhZGF0YS5pbmRleGVzLmJlZ2luKCk7IGl0ICE9IG1fbWV0YWRhdGEu
aW5kZXhlcy5lbmQoKTsgKytpdCkgeworICAgICAgICBJbmRleEtleXMga2V5czsKKyAgICAgICAg
Z2VuZXJhdGVJbmRleEtleXNGb3JWYWx1ZShpdC0+c2Vjb25kLCB2YWx1ZSwgJmtleXMpOworICAg
ICAgICBpbmRleE5hbWVzLmFwcGVuZChpdC0+Zmlyc3QpOworICAgICAgICBpbmRleEtleXMuYXBw
ZW5kKGtleXMpOworICAgIH0KKyAgICBBU1NFUlQoaW5kZXhLZXlzLnNpemUoKSA9PSBpbmRleE5h
bWVzLnNpemUoKSk7CisKKyAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVl
c3Q6OmNyZWF0ZShjb250ZXh0LCBzb3VyY2UsIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOworICAgIG1f
YmFja2VuZC0+cHV0V2l0aEluZGV4S2V5cyh2YWx1ZS5yZWxlYXNlKCksIGtleS5yZWxlYXNlKCks
IHB1dE1vZGUsIHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgaW5kZXhOYW1lcywg
aW5kZXhLZXlzLCBlYyk7CiAgICAgaWYgKGVjKSB7CiAgICAgICAgIHJlcXVlc3QtPm1hcmtFYXJs
eURlYXRoKCk7CiAgICAgICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmgKaW5kZXggZWY3YzA2M2I4ZjgyMjY0MTdhN2Jm
ZjhmMmZlMTM2OTgyNDNiODUzNy4uNmZlZmM0ZTJiYWQwOTVhZTZkMTMzNGMzZWJiOTZmZTkwODli
ODgwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2Jq
ZWN0U3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmpl
Y3RTdG9yZS5oCkBAIC05NSw3ICs5NSw3IEBAIHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPElEQlJl
cXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleVJh
bmdlPiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gY291bnQo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5PiwgRXhjZXB0aW9uQ29k
ZSYpOwogCi0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBwdXQoSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW50ZXJmYWNlOjpQdXRNb2RlLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIEV4Y2VwdGlvbkNv
ZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IHB1dChJREJPYmplY3RTdG9yZUJhY2tl
bmRJbnRlcmZhY2U6OlB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQW55PiBzb3VyY2UsIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NS
ZWZQdHI8SURCS2V5PiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgbWFya0RlbGV0ZWQoKSB7
IG1fZGVsZXRlZCA9IHRydWU7IH0KICAgICB2b2lkIHRyYW5zYWN0aW9uRmluaXNoZWQoKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAppbmRleCBiOTYyZTk0ODdhMjE2ZmFjNTg5OGUwYTA3
MmViMDY1YjM2OGZiNTQ1Li43NDY5MzNlZjA0ZGU2NjQwMDQyM2JhZWM5OGNkODU1NmNkZmJhODgw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcApAQCAtMTIwLDQ4ICsxMjAsNiBAQCB2b2lk
IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmdldEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQYXNzUmVmUHRyPAogICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUod2lyZURhdGEpKTsKIH0KIAotc3RhdGljIFBhc3NS
ZWZQdHI8SURCS2V5PiBmZXRjaEtleUZyb21LZXlQYXRoKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSog
dmFsdWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgpCi17Ci0gICAgSURCX1RSQUNFKCJJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpmZXRjaEtleUZyb21LZXlQYXRoIik7Ci0gICAgQVNTRVJU
KCFrZXlQYXRoLmlzTnVsbCgpKTsKLQotICAgIFZlY3RvcjxSZWZQdHI8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiA+IHZhbHVlczsKLSAgICB2YWx1ZXMuYXBwZW5kKHZhbHVlKTsKLSAgICBWZWN0b3I8
UmVmUHRyPElEQktleT4gPiBrZXlzOwotICAgIElEQktleVBhdGhCYWNrZW5kSW1wbDo6Y3JlYXRl
SURCS2V5c0Zyb21TZXJpYWxpemVkVmFsdWVzQW5kS2V5UGF0aCh2YWx1ZXMsIGtleVBhdGgsIGtl
eXMpOwotICAgIGlmIChrZXlzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgQVNT
RVJUKGtleXMuc2l6ZSgpID09IDEpOwotICAgIHJldHVybiBrZXlzWzBdLnJlbGVhc2UoKTsKLX0K
LQotc3RhdGljIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBpbmplY3RLZXlJbnRv
S2V5UGF0aChQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4gdmFsdWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgpCi17Ci0gICAgSURCX1RS
QUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjppbmplY3RLZXlJbnRvS2V5UGF0aCIpOwot
ICAgIHJldHVybiBJREJLZXlQYXRoQmFja2VuZEltcGw6OmluamVjdElEQktleUludG9TZXJpYWxp
emVkVmFsdWUoa2V5LCB2YWx1ZSwga2V5UGF0aCk7Ci19Ci0KLS8vIEZJWE1FOiBSZW1vdmUgdGhp
cyBtZXRob2Qgd2hlbiBnZXQtc2lkZSBrZXkgaW5qZWN0aW9uIGlzIHRoZSBub3JtLgotdm9pZCBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IHBycFZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4gcHJwS2V5LCBQdXRNb2RlIHB1dE1v
ZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewot
ICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0Iik7Ci0gICAgSURC
X1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRXaXRoSW5kZXhLZXlzIik7Ci0K
LSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUgPSB0aGlz
OwotICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlID0gcHJwVmFsdWU7Ci0g
ICAgUmVmUHRyPElEQktleT4ga2V5ID0gcHJwS2V5OwotICAgIFJlZlB0cjxJREJDYWxsYmFja3M+
IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpmcm9tKHRy
YW5zYWN0aW9uUHRyKTsKLSAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSAhPSBJREJUcmFu
c2FjdGlvbjo6UkVBRF9PTkxZKTsKLQotICAgIC8vIE51bGwgcG9pbnRlcnMgaGVyZSBzaWduaWZ5
IHRoYXQgaW5kZXgga2V5cyBzaG91bGQgYmUgZ2VuZXJhdGVkIGFzIGEgcGFydCBvZiB0aGlzIHB1
dC4KLSAgICBPd25QdHI8VmVjdG9yPFN0cmluZz4gPiBudWxsSW5kZXhOYW1lczsKLSAgICBPd25Q
dHI8VmVjdG9yPEluZGV4S2V5cz4gPiBudWxsSW5kZXhLZXlzOwotICAgIGlmICghdHJhbnNhY3Rp
b24tPnNjaGVkdWxlVGFzaygKLSAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwsIG9iamVjdFN0b3JlLCB2YWx1ZSwga2V5
LCBwdXRNb2RlLCBjYWxsYmFja3MsIHRyYW5zYWN0aW9uLCBudWxsSW5kZXhOYW1lcy5yZWxlYXNl
KCksIG51bGxJbmRleEtleXMucmVsZWFzZSgpKSkpCi0gICAgICAgIGVjID0gSURCRGF0YWJhc2VF
eGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKLX0KLQogdm9pZCBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpwdXRXaXRoSW5kZXhLZXlzKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiBwcnBWYWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwgUHV0TW9kZSBw
dXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBjb25zdCBWZWN0b3I8U3RyaW5n
PiYgaW5kZXhOYW1lcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cywgRXhjZXB0
aW9uQ29kZSYgZWMpCiB7CiAgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
OjpwdXRXaXRoSW5kZXhLZXlzIik7CkBAIC0xNzYsNiArMTM0LDggQEAgdm9pZCBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpwdXRXaXRoSW5kZXhLZXlzKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHUKICAgICBPd25QdHI8VmVjdG9yPFN0cmluZz4gPiBuZXdJbmRleE5hbWVzID0gYWRv
cHRQdHIobmV3IFZlY3RvcjxTdHJpbmc+KGluZGV4TmFtZXMpKTsKICAgICBPd25QdHI8VmVjdG9y
PEluZGV4S2V5cz4gPiBuZXdJbmRleEtleXMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPEluZGV4S2V5
cz4oaW5kZXhLZXlzKSk7CiAKKyAgICBBU1NFUlQoYXV0b0luY3JlbWVudCgpIHx8IGtleSk7CisK
ICAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soCiAgICAgICAgICAgICBjcmVhdGVD
YWxsYmFja1Rhc2soJklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsLCBvYmpl
Y3RTdG9yZSwgdmFsdWUsIGtleSwgcHV0TW9kZSwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbiwgbmV3
SW5kZXhOYW1lcy5yZWxlYXNlKCksIG5ld0luZGV4S2V5cy5yZWxlYXNlKCkpKSkKICAgICAgICAg
ZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOwpAQCAt
MTk0LDE4ICsxNTQsMTkgQEAgcHVibGljOgogICAgICAgICAsIG1faW5kZXhLZXlzKGluZGV4S2V5
cykKICAgICB7IH0KIAotICAgIGJvb2wgZ2VuZXJhdGVJbmRleEtleXNGb3JWYWx1ZShTZXJpYWxp
emVkU2NyaXB0VmFsdWUqIG9iamVjdFZhbHVlKQorICAgIC8vIEZJWE1FOiByZW1vdmUgdGhpcyBv
bmNlIGNyZWF0ZUluZGV4KCkgZ2VuZXJhdGVzIHRoZXNlIGluIHRoZSByZW5kZXJlci4KKyAgICB2
b2lkIGdlbmVyYXRlSW5kZXhLZXlzRm9yVmFsdWUoU2VyaWFsaXplZFNjcmlwdFZhbHVlKiBvYmpl
Y3RWYWx1ZSkKICAgICB7CiAgICAgICAgIG1faW5kZXhLZXlzLmNsZWFyKCk7CiAKLSAgICAgICAg
UmVmUHRyPElEQktleT4gaW5kZXhLZXkgPSBmZXRjaEtleUZyb21LZXlQYXRoKG9iamVjdFZhbHVl
LCBtX2luZGV4TWV0YWRhdGEua2V5UGF0aCk7CisgICAgICAgIFJlZlB0cjxJREJLZXk+IGluZGV4
S2V5ID0gZmV0Y2hLZXlGcm9tS2V5UGF0aChvYmplY3RWYWx1ZSk7CiAKICAgICAgICAgaWYgKCFp
bmRleEtleSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgcmV0dXJuOwog
CiAgICAgICAgIGlmICghbV9pbmRleE1ldGFkYXRhLm11bHRpRW50cnkgfHwgaW5kZXhLZXktPnR5
cGUoKSAhPSBJREJLZXk6OkFycmF5VHlwZSkgewogICAgICAgICAgICAgaWYgKCFpbmRleEtleS0+
aXNWYWxpZCgpKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAg
IHJldHVybjsKIAogICAgICAgICAgICAgbV9pbmRleEtleXMuYXBwZW5kKGluZGV4S2V5KTsKICAg
ICAgICAgfSBlbHNlIHsKQEAgLTIxMywxMSArMTc0LDkgQEAgcHVibGljOgogICAgICAgICAgICAg
QVNTRVJUKGluZGV4S2V5LT50eXBlKCkgPT0gSURCS2V5OjpBcnJheVR5cGUpOwogICAgICAgICAg
ICAgaW5kZXhLZXkgPSBJREJLZXk6OmNyZWF0ZU11bHRpRW50cnlBcnJheShpbmRleEtleS0+YXJy
YXkoKSk7CiAKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5kZXhLZXktPmFy
cmF5KCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
aW5kZXhLZXktPmFycmF5KCkuc2l6ZSgpOyArK2kpCiAgICAgICAgICAgICAgICAgbV9pbmRleEtl
eXMuYXBwZW5kKGluZGV4S2V5LT5hcnJheSgpW2ldKTsKLSAgICAgICAgICAgIH0KICAgICAgICAg
fQotICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICBib29sIHZlcmlmeUluZGV4S2V5
cyhJREJCYWNraW5nU3RvcmUmIGJhY2tpbmdTdG9yZSwKQEAgLTI2Niw2ICsyMjUsMjEgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQorCisgICAgUGFzc1JlZlB0cjxJREJLZXk+IGZldGNoS2V5RnJvbUtleVBhdGgoU2VyaWFs
aXplZFNjcmlwdFZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIElEQl9UUkFDRSgiSW5kZXhX
cml0ZXI6OmZldGNoS2V5RnJvbUtleVBhdGgiKTsKKworICAgICAgICBWZWN0b3I8UmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4gPiB2YWx1ZXM7CisgICAgICAgIHZhbHVlcy5hcHBlbmQodmFs
dWUpOworICAgICAgICBWZWN0b3I8UmVmUHRyPElEQktleT4gPiBrZXlzOworICAgICAgICBJREJL
ZXlQYXRoQmFja2VuZEltcGw6OmNyZWF0ZUlEQktleXNGcm9tU2VyaWFsaXplZFZhbHVlc0FuZEtl
eVBhdGgodmFsdWVzLCBtX2luZGV4TWV0YWRhdGEua2V5UGF0aCwga2V5cyk7CisgICAgICAgIGlm
IChrZXlzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBBU1NFUlQo
a2V5cy5zaXplKCkgPT0gMSk7CisgICAgICAgIHJldHVybiBrZXlzWzBdLnJlbGVhc2UoKTsKKyAg
ICB9CisKICAgICBjb25zdCBJREJJbmRleE1ldGFkYXRhIG1faW5kZXhNZXRhZGF0YTsKICAgICBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5cyBtX2luZGV4S2V5czsKIH07
CkBAIC0yNzksNDAgKzI1MywxOCBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1
dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPAogICAgIFJlZlB0
cjxJREJLZXk+IGtleSA9IHBycEtleTsKICAgICBPd25QdHI8VmVjdG9yPFN0cmluZz4gPiBpbmRl
eE5hbWVzID0gcG9wSW5kZXhOYW1lczsKICAgICBPd25QdHI8VmVjdG9yPEluZGV4S2V5cz4gPiBp
bmRleEtleXMgPSBwb3BJbmRleEtleXM7Ci0gICAgQVNTRVJUKCghaW5kZXhOYW1lcyAmJiAhaW5k
ZXhLZXlzKSB8fCBpbmRleE5hbWVzLT5zaXplKCkgPT0gaW5kZXhLZXlzLT5zaXplKCkpOworICAg
IEFTU0VSVChpbmRleE5hbWVzICYmIGluZGV4S2V5cyAmJiBpbmRleE5hbWVzLT5zaXplKCkgPT0g
aW5kZXhLZXlzLT5zaXplKCkpOwogICAgIGNvbnN0IGJvb2wgYXV0b0luY3JlbWVudCA9IG9iamVj
dFN0b3JlLT5hdXRvSW5jcmVtZW50KCk7CiAgICAgYm9vbCBrZXlXYXNHZW5lcmF0ZWQgPSBmYWxz
ZTsKIAotICAgIGlmIChwdXRNb2RlICE9IEN1cnNvclVwZGF0ZSkgewotICAgICAgICBjb25zdCBi
b29sIGhhc0tleVBhdGggPSAhb2JqZWN0U3RvcmUtPm1fa2V5UGF0aC5pc051bGwoKTsKLSAgICAg
ICAgaWYgKGhhc0tleVBhdGgpIHsKLSAgICAgICAgICAgIEFTU0VSVCgha2V5KTsKLSAgICAgICAg
ICAgIFJlZlB0cjxJREJLZXk+IGtleVBhdGhLZXkgPSBmZXRjaEtleUZyb21LZXlQYXRoKHZhbHVl
LmdldCgpLCBvYmplY3RTdG9yZS0+bV9rZXlQYXRoKTsKLSAgICAgICAgICAgIGlmIChrZXlQYXRo
S2V5KQotICAgICAgICAgICAgICAgIGtleSA9IGtleVBhdGhLZXk7Ci0gICAgICAgIH0KLSAgICAg
ICAgaWYgKGF1dG9JbmNyZW1lbnQpIHsKLSAgICAgICAgICAgIGlmICgha2V5KSB7Ci0gICAgICAg
ICAgICAgICAgUmVmUHRyPElEQktleT4gYXV0b0luY0tleSA9IG9iamVjdFN0b3JlLT5nZW5lcmF0
ZUtleSgpOwotICAgICAgICAgICAgICAgIGtleVdhc0dlbmVyYXRlZCA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgaWYgKCFhdXRvSW5jS2V5LT5pc1ZhbGlkKCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6REFUQV9FUlIsICJNYXhpbXVtIGtleSBnZW5lcmF0b3IgdmFsdWUgcmVhY2hl
ZC4iKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIHdoZW4gZ2V0LXNpZGUga2V5IGlu
amVjdGlvbiBpcyB0aGUgbm9ybS4KLSAgICAgICAgICAgICAgICBpZiAoaGFzS2V5UGF0aCkgewot
ICAgICAgICAgICAgICAgICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZUFm
dGVySW5qZWN0aW9uID0gaW5qZWN0S2V5SW50b0tleVBhdGgoYXV0b0luY0tleSwgdmFsdWUsIG9i
amVjdFN0b3JlLT5tX2tleVBhdGgpOwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQodmFsdWVB
ZnRlckluamVjdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghdmFsdWVBZnRlckluamVj
dGlvbikgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2tzIGluIHB1dCgpIGVuc3Vy
ZSB0aGlzIHNob3VsZCBvbmx5IGhhcHBlbiBpZiBJL08gZXJyb3Igb2NjdXJzLgotICAgICAgICAg
ICAgICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0
ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJJbnRlcm5hbCBlcnJvciBpbnNl
cnRpbmcgZ2VuZXJhdGVkIGtleSBpbnRvIHRoZSBvYmplY3QuIikpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIHZhbHVlID0gdmFsdWVBZnRlckluamVjdGlvbjsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAga2V5ID0gYXV0b0luY0tleTsKLSAgICAgICAgICAgIH0KKyAgICBpZiAocHV0
TW9kZSAhPSBDdXJzb3JVcGRhdGUgJiYgYXV0b0luY3JlbWVudCAmJiAha2V5KSB7CisgICAgICAg
IFJlZlB0cjxJREJLZXk+IGF1dG9JbmNLZXkgPSBvYmplY3RTdG9yZS0+Z2VuZXJhdGVLZXkoKTsK
KyAgICAgICAga2V5V2FzR2VuZXJhdGVkID0gdHJ1ZTsKKyAgICAgICAgaWYgKCFhdXRvSW5jS2V5
LT5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFz
ZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSLCAiTWF4aW11bSBr
ZXkgZ2VuZXJhdG9yIHZhbHVlIHJlYWNoZWQuIikpOworICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CisgICAgICAgIGtleSA9IGF1dG9JbmNLZXk7CiAgICAgfQogCiAgICAgQVNTRVJUKGtl
eSAmJiBrZXktPmlzVmFsaWQoKSk7CkBAIC0zMjUsMTEgKzI3NywxNyBAQCB2b2lkIElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQ
YXNzUmVmUHRyPAogCiAgICAgVmVjdG9yPE93blB0cjxJbmRleFdyaXRlcj4gPiBpbmRleFdyaXRl
cnM7CiAgICAgSGFzaE1hcDxTdHJpbmcsIEluZGV4S2V5cz4gaW5kZXhLZXlNYXA7Ci0gICAgLy8g
RklYTUU6IFR1cm4gdGhpcyBpbnRvIGFuIEFTU0VSVChpbmRleEtleXMpIHdoZW4gZ2V0LXNpZGUg
a2V5IGluamVjdGlvbiBpcyB0aGUgbm9ybS4KLSAgICBib29sIGhhdmVJbmRleEtleXMgPSBpbmRl
eEtleXMgJiYgIWluZGV4S2V5cy0+aXNFbXB0eSgpOwotICAgIGlmIChoYXZlSW5kZXhLZXlzKSB7
Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5kZXhOYW1lcy0+c2l6ZSgpOyArK2kp
Ci0gICAgICAgICAgICBpbmRleEtleU1hcC5hZGQoaW5kZXhOYW1lcy0+YXQoaSksIGluZGV4S2V5
cy0+YXQoaSkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5kZXhOYW1lcy0+c2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgSW5kZXhLZXlzIGtleXMgPSBpbmRleEtleXMtPmF0KGkpOworCisg
ICAgICAgIC8vIElmIHRoZSBvYmplY3RTdG9yZSBpcyB1c2luZyBhdXRvSW5jcmVtZW50LCB0aGVu
IGFueSBpbmRleGVzIHdpdGggYW4gaWRlbnRpY2FsIGtleVBhdGggbmVlZCB0byBhbHNvIHVzZSB0
aGUgcHJpbWFyeSAoZ2VuZXJhdGVkKSBrZXkgYXMgYSBrZXkuCisgICAgICAgIGlmIChrZXlXYXNH
ZW5lcmF0ZWQpIHsKKyAgICAgICAgICAgIGNvbnN0IElEQktleVBhdGgmIGluZGV4S2V5UGF0aCA9
IG9iamVjdFN0b3JlLT5tX2luZGV4ZXMuZ2V0KGluZGV4TmFtZXMtPmF0KGkpKS0+a2V5UGF0aCgp
OworICAgICAgICAgICAgaWYgKGluZGV4S2V5UGF0aCA9PSBvYmplY3RTdG9yZS0+a2V5UGF0aCgp
KQorICAgICAgICAgICAgICAgIGtleXMuYXBwZW5kKGtleSk7CisgICAgICAgIH0KKworICAgICAg
ICBpbmRleEtleU1hcC5hZGQoaW5kZXhOYW1lcy0+YXQoaSksIGtleXMpOwogICAgIH0KIAogICAg
IGZvciAoSW5kZXhNYXA6Oml0ZXJhdG9yIGl0ID0gb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5iZWdp
bigpOyBpdCAhPSBvYmplY3RTdG9yZS0+bV9pbmRleGVzLmVuZCgpOyArK2l0KSB7CkBAIC0zMzks
MTIgKzI5Nyw4IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8CiAgICAgICAgICAgICBjb250aW51
ZTsgLy8gVGhlIGluZGV4IG9iamVjdCBoYXMgYmVlbiBjcmVhdGVkLCBidXQgZG9lcyBub3QgZXhp
c3QgaW4gdGhlIGRhdGFiYXNlIHlldC4KIAogICAgICAgICBPd25QdHI8SW5kZXhXcml0ZXI+IGlu
ZGV4V3JpdGVyOwotICAgICAgICBpZiAoaGF2ZUluZGV4S2V5cykKLSAgICAgICAgICAgIGluZGV4
V3JpdGVyID0gYWRvcHRQdHIobmV3IEluZGV4V3JpdGVyKGluZGV4LT5tZXRhZGF0YSgpLCBpbmRl
eEtleU1hcC5nZXQoaXQtPmZpcnN0KSkpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGlu
ZGV4V3JpdGVyID0gYWRvcHRQdHIobmV3IEluZGV4V3JpdGVyKGluZGV4LT5tZXRhZGF0YSgpKSk7
Ci0gICAgICAgICAgICBpbmRleFdyaXRlci0+Z2VuZXJhdGVJbmRleEtleXNGb3JWYWx1ZSh2YWx1
ZS5nZXQoKSk7Ci0gICAgICAgIH0KKyAgICAgICAgaW5kZXhXcml0ZXIgPSBhZG9wdFB0cihuZXcg
SW5kZXhXcml0ZXIoaW5kZXgtPm1ldGFkYXRhKCksIGluZGV4S2V5TWFwLmdldChpdC0+Zmlyc3Qp
KSk7CisKICAgICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKICAgICAgICAgaWYgKCFpbmRleFdy
aXRlci0+dmVyaWZ5SW5kZXhLZXlzKCpvYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RTdG9yZS0+ZGF0YWJh
c2VJZCgpLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oCmluZGV4IDY0N2JjMjk3ODQ5ZDY0ZjkxNzU5
Y2Y4NWMzYjE0NGExZTFjNjRjNjIuLjViMWI1NGZjMmRiODVmZDQ5M2FlY2Q3ZDY3YmM1ZGJmOTVh
NTcwNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9i
amVjdFN0b3JlQmFja2VuZEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgKQEAgLTY2LDcgKzY2LDYgQEAgcHVibGlj
OgogCiAgICAgLy8gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlCiAgICAgdmlydHVhbCB2
b2lkIGdldChQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAg
dmlydHVhbCB2b2lkIHB1dChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NS
ZWZQdHI8SURCS2V5PiwgUHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2
b2lkIHB1dFdpdGhJbmRleEtleXMoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQ
YXNzUmVmUHRyPElEQktleT4sIFB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25z
dCBWZWN0b3I8SW5kZXhLZXlzPiYsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQg
ZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYp
OwogICAgIHZpcnR1YWwgdm9pZCBjbGVhcihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZElu
dGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW50ZXJmYWNlLmgKaW5kZXggMzdkM2VlMGY5NDMwZGM1MDdiMDk0ZTM0MGY4OWMz
OWU0YTBkNmQzNC4uZjJmZDA4OGMxYzQzMTRkOGJkNGEzZjM2MzUyYjkzOWIzNDk1ZGZlNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW50ZXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmgKQEAgLTU3LDcgKzU3LDYgQEAgcHVibGlj
OgogICAgIH07CiAgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPElEQktleT4gPiBJbmRleEtleXM7
CiAKLSAgICB2aXJ0dWFsIHZvaWQgcHV0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiwgUGFzc1JlZlB0cjxJREJLZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4s
IElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CiAg
ICAgdmlydHVhbCB2b2lkIHB1dFdpdGhJbmRleEtleXMoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIFB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgY29uc3QgVmVjdG9yPFN0
cmluZz4mLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYsIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CiAg
ICAgdmlydHVhbCB2b2lkIGRlbGV0ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSos
IEV4Y2VwdGlvbkNvZGUmKSA9IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCUmVxdWVzdC5jcHAKaW5kZXggYTFlYWYyOTMwYzFhMWViOGMyN2JjZWU4ZTUyMjA5
ZTgyNjk4NDM0ZS4uZDlmNDIyNTNlOGZjZDBmYTNkYjA3ZWY1ODQ4NDBhZWQyYWI3YjAzZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAKQEAg
LTMzOSwyNCArMzM5LDQyIEBAIHZvaWQgSURCUmVxdWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkU2NyaXB0VmFsCiAgICAgZW5xdWV1ZUV2
ZW50KGNyZWF0ZVN1Y2Nlc3NFdmVudCgpKTsKIH0KIAorI2lmbmRlZiBOREVCVUcKK3N0YXRpYyBQ
YXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBlZmZlY3RpdmVPYmplY3RTdG9yZShQYXNzUmVmUHRy
PElEQkFueT4gc291cmNlKQoreworICAgIGlmIChzb3VyY2UtPnR5cGUoKSA9PSBJREJBbnk6OklE
Qk9iamVjdFN0b3JlVHlwZSkKKyAgICAgICAgcmV0dXJuIHNvdXJjZS0+aWRiT2JqZWN0U3RvcmUo
KTsKKyAgICBpZiAoc291cmNlLT50eXBlKCkgPT0gSURCQW55OjpJREJJbmRleFR5cGUpCisgICAg
ICAgIHJldHVybiBzb3VyY2UtPmlkYkluZGV4KCktPm9iamVjdFN0b3JlKCk7CisKKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZgogCiB2b2lkIElEQlJl
cXVlc3Q6Om9uU3VjY2VzcyhQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwU2Vy
aWFsaXplZFNjcmlwdFZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4gcHJwUHJpbWFyeUtleSwgY29u
c3QgSURCS2V5UGF0aCYga2V5UGF0aCkKIHsKLSAgICBMT0dfRVJST1IoIkNIRUNLSU5HOiBvblN1
Y2Nlc3ModmFsdWUsIGtleSwga2V5cGF0aCkiKTsKLSAgICBBU1NFUlQobV9yZWFkeVN0YXRlID09
IFBFTkRJTkcgfHwgbV9yZWFkeVN0YXRlID09IERPTkUpOwogICAgIGlmIChtX3JlcXVlc3RBYm9y
dGVkKQogICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKG1fcmVhZHlTdGF0ZSA9PSBQRU5ESU5H
KTsKLSAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkU2NyaXB0VmFs
dWUgPSBwcnBTZXJpYWxpemVkU2NyaXB0VmFsdWU7CiAjaWZuZGVmIE5ERUJVRwotICAgIC8vIEZJ
WE1FOiBBc3NlcnQgdW50aWwgd2UgY2FuIGFjdHVhbGx5IGluamVjdCB0aGUgcmlnaHQgdmFsdWUu
CisgICAgQVNTRVJUKGtleVBhdGggPT0gZWZmZWN0aXZlT2JqZWN0U3RvcmUobV9zb3VyY2UpLT5r
ZXlQYXRoKCkpOworI2VuZGlmCisgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFs
dWUgPSBwcnBTZXJpYWxpemVkU2NyaXB0VmFsdWU7CisKICAgICBSZWZQdHI8SURCS2V5PiBwcmlt
YXJ5S2V5ID0gcHJwUHJpbWFyeUtleTsKLSAgICBSZWZQdHI8SURCS2V5PiBleHBlY3RlZEtleSA9
Ci0gICAgICAgICAgICAgIGNyZWF0ZUlEQktleUZyb21TZXJpYWxpemVkVmFsdWVBbmRLZXlQYXRo
KHNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSwga2V5UGF0aCk7Ci0gICAgQVNTRVJUKHByaW1hcnlLZXkp
OwotICAgIEFTU0VSVChleHBlY3RlZEtleS0+aXNFcXVhbChwcmltYXJ5S2V5LmdldCgpKSk7Cisj
aWZuZGVmIE5ERUJVRworICAgIFJlZlB0cjxJREJLZXk+IGV4cGVjdGVkS2V5ID0gY3JlYXRlSURC
S2V5RnJvbVNlcmlhbGl6ZWRWYWx1ZUFuZEtleVBhdGgodmFsdWUsIGtleVBhdGgpOworICAgIEFT
U0VSVCghZXhwZWN0ZWRLZXkgfHwgZXhwZWN0ZWRLZXktPmlzRXF1YWwocHJpbWFyeUtleS5nZXQo
KSkpOwogI2VuZGlmCi0gICAgb25TdWNjZXNzKHNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5yZWxlYXNl
KCkpOworICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlQWZ0ZXJJbmplY3Rp
b24gPSBpbmplY3RJREJLZXlJbnRvU2VyaWFsaXplZFZhbHVlKHByaW1hcnlLZXksIHZhbHVlLCBr
ZXlQYXRoKTsKKyAgICBBU1NFUlQodmFsdWVBZnRlckluamVjdGlvbik7CisgICAgaWYgKCF2YWx1
ZUFmdGVySW5qZWN0aW9uKSB7CisgICAgICAgIC8vIENoZWNrcyBpbiBwdXQoKSBlbnN1cmUgdGhp
cyBzaG91bGQgb25seSBoYXBwZW4gaWYgSS9PIGVycm9yIG9jY3Vycy4KKyAgICAgICAgb25FcnJv
cihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05f
RVJSLCAiSW50ZXJuYWwgZXJyb3IgaW5zZXJ0aW5nIGdlbmVyYXRlZCBrZXkgaW50byB0aGUgb2Jq
ZWN0LiIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICB2YWx1ZSA9IHZhbHVlQWZ0ZXJJ
bmplY3Rpb247CisgICAgb25TdWNjZXNzKHZhbHVlLnJlbGVhc2UoKSk7CiB9CiAKIHZvaWQgSURC
UmVxdWVzdDo6b25TdWNjZXNzV2l0aENvbnRpbnVhdGlvbigpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwCmluZGV4IDY2MWZmMDE1OTVk
ZjA1NTAwZDdmNmNhYzMxMGU4YmM3MTM0NGIzZTguLjIyZjgzMTViMjA0NmM2NTQ3ODE1Yjk0NTYw
YjQ4ZDg4NTg2M2UxZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0lE
QkJpbmRpbmdVdGlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0lE
QkJpbmRpbmdVdGlsaXRpZXMuY3BwCkBAIC0xMDEsNyArMTAxLDYgQEAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4KIGJvb2wgc2V0VmFsdWUodjg6OkhhbmRsZTx2ODo6VmFsdWU+JiB2OE9iamVjdCwgVCBp
bmRleE9yTmFtZSwgY29uc3Qgdjg6OkhhbmRsZTx2ODo6VmFsdWU+JiB2OFZhbHVlKQogewogICAg
IHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBvYmplY3QgPSB2OE9iamVjdC0+VG9PYmplY3QoKTsKLSAg
ICBBU1NFUlQoIW9iamVjdC0+SGFzKGluZGV4T3JOYW1lKSk7CiAgICAgcmV0dXJuIG9iamVjdC0+
U2V0KGluZGV4T3JOYW1lLCB2OFZhbHVlKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvSURCQ3Vyc29yQmFja2VuZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL0lEQkN1cnNvckJhY2tlbmRQcm94eS5jcHAKaW5kZXggY2EzOTBiYTkwNzQy
N2UwOGZkNDc4YmI5NWNmOWUyYzQxNmNkMmZmYi4uMjc3YTY2NWNmMDAwZWU5M2UwOGM0ZmExZGM0
NmM4NTFiOTgxOWYxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURC
Q3Vyc29yQmFja2VuZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9J
REJDdXJzb3JCYWNrZW5kUHJveHkuY3BwCkBAIC02OSwxMSArNjksNiBAQCBQYXNzUmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4gSURCQ3Vyc29yQmFja2VuZFByb3h5Ojp2YWx1ZSgpIGNvbnN0
CiAgICAgcmV0dXJuIG1faWRiQ3Vyc29yLT52YWx1ZSgpOwogfQogCi12b2lkIElEQkN1cnNvckJh
Y2tlbmRQcm94eTo6dXBkYXRlKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1
ZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgRXhjZXB0aW9uQ29kZSYgZWMp
Ci17Ci0gICAgbV9pZGJDdXJzb3ItPnVwZGF0ZSh2YWx1ZSwgbmV3IFdlYklEQkNhbGxiYWNrc0lt
cGwoY2FsbGJhY2tzKSwgZWMpOwotfQotCiB2b2lkIElEQkN1cnNvckJhY2tlbmRQcm94eTo6YWR2
YW5jZSh1bnNpZ25lZCBsb25nIGNvdW50LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJh
Y2tzLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBtX2lkYkN1cnNvci0+YWR2YW5jZShjb3Vu
dCwgbmV3IFdlYklEQkNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzKSwgZWMpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCQ3Vyc29yQmFja2VuZFByb3h5LmggYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJDdXJzb3JCYWNrZW5kUHJveHkuaAppbmRleCA5ZTRi
NTcwMDgxMjZmMzk2Y2QxNGY2MzNjNmEzYTQxZDZiNTkwMjg1Li5kNzQyZjY4ZTVmZTU2ZjM3ZGFh
YzE3NTM3MzZmY2U5N2YwYTI2NGFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9JREJDdXJzb3JCYWNrZW5kUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9JREJDdXJzb3JCYWNrZW5kUHJveHkuaApAQCAtNDUsNyArNDUsNiBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQktleT4ga2V5KCkgY29uc3Q7CiAgICAg
dmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQktleT4gcHJpbWFyeUtleSgpIGNvbnN0Owog
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZh
bHVlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZShQYXNzUmVmUHRyPFdlYkNvcmU6
OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJhY2tz
PiwgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBhZHZhbmNlKHVu
c2lnbmVkIGxvbmcsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJhY2tzPiwgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBjb250aW51ZUZ1bmN0aW9uKFBhc3NS
ZWZQdHI8V2ViQ29yZTo6SURCS2V5PiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+
LCBXZWJDb3JlOjpFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUZ1bmN0
aW9uKFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJhY2tzPiwgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCT2JqZWN0
U3RvcmVCYWNrZW5kUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kUHJveHkuY3BwCmluZGV4IDgyNjQwNzMzMGEwMjdhMTZkYjdmYjFjM2Rj
ZDBlZmRjMWY0YjM1MTcuLjRkMWM5MWQwNzVmZjYwN2E3MzdiMjIwMTA3ZmRiN2IwYmYyNGI3NTkg
MTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQk9iamVjdFN0b3JlQmFj
a2VuZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJPYmplY3RT
dG9yZUJhY2tlbmRQcm94eS5jcHAKQEAgLTY3LDE0ICs2Nyw2IEBAIHZvaWQgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kUHJveHk6OmdldChQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFz
c1JlZlB0CiAgICAgbV93ZWJJREJPYmplY3RTdG9yZS0+Z2V0KGtleVJhbmdlLCBuZXcgV2ViSURC
Q2FsbGJhY2tzSW1wbChjYWxsYmFja3MpLCAqdHJhbnNhY3Rpb25Qcm94eS0+Z2V0V2ViSURCVHJh
bnNhY3Rpb24oKSwgZWMpOwogfQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5Ojpw
dXQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBQYXNzUmVmUHRyPElE
QktleT4ga2V5LCBQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxs
YmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIEV4Y2Vw
dGlvbkNvZGUmIGVjKQotewotICAgIC8vIFRoZSB0cmFuc2FjdGlvbiBwb2ludGVyIGlzIGd1YXJh
bnRlZWQgdG8gYmUgYSBwb2ludGVyIHRvIGEgcHJveHkgb2JqZWN0IGFzLCBpbiB0aGUgcmVuZGVy
ZXIsCi0gICAgLy8gYWxsIGltcGxlbWVudGF0aW9ucyBvZiBJREIgaW50ZXJmYWNlcyBhcmUgcHJv
eHkgb2JqZWN0cy4KLSAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eSogdHJhbnNhY3Rpb25Q
cm94eSA9IHN0YXRpY19jYXN0PElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5Kj4odHJhbnNhY3Rp
b24pOwotICAgIG1fd2ViSURCT2JqZWN0U3RvcmUtPnB1dCh2YWx1ZSwga2V5LCBzdGF0aWNfY2Fz
dDxXZWJJREJPYmplY3RTdG9yZTo6UHV0TW9kZT4ocHV0TW9kZSksIG5ldyBXZWJJREJDYWxsYmFj
a3NJbXBsKGNhbGxiYWNrcyksICp0cmFuc2FjdGlvblByb3h5LT5nZXRXZWJJREJUcmFuc2FjdGlv
bigpLCBlYyk7Ci19Ci0KIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6OnB1dFdpdGhJ
bmRleEtleXMoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBQYXNzUmVm
UHRyPElEQktleT4ga2V5LCBQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24s
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBpbmRleE5hbWVzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlz
PiYgaW5kZXhLZXlzLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICAvLyBUaGUgdHJhbnNhY3Rp
b24gcG9pbnRlciBpcyBndWFyYW50ZWVkIHRvIGJlIGEgcG9pbnRlciB0byBhIHByb3h5IG9iamVj
dCBhcywgaW4gdGhlIHJlbmRlcmVyLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL0lEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5LmgKaW5kZXggYzY0MDI4Y2ZmYjYwZjJk
OGEyNDRhNzE1YzczYzBiNzY1YWVlZjQ0Yy4uMDIzNTA3N2ZhOTczZmU4ZjE2MTkyZTQxMzZmYTIw
MDk5N2UyYTYzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9J
REJPYmplY3RTdG9yZUJhY2tlbmRQcm94eS5oCkBAIC00NCw3ICs0NCw2IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIH5JREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eSgpOwogCiAgICAgdmlydHVhbCB2
b2lkIGdldChQYXNzUmVmUHRyPFdlYkNvcmU6OklEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxXZWJD
b3JlOjpJREJDYWxsYmFja3M+LCBXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2UqLCBXZWJDb3JlOjpFeGNlcHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCB2b2lkIHB1dChQYXNz
UmVmUHRyPFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NSZWZQdHI8V2ViQ29y
ZTo6SURCS2V5PiwgUHV0TW9kZSwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+LCBX
ZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIHB1dFdpdGhJbmRleEtleXMoUGFzc1JlZlB0cjxX
ZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQktl
eT4sIFB1dE1vZGUsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJhY2tzPiwgV2ViQ29yZTo6
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgY29uc3QgV1RGOjpWZWN0b3I8V1RGOjpT
dHJpbmc+JiwgY29uc3QgV1RGOjpWZWN0b3I8SW5kZXhLZXlzPiYsIFdlYkNvcmU6OkV4Y2VwdGlv
bkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxXZWJD
b3JlOjpJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJhY2tzPiwgV2Vi
Q29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBjbGVhcihQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkNh
bGxiYWNrcz4sIFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIFdlYkNv
cmU6OkV4Y2VwdGlvbkNvZGUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYklEQkN1cnNvckltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
SURCQ3Vyc29ySW1wbC5jcHAKaW5kZXggZTljMGUwNGFmMDM3MzI0YzQxNjRjM2M1YTEyY2QxYjdh
MWZiMWNlOC4uMGQ2NWE4N2JlZTBhYzRmNmUyMjg2MWRhZjE3MThhZWFjZjhkYjNhYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCQ3Vyc29ySW1wbC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCQ3Vyc29ySW1wbC5jcHAKQEAgLTYy
LDExICs2Miw2IEBAIFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSBXZWJJREJDdXJzb3JJbXBsOjp2
YWx1ZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1faWRiQ3Vyc29yQmFja2VuZC0+dmFsdWUoKTsKIH0K
IAotdm9pZCBXZWJJREJDdXJzb3JJbXBsOjp1cGRhdGUoY29uc3QgV2ViU2VyaWFsaXplZFNjcmlw
dFZhbHVlJiB2YWx1ZSwgV2ViSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsIFdlYkV4Y2VwdGlvbkNv
ZGUmIGVjKQotewotICAgIG1faWRiQ3Vyc29yQmFja2VuZC0+dXBkYXRlKHZhbHVlLCBJREJDYWxs
YmFja3NQcm94eTo6Y3JlYXRlKGFkb3B0UHRyKGNhbGxiYWNrcykpLCBlYyk7Ci19Ci0KIHZvaWQg
V2ViSURCQ3Vyc29ySW1wbDo6YWR2YW5jZSh1bnNpZ25lZCBsb25nIGNvdW50LCBXZWJJREJDYWxs
YmFja3MqIGNhbGxiYWNrcywgV2ViRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgbV9pZGJDdXJz
b3JCYWNrZW5kLT5hZHZhbmNlKGNvdW50LCBJREJDYWxsYmFja3NQcm94eTo6Y3JlYXRlKGFkb3B0
UHRyKGNhbGxiYWNrcykpLCBlYyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJJREJDdXJzb3JJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJ
REJDdXJzb3JJbXBsLmgKaW5kZXggZjBkMzg3YjYyMTk3Njg3YTgxNmFkMWRjNzU1NWNkYzI3ZWZi
YWZjNS4uNDVhMjI5YjM4MzAxOTI2OTFmYTc4ZDBkYTg2YmUzOTc2ODcxYmI3YSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCQ3Vyc29ySW1wbC5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkN1cnNvckltcGwuaApAQCAtNDcsNyArNDcs
NiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBXZWJJREJLZXkga2V5KCkgY29uc3Q7CiAgICAgdmly
dHVhbCBXZWJJREJLZXkgcHJpbWFyeUtleSgpIGNvbnN0OwogICAgIHZpcnR1YWwgV2ViU2VyaWFs
aXplZFNjcmlwdFZhbHVlIHZhbHVlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZShj
b25zdCBXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUmLCBXZWJJREJDYWxsYmFja3MqLCBXZWJFeGNl
cHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIGFkdmFuY2UodW5zaWduZWQgbG9uZywgV2Vi
SURCQ2FsbGJhY2tzKiwgV2ViRXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBjb250
aW51ZUZ1bmN0aW9uKGNvbnN0IFdlYklEQktleSYsIFdlYklEQkNhbGxiYWNrcyosIFdlYkV4Y2Vw
dGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRnVuY3Rpb24oV2ViSURCQ2FsbGJh
Y2tzKiwgV2ViRXhjZXB0aW9uQ29kZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViSURCT2JqZWN0U3RvcmVJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYklEQk9iamVjdFN0b3JlSW1wbC5jcHAKaW5kZXggNTNkMTQwZjQyYmU5OGIzYWJl
NzNhNzRiYjMzNWRmM2NlYjY1ZDI5Yy4uMjJhMDY2ODA3NzQ0NGRhYzMxZGVlN2IwYjU5NDEyNzJk
ZWRmM2RiZiAxMDA3NTUKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCT2Jq
ZWN0U3RvcmVJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJP
YmplY3RTdG9yZUltcGwuY3BwCkBAIC01OCwxMSArNTgsNiBAQCB2b2lkIFdlYklEQk9iamVjdFN0
b3JlSW1wbDo6Z2V0KGNvbnN0IFdlYklEQktleVJhbmdlJiBrZXlSYW5nZSwgV2ViSURCQ2FsbGJh
Y2tzKgogICAgIG1fb2JqZWN0U3RvcmUtPmdldChrZXlSYW5nZSwgSURCQ2FsbGJhY2tzUHJveHk6
OmNyZWF0ZShhZG9wdFB0cihjYWxsYmFja3MpKSwgdHJhbnNhY3Rpb24uZ2V0SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlKCksIGVjKTsKIH0KIAotdm9pZCBXZWJJREJPYmplY3RTdG9yZUlt
cGw6OnB1dChjb25zdCBXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUmIHZhbHVlLCBjb25zdCBXZWJJ
REJLZXkmIGtleSwgUHV0TW9kZSBwdXRNb2RlLCBXZWJJREJDYWxsYmFja3MqIGNhbGxiYWNrcywg
Y29uc3QgV2ViSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBXZWJFeGNlcHRpb25Db2RlJiBl
YykKLXsKLSAgICBtX29iamVjdFN0b3JlLT5wdXQodmFsdWUsIGtleSwgc3RhdGljX2Nhc3Q8SURC
T2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpQdXRNb2RlPihwdXRNb2RlKSwgSURCQ2FsbGJh
Y2tzUHJveHk6OmNyZWF0ZShhZG9wdFB0cihjYWxsYmFja3MpKSwgdHJhbnNhY3Rpb24uZ2V0SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKCksIGVjKTsKLX0KLQogdm9pZCBXZWJJREJPYmpl
Y3RTdG9yZUltcGw6OnB1dFdpdGhJbmRleEtleXMoY29uc3QgV2ViU2VyaWFsaXplZFNjcmlwdFZh
bHVlJiB2YWx1ZSwgY29uc3QgV2ViSURCS2V5JiBrZXksIFB1dE1vZGUgcHV0TW9kZSwgV2ViSURC
Q2FsbGJhY2tzKiBjYWxsYmFja3MsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlv
biwgY29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mIHdlYkluZGV4TmFtZXMsIGNvbnN0IFdlYlZl
Y3RvcjxXZWJJbmRleEtleXM+JiB3ZWJJbmRleEtleXMsIFdlYkV4Y2VwdGlvbkNvZGUmIGVjKQog
ewogICAgIEFTU0VSVCh3ZWJJbmRleE5hbWVzLnNpemUoKSA9PSB3ZWJJbmRleEtleXMuc2l6ZSgp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQk9iamVjdFN0
b3JlSW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCT2JqZWN0U3RvcmVJ
bXBsLmgKaW5kZXggZTZkYzg4ZjU0ZDM2NDdiZDdhYjJmNmY4YTdjZjI2NzRmNjZjM2JkMi4uOTM0
Y2ZmYTk5M2M4YmYxMDYzNjQ0NTlmNTBiNmYzYmJhYTA0MjAxZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCT2JqZWN0U3RvcmVJbXBsLmgKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCT2JqZWN0U3RvcmVJbXBsLmgKQEAgLTQ2LDcgKzQ2
LDYgQEAgcHVibGljOgogICAgIH5XZWJJREJPYmplY3RTdG9yZUltcGwoKTsKIAogICAgIHZvaWQg
Z2V0KGNvbnN0IFdlYklEQktleVJhbmdlJiwgV2ViSURCQ2FsbGJhY2tzKiwgY29uc3QgV2ViSURC
VHJhbnNhY3Rpb24mLCBXZWJFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBwdXQoY29uc3QgV2Vi
U2VyaWFsaXplZFNjcmlwdFZhbHVlJiwgY29uc3QgV2ViSURCS2V5JiwgUHV0TW9kZSwgV2ViSURC
Q2FsbGJhY2tzKiwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mLCBXZWJFeGNlcHRpb25Db2RlJik7
CiAgICAgdm9pZCBwdXRXaXRoSW5kZXhLZXlzKGNvbnN0IFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZSYsIGNvbnN0IFdlYklEQktleSYsIFB1dE1vZGUsIFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdl
YklEQlRyYW5zYWN0aW9uJiwgY29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mIGluZGV4TmFtZXMs
IGNvbnN0IFdlYlZlY3RvcjxXZWJJbmRleEtleXM+JiwgV2ViRXhjZXB0aW9uQ29kZSYpOwogICAg
IHZvaWQgZGVsZXRlRnVuY3Rpb24oY29uc3QgV2ViSURCS2V5UmFuZ2UmLCBXZWJJREJDYWxsYmFj
a3MqLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYsIFdlYkV4Y2VwdGlvbkNvZGUmKTsKICAgICB2
b2lkIGNsZWFyKFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgV2Vi
RXhjZXB0aW9uQ29kZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9JREJGYWtlQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lE
QkZha2VCYWNraW5nU3RvcmUuaAppbmRleCAwODQwNWNlMGFiNThjOTZmYzI5NmMzZjBmOGExNGZm
NjlkNjViYTE4Li41MzZkNzg1YjkzYWVlNDNiOWY1MzMyNTI1YzYzZWM3OWU3MDk1OWJmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQkZha2VCYWNraW5nU3RvcmUu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQkZha2VCYWNraW5nU3RvcmUu
aApAQCAtNTksNyArNTksNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUluZGV4
KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4
SWQpIE9WRVJSSURFIHsgfQogICAgIHZpcnR1YWwgYm9vbCBwdXRJbmRleERhdGFGb3JSZWNvcmQo
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJ
ZCwgY29uc3QgSURCS2V5JiwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKikgT1ZF
UlJJREUgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlSW5kZXhEYXRh
Rm9yUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2
NF90IGluZGV4SWQsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciopIE9WRVJSSURF
IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBTdHJpbmcgZ2V0T2JqZWN0VmlhSW5kZXgo
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJ
ZCwgY29uc3QgSURCS2V5JikgT1ZFUlJJREUgeyByZXR1cm4gU3RyaW5nKCk7IH0KICAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBnZXRQcmltYXJ5S2V5VmlhSW5kZXgoaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURC
S2V5JikgT1ZFUlJJREUgeyByZXR1cm4gUGFzc1JlZlB0cjxJREJLZXk+KCk7IH0KICAgICB2aXJ0
dWFsIGJvb2wga2V5RXhpc3RzSW5JbmRleChpbnQ2NF90IGRhdGFiYXNlaWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGluZGV4S2V5LCBSZWZQ
dHI8SURCS2V5PiYgZm91bmRQcmltYXJ5S2V5KSBPVkVSUklERSB7IHJldHVybiBmYWxzZTsgfQog
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKaW5kZXggMzQ4OWEwOWMwNThjOGYyNTEyYWZkODhlNTNhMTZmYTBkNzM2NDNhMC4uNDlkMWZl
NDNhMWU2MjAzNjEzN2ZkNDhmOTk5OGQ0NWRkOTM0NmQwZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBA
CisyMDEyLTA3LTI1ICBBbGVjIEZsZXR0ICA8YWxlY2ZsZXR0QGNocm9taXVtLm9yZz4KKworICAg
ICAgICBJbmRleGVkREI6IGluamVjdCBpbmRleCBrZXlzIG9uIGN1cnNvci9vYmplY3RzdG9yZS9p
bmRleCBnZXQgc3VjY2VzcyBoYW5kbGVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9OTExMjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBPbmUgbmV3IHRlc3QgdG8gbWFrZSBzdXJlIHRoYXQgaW5kZXhlcyB3
aXRoIHRoZSBzYW1lIGtleXBhdGggYXMgYW4KKyAgICAgICAgYXV0b0luY3JlbWVudCdlZCBvYmpl
Y3RTdG9yZSBzdGlsbCBpbmRleCB0aGVpciB2YWx1ZXMuIEFsc28gbWlub3IKKyAgICAgICAgdHdl
YWtzIHRvIHRlc3RzIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGZpZ3VyZSBvdXQgd2hpY2gga2V5IGlz
IGJlaW5nCisgICAgICAgIHVwZGF0ZWQuCisKKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9p
bmRleC1kdXBsaWNhdGUta2V5cGF0aHMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBz
dG9yYWdlL2luZGV4ZWRkYi9pbmRleC1kdXBsaWNhdGUta2V5cGF0aHMuaHRtbDogQWRkZWQuCisg
ICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvbW96aWxsYS9hdXRvaW5jcmVtZW50LWluZGV4ZXMt
ZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL21vemlsbGEvcmVzb3Vy
Y2VzL2F1dG9pbmNyZW1lbnQtaW5kZXhlcy5qczoKKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRk
Yi9yZXNvdXJjZXMvaW5kZXgtZHVwbGljYXRlLWtleXBhdGhzLmpzOiBBZGRlZC4KKwogMjAxMi0w
Ny0yNSAgQW5kcmV3IFdpbHNvbiAgPGF0d2lsc29uQGNocm9taXVtLm9yZz4KIAogICAgICAgICBV
bnJldmlld2VkIGNocm9taXVtIGV4cGVjdGF0aW9ucyBjaGFuZ2UuCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9pbmRleC1kdXBsaWNhdGUta2V5cGF0aHMtZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvaW5kZXgtZHVwbGljYXRlLWtl
eXBhdGhzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kYmUzNjk5YTg4ZGI3YmZmM2QxYTFiY2I4
YmE1MDViZmI0Y2I3OGJjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9p
bmRleGVkZGIvaW5kZXgtZHVwbGljYXRlLWtleXBhdGhzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsx
LDM4IEBACitUZXN0IHRoZSB1c2Ugb2YgaWRlbnRpY2FsIGtleXBhdGhzIGJldHdlZW4gb2JqZWN0
c3RvcmVzIGFuZCBpbmRleGVzCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBv
ZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitpbmRl
eGVkREIgPSBzZWxmLmluZGV4ZWREQiB8fCBzZWxmLndlYmtpdEluZGV4ZWREQiB8fCBzZWxmLm1v
ekluZGV4ZWREQiB8fCBzZWxmLm1zSW5kZXhlZERCIHx8IHNlbGYuT0luZGV4ZWREQjsKKworaW5k
ZXhlZERCLm9wZW4oJ3N0b3JlLWluZGV4LWNvbGxpc2lvbicpCitkYiA9IGV2ZW50LnRhcmdldC5y
ZXN1bHQKK2RiLnNldFZlcnNpb24oJzEnKQorRGVsZXRlZCBhbGwgb2JqZWN0IHN0b3Jlcy4KK0Rl
bGV0ZWQgYWxsIG9iamVjdCBzdG9yZXMuCitzdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdj
b2xsaWRlV2l0aEluZGV4Jywge2tleVBhdGg6ICdmb28nfSkKK2luZGV4ID0gc3RvcmUuY3JlYXRl
SW5kZXgoJ2ZvbycsICdmb28nKQorb2JqZWN0U3RvcmUucHV0KHtmb286IDEwfSkKK29iamVjdFN0
b3JlLmdldCgxMCkKK2luZGV4LmdldCgxMCkKK1BBU1MgSlNPTi5zdHJpbmdpZnkocmVzdWx0KSBp
cyAie1wiZm9vXCI6MTB9IgorUEFTUyBKU09OLnN0cmluZ2lmeShyZXN1bHQpIGlzICJ7XCJmb29c
IjoxMH0iCitkYi5zZXRWZXJzaW9uKCcyJykKK0RlbGV0ZWQgYWxsIG9iamVjdCBzdG9yZXMuCitz
dG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdjb2xsaWRlV2l0aEF1dG9JbmNyZW1lbnQnLCB7
a2V5UGF0aDogJ2ZvbycsIGF1dG9JbmNyZW1lbnQ6IHRydWV9KQoraW5kZXggPSBzdG9yZS5jcmVh
dGVJbmRleCgnZm9vJywgJ2ZvbycpCitvYmplY3RTdG9yZS5wdXQoe2Zvbzo1fSkKK29iamVjdFN0
b3JlLnB1dCh7Zm9vOjZ9KQorb2JqZWN0U3RvcmUucHV0KHtmb286N30pCitvYmplY3RTdG9yZS5w
dXQoe2Zvbzo4fSkKK29iamVjdFN0b3JlLnB1dCh7Zm9vOjl9KQorb2JqZWN0U3RvcmUucHV0KHsn
YmFyJzogJ2Jheid9KQorUEFTUyBldmVudC50YXJnZXQucmVzdWx0IGlzIDEwCitvYmplY3RTdG9y
ZS5nZXQoMTApCitpbmRleC5nZXQoMTApCitQQVNTIEpTT04uc3RyaW5naWZ5KHJlc3VsdCkgaXMg
IntcImJhclwiOlwiYmF6XCIsXCJmb29cIjoxMH0iCitQQVNTIEpTT04uc3RyaW5naWZ5KHJlc3Vs
dCkgaXMgIntcImJhclwiOlwiYmF6XCIsXCJmb29cIjoxMH0iCitQQVNTIHN1Y2Nlc3NmdWxseVBh
cnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
c3RvcmFnZS9pbmRleGVkZGIvaW5kZXgtZHVwbGljYXRlLWtleXBhdGhzLmh0bWwgYi9MYXlvdXRU
ZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9pbmRleC1kdXBsaWNhdGUta2V5cGF0aHMuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4wMjc0ZWZmZjNhYWJjZWQ0MDZmYzRmZGRjNGY5NDJlYTE3Zjc0NTEzCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvaW5kZXgtZHVwbGljYXRl
LWtleXBhdGhzLmh0bWwKQEAgLTAsMCArMSwxMCBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQg
c3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0icmVzb3VyY2VzL3NoYXJlZC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9k
eT4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvaW5kZXgtZHVwbGljYXRlLWtleXBhdGhzLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBv
c3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvc3RvcmFnZS9pbmRleGVkZGIvbW96aWxsYS9hdXRvaW5jcmVtZW50LWluZGV4ZXMtZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW96aWxsYS9hdXRvaW5jcmVt
ZW50LWluZGV4ZXMtZXhwZWN0ZWQudHh0CmluZGV4IGY5NDUzNzQ3MTA5ZjlhMDU0YWQ5ZDM4OGMx
NmIwODg5ZmY2YjZhZWEuLjYxYmFhMjJmMmE3ZDA4YzRmYWIwMjc1ZjJhYmVmY2UxNGU1YWEyYmIg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL21vemlsbGEvYXV0b2lu
Y3JlbWVudC1pbmRleGVzLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2lu
ZGV4ZWRkYi9tb3ppbGxhL2F1dG9pbmNyZW1lbnQtaW5kZXhlcy1leHBlY3RlZC50eHQKQEAgLTks
NyArOSw3IEBAIGluZGV4ZWREQi5vcGVuKG5hbWUpCiBkYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQK
IHJlcXVlc3QgPSBkYi5zZXRWZXJzaW9uKCcxJykKIERlbGV0ZWQgYWxsIG9iamVjdCBzdG9yZXMu
Ci1vYmplY3RTdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdmb28nLCB7IGtleVBhdGg6ICdp
ZCcsIGF1dG9JbmNyZW1lbnQ6IHRydWUgfSk7CitvYmplY3RTdG9yZSA9IGRiLmNyZWF0ZU9iamVj
dFN0b3JlKCdhdXRvaW5jcmVtZW50LWlkJywgeyBrZXlQYXRoOiAnaWQnLCBhdXRvSW5jcmVtZW50
OiB0cnVlIH0pOwogb2JqZWN0U3RvcmUuY3JlYXRlSW5kZXgoJ2ZpcnN0JywgJ2ZpcnN0Jyk7CiBv
YmplY3RTdG9yZS5jcmVhdGVJbmRleCgnc2Vjb25kJywgJ3NlY29uZCcpOwogb2JqZWN0U3RvcmUu
Y3JlYXRlSW5kZXgoJ3RoaXJkJywgJ3RoaXJkJyk7CkBAIC0xNyw3ICsxNyw4IEBAIGRhdGEgPSB7
IGZpcnN0OiAnZm9vJywgc2Vjb25kOiAnZm9vJywgdGhpcmQ6ICdmb28nIH07CiByZXF1ZXN0ID0g
b2JqZWN0U3RvcmUuYWRkKGRhdGEpOwoga2V5ID0gZXZlbnQudGFyZ2V0LnJlc3VsdDsKIFBBU1Mg
a2V5ID09IG51bGwgaXMgZmFsc2UKLW9iamVjdFN0b3JlID0gZGIudHJhbnNhY3Rpb24oJ2Zvbycp
Lm9iamVjdFN0b3JlKCdmb28nKTsKK2V4cGVjdGVkIGtleSBpcyAxCitvYmplY3RTdG9yZSA9IGRi
LnRyYW5zYWN0aW9uKCdhdXRvaW5jcmVtZW50LWlkJykub2JqZWN0U3RvcmUoJ2F1dG9pbmNyZW1l
bnQtaWQnKTsKIGZpcnN0ID0gb2JqZWN0U3RvcmUuaW5kZXgoJ2ZpcnN0Jyk7CiByZXF1ZXN0ID0g
Zmlyc3QuZ2V0KCdmb28nKTsKIFBBU1MgZXZlbnQudGFyZ2V0LnJlc3VsdC5pZCBpcyBrZXkKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL21vemlsbGEvcmVzb3VyY2Vz
L2F1dG9pbmNyZW1lbnQtaW5kZXhlcy5qcyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRi
L21vemlsbGEvcmVzb3VyY2VzL2F1dG9pbmNyZW1lbnQtaW5kZXhlcy5qcwppbmRleCAxYzg1OTg0
ODY1ZGJmOWE3ZmYzNzViNDkwMDdmZmFhMzhhNDg2NGViLi4yZGE5NmU3ZmZhNTZlOTczODg5NjVj
Yzg1MmZlOTFlYzliZTM4NTlmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4
ZWRkYi9tb3ppbGxhL3Jlc291cmNlcy9hdXRvaW5jcmVtZW50LWluZGV4ZXMuanMKKysrIGIvTGF5
b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW96aWxsYS9yZXNvdXJjZXMvYXV0b2luY3JlbWVu
dC1pbmRleGVzLmpzCkBAIC0zNSw3ICszNSw3IEBAIGZ1bmN0aW9uIHNldHVwT2JqZWN0U3RvcmUo
KQogICAgIHRyYW5zID0gZXZlbnQudGFyZ2V0LnJlc3VsdDsKICAgICBkZWxldGVBbGxPYmplY3RT
dG9yZXMoZGIpOwogCi0gICAgb2JqZWN0U3RvcmUgPSBldmFsQW5kTG9nKCJvYmplY3RTdG9yZSA9
IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdmb28nLCB7IGtleVBhdGg6ICdpZCcsIGF1dG9JbmNyZW1l
bnQ6IHRydWUgfSk7Iik7CisgICAgb2JqZWN0U3RvcmUgPSBldmFsQW5kTG9nKCJvYmplY3RTdG9y
ZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdhdXRvaW5jcmVtZW50LWlkJywgeyBrZXlQYXRoOiAn
aWQnLCBhdXRvSW5jcmVtZW50OiB0cnVlIH0pOyIpOwogICAgIGV2YWxBbmRMb2coIm9iamVjdFN0
b3JlLmNyZWF0ZUluZGV4KCdmaXJzdCcsICdmaXJzdCcpOyIpOwogICAgIGV2YWxBbmRMb2coIm9i
amVjdFN0b3JlLmNyZWF0ZUluZGV4KCdzZWNvbmQnLCAnc2Vjb25kJyk7Iik7CiAgICAgZXZhbEFu
ZExvZygib2JqZWN0U3RvcmUuY3JlYXRlSW5kZXgoJ3RoaXJkJywgJ3RoaXJkJyk7Iik7CkBAIC00
OSwxMiArNDksMTMgQEAgZnVuY3Rpb24gc2V0dXBJbmRleGVzKCkKIHsKICAgICBrZXkgPSBldmFs
QW5kTG9nKCJrZXkgPSBldmVudC50YXJnZXQucmVzdWx0OyIpOwogICAgIHNob3VsZEJlRmFsc2Uo
ImtleSA9PSBudWxsIik7CisgICAgZGVidWcoImV4cGVjdGVkIGtleSBpcyAiICsga2V5KTsKICAg
ICB0cmFucy5vbmNvbXBsZXRlID0gc2V0VmVyc2lvbkNvbXBsZXRlOwogfQogCiBmdW5jdGlvbiBz
ZXRWZXJzaW9uQ29tcGxldGUoKQogewotICAgIG9iamVjdFN0b3JlID0gZXZhbEFuZExvZygib2Jq
ZWN0U3RvcmUgPSBkYi50cmFuc2FjdGlvbignZm9vJykub2JqZWN0U3RvcmUoJ2ZvbycpOyIpOwor
ICAgIG9iamVjdFN0b3JlID0gZXZhbEFuZExvZygib2JqZWN0U3RvcmUgPSBkYi50cmFuc2FjdGlv
bignYXV0b2luY3JlbWVudC1pZCcpLm9iamVjdFN0b3JlKCdhdXRvaW5jcmVtZW50LWlkJyk7Iik7
CiAgICAgZmlyc3QgPSBldmFsQW5kTG9nKCJmaXJzdCA9IG9iamVjdFN0b3JlLmluZGV4KCdmaXJz
dCcpOyIpOwogICAgIHJlcXVlc3QgPSBldmFsQW5kTG9nKCJyZXF1ZXN0ID0gZmlyc3QuZ2V0KCdm
b28nKTsiKTsKICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGNoZWNrRmlyc3RJbmRleEFuZFByZXBh
cmVTZWNvbmQ7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9yZXNv
dXJjZXMvaW5kZXgtZHVwbGljYXRlLWtleXBhdGhzLmpzIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9p
bmRleGVkZGIvcmVzb3VyY2VzL2luZGV4LWR1cGxpY2F0ZS1rZXlwYXRocy5qcwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5jODg4ZDg0NDk1MDUwMzg4YWMyOTVmNDk0MDJhMzAyYzVmNDVkNWY5Ci0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvcmVzb3VyY2VzL2luZGV4LWR1cGxp
Y2F0ZS1rZXlwYXRocy5qcwpAQCAtMCwwICsxLDEwNiBAQAoraWYgKHRoaXMuaW1wb3J0U2NyaXB0
cykgeworICAgIGltcG9ydFNjcmlwdHMoJy4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRl
c3QtcHJlLmpzJyk7CisgICAgaW1wb3J0U2NyaXB0cygnc2hhcmVkLmpzJyk7Cit9CisKK2Rlc2Ny
aXB0aW9uKCJUZXN0IHRoZSB1c2Ugb2YgaWRlbnRpY2FsIGtleXBhdGhzIGJldHdlZW4gb2JqZWN0
c3RvcmVzIGFuZCBpbmRleGVzIik7CisKK2Z1bmN0aW9uIHRlc3QoKQoreworICAgIHJlbW92ZVZl
bmRvclByZWZpeGVzKCk7CisgICAgcmVxdWVzdCA9IGV2YWxBbmRMb2coImluZGV4ZWREQi5vcGVu
KCdzdG9yZS1pbmRleC1jb2xsaXNpb24nKSIpOworICAgIHJlcXVlc3Qub25zdWNjZXNzID0gdGVz
dENvbGxpZGVTdG9yZUluZGV4U2V0dXA7CisgICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3Rl
ZEVycm9yQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIHRlc3RDb2xsaWRlU3RvcmVJbmRleFNldHVw
KGV2dCkKK3sKKyAgICBldmVudCA9IGV2dDsKKyAgICBldmFsQW5kTG9nKCJkYiA9IGV2ZW50LnRh
cmdldC5yZXN1bHQiKTsKKyAgICByZXF1ZXN0ID0gZXZhbEFuZExvZygiZGIuc2V0VmVyc2lvbign
MScpIik7CisgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSB0ZXN0Q29sbGlkZVN0b3JlSW5kZXg7Cisg
ICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7CisgICAgcmVxdWVz
dC5vbmJsb2NrZWQgPSB1bmV4cGVjdGVkQmxvY2tlZENhbGxiYWNrOworfQorCitmdW5jdGlvbiB0
ZXN0Q29sbGlkZVN0b3JlSW5kZXgoZXZlbnQpCit7CisgICAgZGVsZXRlQWxsT2JqZWN0U3RvcmVz
KGRiKTsKKyAgICB2YXIgdHJhbnMgPSBldmVudC50YXJnZXQucmVzdWx0OworICAgIGV2YWxBbmRM
b2coInN0b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ2NvbGxpZGVXaXRoSW5kZXgnLCB7a2V5
UGF0aDogJ2Zvbyd9KSIpOworICAgIGV2YWxBbmRMb2coImluZGV4ID0gc3RvcmUuY3JlYXRlSW5k
ZXgoJ2ZvbycsICdmb28nKSIpOworCisgICAgdHJhbnMub25jb21wbGV0ZSA9IHN0b3JlQ29sbGlk
ZWRTdG9yZUluZGV4RGF0YTsKKyAgICB0cmFucy5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2Fs
bGJhY2s7CisgICAgdHJhbnMub25hYm9ydCA9IHVuZXhwZWN0ZWRBYm9ydENhbGxiYWNrOworfQor
CitmdW5jdGlvbiByZXN1bHRTaG91bGRCZSh2KSB7CisgICAgcmV0dXJuIGZ1bmN0aW9uKGV2ZW50
KSB7CisgICAgICAgIHJlc3VsdCA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7CisgICAgICAgIHNob3Vs
ZEJlRXF1YWxUb1N0cmluZygiSlNPTi5zdHJpbmdpZnkocmVzdWx0KSIsIHYpOworICAgIH0KK307
CisKK2Z1bmN0aW9uIHN0b3JlQ29sbGlkZWRTdG9yZUluZGV4RGF0YSgpIHsKKyAgICB2YXIgdHJh
bnMgPSBkYi50cmFuc2FjdGlvbignY29sbGlkZVdpdGhJbmRleCcsICdyZWFkd3JpdGUnKTsKKwor
ICAgIG9iamVjdFN0b3JlID0gdHJhbnMub2JqZWN0U3RvcmUoJ2NvbGxpZGVXaXRoSW5kZXgnKTsK
KyAgICBpbmRleCA9IG9iamVjdFN0b3JlLmluZGV4KCdmb28nKTsKKyAgICBldmFsQW5kTG9nKCJv
YmplY3RTdG9yZS5wdXQoe2ZvbzogMTB9KSIpLm9uc3VjY2VzcyA9IGZ1bmN0aW9uKCkgeworICAg
ICAgICBldmFsQW5kTG9nKCJvYmplY3RTdG9yZS5nZXQoMTApIikub25zdWNjZXNzID0gcmVzdWx0
U2hvdWxkQmUoJ3siZm9vIjoxMH0nKTsKKyAgICAgICAgZXZhbEFuZExvZygiaW5kZXguZ2V0KDEw
KSIpLm9uc3VjY2VzcyA9IHJlc3VsdFNob3VsZEJlKCd7ImZvbyI6MTB9Jyk7CisgICAgfTsKKwor
ICAgIHRyYW5zLm9uY29tcGxldGUgPSB0ZXN0Q29sbGlkZUF1dG9JbmNyZW1lbnRTZXR1cDsKKyAg
ICB0cmFucy5vbmFib3J0ID0gdW5leHBlY3RlZEFib3J0Q2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9u
IHRlc3RDb2xsaWRlQXV0b0luY3JlbWVudFNldHVwKCkKK3sKKyAgICByZXF1ZXN0ID0gZXZhbEFu
ZExvZygiZGIuc2V0VmVyc2lvbignMicpIik7CisgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSB0ZXN0
Q29sbGlkZUF1dG9JbmNyZW1lbnQ7CisgICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVy
cm9yQ2FsbGJhY2s7CisgICAgcmVxdWVzdC5vbmJsb2NrZWQgPSB1bmV4cGVjdGVkQmxvY2tlZENh
bGxiYWNrOworfQorCitmdW5jdGlvbiB0ZXN0Q29sbGlkZUF1dG9JbmNyZW1lbnQoKQoreworICAg
IGRlbGV0ZUFsbE9iamVjdFN0b3JlcyhkYik7CisgICAgdmFyIHRyYW5zID0gcmVxdWVzdC5yZXN1
bHQ7CisgICAgZXZhbEFuZExvZygic3RvcmUgPSBkYi5jcmVhdGVPYmplY3RTdG9yZSgnY29sbGlk
ZVdpdGhBdXRvSW5jcmVtZW50Jywge2tleVBhdGg6ICdmb28nLCBhdXRvSW5jcmVtZW50OiB0cnVl
fSkiKTsKKyAgICBldmFsQW5kTG9nKCJpbmRleCA9IHN0b3JlLmNyZWF0ZUluZGV4KCdmb28nLCAn
Zm9vJykiKTsKKworICAgIHRyYW5zLm9uY29tcGxldGUgPSBzdG9yZUNvbGxpZGVkQXV0b0luY3Jl
bWVudERhdGE7CisgICAgdHJhbnMub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOwor
ICAgIHRyYW5zLm9uYWJvcnQgPSB1bmV4cGVjdGVkQWJvcnRDYWxsYmFjazsKK30KKworZnVuY3Rp
b24gc3RvcmVDb2xsaWRlZEF1dG9JbmNyZW1lbnREYXRhKCkKK3sKKyAgICB2YXIgdHJhbnMgPSBk
Yi50cmFuc2FjdGlvbignY29sbGlkZVdpdGhBdXRvSW5jcmVtZW50JywgJ3JlYWR3cml0ZScpOwor
CisgICAgb2JqZWN0U3RvcmUgPSB0cmFucy5vYmplY3RTdG9yZSgnY29sbGlkZVdpdGhBdXRvSW5j
cmVtZW50Jyk7CisgICAgaW5kZXggPSBvYmplY3RTdG9yZS5pbmRleCgnZm9vJyk7CisgICAgLy8g
SW5zZXJ0IHNvbWUgZGF0YSB0byBmdXR6IHdpdGggdGhlIGF1dG9JbmNyZW1lbnQgc3RhdGUuCisg
ICAgZm9yICh2YXIgaSA9IDU7IGkgPCAxMDsgaSsrKSB7CisgICAgICAgIGV2YWxBbmRMb2coIm9i
amVjdFN0b3JlLnB1dCh7Zm9vOiIgKyAgaSArICJ9KSIpOworICAgIH0KKyAgICAvLyBXaXRob3V0
IGEgdmFsdWUsIHRoaXMgcmVxdWlyZXMgdGhlIGJhY2tlbmQgdG8gZ2VuZXJhdGUgYSBrZXksIHdo
aWNoIG11c3QgYWxzbyBiZSBpbmRleGVkLgorICAgIGV2YWxBbmRMb2coIm9iamVjdFN0b3JlLnB1
dCh7J2Jhcic6ICdiYXonfSkiKS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbihldnQpIHsKKyAgICAgICAg
ZXZlbnQgPSBldnQ7CisgICAgICAgIHNob3VsZEJlKCJldmVudC50YXJnZXQucmVzdWx0IiwgIjEw
Iik7CisgICAgICAgIGV2YWxBbmRMb2coIm9iamVjdFN0b3JlLmdldCgxMCkiKS5vbnN1Y2Nlc3Mg
PSByZXN1bHRTaG91bGRCZSgneyJiYXIiOiJiYXoiLCJmb28iOjEwfScpOworICAgICAgICBldmFs
QW5kTG9nKCJpbmRleC5nZXQoMTApIikub25zdWNjZXNzID0gcmVzdWx0U2hvdWxkQmUoJ3siYmFy
IjoiYmF6IiwiZm9vIjoxMH0nKTsKKyAgICB9OworCisgICAgdHJhbnMub25jb21wbGV0ZSA9IHRl
c3RDb2xsaWRlSW5kZXhJbmRleFNldHVwOworICAgIHRyYW5zLm9uYWJvcnQgPSB1bmV4cGVjdGVk
QWJvcnRDYWxsYmFjazsKK30KKworZnVuY3Rpb24gdGVzdENvbGxpZGVJbmRleEluZGV4U2V0dXAo
KSB7CisgICAgZmluaXNoSlNUZXN0KCk7Cit9CisKK3ZhciBqc1Rlc3RJc0FzeW5jID0gdHJ1ZTsK
K3Rlc3QoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154780</attachid>
            <date>2012-07-26 16:10:59 -0700</date>
            <delta_ts>2012-07-27 00:30:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91123-20120726161048.patch</filename>
            <type>text/plain</type>
            <size>57665</size>
            <attacher name="Alec Flett">alecflett</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzNjU2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTNhNzVlZGZlN2ZlY2Fk
Y2FjOGU2YTYzOGZiYjEzMTQ5NjdkOWQzOC4uODJiNDg1ZWM1MmIxNmQ5ZjViMjRjMGIxM2QxNzI0
YTY0ZjE0OTM5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYwIEBACisyMDEyLTA3LTI1ICBBbGVj
IEZsZXR0ICA8YWxlY2ZsZXR0QGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IGlu
amVjdCBpbmRleCBrZXlzIG9uIGN1cnNvci9vYmplY3RzdG9yZS9pbmRleCBnZXQgc3VjY2VzcyBo
YW5kbGVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTExMjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBN
b3ZlIGtleS1pbmplY3Rpb24gaW50byB0aGUgZnJvbnRlbmQsIGJ5IGluamVjdGluZyB0aGUga2V5
IGludG8KKyAgICAgICAgdGhlIHZhbHVlIG9uIGdldCByYXRoZXIgdGhhbiBzZXQgZm9yIGF1dG9p
bmNyZW1lbnRlZCBrZXlzLiBUaGlzCisgICAgICAgIGdpdmVzIGEgcG90ZW50aWFsIHBlcmZvcm1h
bmNlIHdpbiBieSBhdm9pZGluZyBhbiBJUEMgY2FsbCB0byB0aGUKKyAgICAgICAgVjggdXRpbGl0
eSBwcm9jZXNzIG9uIGNocm9taXVtLCBhbmQgZ2VuZXJhbGx5IGNsZWFucyB1cCB0aGUga2V5Cisg
ICAgICAgIG1hbmFnZW1lbnQuCisKKyAgICAgICAgTm90ZSB0aGF0IHRoaXMgZHVwbGljYXRlcyB0
aGUgbG9naWMgb2YgZ2VuZXJhdGVJbmRleEtleXMgaW50byB0aGUKKyAgICAgICAgZnJvbnRlbmQg
dW50aWwgdGhhdCBtZXRob2QgY2FuIGJlIGV4cHVuZ2VkIGZyb20gdGhlIGJhY2tlbmQuIFRoaXMK
KyAgICAgICAgd2lsbCBiZSBjbGVhbmVkIHVwIGluIGEgbGF0ZXIgcGF0Y2guCisKKyAgICAgICAg
SW4gb3JkZXIgdG8gYWNjb3VudCBmb3IgYm90aCBvbGQgZGF0YSAod2hpY2ggaGFzIHRoZSBkdXBs
aWNhdGUKKyAgICAgICAgcHJpbWFyeSBrZXkgYWxyZWFkeSBpbmplY3RlZCBhbmQgc2VyaWFsaXpl
ZCkgYW5kIGFueSBuZXcgZGF0YSwgYW4KKyAgICAgICAgYXNzZXJ0aW9uIHdhcyByZW1vdmVkIGZy
b20gSURCQmluZGluZ1V0aWxpdGllcy4KKworICAgICAgICBUaGlzIGFsc28gaW5jbHVkZXMgc29t
ZSBtaW5vciByZWZhY3RvcmluZyBzdWNoIGFzIHRoZSBkZXByZWNhdGlvbgorICAgICAgICBvZiBJ
REJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjp1cGRhdGUgaW4gZmF2b3Igb2YgYSBkaXJlY3QgY2Fs
bCB0bworICAgICAgICBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXQsIGFuZCByZW1vdmFs
IG9mIHRoZSBub3ctZGVmdW5jdAorICAgICAgICBJREJCYWNraW5nU3RvcmU6OmdldE9iamVjdFZp
YUluZGV4LgorCisgICAgICAgIFRlc3RzOiBzdG9yYWdlL2luZGV4ZGIvaW5kZXgtZHVwbGljYXRl
LWtleXBhdGhzLmh0bWwKKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdT
dG9yZS5oOgorICAgICAgICAoSURCQmFja2luZ1N0b3JlKToKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJDdXJzb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yOjp1cGRh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yOjpzZXRWYWx1ZVJlYWR5KToKKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJREJDdXJzb3JCYWNrZW5kSW1wbDo6dXBkYXRlKToKKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OklEQkluZGV4QmFja2VuZEltcGw6OmdldEludGVybmFsKToKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmg6CisgICAgICAgIChJREJMZXZlbERCQmFj
a2luZ1N0b3JlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpnZW5lcmF0ZUluZGV4S2V5c0ZvclZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmFkZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6cHV0KToKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oOgorICAgICAgICAoSURCT2JqZWN0U3RvcmUpOgor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0KToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dFdpdGhJbmRleEtl
eXMpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
SURCUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpvblN1Y2Nlc3Mp
OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwOgorICAgICAg
ICAoV2ViQ29yZSk6CisKIDIwMTItMDctMjQgIFNoYXduIFNpbmdoICA8c2hhd25zaW5naEBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBSZWZhY3RvciBDQ0xheWVyVHJlZUhvc3RD
b21tb246IG1vdmUgcm9vdCBsYXllciBzcGVjaWFsIGNhc2UgaW5pdGlhbGl6YXRpb24gaW50byBp
bnRlcm5hbCBjb2RlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAyN2I1NTJiZTRkODFh
MmIzYTZjZmJiMGRiYzE2NjA1M2E4ZGQ0NjNlLi5jNmE4NWM3YjlmNmQyNTkzMmVlNWI4MzRmOWFj
YTg3ODIzOGNhNTAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBA
CisyMDEyLTA3LTI1ICBBbGVjIEZsZXR0ICA8YWxlY2ZsZXR0QGNocm9taXVtLm9yZz4KKworICAg
ICAgICBJbmRleGVkREI6IGluamVjdCBpbmRleCBrZXlzIG9uIGN1cnNvci9vYmplY3RzdG9yZS9p
bmRleCBnZXQgc3VjY2VzcyBoYW5kbGVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9OTExMjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBSZW1vdmUgbWV0aG9kIG5vIGxvbmdlciB1c2VkLgorCisgICAgICAg
ICogdGVzdHMvSURCRmFrZUJhY2tpbmdTdG9yZS5oOgorCiAyMDEyLTA3LTI0ICBTaGF3biBTaW5n
aCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gUmVmYWN0
b3IgQ0NMYXllclRyZWVIb3N0Q29tbW9uOiBtb3ZlIHJvb3QgbGF5ZXIgc3BlY2lhbCBjYXNlIGlu
aXRpYWxpemF0aW9uIGludG8gaW50ZXJuYWwgY29kZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmgKaW5kZXggNzhhOWY2NjdhZGQxMzBl
NjNlM2MwNzQ2ZDRhNzAzYjQ4OTU0NmJkNy4uZjhkZTY4MjAyN2ZjMjUzZjc3ZmE1NTk5NGMxZWIw
ZWJmYzMwNDE1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCQmFja2luZ1N0b3JlLmgKQEAgLTgzLDcgKzgzLDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBkZWxldGVJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCBpbmRleElkKSA9IDA7CiAgICAgdmlydHVhbCBib29sIHB1dEluZGV4RGF0YUZv
clJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRf
dCBpbmRleElkLCBjb25zdCBJREJLZXkmLCBjb25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZp
ZXIqKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGRlbGV0ZUluZGV4RGF0YUZvclJlY29yZChpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBj
b25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqKSA9IDA7Ci0gICAgdmlydHVhbCBTdHJp
bmcgZ2V0T2JqZWN0VmlhSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JikgPSAwOwogICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxJREJLZXk+IGdldFByaW1hcnlLZXlWaWFJbmRleChpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkm
KSA9IDA7CiAgICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luSW5kZXgoaW50NjRfdCBkYXRhYmFz
ZWlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5
JiBpbmRleEtleSwgUmVmUHRyPElEQktleT4mIGZvdW5kUHJpbWFyeUtleSkgPSAwOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcAppbmRleCBlZjM0
Y2I4YzdmYjc2MzYxODQxMjJiM2NiODM2ZDI0OGQyMWViOTMwLi4wNWRkYjI1MWU0ZmEyYzE3OTZl
YjVlMjNhODg3ZGYyOGU3YTQ3ZGE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkN1cnNvci5jcHAKQEAgLTE1OSwxMyArMTU5LDcgQEAgUGFzc1JlZlB0cjxJREJS
ZXF1ZXN0PiBJREJDdXJzb3I6OnVwZGF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
LCBQYXNzUmUKICAgICAgICAgfQogICAgIH0KIAotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1
ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBt
X3RyYW5zYWN0aW9uLmdldCgpKTsKLSAgICBtX2JhY2tlbmQtPnVwZGF0ZSh2YWx1ZSwgcmVxdWVz
dCwgZWMpOwotICAgIGlmIChlYykgewotICAgICAgICByZXF1ZXN0LT5tYXJrRWFybHlEZWF0aCgp
OwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgcmV0dXJuIHJlcXVlc3QucmVsZWFzZSgp
OworICAgIHJldHVybiBvYmplY3RTdG9yZS0+cHV0KElEQk9iamVjdFN0b3JlQmFja2VuZEludGVy
ZmFjZTo6Q3Vyc29yVXBkYXRlLCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgY29udGV4dCwgdmFsdWUs
IG1fY3VycmVudFByaW1hcnlLZXksIGVjKTsKIH0KIAogdm9pZCBJREJDdXJzb3I6OmFkdmFuY2Uo
dW5zaWduZWQgbG9uZyBjb3VudCwgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC0yNTksMTggKzI1Mywy
MSBAQCB2b2lkIElEQkN1cnNvcjo6c2V0VmFsdWVSZWFkeSgpCiAgICAgbV9jdXJyZW50UHJpbWFy
eUtleSA9IG1fYmFja2VuZC0+cHJpbWFyeUtleSgpOwogCiAgICAgUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4gdmFsdWUgPSBtX2JhY2tlbmQtPnZhbHVlKCk7Ci0jaWZuZGVmIE5ERUJVRwog
ICAgIGlmICghaXNLZXlDdXJzb3IoKSkgewotICAgICAgICAvLyBGSVhNRTogQWN0dWFsbHkgaW5q
ZWN0IHRoZSBwcmltYXJ5S2V5IGF0IHRoZSBrZXlQYXRoLgogICAgICAgICBSZWZQdHI8SURCT2Jq
ZWN0U3RvcmU+IG9iamVjdFN0b3JlID0gZWZmZWN0aXZlT2JqZWN0U3RvcmUoKTsKLSAgICAgICAg
aWYgKG9iamVjdFN0b3JlLT5hdXRvSW5jcmVtZW50KCkgJiYgIW9iamVjdFN0b3JlLT5tZXRhZGF0
YSgpLmtleVBhdGguaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGNvbnN0IElEQktleVBhdGgmIGtl
eVBhdGggPSBvYmplY3RTdG9yZS0+bWV0YWRhdGEoKS5rZXlQYXRoOwotICAgICAgICAgICAgUmVm
UHRyPElEQktleT4gZXhwZWN0ZWRLZXkgPSBjcmVhdGVJREJLZXlGcm9tU2VyaWFsaXplZFZhbHVl
QW5kS2V5UGF0aCh2YWx1ZSwga2V5UGF0aCk7Ci0gICAgICAgICAgICBBU1NFUlQobV9jdXJyZW50
UHJpbWFyeUtleSk7Ci0gICAgICAgICAgICBBU1NFUlQoZXhwZWN0ZWRLZXktPmlzRXF1YWwobV9j
dXJyZW50UHJpbWFyeUtleS5nZXQoKSkpOworICAgICAgICBjb25zdCBJREJPYmplY3RTdG9yZU1l
dGFkYXRhIG1ldGFkYXRhID0gb2JqZWN0U3RvcmUtPm1ldGFkYXRhKCk7CisgICAgICAgIGlmICht
ZXRhZGF0YS5hdXRvSW5jcmVtZW50ICYmICFtZXRhZGF0YS5rZXlQYXRoLmlzTnVsbCgpKSB7Cisj
aWZuZGVmIE5ERUJVRworICAgICAgICAgICAgUmVmUHRyPElEQktleT4gZXhwZWN0ZWRLZXkgPSBj
cmVhdGVJREJLZXlGcm9tU2VyaWFsaXplZFZhbHVlQW5kS2V5UGF0aCh2YWx1ZSwgbWV0YWRhdGEu
a2V5UGF0aCk7CisgICAgICAgICAgICBBU1NFUlQoIWV4cGVjdGVkS2V5IHx8IGV4cGVjdGVkS2V5
LT5pc0VxdWFsKG1fY3VycmVudFByaW1hcnlLZXkuZ2V0KCkpKTsKKyNlbmRpZgorICAgICAgICAg
ICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWVBZnRlckluamVjdGlvbiA9IGlu
amVjdElEQktleUludG9TZXJpYWxpemVkVmFsdWUobV9jdXJyZW50UHJpbWFyeUtleSwgdmFsdWUs
IG1ldGFkYXRhLmtleVBhdGgpOworICAgICAgICAgICAgQVNTRVJUKHZhbHVlQWZ0ZXJJbmplY3Rp
b24pOworICAgICAgICAgICAgLy8gRklYTUU6IFRoZXJlIGlzIG5vIHdheSB0byByZXBvcnQgZXJy
b3JzIGhlcmUuIE1vdmUgdGhpcyBpbnRvIG9uU3VjY2Vzc1dpdGhDb250aW51YXRpb24gc28gdGhh
dCB3ZSBjYW4gYWJvcnQgdGhlIHRyYW5zYWN0aW9uIHRoZXJlLiBTZWU6IGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MjI3OAorICAgICAgICAgICAgaWYgKHZhbHVlQWZ0
ZXJJbmplY3Rpb24pCisgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZUFmdGVySW5qZWN0aW9u
OwogICAgICAgICB9CiAgICAgfQotI2VuZGlmCiAgICAgbV9jdXJyZW50VmFsdWUgPSBJREJBbnk6
OmNyZWF0ZSh2YWx1ZS5yZWxlYXNlKCkpOwogCiAgICAgbV9nb3RWYWx1ZSA9IHRydWU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5k
SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNr
ZW5kSW1wbC5jcHAKaW5kZXggYWUyN2FmOGEzMmM2YmI2OTQ5MmJmZjA4NjZlMmQwMjg1MjQ0NjYw
My4uMGEzOWE4ZmJjNjllMDY3M2Y3MzcyNzYxMmI5MWVjYjUxYWQ5YTA5NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJ
bXBsLmNwcApAQCAtODMsMTcgKzgzLDYgQEAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IElEQkN1cnNvckJhY2tlbmRJbXBsOjp2YWx1ZSgpIGNvbnN0CiAgICAgcmV0dXJuIFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUobV9jdXJzb3ItPnZhbHVlKCkpOwogfQog
Ci12b2lkIElEQkN1cnNvckJhY2tlbmRJbXBsOjp1cGRhdGUoUGFzc1JlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+IHZhbHVlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBF
eGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBJREJfVFJBQ0UoIklEQkN1cnNvckJhY2tlbmRJbXBs
Ojp1cGRhdGUiKTsKLSAgICBBU1NFUlQobV90cmFuc2FjdGlvbi0+bW9kZSgpICE9IElEQlRyYW5z
YWN0aW9uOjpSRUFEX09OTFkpOwotCi0gICAgQVNTRVJUKG1fY3Vyc29yKTsKLSAgICBBU1NFUlQo
bV9jdXJzb3JUeXBlICE9IEluZGV4S2V5Q3Vyc29yKTsKLQotICAgIG1fb2JqZWN0U3RvcmUtPnB1
dCh2YWx1ZSwgbV9jdXJzb3ItPnByaW1hcnlLZXkoKSwgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50
ZXJmYWNlOjpDdXJzb3JVcGRhdGUsIGNhbGxiYWNrcywgbV90cmFuc2FjdGlvbi5nZXQoKSwgZWMp
OwotfQotCiB2b2lkIElEQkN1cnNvckJhY2tlbmRJbXBsOjpjb250aW51ZUZ1bmN0aW9uKFBhc3NS
ZWZQdHI8SURCS2V5PiBwcnBLZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFj
a3MsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIElEQl9UUkFDRSgiSURCQ3Vyc29yQmFja2Vu
ZEltcGw6OmNvbnRpbnVlIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuaAppbmRleCAwNDNjNDAzNTJjZGQzYTNmZDYz
Zjk5NzJkMTY3MjFmMDQ4ZTJiMDk5Li41MDk3YzUzODc2OGYyOWYwOTE5NGIyOTQ5MGIxZDQxMmRl
NGUxZjNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJD
dXJzb3JCYWNrZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkN1cnNvckJhY2tlbmRJbXBsLmgKQEAgLTU3LDcgKzU3LDYgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSgpIGNvbnN0OwogICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxJREJLZXk+IHByaW1hcnlLZXkoKSBjb25zdDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGUoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4sIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgYWR2YW5jZSh1bnNp
Z25lZCBsb25nLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIEV4Y2VwdGlvbkNvZGUmKTsKICAg
ICB2aXJ0dWFsIHZvaWQgY29udGludWVGdW5jdGlvbihQYXNzUmVmUHRyPElEQktleT4sIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBk
ZWxldGVGdW5jdGlvbihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIEV4Y2VwdGlvbkNvZGUmKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJh
Y2tlbmRJbnRlcmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1
cnNvckJhY2tlbmRJbnRlcmZhY2UuaAppbmRleCA0OGQzYTE4MjlmNjU4OGVkZjYxOTczMzdmMzE4
YjJjMDZlOTBiY2YzLi4xZGYyODQ1NmE0MWM4OTM4M2ZlMmI4MTJhZDM3MDZkZTI3NDg5NDM4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNr
ZW5kSW50ZXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
Q3Vyc29yQmFja2VuZEludGVyZmFjZS5oCkBAIC01Nyw3ICs1Nyw2IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5KCkgY29uc3QgPSAwOwogICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlKCkgY29uc3QgPSAw
OwogCi0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZShQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKICAg
ICB2aXJ0dWFsIHZvaWQgYWR2YW5jZSh1bnNpZ25lZCBsb25nIGNvdW50LCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4sIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNvbnRp
bnVlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+LCBFeGNlcHRpb25Db2RlJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVGdW5jdGlv
bihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBs
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZElt
cGwuY3BwCmluZGV4IDlmNWZmM2JhZmNhMjU0OTc1YTQzYzQzMGViY2E1ZTIxODY5MGVjNjYuLjEz
NDAwODQ5MWY1YTc0MzE5NmUyZmM5YWI4ODJkYWVlNmNiMzk1OTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuY3Bw
CkBAIC0xNzIsMTEgKzE3MiwxOSBAQCB2b2lkIElEQkluZGV4QmFja2VuZEltcGw6OmdldEludGVy
bmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkluZAogICAgICAgICBi
YWNraW5nU3RvcmVDdXJzb3ItPmNsb3NlKCk7CiAgICAgfQogCi0gICAgU3RyaW5nIHZhbHVlID0g
aW5kZXgtPmJhY2tpbmdTdG9yZSgpLT5nZXRPYmplY3RWaWFJbmRleChpbmRleC0+ZGF0YWJhc2VJ
ZCgpLCBpbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlkKCksIGluZGV4LT5pZCgpLCAqa2V5
KTsKKyAgICBSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5ID0gaW5kZXgtPmJhY2tpbmdTdG9yZSgp
LT5nZXRQcmltYXJ5S2V5VmlhSW5kZXgoaW5kZXgtPmRhdGFiYXNlSWQoKSwgaW5kZXgtPm1fb2Jq
ZWN0U3RvcmVCYWNrZW5kLT5pZCgpLCBpbmRleC0+aWQoKSwgKmtleSk7CisKKyAgICBTdHJpbmcg
dmFsdWUgPSBpbmRleC0+YmFja2luZ1N0b3JlKCktPmdldE9iamVjdFN0b3JlUmVjb3JkKGluZGV4
LT5kYXRhYmFzZUlkKCksIGluZGV4LT5tX29iamVjdFN0b3JlQmFja2VuZC0+aWQoKSwgKnByaW1h
cnlLZXkpOworCiAgICAgaWYgKHZhbHVlLmlzTnVsbCgpKSB7CiAgICAgICAgIGNhbGxiYWNrcy0+
b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6dW5kZWZpbmVkVmFsdWUoKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CisgICAgaWYgKGluZGV4LT5tX29iamVjdFN0b3JlQmFja2VuZC0+
YXV0b0luY3JlbWVudCgpICYmICFpbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmtleVBhdGgo
KS5pc051bGwoKSkgeworICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlKHZhbHVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHJpbWFyeUtleSwgaW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5rZXlQYXRoKCkp
OworICAgICAgICByZXR1cm47CisgICAgfQogICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUodmFsdWUpKTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoLmNwcAppbmRleCAwYzM1ZDIw
ZDYwNmQ3ZDVjZmI0MTc5MzVhNjdkNjBiZDQ1MmRmM2E4Li44YzdiODRmOWU4NGFkZWNjNWI4MGVl
YmViZGY0YjIwMDQyOTI5N2Q4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJLZXlQYXRoLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJLZXlQYXRoLmNwcApAQCAtMjM2LDYgKzIzNiw0OCBAQCBJREJLZXlQYXRoOjpvcGVy
YXRvciBQYXNzUmVmUHRyPElEQkFueT4oKSBjb25zdAogICAgIHJldHVybiAwOwogfQogCitib29s
IElEQktleVBhdGg6Om9wZXJhdG9yPT0oUGFzc1JlZlB0cjxJREJBbnk+IG90aGVyKSBjb25zdAor
eworICAgIGlmICghaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0
Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgTnVsbFR5cGU6CisgICAgICAgIHJldHVybiBvdGhlci0+
dHlwZSgpID09IElEQkFueTo6TnVsbFR5cGU7CisgICAgY2FzZSBTdHJpbmdUeXBlOgorICAgICAg
ICByZXR1cm4gb3RoZXItPnR5cGUoKSA9PSBJREJBbnk6OlN0cmluZ1R5cGUgJiYgb3RoZXItPnN0
cmluZygpID09IHN0cmluZygpOworICAgIGNhc2UgQXJyYXlUeXBlOgorICAgICAgICBpZiAob3Ro
ZXItPnR5cGUoKSAhPSBJREJBbnk6OkRPTVN0cmluZ0xpc3RUeXBlKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBvdGhlckxpc3QgPSBv
dGhlci0+ZG9tU3RyaW5nTGlzdCgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
YXJyYXkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChvdGhlckxpc3QtPml0ZW0oaSkg
IT0gbV9hcnJheVtpXSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBJREJLZXlQYXRoOjpvcGVyYXRvcj09KGNvbnN0
IElEQktleVBhdGgmIG90aGVyKSBjb25zdAoreworICAgIGlmIChtX3R5cGUgIT0gb3RoZXIubV90
eXBlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAg
IGNhc2UgTnVsbFR5cGU6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2UgU3RyaW5nVHlw
ZToKKyAgICAgICAgcmV0dXJuIG1fc3RyaW5nID09IG90aGVyLm1fc3RyaW5nOworICAgIGNhc2Ug
QXJyYXlUeXBlOgorICAgICAgICByZXR1cm4gbV9hcnJheSA9PSBvdGhlci5tX2FycmF5OworICAg
IH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJLZXlQYXRoLmgKaW5kZXggZjUyMzZjMTUyZjAyY2JkYTI4ZGI4YzMxNTFmMmRkODU3
ZWFhZWNlOS4uZGYzMWUyYWJjNjVlYjdhMzI3YzlmNTkxNzgzNWNjMzg2YTI0YTlmMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguaApAQCAtNzIsNiAr
NzIsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiBtX3R5cGUg
PT0gTnVsbFR5cGU7IH0KICAgICBib29sIGlzVmFsaWQoKSBjb25zdDsKICAgICBvcGVyYXRvciBQ
YXNzUmVmUHRyPElEQkFueT4oKSBjb25zdDsKKyAgICBib29sIG9wZXJhdG9yPT0oUGFzc1JlZlB0
cjxJREJBbnk+IG90aGVyKSBjb25zdDsKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSURCS2V5
UGF0aCYgb3RoZXIpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIFR5cGUgbV90eXBlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFj
a2luZ1N0b3JlLmNwcAppbmRleCAzMmUyZjY4MTU3OTQwOWEwOTA4ZDI5YTE4NzJjMGNkYzU2Yjg5
ZWY5Li4wNTEzYzM1MzNmY2FiMGZmODUyZGMwYTkxMzQ0NTdlY2YzNjI5N2YzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3Jl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFj
a2luZ1N0b3JlLmNwcApAQCAtOTY3LDE1ICs5NjcsNiBAQCBib29sIElEQkxldmVsREJCYWNraW5n
U3RvcmU6OmRlbGV0ZUluZGV4RGF0YUZvclJlY29yZChpbnQ2NF90LCBpbnQ2NF90LCBpbnQ2NF90
LAogICAgIHJldHVybiB0cnVlOwogfQogCi1TdHJpbmcgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6
Z2V0T2JqZWN0VmlhSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBrZXkpCi17Ci0gICAgUmVmUHRyPElE
QktleT4gcHJpbWFyeUtleSA9IGdldFByaW1hcnlLZXlWaWFJbmRleChkYXRhYmFzZUlkLCBvYmpl
Y3RTdG9yZUlkLCBpbmRleElkLCBrZXkpOwotICAgIGlmICghcHJpbWFyeUtleSkKLSAgICAgICAg
cmV0dXJuIFN0cmluZygpOwotCi0gICAgcmV0dXJuIGdldE9iamVjdFN0b3JlUmVjb3JkKGRhdGFi
YXNlSWQsIG9iamVjdFN0b3JlSWQsICpwcmltYXJ5S2V5KTsKLX0KLQogc3RhdGljIGJvb2wgdmVy
c2lvbkV4aXN0cyhMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCB2ZXJzaW9uLCBjb25zdCBWZWN0
b3I8Y2hhcj4mIGVuY29kZWRQcmltYXJ5S2V5KQogewogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBr
ZXkgPSBFeGlzdHNFbnRyeUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGVu
Y29kZWRQcmltYXJ5S2V5KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaAppbmRleCBjNWE5ZTJlZTMwOWU4Y2Ez
ZmQ3ZjcwZjBhYTJiYjgwY2VjMDQ2YjJlLi4wYmU5MzRmZmRhOWJjZjgwOTFkNTM0MTBhNmFiY2M4
MDBmNTkwZDM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJMZXZlbERCQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oCkBAIC02OSw3ICs2OSw2IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCk7CiAgICAgdmlydHVhbCBib29sIHB1dElu
ZGV4RGF0YUZvclJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmLCBjb25zdCBPYmplY3RTdG9yZVJlY29y
ZElkZW50aWZpZXIqKTsKICAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3Jk
KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4
SWQsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciopOwotICAgIHZpcnR1YWwgU3Ry
aW5nIGdldE9iamVjdFZpYUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYpOwogICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxJREJLZXk+IGdldFByaW1hcnlLZXlWaWFJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmKTsK
ICAgICB2aXJ0dWFsIGJvb2wga2V5RXhpc3RzSW5JbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGluZGV4
S2V5LCBSZWZQdHI8SURCS2V5PiYgZm91bmRQcmltYXJ5S2V5KTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCmluZGV4IGRjOWJl
YzViNDkwNWI2Y2I4ZDE2MWUyYjAwNzU1ODJjMzlmNTY2ZTUuLjdmN2NkNzRiYjBlZGNiNjNmODQ1
NDBiZWIwYzk1OWRlY2U2MjZmMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKQEAgLTEwMiwxOSArMTAyLDQ0IEBAIFBhc3NS
ZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OmdldChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LCBQYXNzCiAgICAgcmV0dXJuIGdldChjb250ZXh0LCBrZXlSYW5nZS5yZWxl
YXNlKCksIGVjKTsKIH0KIAorc3RhdGljIHZvaWQgZ2VuZXJhdGVJbmRleEtleXNGb3JWYWx1ZShj
b25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gb2Jq
ZWN0VmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElEQk9iamVj
dFN0b3JlOjpJbmRleEtleXMqIGluZGV4S2V5cykKK3sKKyAgICBBU1NFUlQoaW5kZXhLZXlzKTsK
KyAgICBSZWZQdHI8SURCS2V5PiBpbmRleEtleSA9IGNyZWF0ZUlEQktleUZyb21TZXJpYWxpemVk
VmFsdWVBbmRLZXlQYXRoKG9iamVjdFZhbHVlLCBpbmRleE1ldGFkYXRhLmtleVBhdGgpOworCisg
ICAgaWYgKCFpbmRleEtleSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFpbmRleE1ldGFk
YXRhLm11bHRpRW50cnkgfHwgaW5kZXhLZXktPnR5cGUoKSAhPSBJREJLZXk6OkFycmF5VHlwZSkg
eworICAgICAgICBpZiAoIWluZGV4S2V5LT5pc1ZhbGlkKCkpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgaW5kZXhLZXlzLT5hcHBlbmQoaW5kZXhLZXkpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIEFTU0VSVChpbmRleE1ldGFkYXRhLm11bHRpRW50cnkpOworICAgICAgICBBU1NFUlQo
aW5kZXhLZXktPnR5cGUoKSA9PSBJREJLZXk6OkFycmF5VHlwZSk7CisgICAgICAgIGluZGV4S2V5
ID0gSURCS2V5OjpjcmVhdGVNdWx0aUVudHJ5QXJyYXkoaW5kZXhLZXktPmFycmF5KCkpOworCisg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5kZXhLZXktPmFycmF5KCkuc2l6ZSgpOyAr
K2kpCisgICAgICAgICAgICBpbmRleEtleXMtPmFwcGVuZChpbmRleEtleS0+YXJyYXkoKVtpXSk7
CisgICAgfQorfQorCiBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjphZGQo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKICAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlOjphZGQiKTsKLSAgICByZXR1cm4g
cHV0KElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6QWRkT25seSwgY29udGV4dCwgdmFs
dWUsIGtleSwgZWMpOworICAgIHJldHVybiBwdXQoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJm
YWNlOjpBZGRPbmx5LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgY29udGV4dCwgdmFsdWUsIGtleSwg
ZWMpOwogfQogCiBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpwdXQoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBFeGNlcHRpb25Db2RlJiBlYykK
IHsKICAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlOjpwdXQiKTsKLSAgICByZXR1cm4gcHV0
KElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6QWRkT3JVcGRhdGUsIGNvbnRleHQsIHZh
bHVlLCBrZXksIGVjKTsKKyAgICByZXR1cm4gcHV0KElEQk9iamVjdFN0b3JlQmFja2VuZEludGVy
ZmFjZTo6QWRkT3JVcGRhdGUsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBjb250ZXh0LCB2YWx1ZSwg
a2V5LCBlYyk7CiB9CiAKLVBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1
dChJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vZGUgcHV0TW9kZSwgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IHBycFZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4gcHJwS2V5LCBFeGNlcHRpb25Db2RlJiBl
YykKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dChJREJPYmplY3RT
dG9yZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJBbnk+
IHNvdXJjZSwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4gcHJwS2V5LCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlOjpwdXQi
KTsKICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSA9IHBycFZhbHVlOwpA
QCAtMTQxLDcgKzE2Niw3IEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6
OnB1dChJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vCiAgICAgY29uc3QgYm9v
bCB1c2VzSW5MaW5lS2V5cyA9ICFrZXlQYXRoLmlzTnVsbCgpOwogICAgIGNvbnN0IGJvb2wgaGFz
S2V5R2VuZXJhdG9yID0gYXV0b0luY3JlbWVudCgpOwogCi0gICAgaWYgKHVzZXNJbkxpbmVLZXlz
ICYmIGtleSkgeworICAgIGlmIChwdXRNb2RlICE9IElEQk9iamVjdFN0b3JlQmFja2VuZEludGVy
ZmFjZTo6Q3Vyc29yVXBkYXRlICYmIHVzZXNJbkxpbmVLZXlzICYmIGtleSkgewogICAgICAgICBl
YyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgfQpAQCAtMTY3LDE1ICsxOTIsMjYgQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmpl
Y3RTdG9yZTo6cHV0KElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6UHV0TW8KICAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgICAgICBp
ZiAoa2V5UGF0aEtleSkKKyAgICAgICAgICAgIGtleSA9IGtleVBhdGhLZXk7CiAgICAgfQogICAg
IGlmIChrZXkgJiYgIWtleS0+aXNWYWxpZCgpKSB7CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VF
eGNlcHRpb246OkRBVEFfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBSZWZQ
dHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJB
bnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7Ci0gICAgLy8gRklYTUU6IFBh
c3MgdGhyb3VnaCBrZXlQYXRoS2V5IGFzIGtleSB0byBzaW1wbGlmeSBiYWNrIGVuZCBpbXBsZW1l
bnRhdGlvbi4KLSAgICBtX2JhY2tlbmQtPnB1dCh2YWx1ZS5yZWxlYXNlKCksIGtleS5yZWxlYXNl
KCksIHB1dE1vZGUsIHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOworICAg
IFZlY3RvcjxTdHJpbmc+IGluZGV4TmFtZXM7CisgICAgVmVjdG9yPEluZGV4S2V5cz4gaW5kZXhL
ZXlzOworICAgIGZvciAoSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6SW5kZXhNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbV9tZXRhZGF0YS5pbmRleGVzLmJlZ2luKCk7IGl0ICE9IG1fbWV0YWRhdGEu
aW5kZXhlcy5lbmQoKTsgKytpdCkgeworICAgICAgICBJbmRleEtleXMga2V5czsKKyAgICAgICAg
Z2VuZXJhdGVJbmRleEtleXNGb3JWYWx1ZShpdC0+c2Vjb25kLCB2YWx1ZSwgJmtleXMpOworICAg
ICAgICBpbmRleE5hbWVzLmFwcGVuZChpdC0+Zmlyc3QpOworICAgICAgICBpbmRleEtleXMuYXBw
ZW5kKGtleXMpOworICAgIH0KKyAgICBBU1NFUlQoaW5kZXhLZXlzLnNpemUoKSA9PSBpbmRleE5h
bWVzLnNpemUoKSk7CisKKyAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVl
c3Q6OmNyZWF0ZShjb250ZXh0LCBzb3VyY2UsIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOworICAgIG1f
YmFja2VuZC0+cHV0V2l0aEluZGV4S2V5cyh2YWx1ZS5yZWxlYXNlKCksIGtleS5yZWxlYXNlKCks
IHB1dE1vZGUsIHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgaW5kZXhOYW1lcywg
aW5kZXhLZXlzLCBlYyk7CiAgICAgaWYgKGVjKSB7CiAgICAgICAgIHJlcXVlc3QtPm1hcmtFYXJs
eURlYXRoKCk7CiAgICAgICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmgKaW5kZXggZWY3YzA2M2I4ZjgyMjY0MTdhN2Jm
ZjhmMmZlMTM2OTgyNDNiODUzNy4uNmZlZmM0ZTJiYWQwOTVhZTZkMTMzNGMzZWJiOTZmZTkwODli
ODgwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2Jq
ZWN0U3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmpl
Y3RTdG9yZS5oCkBAIC05NSw3ICs5NSw3IEBAIHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPElEQlJl
cXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleVJh
bmdlPiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gY291bnQo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5PiwgRXhjZXB0aW9uQ29k
ZSYpOwogCi0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBwdXQoSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW50ZXJmYWNlOjpQdXRNb2RlLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIEV4Y2VwdGlvbkNv
ZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IHB1dChJREJPYmplY3RTdG9yZUJhY2tl
bmRJbnRlcmZhY2U6OlB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQW55PiBzb3VyY2UsIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NS
ZWZQdHI8SURCS2V5PiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgbWFya0RlbGV0ZWQoKSB7
IG1fZGVsZXRlZCA9IHRydWU7IH0KICAgICB2b2lkIHRyYW5zYWN0aW9uRmluaXNoZWQoKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAppbmRleCBiOTYyZTk0ODdhMjE2ZmFjNTg5OGUwYTA3
MmViMDY1YjM2OGZiNTQ1Li43NDY5MzNlZjA0ZGU2NjQwMDQyM2JhZWM5OGNkODU1NmNkZmJhODgw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcApAQCAtMTIwLDQ4ICsxMjAsNiBAQCB2b2lk
IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmdldEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQYXNzUmVmUHRyPAogICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUod2lyZURhdGEpKTsKIH0KIAotc3RhdGljIFBhc3NS
ZWZQdHI8SURCS2V5PiBmZXRjaEtleUZyb21LZXlQYXRoKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSog
dmFsdWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgpCi17Ci0gICAgSURCX1RSQUNFKCJJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpmZXRjaEtleUZyb21LZXlQYXRoIik7Ci0gICAgQVNTRVJU
KCFrZXlQYXRoLmlzTnVsbCgpKTsKLQotICAgIFZlY3RvcjxSZWZQdHI8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiA+IHZhbHVlczsKLSAgICB2YWx1ZXMuYXBwZW5kKHZhbHVlKTsKLSAgICBWZWN0b3I8
UmVmUHRyPElEQktleT4gPiBrZXlzOwotICAgIElEQktleVBhdGhCYWNrZW5kSW1wbDo6Y3JlYXRl
SURCS2V5c0Zyb21TZXJpYWxpemVkVmFsdWVzQW5kS2V5UGF0aCh2YWx1ZXMsIGtleVBhdGgsIGtl
eXMpOwotICAgIGlmIChrZXlzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgQVNT
RVJUKGtleXMuc2l6ZSgpID09IDEpOwotICAgIHJldHVybiBrZXlzWzBdLnJlbGVhc2UoKTsKLX0K
LQotc3RhdGljIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBpbmplY3RLZXlJbnRv
S2V5UGF0aChQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4gdmFsdWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgpCi17Ci0gICAgSURCX1RS
QUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjppbmplY3RLZXlJbnRvS2V5UGF0aCIpOwot
ICAgIHJldHVybiBJREJLZXlQYXRoQmFja2VuZEltcGw6OmluamVjdElEQktleUludG9TZXJpYWxp
emVkVmFsdWUoa2V5LCB2YWx1ZSwga2V5UGF0aCk7Ci19Ci0KLS8vIEZJWE1FOiBSZW1vdmUgdGhp
cyBtZXRob2Qgd2hlbiBnZXQtc2lkZSBrZXkgaW5qZWN0aW9uIGlzIHRoZSBub3JtLgotdm9pZCBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IHBycFZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4gcHJwS2V5LCBQdXRNb2RlIHB1dE1v
ZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewot
ICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0Iik7Ci0gICAgSURC
X1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRXaXRoSW5kZXhLZXlzIik7Ci0K
LSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUgPSB0aGlz
OwotICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlID0gcHJwVmFsdWU7Ci0g
ICAgUmVmUHRyPElEQktleT4ga2V5ID0gcHJwS2V5OwotICAgIFJlZlB0cjxJREJDYWxsYmFja3M+
IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpmcm9tKHRy
YW5zYWN0aW9uUHRyKTsKLSAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSAhPSBJREJUcmFu
c2FjdGlvbjo6UkVBRF9PTkxZKTsKLQotICAgIC8vIE51bGwgcG9pbnRlcnMgaGVyZSBzaWduaWZ5
IHRoYXQgaW5kZXgga2V5cyBzaG91bGQgYmUgZ2VuZXJhdGVkIGFzIGEgcGFydCBvZiB0aGlzIHB1
dC4KLSAgICBPd25QdHI8VmVjdG9yPFN0cmluZz4gPiBudWxsSW5kZXhOYW1lczsKLSAgICBPd25Q
dHI8VmVjdG9yPEluZGV4S2V5cz4gPiBudWxsSW5kZXhLZXlzOwotICAgIGlmICghdHJhbnNhY3Rp
b24tPnNjaGVkdWxlVGFzaygKLSAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwsIG9iamVjdFN0b3JlLCB2YWx1ZSwga2V5
LCBwdXRNb2RlLCBjYWxsYmFja3MsIHRyYW5zYWN0aW9uLCBudWxsSW5kZXhOYW1lcy5yZWxlYXNl
KCksIG51bGxJbmRleEtleXMucmVsZWFzZSgpKSkpCi0gICAgICAgIGVjID0gSURCRGF0YWJhc2VF
eGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKLX0KLQogdm9pZCBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpwdXRXaXRoSW5kZXhLZXlzKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiBwcnBWYWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwgUHV0TW9kZSBw
dXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBjb25zdCBWZWN0b3I8U3RyaW5n
PiYgaW5kZXhOYW1lcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cywgRXhjZXB0
aW9uQ29kZSYgZWMpCiB7CiAgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
OjpwdXRXaXRoSW5kZXhLZXlzIik7CkBAIC0xNzYsNiArMTM0LDggQEAgdm9pZCBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpwdXRXaXRoSW5kZXhLZXlzKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHUKICAgICBPd25QdHI8VmVjdG9yPFN0cmluZz4gPiBuZXdJbmRleE5hbWVzID0gYWRv
cHRQdHIobmV3IFZlY3RvcjxTdHJpbmc+KGluZGV4TmFtZXMpKTsKICAgICBPd25QdHI8VmVjdG9y
PEluZGV4S2V5cz4gPiBuZXdJbmRleEtleXMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPEluZGV4S2V5
cz4oaW5kZXhLZXlzKSk7CiAKKyAgICBBU1NFUlQoYXV0b0luY3JlbWVudCgpIHx8IGtleSk7CisK
ICAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soCiAgICAgICAgICAgICBjcmVhdGVD
YWxsYmFja1Rhc2soJklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsLCBvYmpl
Y3RTdG9yZSwgdmFsdWUsIGtleSwgcHV0TW9kZSwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbiwgbmV3
SW5kZXhOYW1lcy5yZWxlYXNlKCksIG5ld0luZGV4S2V5cy5yZWxlYXNlKCkpKSkKICAgICAgICAg
ZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOwpAQCAt
MTk0LDE4ICsxNTQsMTkgQEAgcHVibGljOgogICAgICAgICAsIG1faW5kZXhLZXlzKGluZGV4S2V5
cykKICAgICB7IH0KIAotICAgIGJvb2wgZ2VuZXJhdGVJbmRleEtleXNGb3JWYWx1ZShTZXJpYWxp
emVkU2NyaXB0VmFsdWUqIG9iamVjdFZhbHVlKQorICAgIC8vIEZJWE1FOiByZW1vdmUgdGhpcyBv
bmNlIGNyZWF0ZUluZGV4KCkgZ2VuZXJhdGVzIHRoZXNlIGluIHRoZSByZW5kZXJlci4KKyAgICB2
b2lkIGdlbmVyYXRlSW5kZXhLZXlzRm9yVmFsdWUoU2VyaWFsaXplZFNjcmlwdFZhbHVlKiBvYmpl
Y3RWYWx1ZSkKICAgICB7CiAgICAgICAgIG1faW5kZXhLZXlzLmNsZWFyKCk7CiAKLSAgICAgICAg
UmVmUHRyPElEQktleT4gaW5kZXhLZXkgPSBmZXRjaEtleUZyb21LZXlQYXRoKG9iamVjdFZhbHVl
LCBtX2luZGV4TWV0YWRhdGEua2V5UGF0aCk7CisgICAgICAgIFJlZlB0cjxJREJLZXk+IGluZGV4
S2V5ID0gZmV0Y2hLZXlGcm9tS2V5UGF0aChvYmplY3RWYWx1ZSk7CiAKICAgICAgICAgaWYgKCFp
bmRleEtleSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgcmV0dXJuOwog
CiAgICAgICAgIGlmICghbV9pbmRleE1ldGFkYXRhLm11bHRpRW50cnkgfHwgaW5kZXhLZXktPnR5
cGUoKSAhPSBJREJLZXk6OkFycmF5VHlwZSkgewogICAgICAgICAgICAgaWYgKCFpbmRleEtleS0+
aXNWYWxpZCgpKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAg
IHJldHVybjsKIAogICAgICAgICAgICAgbV9pbmRleEtleXMuYXBwZW5kKGluZGV4S2V5KTsKICAg
ICAgICAgfSBlbHNlIHsKQEAgLTIxMywxMSArMTc0LDkgQEAgcHVibGljOgogICAgICAgICAgICAg
QVNTRVJUKGluZGV4S2V5LT50eXBlKCkgPT0gSURCS2V5OjpBcnJheVR5cGUpOwogICAgICAgICAg
ICAgaW5kZXhLZXkgPSBJREJLZXk6OmNyZWF0ZU11bHRpRW50cnlBcnJheShpbmRleEtleS0+YXJy
YXkoKSk7CiAKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5kZXhLZXktPmFy
cmF5KCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
aW5kZXhLZXktPmFycmF5KCkuc2l6ZSgpOyArK2kpCiAgICAgICAgICAgICAgICAgbV9pbmRleEtl
eXMuYXBwZW5kKGluZGV4S2V5LT5hcnJheSgpW2ldKTsKLSAgICAgICAgICAgIH0KICAgICAgICAg
fQotICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICBib29sIHZlcmlmeUluZGV4S2V5
cyhJREJCYWNraW5nU3RvcmUmIGJhY2tpbmdTdG9yZSwKQEAgLTI2Niw2ICsyMjUsMjEgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQorCisgICAgUGFzc1JlZlB0cjxJREJLZXk+IGZldGNoS2V5RnJvbUtleVBhdGgoU2VyaWFs
aXplZFNjcmlwdFZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIElEQl9UUkFDRSgiSW5kZXhX
cml0ZXI6OmZldGNoS2V5RnJvbUtleVBhdGgiKTsKKworICAgICAgICBWZWN0b3I8UmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4gPiB2YWx1ZXM7CisgICAgICAgIHZhbHVlcy5hcHBlbmQodmFs
dWUpOworICAgICAgICBWZWN0b3I8UmVmUHRyPElEQktleT4gPiBrZXlzOworICAgICAgICBJREJL
ZXlQYXRoQmFja2VuZEltcGw6OmNyZWF0ZUlEQktleXNGcm9tU2VyaWFsaXplZFZhbHVlc0FuZEtl
eVBhdGgodmFsdWVzLCBtX2luZGV4TWV0YWRhdGEua2V5UGF0aCwga2V5cyk7CisgICAgICAgIGlm
IChrZXlzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBBU1NFUlQo
a2V5cy5zaXplKCkgPT0gMSk7CisgICAgICAgIHJldHVybiBrZXlzWzBdLnJlbGVhc2UoKTsKKyAg
ICB9CisKICAgICBjb25zdCBJREJJbmRleE1ldGFkYXRhIG1faW5kZXhNZXRhZGF0YTsKICAgICBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5cyBtX2luZGV4S2V5czsKIH07
CkBAIC0yNzksNDAgKzI1MywxOCBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1
dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPAogICAgIFJlZlB0
cjxJREJLZXk+IGtleSA9IHBycEtleTsKICAgICBPd25QdHI8VmVjdG9yPFN0cmluZz4gPiBpbmRl
eE5hbWVzID0gcG9wSW5kZXhOYW1lczsKICAgICBPd25QdHI8VmVjdG9yPEluZGV4S2V5cz4gPiBp
bmRleEtleXMgPSBwb3BJbmRleEtleXM7Ci0gICAgQVNTRVJUKCghaW5kZXhOYW1lcyAmJiAhaW5k
ZXhLZXlzKSB8fCBpbmRleE5hbWVzLT5zaXplKCkgPT0gaW5kZXhLZXlzLT5zaXplKCkpOworICAg
IEFTU0VSVChpbmRleE5hbWVzICYmIGluZGV4S2V5cyAmJiBpbmRleE5hbWVzLT5zaXplKCkgPT0g
aW5kZXhLZXlzLT5zaXplKCkpOwogICAgIGNvbnN0IGJvb2wgYXV0b0luY3JlbWVudCA9IG9iamVj
dFN0b3JlLT5hdXRvSW5jcmVtZW50KCk7CiAgICAgYm9vbCBrZXlXYXNHZW5lcmF0ZWQgPSBmYWxz
ZTsKIAotICAgIGlmIChwdXRNb2RlICE9IEN1cnNvclVwZGF0ZSkgewotICAgICAgICBjb25zdCBi
b29sIGhhc0tleVBhdGggPSAhb2JqZWN0U3RvcmUtPm1fa2V5UGF0aC5pc051bGwoKTsKLSAgICAg
ICAgaWYgKGhhc0tleVBhdGgpIHsKLSAgICAgICAgICAgIEFTU0VSVCgha2V5KTsKLSAgICAgICAg
ICAgIFJlZlB0cjxJREJLZXk+IGtleVBhdGhLZXkgPSBmZXRjaEtleUZyb21LZXlQYXRoKHZhbHVl
LmdldCgpLCBvYmplY3RTdG9yZS0+bV9rZXlQYXRoKTsKLSAgICAgICAgICAgIGlmIChrZXlQYXRo
S2V5KQotICAgICAgICAgICAgICAgIGtleSA9IGtleVBhdGhLZXk7Ci0gICAgICAgIH0KLSAgICAg
ICAgaWYgKGF1dG9JbmNyZW1lbnQpIHsKLSAgICAgICAgICAgIGlmICgha2V5KSB7Ci0gICAgICAg
ICAgICAgICAgUmVmUHRyPElEQktleT4gYXV0b0luY0tleSA9IG9iamVjdFN0b3JlLT5nZW5lcmF0
ZUtleSgpOwotICAgICAgICAgICAgICAgIGtleVdhc0dlbmVyYXRlZCA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgaWYgKCFhdXRvSW5jS2V5LT5pc1ZhbGlkKCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6REFUQV9FUlIsICJNYXhpbXVtIGtleSBnZW5lcmF0b3IgdmFsdWUgcmVhY2hl
ZC4iKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIHdoZW4gZ2V0LXNpZGUga2V5IGlu
amVjdGlvbiBpcyB0aGUgbm9ybS4KLSAgICAgICAgICAgICAgICBpZiAoaGFzS2V5UGF0aCkgewot
ICAgICAgICAgICAgICAgICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZUFm
dGVySW5qZWN0aW9uID0gaW5qZWN0S2V5SW50b0tleVBhdGgoYXV0b0luY0tleSwgdmFsdWUsIG9i
amVjdFN0b3JlLT5tX2tleVBhdGgpOwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQodmFsdWVB
ZnRlckluamVjdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghdmFsdWVBZnRlckluamVj
dGlvbikgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2tzIGluIHB1dCgpIGVuc3Vy
ZSB0aGlzIHNob3VsZCBvbmx5IGhhcHBlbiBpZiBJL08gZXJyb3Igb2NjdXJzLgotICAgICAgICAg
ICAgICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0
ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJJbnRlcm5hbCBlcnJvciBpbnNl
cnRpbmcgZ2VuZXJhdGVkIGtleSBpbnRvIHRoZSBvYmplY3QuIikpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIHZhbHVlID0gdmFsdWVBZnRlckluamVjdGlvbjsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAga2V5ID0gYXV0b0luY0tleTsKLSAgICAgICAgICAgIH0KKyAgICBpZiAocHV0
TW9kZSAhPSBDdXJzb3JVcGRhdGUgJiYgYXV0b0luY3JlbWVudCAmJiAha2V5KSB7CisgICAgICAg
IFJlZlB0cjxJREJLZXk+IGF1dG9JbmNLZXkgPSBvYmplY3RTdG9yZS0+Z2VuZXJhdGVLZXkoKTsK
KyAgICAgICAga2V5V2FzR2VuZXJhdGVkID0gdHJ1ZTsKKyAgICAgICAgaWYgKCFhdXRvSW5jS2V5
LT5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFz
ZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSLCAiTWF4aW11bSBr
ZXkgZ2VuZXJhdG9yIHZhbHVlIHJlYWNoZWQuIikpOworICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CisgICAgICAgIGtleSA9IGF1dG9JbmNLZXk7CiAgICAgfQogCiAgICAgQVNTRVJUKGtl
eSAmJiBrZXktPmlzVmFsaWQoKSk7CkBAIC0zMjUsMTEgKzI3NywxNyBAQCB2b2lkIElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQ
YXNzUmVmUHRyPAogCiAgICAgVmVjdG9yPE93blB0cjxJbmRleFdyaXRlcj4gPiBpbmRleFdyaXRl
cnM7CiAgICAgSGFzaE1hcDxTdHJpbmcsIEluZGV4S2V5cz4gaW5kZXhLZXlNYXA7Ci0gICAgLy8g
RklYTUU6IFR1cm4gdGhpcyBpbnRvIGFuIEFTU0VSVChpbmRleEtleXMpIHdoZW4gZ2V0LXNpZGUg
a2V5IGluamVjdGlvbiBpcyB0aGUgbm9ybS4KLSAgICBib29sIGhhdmVJbmRleEtleXMgPSBpbmRl
eEtleXMgJiYgIWluZGV4S2V5cy0+aXNFbXB0eSgpOwotICAgIGlmIChoYXZlSW5kZXhLZXlzKSB7
Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5kZXhOYW1lcy0+c2l6ZSgpOyArK2kp
Ci0gICAgICAgICAgICBpbmRleEtleU1hcC5hZGQoaW5kZXhOYW1lcy0+YXQoaSksIGluZGV4S2V5
cy0+YXQoaSkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5kZXhOYW1lcy0+c2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgSW5kZXhLZXlzIGtleXMgPSBpbmRleEtleXMtPmF0KGkpOworCisg
ICAgICAgIC8vIElmIHRoZSBvYmplY3RTdG9yZSBpcyB1c2luZyBhdXRvSW5jcmVtZW50LCB0aGVu
IGFueSBpbmRleGVzIHdpdGggYW4gaWRlbnRpY2FsIGtleVBhdGggbmVlZCB0byBhbHNvIHVzZSB0
aGUgcHJpbWFyeSAoZ2VuZXJhdGVkKSBrZXkgYXMgYSBrZXkuCisgICAgICAgIGlmIChrZXlXYXNH
ZW5lcmF0ZWQpIHsKKyAgICAgICAgICAgIGNvbnN0IElEQktleVBhdGgmIGluZGV4S2V5UGF0aCA9
IG9iamVjdFN0b3JlLT5tX2luZGV4ZXMuZ2V0KGluZGV4TmFtZXMtPmF0KGkpKS0+a2V5UGF0aCgp
OworICAgICAgICAgICAgaWYgKGluZGV4S2V5UGF0aCA9PSBvYmplY3RTdG9yZS0+a2V5UGF0aCgp
KQorICAgICAgICAgICAgICAgIGtleXMuYXBwZW5kKGtleSk7CisgICAgICAgIH0KKworICAgICAg
ICBpbmRleEtleU1hcC5hZGQoaW5kZXhOYW1lcy0+YXQoaSksIGtleXMpOwogICAgIH0KIAogICAg
IGZvciAoSW5kZXhNYXA6Oml0ZXJhdG9yIGl0ID0gb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5iZWdp
bigpOyBpdCAhPSBvYmplY3RTdG9yZS0+bV9pbmRleGVzLmVuZCgpOyArK2l0KSB7CkBAIC0zMzks
MTIgKzI5Nyw4IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8CiAgICAgICAgICAgICBjb250aW51
ZTsgLy8gVGhlIGluZGV4IG9iamVjdCBoYXMgYmVlbiBjcmVhdGVkLCBidXQgZG9lcyBub3QgZXhp
c3QgaW4gdGhlIGRhdGFiYXNlIHlldC4KIAogICAgICAgICBPd25QdHI8SW5kZXhXcml0ZXI+IGlu
ZGV4V3JpdGVyOwotICAgICAgICBpZiAoaGF2ZUluZGV4S2V5cykKLSAgICAgICAgICAgIGluZGV4
V3JpdGVyID0gYWRvcHRQdHIobmV3IEluZGV4V3JpdGVyKGluZGV4LT5tZXRhZGF0YSgpLCBpbmRl
eEtleU1hcC5nZXQoaXQtPmZpcnN0KSkpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGlu
ZGV4V3JpdGVyID0gYWRvcHRQdHIobmV3IEluZGV4V3JpdGVyKGluZGV4LT5tZXRhZGF0YSgpKSk7
Ci0gICAgICAgICAgICBpbmRleFdyaXRlci0+Z2VuZXJhdGVJbmRleEtleXNGb3JWYWx1ZSh2YWx1
ZS5nZXQoKSk7Ci0gICAgICAgIH0KKyAgICAgICAgaW5kZXhXcml0ZXIgPSBhZG9wdFB0cihuZXcg
SW5kZXhXcml0ZXIoaW5kZXgtPm1ldGFkYXRhKCksIGluZGV4S2V5TWFwLmdldChpdC0+Zmlyc3Qp
KSk7CisKICAgICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKICAgICAgICAgaWYgKCFpbmRleFdy
aXRlci0+dmVyaWZ5SW5kZXhLZXlzKCpvYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RTdG9yZS0+ZGF0YWJh
c2VJZCgpLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oCmluZGV4IDY0N2JjMjk3ODQ5ZDY0ZjkxNzU5
Y2Y4NWMzYjE0NGExZTFjNjRjNjIuLjViMWI1NGZjMmRiODVmZDQ5M2FlY2Q3ZDY3YmM1ZGJmOTVh
NTcwNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9i
amVjdFN0b3JlQmFja2VuZEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgKQEAgLTY2LDcgKzY2LDYgQEAgcHVibGlj
OgogCiAgICAgLy8gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlCiAgICAgdmlydHVhbCB2
b2lkIGdldChQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAg
dmlydHVhbCB2b2lkIHB1dChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NS
ZWZQdHI8SURCS2V5PiwgUHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2
b2lkIHB1dFdpdGhJbmRleEtleXMoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQ
YXNzUmVmUHRyPElEQktleT4sIFB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25z
dCBWZWN0b3I8SW5kZXhLZXlzPiYsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQg
ZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYp
OwogICAgIHZpcnR1YWwgdm9pZCBjbGVhcihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZElu
dGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW50ZXJmYWNlLmgKaW5kZXggMzdkM2VlMGY5NDMwZGM1MDdiMDk0ZTM0MGY4OWMz
OWU0YTBkNmQzNC4uZjJmZDA4OGMxYzQzMTRkOGJkNGEzZjM2MzUyYjkzOWIzNDk1ZGZlNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW50ZXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmgKQEAgLTU3LDcgKzU3LDYgQEAgcHVibGlj
OgogICAgIH07CiAgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPElEQktleT4gPiBJbmRleEtleXM7
CiAKLSAgICB2aXJ0dWFsIHZvaWQgcHV0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiwgUGFzc1JlZlB0cjxJREJLZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4s
IElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CiAg
ICAgdmlydHVhbCB2b2lkIHB1dFdpdGhJbmRleEtleXMoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIFB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgY29uc3QgVmVjdG9yPFN0
cmluZz4mLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYsIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CiAg
ICAgdmlydHVhbCB2b2lkIGRlbGV0ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSos
IEV4Y2VwdGlvbkNvZGUmKSA9IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCUmVxdWVzdC5jcHAKaW5kZXggYTFlYWYyOTMwYzFhMWViOGMyN2JjZWU4ZTUyMjA5
ZTgyNjk4NDM0ZS4uZDlmNDIyNTNlOGZjZDBmYTNkYjA3ZWY1ODQ4NDBhZWQyYWI3YjAzZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAKQEAg
LTMzOSwyNCArMzM5LDQyIEBAIHZvaWQgSURCUmVxdWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkU2NyaXB0VmFsCiAgICAgZW5xdWV1ZUV2
ZW50KGNyZWF0ZVN1Y2Nlc3NFdmVudCgpKTsKIH0KIAorI2lmbmRlZiBOREVCVUcKK3N0YXRpYyBQ
YXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBlZmZlY3RpdmVPYmplY3RTdG9yZShQYXNzUmVmUHRy
PElEQkFueT4gc291cmNlKQoreworICAgIGlmIChzb3VyY2UtPnR5cGUoKSA9PSBJREJBbnk6OklE
Qk9iamVjdFN0b3JlVHlwZSkKKyAgICAgICAgcmV0dXJuIHNvdXJjZS0+aWRiT2JqZWN0U3RvcmUo
KTsKKyAgICBpZiAoc291cmNlLT50eXBlKCkgPT0gSURCQW55OjpJREJJbmRleFR5cGUpCisgICAg
ICAgIHJldHVybiBzb3VyY2UtPmlkYkluZGV4KCktPm9iamVjdFN0b3JlKCk7CisKKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZgogCiB2b2lkIElEQlJl
cXVlc3Q6Om9uU3VjY2VzcyhQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwU2Vy
aWFsaXplZFNjcmlwdFZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4gcHJwUHJpbWFyeUtleSwgY29u
c3QgSURCS2V5UGF0aCYga2V5UGF0aCkKIHsKLSAgICBMT0dfRVJST1IoIkNIRUNLSU5HOiBvblN1
Y2Nlc3ModmFsdWUsIGtleSwga2V5cGF0aCkiKTsKLSAgICBBU1NFUlQobV9yZWFkeVN0YXRlID09
IFBFTkRJTkcgfHwgbV9yZWFkeVN0YXRlID09IERPTkUpOwogICAgIGlmIChtX3JlcXVlc3RBYm9y
dGVkKQogICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKG1fcmVhZHlTdGF0ZSA9PSBQRU5ESU5H
KTsKLSAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkU2NyaXB0VmFs
dWUgPSBwcnBTZXJpYWxpemVkU2NyaXB0VmFsdWU7CiAjaWZuZGVmIE5ERUJVRwotICAgIC8vIEZJ
WE1FOiBBc3NlcnQgdW50aWwgd2UgY2FuIGFjdHVhbGx5IGluamVjdCB0aGUgcmlnaHQgdmFsdWUu
CisgICAgQVNTRVJUKGtleVBhdGggPT0gZWZmZWN0aXZlT2JqZWN0U3RvcmUobV9zb3VyY2UpLT5r
ZXlQYXRoKCkpOworI2VuZGlmCisgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFs
dWUgPSBwcnBTZXJpYWxpemVkU2NyaXB0VmFsdWU7CisKICAgICBSZWZQdHI8SURCS2V5PiBwcmlt
YXJ5S2V5ID0gcHJwUHJpbWFyeUtleTsKLSAgICBSZWZQdHI8SURCS2V5PiBleHBlY3RlZEtleSA9
Ci0gICAgICAgICAgICAgIGNyZWF0ZUlEQktleUZyb21TZXJpYWxpemVkVmFsdWVBbmRLZXlQYXRo
KHNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSwga2V5UGF0aCk7Ci0gICAgQVNTRVJUKHByaW1hcnlLZXkp
OwotICAgIEFTU0VSVChleHBlY3RlZEtleS0+aXNFcXVhbChwcmltYXJ5S2V5LmdldCgpKSk7Cisj
aWZuZGVmIE5ERUJVRworICAgIFJlZlB0cjxJREJLZXk+IGV4cGVjdGVkS2V5ID0gY3JlYXRlSURC
S2V5RnJvbVNlcmlhbGl6ZWRWYWx1ZUFuZEtleVBhdGgodmFsdWUsIGtleVBhdGgpOworICAgIEFT
U0VSVCghZXhwZWN0ZWRLZXkgfHwgZXhwZWN0ZWRLZXktPmlzRXF1YWwocHJpbWFyeUtleS5nZXQo
KSkpOwogI2VuZGlmCi0gICAgb25TdWNjZXNzKHNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5yZWxlYXNl
KCkpOworICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlQWZ0ZXJJbmplY3Rp
b24gPSBpbmplY3RJREJLZXlJbnRvU2VyaWFsaXplZFZhbHVlKHByaW1hcnlLZXksIHZhbHVlLCBr
ZXlQYXRoKTsKKyAgICBBU1NFUlQodmFsdWVBZnRlckluamVjdGlvbik7CisgICAgaWYgKCF2YWx1
ZUFmdGVySW5qZWN0aW9uKSB7CisgICAgICAgIC8vIENoZWNrcyBpbiBwdXQoKSBlbnN1cmUgdGhp
cyBzaG91bGQgb25seSBoYXBwZW4gaWYgSS9PIGVycm9yIG9jY3Vycy4KKyAgICAgICAgb25FcnJv
cihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05f
RVJSLCAiSW50ZXJuYWwgZXJyb3IgaW5zZXJ0aW5nIGdlbmVyYXRlZCBrZXkgaW50byB0aGUgb2Jq
ZWN0LiIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICB2YWx1ZSA9IHZhbHVlQWZ0ZXJJ
bmplY3Rpb247CisgICAgb25TdWNjZXNzKHZhbHVlLnJlbGVhc2UoKSk7CiB9CiAKIHZvaWQgSURC
UmVxdWVzdDo6b25TdWNjZXNzV2l0aENvbnRpbnVhdGlvbigpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwCmluZGV4IDY2MWZmMDE1OTVk
ZjA1NTAwZDdmNmNhYzMxMGU4YmM3MTM0NGIzZTguLjIyZjgzMTViMjA0NmM2NTQ3ODE1Yjk0NTYw
YjQ4ZDg4NTg2M2UxZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0lE
QkJpbmRpbmdVdGlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0lE
QkJpbmRpbmdVdGlsaXRpZXMuY3BwCkBAIC0xMDEsNyArMTAxLDYgQEAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4KIGJvb2wgc2V0VmFsdWUodjg6OkhhbmRsZTx2ODo6VmFsdWU+JiB2OE9iamVjdCwgVCBp
bmRleE9yTmFtZSwgY29uc3Qgdjg6OkhhbmRsZTx2ODo6VmFsdWU+JiB2OFZhbHVlKQogewogICAg
IHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBvYmplY3QgPSB2OE9iamVjdC0+VG9PYmplY3QoKTsKLSAg
ICBBU1NFUlQoIW9iamVjdC0+SGFzKGluZGV4T3JOYW1lKSk7CiAgICAgcmV0dXJuIG9iamVjdC0+
U2V0KGluZGV4T3JOYW1lLCB2OFZhbHVlKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvSURCQ3Vyc29yQmFja2VuZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL0lEQkN1cnNvckJhY2tlbmRQcm94eS5jcHAKaW5kZXggY2EzOTBiYTkwNzQy
N2UwOGZkNDc4YmI5NWNmOWUyYzQxNmNkMmZmYi4uMjc3YTY2NWNmMDAwZWU5M2UwOGM0ZmExZGM0
NmM4NTFiOTgxOWYxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURC
Q3Vyc29yQmFja2VuZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9J
REJDdXJzb3JCYWNrZW5kUHJveHkuY3BwCkBAIC02OSwxMSArNjksNiBAQCBQYXNzUmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4gSURCQ3Vyc29yQmFja2VuZFByb3h5Ojp2YWx1ZSgpIGNvbnN0
CiAgICAgcmV0dXJuIG1faWRiQ3Vyc29yLT52YWx1ZSgpOwogfQogCi12b2lkIElEQkN1cnNvckJh
Y2tlbmRQcm94eTo6dXBkYXRlKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1
ZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgRXhjZXB0aW9uQ29kZSYgZWMp
Ci17Ci0gICAgbV9pZGJDdXJzb3ItPnVwZGF0ZSh2YWx1ZSwgbmV3IFdlYklEQkNhbGxiYWNrc0lt
cGwoY2FsbGJhY2tzKSwgZWMpOwotfQotCiB2b2lkIElEQkN1cnNvckJhY2tlbmRQcm94eTo6YWR2
YW5jZSh1bnNpZ25lZCBsb25nIGNvdW50LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJh
Y2tzLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBtX2lkYkN1cnNvci0+YWR2YW5jZShjb3Vu
dCwgbmV3IFdlYklEQkNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzKSwgZWMpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCQ3Vyc29yQmFja2VuZFByb3h5LmggYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJDdXJzb3JCYWNrZW5kUHJveHkuaAppbmRleCA5ZTRi
NTcwMDgxMjZmMzk2Y2QxNGY2MzNjNmEzYTQxZDZiNTkwMjg1Li5kNzQyZjY4ZTVmZTU2ZjM3ZGFh
YzE3NTM3MzZmY2U5N2YwYTI2NGFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9JREJDdXJzb3JCYWNrZW5kUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9JREJDdXJzb3JCYWNrZW5kUHJveHkuaApAQCAtNDUsNyArNDUsNiBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQktleT4ga2V5KCkgY29uc3Q7CiAgICAg
dmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQktleT4gcHJpbWFyeUtleSgpIGNvbnN0Owog
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZh
bHVlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZShQYXNzUmVmUHRyPFdlYkNvcmU6
OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJhY2tz
PiwgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBhZHZhbmNlKHVu
c2lnbmVkIGxvbmcsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJhY2tzPiwgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBjb250aW51ZUZ1bmN0aW9uKFBhc3NS
ZWZQdHI8V2ViQ29yZTo6SURCS2V5PiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+
LCBXZWJDb3JlOjpFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUZ1bmN0
aW9uKFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJhY2tzPiwgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCT2JqZWN0
U3RvcmVCYWNrZW5kUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kUHJveHkuY3BwCmluZGV4IDgyNjQwNzMzMGEwMjdhMTZkYjdmYjFjM2Rj
ZDBlZmRjMWY0YjM1MTcuLjRkMWM5MWQwNzVmZjYwN2E3MzdiMjIwMTA3ZmRiN2IwYmYyNGI3NTkg
MTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQk9iamVjdFN0b3JlQmFj
a2VuZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJPYmplY3RT
dG9yZUJhY2tlbmRQcm94eS5jcHAKQEAgLTY3LDE0ICs2Nyw2IEBAIHZvaWQgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kUHJveHk6OmdldChQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFz
c1JlZlB0CiAgICAgbV93ZWJJREJPYmplY3RTdG9yZS0+Z2V0KGtleVJhbmdlLCBuZXcgV2ViSURC
Q2FsbGJhY2tzSW1wbChjYWxsYmFja3MpLCAqdHJhbnNhY3Rpb25Qcm94eS0+Z2V0V2ViSURCVHJh
bnNhY3Rpb24oKSwgZWMpOwogfQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5Ojpw
dXQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBQYXNzUmVmUHRyPElE
QktleT4ga2V5LCBQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxs
YmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIEV4Y2Vw
dGlvbkNvZGUmIGVjKQotewotICAgIC8vIFRoZSB0cmFuc2FjdGlvbiBwb2ludGVyIGlzIGd1YXJh
bnRlZWQgdG8gYmUgYSBwb2ludGVyIHRvIGEgcHJveHkgb2JqZWN0IGFzLCBpbiB0aGUgcmVuZGVy
ZXIsCi0gICAgLy8gYWxsIGltcGxlbWVudGF0aW9ucyBvZiBJREIgaW50ZXJmYWNlcyBhcmUgcHJv
eHkgb2JqZWN0cy4KLSAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eSogdHJhbnNhY3Rpb25Q
cm94eSA9IHN0YXRpY19jYXN0PElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5Kj4odHJhbnNhY3Rp
b24pOwotICAgIG1fd2ViSURCT2JqZWN0U3RvcmUtPnB1dCh2YWx1ZSwga2V5LCBzdGF0aWNfY2Fz
dDxXZWJJREJPYmplY3RTdG9yZTo6UHV0TW9kZT4ocHV0TW9kZSksIG5ldyBXZWJJREJDYWxsYmFj
a3NJbXBsKGNhbGxiYWNrcyksICp0cmFuc2FjdGlvblByb3h5LT5nZXRXZWJJREJUcmFuc2FjdGlv
bigpLCBlYyk7Ci19Ci0KIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6OnB1dFdpdGhJ
bmRleEtleXMoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBQYXNzUmVm
UHRyPElEQktleT4ga2V5LCBQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24s
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBpbmRleE5hbWVzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlz
PiYgaW5kZXhLZXlzLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICAvLyBUaGUgdHJhbnNhY3Rp
b24gcG9pbnRlciBpcyBndWFyYW50ZWVkIHRvIGJlIGEgcG9pbnRlciB0byBhIHByb3h5IG9iamVj
dCBhcywgaW4gdGhlIHJlbmRlcmVyLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL0lEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5LmgKaW5kZXggYzY0MDI4Y2ZmYjYwZjJk
OGEyNDRhNzE1YzczYzBiNzY1YWVlZjQ0Yy4uMDIzNTA3N2ZhOTczZmU4ZjE2MTkyZTQxMzZmYTIw
MDk5N2UyYTYzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9J
REJPYmplY3RTdG9yZUJhY2tlbmRQcm94eS5oCkBAIC00NCw3ICs0NCw2IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIH5JREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eSgpOwogCiAgICAgdmlydHVhbCB2
b2lkIGdldChQYXNzUmVmUHRyPFdlYkNvcmU6OklEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxXZWJD
b3JlOjpJREJDYWxsYmFja3M+LCBXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2UqLCBXZWJDb3JlOjpFeGNlcHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCB2b2lkIHB1dChQYXNz
UmVmUHRyPFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NSZWZQdHI8V2ViQ29y
ZTo6SURCS2V5PiwgUHV0TW9kZSwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+LCBX
ZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIHB1dFdpdGhJbmRleEtleXMoUGFzc1JlZlB0cjxX
ZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQktl
eT4sIFB1dE1vZGUsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJhY2tzPiwgV2ViQ29yZTo6
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgY29uc3QgV1RGOjpWZWN0b3I8V1RGOjpT
dHJpbmc+JiwgY29uc3QgV1RGOjpWZWN0b3I8SW5kZXhLZXlzPiYsIFdlYkNvcmU6OkV4Y2VwdGlv
bkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxXZWJD
b3JlOjpJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJhY2tzPiwgV2Vi
Q29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBjbGVhcihQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkNh
bGxiYWNrcz4sIFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIFdlYkNv
cmU6OkV4Y2VwdGlvbkNvZGUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYklEQkN1cnNvckltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
SURCQ3Vyc29ySW1wbC5jcHAKaW5kZXggZTljMGUwNGFmMDM3MzI0YzQxNjRjM2M1YTEyY2QxYjdh
MWZiMWNlOC4uMGQ2NWE4N2JlZTBhYzRmNmUyMjg2MWRhZjE3MThhZWFjZjhkYjNhYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCQ3Vyc29ySW1wbC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCQ3Vyc29ySW1wbC5jcHAKQEAgLTYy
LDExICs2Miw2IEBAIFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSBXZWJJREJDdXJzb3JJbXBsOjp2
YWx1ZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1faWRiQ3Vyc29yQmFja2VuZC0+dmFsdWUoKTsKIH0K
IAotdm9pZCBXZWJJREJDdXJzb3JJbXBsOjp1cGRhdGUoY29uc3QgV2ViU2VyaWFsaXplZFNjcmlw
dFZhbHVlJiB2YWx1ZSwgV2ViSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsIFdlYkV4Y2VwdGlvbkNv
ZGUmIGVjKQotewotICAgIG1faWRiQ3Vyc29yQmFja2VuZC0+dXBkYXRlKHZhbHVlLCBJREJDYWxs
YmFja3NQcm94eTo6Y3JlYXRlKGFkb3B0UHRyKGNhbGxiYWNrcykpLCBlYyk7Ci19Ci0KIHZvaWQg
V2ViSURCQ3Vyc29ySW1wbDo6YWR2YW5jZSh1bnNpZ25lZCBsb25nIGNvdW50LCBXZWJJREJDYWxs
YmFja3MqIGNhbGxiYWNrcywgV2ViRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgbV9pZGJDdXJz
b3JCYWNrZW5kLT5hZHZhbmNlKGNvdW50LCBJREJDYWxsYmFja3NQcm94eTo6Y3JlYXRlKGFkb3B0
UHRyKGNhbGxiYWNrcykpLCBlYyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJJREJDdXJzb3JJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJ
REJDdXJzb3JJbXBsLmgKaW5kZXggZjBkMzg3YjYyMTk3Njg3YTgxNmFkMWRjNzU1NWNkYzI3ZWZi
YWZjNS4uNDVhMjI5YjM4MzAxOTI2OTFmYTc4ZDBkYTg2YmUzOTc2ODcxYmI3YSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCQ3Vyc29ySW1wbC5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkN1cnNvckltcGwuaApAQCAtNDcsNyArNDcs
NiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBXZWJJREJLZXkga2V5KCkgY29uc3Q7CiAgICAgdmly
dHVhbCBXZWJJREJLZXkgcHJpbWFyeUtleSgpIGNvbnN0OwogICAgIHZpcnR1YWwgV2ViU2VyaWFs
aXplZFNjcmlwdFZhbHVlIHZhbHVlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZShj
b25zdCBXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUmLCBXZWJJREJDYWxsYmFja3MqLCBXZWJFeGNl
cHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIGFkdmFuY2UodW5zaWduZWQgbG9uZywgV2Vi
SURCQ2FsbGJhY2tzKiwgV2ViRXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBjb250
aW51ZUZ1bmN0aW9uKGNvbnN0IFdlYklEQktleSYsIFdlYklEQkNhbGxiYWNrcyosIFdlYkV4Y2Vw
dGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRnVuY3Rpb24oV2ViSURCQ2FsbGJh
Y2tzKiwgV2ViRXhjZXB0aW9uQ29kZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViSURCT2JqZWN0U3RvcmVJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYklEQk9iamVjdFN0b3JlSW1wbC5jcHAKaW5kZXggNTNkMTQwZjQyYmU5OGIzYWJl
NzNhNzRiYjMzNWRmM2NlYjY1ZDI5Yy4uMjJhMDY2ODA3NzQ0NGRhYzMxZGVlN2IwYjU5NDEyNzJk
ZWRmM2RiZiAxMDA3NTUKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCT2Jq
ZWN0U3RvcmVJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJP
YmplY3RTdG9yZUltcGwuY3BwCkBAIC01OCwxMSArNTgsNiBAQCB2b2lkIFdlYklEQk9iamVjdFN0
b3JlSW1wbDo6Z2V0KGNvbnN0IFdlYklEQktleVJhbmdlJiBrZXlSYW5nZSwgV2ViSURCQ2FsbGJh
Y2tzKgogICAgIG1fb2JqZWN0U3RvcmUtPmdldChrZXlSYW5nZSwgSURCQ2FsbGJhY2tzUHJveHk6
OmNyZWF0ZShhZG9wdFB0cihjYWxsYmFja3MpKSwgdHJhbnNhY3Rpb24uZ2V0SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlKCksIGVjKTsKIH0KIAotdm9pZCBXZWJJREJPYmplY3RTdG9yZUlt
cGw6OnB1dChjb25zdCBXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUmIHZhbHVlLCBjb25zdCBXZWJJ
REJLZXkmIGtleSwgUHV0TW9kZSBwdXRNb2RlLCBXZWJJREJDYWxsYmFja3MqIGNhbGxiYWNrcywg
Y29uc3QgV2ViSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBXZWJFeGNlcHRpb25Db2RlJiBl
YykKLXsKLSAgICBtX29iamVjdFN0b3JlLT5wdXQodmFsdWUsIGtleSwgc3RhdGljX2Nhc3Q8SURC
T2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpQdXRNb2RlPihwdXRNb2RlKSwgSURCQ2FsbGJh
Y2tzUHJveHk6OmNyZWF0ZShhZG9wdFB0cihjYWxsYmFja3MpKSwgdHJhbnNhY3Rpb24uZ2V0SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKCksIGVjKTsKLX0KLQogdm9pZCBXZWJJREJPYmpl
Y3RTdG9yZUltcGw6OnB1dFdpdGhJbmRleEtleXMoY29uc3QgV2ViU2VyaWFsaXplZFNjcmlwdFZh
bHVlJiB2YWx1ZSwgY29uc3QgV2ViSURCS2V5JiBrZXksIFB1dE1vZGUgcHV0TW9kZSwgV2ViSURC
Q2FsbGJhY2tzKiBjYWxsYmFja3MsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlv
biwgY29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mIHdlYkluZGV4TmFtZXMsIGNvbnN0IFdlYlZl
Y3RvcjxXZWJJbmRleEtleXM+JiB3ZWJJbmRleEtleXMsIFdlYkV4Y2VwdGlvbkNvZGUmIGVjKQog
ewogICAgIEFTU0VSVCh3ZWJJbmRleE5hbWVzLnNpemUoKSA9PSB3ZWJJbmRleEtleXMuc2l6ZSgp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQk9iamVjdFN0
b3JlSW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCT2JqZWN0U3RvcmVJ
bXBsLmgKaW5kZXggZTZkYzg4ZjU0ZDM2NDdiZDdhYjJmNmY4YTdjZjI2NzRmNjZjM2JkMi4uOTM0
Y2ZmYTk5M2M4YmYxMDYzNjQ0NTlmNTBiNmYzYmJhYTA0MjAxZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCT2JqZWN0U3RvcmVJbXBsLmgKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCT2JqZWN0U3RvcmVJbXBsLmgKQEAgLTQ2LDcgKzQ2
LDYgQEAgcHVibGljOgogICAgIH5XZWJJREJPYmplY3RTdG9yZUltcGwoKTsKIAogICAgIHZvaWQg
Z2V0KGNvbnN0IFdlYklEQktleVJhbmdlJiwgV2ViSURCQ2FsbGJhY2tzKiwgY29uc3QgV2ViSURC
VHJhbnNhY3Rpb24mLCBXZWJFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBwdXQoY29uc3QgV2Vi
U2VyaWFsaXplZFNjcmlwdFZhbHVlJiwgY29uc3QgV2ViSURCS2V5JiwgUHV0TW9kZSwgV2ViSURC
Q2FsbGJhY2tzKiwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mLCBXZWJFeGNlcHRpb25Db2RlJik7
CiAgICAgdm9pZCBwdXRXaXRoSW5kZXhLZXlzKGNvbnN0IFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZSYsIGNvbnN0IFdlYklEQktleSYsIFB1dE1vZGUsIFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdl
YklEQlRyYW5zYWN0aW9uJiwgY29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mIGluZGV4TmFtZXMs
IGNvbnN0IFdlYlZlY3RvcjxXZWJJbmRleEtleXM+JiwgV2ViRXhjZXB0aW9uQ29kZSYpOwogICAg
IHZvaWQgZGVsZXRlRnVuY3Rpb24oY29uc3QgV2ViSURCS2V5UmFuZ2UmLCBXZWJJREJDYWxsYmFj
a3MqLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYsIFdlYkV4Y2VwdGlvbkNvZGUmKTsKICAgICB2
b2lkIGNsZWFyKFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgV2Vi
RXhjZXB0aW9uQ29kZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9JREJGYWtlQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lE
QkZha2VCYWNraW5nU3RvcmUuaAppbmRleCAwODQwNWNlMGFiNThjOTZmYzI5NmMzZjBmOGExNGZm
NjlkNjViYTE4Li41MzZkNzg1YjkzYWVlNDNiOWY1MzMyNTI1YzYzZWM3OWU3MDk1OWJmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQkZha2VCYWNraW5nU3RvcmUu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQkZha2VCYWNraW5nU3RvcmUu
aApAQCAtNTksNyArNTksNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUluZGV4
KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4
SWQpIE9WRVJSSURFIHsgfQogICAgIHZpcnR1YWwgYm9vbCBwdXRJbmRleERhdGFGb3JSZWNvcmQo
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJ
ZCwgY29uc3QgSURCS2V5JiwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKikgT1ZF
UlJJREUgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlSW5kZXhEYXRh
Rm9yUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2
NF90IGluZGV4SWQsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciopIE9WRVJSSURF
IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBTdHJpbmcgZ2V0T2JqZWN0VmlhSW5kZXgo
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJ
ZCwgY29uc3QgSURCS2V5JikgT1ZFUlJJREUgeyByZXR1cm4gU3RyaW5nKCk7IH0KICAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBnZXRQcmltYXJ5S2V5VmlhSW5kZXgoaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURC
S2V5JikgT1ZFUlJJREUgeyByZXR1cm4gUGFzc1JlZlB0cjxJREJLZXk+KCk7IH0KICAgICB2aXJ0
dWFsIGJvb2wga2V5RXhpc3RzSW5JbmRleChpbnQ2NF90IGRhdGFiYXNlaWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGluZGV4S2V5LCBSZWZQ
dHI8SURCS2V5PiYgZm91bmRQcmltYXJ5S2V5KSBPVkVSUklERSB7IHJldHVybiBmYWxzZTsgfQog
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKaW5kZXggMzQ4OWEwOWMwNThjOGYyNTEyYWZkODhlNTNhMTZmYTBkNzM2NDNhMC4uNDlkMWZl
NDNhMWU2MjAzNjEzN2ZkNDhmOTk5OGQ0NWRkOTM0NmQwZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBA
CisyMDEyLTA3LTI1ICBBbGVjIEZsZXR0ICA8YWxlY2ZsZXR0QGNocm9taXVtLm9yZz4KKworICAg
ICAgICBJbmRleGVkREI6IGluamVjdCBpbmRleCBrZXlzIG9uIGN1cnNvci9vYmplY3RzdG9yZS9p
bmRleCBnZXQgc3VjY2VzcyBoYW5kbGVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9OTExMjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBPbmUgbmV3IHRlc3QgdG8gbWFrZSBzdXJlIHRoYXQgaW5kZXhlcyB3
aXRoIHRoZSBzYW1lIGtleXBhdGggYXMgYW4KKyAgICAgICAgYXV0b0luY3JlbWVudCdlZCBvYmpl
Y3RTdG9yZSBzdGlsbCBpbmRleCB0aGVpciB2YWx1ZXMuIEFsc28gbWlub3IKKyAgICAgICAgdHdl
YWtzIHRvIHRlc3RzIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGZpZ3VyZSBvdXQgd2hpY2gga2V5IGlz
IGJlaW5nCisgICAgICAgIHVwZGF0ZWQuCisKKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9p
bmRleC1kdXBsaWNhdGUta2V5cGF0aHMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBz
dG9yYWdlL2luZGV4ZWRkYi9pbmRleC1kdXBsaWNhdGUta2V5cGF0aHMuaHRtbDogQWRkZWQuCisg
ICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvbW96aWxsYS9hdXRvaW5jcmVtZW50LWluZGV4ZXMt
ZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL21vemlsbGEvcmVzb3Vy
Y2VzL2F1dG9pbmNyZW1lbnQtaW5kZXhlcy5qczoKKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRk
Yi9yZXNvdXJjZXMvaW5kZXgtZHVwbGljYXRlLWtleXBhdGhzLmpzOiBBZGRlZC4KKwogMjAxMi0w
Ny0yNSAgQW5kcmV3IFdpbHNvbiAgPGF0d2lsc29uQGNocm9taXVtLm9yZz4KIAogICAgICAgICBV
bnJldmlld2VkIGNocm9taXVtIGV4cGVjdGF0aW9ucyBjaGFuZ2UuCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9pbmRleC1kdXBsaWNhdGUta2V5cGF0aHMtZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvaW5kZXgtZHVwbGljYXRlLWtl
eXBhdGhzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNDIyOGY2MTM4N2U5ODk4N2UxMDllYzE2
YTg1NjAwNDdlN2Q5MmE2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9p
bmRleGVkZGIvaW5kZXgtZHVwbGljYXRlLWtleXBhdGhzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsx
LDM3IEBACitUZXN0IHRoZSB1c2Ugb2YgaWRlbnRpY2FsIGtleXBhdGhzIGJldHdlZW4gb2JqZWN0
c3RvcmVzIGFuZCBpbmRleGVzCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBv
ZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitpbmRl
eGVkREIgPSBzZWxmLmluZGV4ZWREQiB8fCBzZWxmLndlYmtpdEluZGV4ZWREQiB8fCBzZWxmLm1v
ekluZGV4ZWREQiB8fCBzZWxmLm1zSW5kZXhlZERCIHx8IHNlbGYuT0luZGV4ZWREQjsKKworaW5k
ZXhlZERCLm9wZW4oJ3N0b3JlLWluZGV4LWNvbGxpc2lvbicpCitkYiA9IGV2ZW50LnRhcmdldC5y
ZXN1bHQKK2RiLnNldFZlcnNpb24oJzEnKQorRGVsZXRlZCBhbGwgb2JqZWN0IHN0b3Jlcy4KK3N0
b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ2NvbGxpZGVXaXRoSW5kZXgnLCB7a2V5UGF0aDog
J2Zvbyd9KQoraW5kZXggPSBzdG9yZS5jcmVhdGVJbmRleCgnZm9vJywgJ2ZvbycpCitvYmplY3RT
dG9yZS5wdXQoe2ZvbzogMTB9KQorb2JqZWN0U3RvcmUuZ2V0KDEwKQoraW5kZXguZ2V0KDEwKQor
UEFTUyBKU09OLnN0cmluZ2lmeShyZXN1bHQpIGlzICJ7XCJmb29cIjoxMH0iCitQQVNTIEpTT04u
c3RyaW5naWZ5KHJlc3VsdCkgaXMgIntcImZvb1wiOjEwfSIKK2RiLnNldFZlcnNpb24oJzInKQor
RGVsZXRlZCBhbGwgb2JqZWN0IHN0b3Jlcy4KK3N0b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUo
J2NvbGxpZGVXaXRoQXV0b0luY3JlbWVudCcsIHtrZXlQYXRoOiAnZm9vJywgYXV0b0luY3JlbWVu
dDogdHJ1ZX0pCitpbmRleCA9IHN0b3JlLmNyZWF0ZUluZGV4KCdmb28nLCAnZm9vJykKK29iamVj
dFN0b3JlLnB1dCh7Zm9vOjV9KQorb2JqZWN0U3RvcmUucHV0KHtmb286Nn0pCitvYmplY3RTdG9y
ZS5wdXQoe2Zvbzo3fSkKK29iamVjdFN0b3JlLnB1dCh7Zm9vOjh9KQorb2JqZWN0U3RvcmUucHV0
KHtmb286OX0pCitvYmplY3RTdG9yZS5wdXQoeydiYXInOiAnYmF6J30pCitQQVNTIGV2ZW50LnRh
cmdldC5yZXN1bHQgaXMgMTAKK29iamVjdFN0b3JlLmdldCgxMCkKK2luZGV4LmdldCgxMCkKK1BB
U1MgSlNPTi5zdHJpbmdpZnkocmVzdWx0KSBpcyAie1wiYmFyXCI6XCJiYXpcIixcImZvb1wiOjEw
fSIKK1BBU1MgSlNPTi5zdHJpbmdpZnkocmVzdWx0KSBpcyAie1wiYmFyXCI6XCJiYXpcIixcImZv
b1wiOjEwfSIKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVU
RQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9pbmRleC1kdXBs
aWNhdGUta2V5cGF0aHMuaHRtbCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2luZGV4
LWR1cGxpY2F0ZS1rZXlwYXRocy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAyNzRlZmZmM2FhYmNlZDQwNmZj
NGZkZGM0Zjk0MmVhMTdmNzQ1MTMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdG9y
YWdlL2luZGV4ZWRkYi9pbmRleC1kdXBsaWNhdGUta2V5cGF0aHMuaHRtbApAQCAtMCwwICsxLDEw
IEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2Vz
L2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2hhcmVk
LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9p
bmRleC1kdXBsaWNhdGUta2V5cGF0aHMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4u
L2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8
L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9tb3ppbGxh
L2F1dG9pbmNyZW1lbnQtaW5kZXhlcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdG9yYWdl
L2luZGV4ZWRkYi9tb3ppbGxhL2F1dG9pbmNyZW1lbnQtaW5kZXhlcy1leHBlY3RlZC50eHQKaW5k
ZXggZjk0NTM3NDcxMDlmOWEwNTRhZDlkMzg4YzE2YjA4ODlmZjZiNmFlYS4uNjFiYWEyMmYyYTdk
MDhjNGZhYjAyNzVmMmFiZWZjZTE0ZTVhYTJiYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3Rv
cmFnZS9pbmRleGVkZGIvbW96aWxsYS9hdXRvaW5jcmVtZW50LWluZGV4ZXMtZXhwZWN0ZWQudHh0
CisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL21vemlsbGEvYXV0b2luY3JlbWVu
dC1pbmRleGVzLWV4cGVjdGVkLnR4dApAQCAtOSw3ICs5LDcgQEAgaW5kZXhlZERCLm9wZW4obmFt
ZSkKIGRiID0gZXZlbnQudGFyZ2V0LnJlc3VsdAogcmVxdWVzdCA9IGRiLnNldFZlcnNpb24oJzEn
KQogRGVsZXRlZCBhbGwgb2JqZWN0IHN0b3Jlcy4KLW9iamVjdFN0b3JlID0gZGIuY3JlYXRlT2Jq
ZWN0U3RvcmUoJ2ZvbycsIHsga2V5UGF0aDogJ2lkJywgYXV0b0luY3JlbWVudDogdHJ1ZSB9KTsK
K29iamVjdFN0b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ2F1dG9pbmNyZW1lbnQtaWQnLCB7
IGtleVBhdGg6ICdpZCcsIGF1dG9JbmNyZW1lbnQ6IHRydWUgfSk7CiBvYmplY3RTdG9yZS5jcmVh
dGVJbmRleCgnZmlyc3QnLCAnZmlyc3QnKTsKIG9iamVjdFN0b3JlLmNyZWF0ZUluZGV4KCdzZWNv
bmQnLCAnc2Vjb25kJyk7CiBvYmplY3RTdG9yZS5jcmVhdGVJbmRleCgndGhpcmQnLCAndGhpcmQn
KTsKQEAgLTE3LDcgKzE3LDggQEAgZGF0YSA9IHsgZmlyc3Q6ICdmb28nLCBzZWNvbmQ6ICdmb28n
LCB0aGlyZDogJ2ZvbycgfTsKIHJlcXVlc3QgPSBvYmplY3RTdG9yZS5hZGQoZGF0YSk7CiBrZXkg
PSBldmVudC50YXJnZXQucmVzdWx0OwogUEFTUyBrZXkgPT0gbnVsbCBpcyBmYWxzZQotb2JqZWN0
U3RvcmUgPSBkYi50cmFuc2FjdGlvbignZm9vJykub2JqZWN0U3RvcmUoJ2ZvbycpOworZXhwZWN0
ZWQga2V5IGlzIDEKK29iamVjdFN0b3JlID0gZGIudHJhbnNhY3Rpb24oJ2F1dG9pbmNyZW1lbnQt
aWQnKS5vYmplY3RTdG9yZSgnYXV0b2luY3JlbWVudC1pZCcpOwogZmlyc3QgPSBvYmplY3RTdG9y
ZS5pbmRleCgnZmlyc3QnKTsKIHJlcXVlc3QgPSBmaXJzdC5nZXQoJ2ZvbycpOwogUEFTUyBldmVu
dC50YXJnZXQucmVzdWx0LmlkIGlzIGtleQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFn
ZS9pbmRleGVkZGIvbW96aWxsYS9yZXNvdXJjZXMvYXV0b2luY3JlbWVudC1pbmRleGVzLmpzIGIv
TGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW96aWxsYS9yZXNvdXJjZXMvYXV0b2luY3Jl
bWVudC1pbmRleGVzLmpzCmluZGV4IDFjODU5ODQ4NjVkYmY5YTdmZjM3NWI0OTAwN2ZmYWEzOGE0
ODY0ZWIuLjJkYTk2ZTdmZmE1NmU5NzM4ODk2NWNjODUyZmU5MWVjOWJlMzg1OWYgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL21vemlsbGEvcmVzb3VyY2VzL2F1dG9p
bmNyZW1lbnQtaW5kZXhlcy5qcworKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9t
b3ppbGxhL3Jlc291cmNlcy9hdXRvaW5jcmVtZW50LWluZGV4ZXMuanMKQEAgLTM1LDcgKzM1LDcg
QEAgZnVuY3Rpb24gc2V0dXBPYmplY3RTdG9yZSgpCiAgICAgdHJhbnMgPSBldmVudC50YXJnZXQu
cmVzdWx0OwogICAgIGRlbGV0ZUFsbE9iamVjdFN0b3JlcyhkYik7CiAKLSAgICBvYmplY3RTdG9y
ZSA9IGV2YWxBbmRMb2coIm9iamVjdFN0b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ2Zvbycs
IHsga2V5UGF0aDogJ2lkJywgYXV0b0luY3JlbWVudDogdHJ1ZSB9KTsiKTsKKyAgICBvYmplY3RT
dG9yZSA9IGV2YWxBbmRMb2coIm9iamVjdFN0b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ2F1
dG9pbmNyZW1lbnQtaWQnLCB7IGtleVBhdGg6ICdpZCcsIGF1dG9JbmNyZW1lbnQ6IHRydWUgfSk7
Iik7CiAgICAgZXZhbEFuZExvZygib2JqZWN0U3RvcmUuY3JlYXRlSW5kZXgoJ2ZpcnN0JywgJ2Zp
cnN0Jyk7Iik7CiAgICAgZXZhbEFuZExvZygib2JqZWN0U3RvcmUuY3JlYXRlSW5kZXgoJ3NlY29u
ZCcsICdzZWNvbmQnKTsiKTsKICAgICBldmFsQW5kTG9nKCJvYmplY3RTdG9yZS5jcmVhdGVJbmRl
eCgndGhpcmQnLCAndGhpcmQnKTsiKTsKQEAgLTQ5LDEyICs0OSwxMyBAQCBmdW5jdGlvbiBzZXR1
cEluZGV4ZXMoKQogewogICAgIGtleSA9IGV2YWxBbmRMb2coImtleSA9IGV2ZW50LnRhcmdldC5y
ZXN1bHQ7Iik7CiAgICAgc2hvdWxkQmVGYWxzZSgia2V5ID09IG51bGwiKTsKKyAgICBkZWJ1Zygi
ZXhwZWN0ZWQga2V5IGlzICIgKyBrZXkpOwogICAgIHRyYW5zLm9uY29tcGxldGUgPSBzZXRWZXJz
aW9uQ29tcGxldGU7CiB9CiAKIGZ1bmN0aW9uIHNldFZlcnNpb25Db21wbGV0ZSgpCiB7Ci0gICAg
b2JqZWN0U3RvcmUgPSBldmFsQW5kTG9nKCJvYmplY3RTdG9yZSA9IGRiLnRyYW5zYWN0aW9uKCdm
b28nKS5vYmplY3RTdG9yZSgnZm9vJyk7Iik7CisgICAgb2JqZWN0U3RvcmUgPSBldmFsQW5kTG9n
KCJvYmplY3RTdG9yZSA9IGRiLnRyYW5zYWN0aW9uKCdhdXRvaW5jcmVtZW50LWlkJykub2JqZWN0
U3RvcmUoJ2F1dG9pbmNyZW1lbnQtaWQnKTsiKTsKICAgICBmaXJzdCA9IGV2YWxBbmRMb2coImZp
cnN0ID0gb2JqZWN0U3RvcmUuaW5kZXgoJ2ZpcnN0Jyk7Iik7CiAgICAgcmVxdWVzdCA9IGV2YWxB
bmRMb2coInJlcXVlc3QgPSBmaXJzdC5nZXQoJ2ZvbycpOyIpOwogICAgIHJlcXVlc3Qub25zdWNj
ZXNzID0gY2hlY2tGaXJzdEluZGV4QW5kUHJlcGFyZVNlY29uZDsKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3Jlc291cmNlcy9pbmRleC1kdXBsaWNhdGUta2V5cGF0
aHMuanMgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9yZXNvdXJjZXMvaW5kZXgtZHVw
bGljYXRlLWtleXBhdGhzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM4ODhkODQ0OTUwNTAzODhhYzI5NWY0OTQw
MmEzMDJjNWY0NWQ1ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2lu
ZGV4ZWRkYi9yZXNvdXJjZXMvaW5kZXgtZHVwbGljYXRlLWtleXBhdGhzLmpzCkBAIC0wLDAgKzEs
MTA2IEBACitpZiAodGhpcy5pbXBvcnRTY3JpcHRzKSB7CisgICAgaW1wb3J0U2NyaXB0cygnLi4v
Li4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMnKTsKKyAgICBpbXBvcnRTY3Jp
cHRzKCdzaGFyZWQuanMnKTsKK30KKworZGVzY3JpcHRpb24oIlRlc3QgdGhlIHVzZSBvZiBpZGVu
dGljYWwga2V5cGF0aHMgYmV0d2VlbiBvYmplY3RzdG9yZXMgYW5kIGluZGV4ZXMiKTsKKworZnVu
Y3Rpb24gdGVzdCgpCit7CisgICAgcmVtb3ZlVmVuZG9yUHJlZml4ZXMoKTsKKyAgICByZXF1ZXN0
ID0gZXZhbEFuZExvZygiaW5kZXhlZERCLm9wZW4oJ3N0b3JlLWluZGV4LWNvbGxpc2lvbicpIik7
CisgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSB0ZXN0Q29sbGlkZVN0b3JlSW5kZXhTZXR1cDsKKyAg
ICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKK30KKworZnVuY3Rp
b24gdGVzdENvbGxpZGVTdG9yZUluZGV4U2V0dXAoZXZ0KQoreworICAgIGV2ZW50ID0gZXZ0Owor
ICAgIGV2YWxBbmRMb2coImRiID0gZXZlbnQudGFyZ2V0LnJlc3VsdCIpOworICAgIHJlcXVlc3Qg
PSBldmFsQW5kTG9nKCJkYi5zZXRWZXJzaW9uKCcxJykiKTsKKyAgICByZXF1ZXN0Lm9uc3VjY2Vz
cyA9IHRlc3RDb2xsaWRlU3RvcmVJbmRleDsKKyAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVj
dGVkRXJyb3JDYWxsYmFjazsKKyAgICByZXF1ZXN0Lm9uYmxvY2tlZCA9IHVuZXhwZWN0ZWRCbG9j
a2VkQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIHRlc3RDb2xsaWRlU3RvcmVJbmRleChldmVudCkK
K3sKKyAgICBkZWxldGVBbGxPYmplY3RTdG9yZXMoZGIpOworICAgIHZhciB0cmFucyA9IGV2ZW50
LnRhcmdldC5yZXN1bHQ7CisgICAgZXZhbEFuZExvZygic3RvcmUgPSBkYi5jcmVhdGVPYmplY3RT
dG9yZSgnY29sbGlkZVdpdGhJbmRleCcsIHtrZXlQYXRoOiAnZm9vJ30pIik7CisgICAgZXZhbEFu
ZExvZygiaW5kZXggPSBzdG9yZS5jcmVhdGVJbmRleCgnZm9vJywgJ2ZvbycpIik7CisKKyAgICB0
cmFucy5vbmNvbXBsZXRlID0gc3RvcmVDb2xsaWRlZFN0b3JlSW5kZXhEYXRhOworICAgIHRyYW5z
Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKKyAgICB0cmFucy5vbmFib3J0ID0g
dW5leHBlY3RlZEFib3J0Q2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIHJlc3VsdFNob3VsZEJlKHYp
IHsKKyAgICByZXR1cm4gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgcmVzdWx0ID0gZXZlbnQu
dGFyZ2V0LnJlc3VsdDsKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJKU09OLnN0cmlu
Z2lmeShyZXN1bHQpIiwgdik7CisgICAgfQorfTsKKworZnVuY3Rpb24gc3RvcmVDb2xsaWRlZFN0
b3JlSW5kZXhEYXRhKCkgeworICAgIHZhciB0cmFucyA9IGRiLnRyYW5zYWN0aW9uKCdjb2xsaWRl
V2l0aEluZGV4JywgJ3JlYWR3cml0ZScpOworCisgICAgb2JqZWN0U3RvcmUgPSB0cmFucy5vYmpl
Y3RTdG9yZSgnY29sbGlkZVdpdGhJbmRleCcpOworICAgIGluZGV4ID0gb2JqZWN0U3RvcmUuaW5k
ZXgoJ2ZvbycpOworICAgIGV2YWxBbmRMb2coIm9iamVjdFN0b3JlLnB1dCh7Zm9vOiAxMH0pIiku
b25zdWNjZXNzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGV2YWxBbmRMb2coIm9iamVjdFN0b3Jl
LmdldCgxMCkiKS5vbnN1Y2Nlc3MgPSByZXN1bHRTaG91bGRCZSgneyJmb28iOjEwfScpOworICAg
ICAgICBldmFsQW5kTG9nKCJpbmRleC5nZXQoMTApIikub25zdWNjZXNzID0gcmVzdWx0U2hvdWxk
QmUoJ3siZm9vIjoxMH0nKTsKKyAgICB9OworCisgICAgdHJhbnMub25jb21wbGV0ZSA9IHRlc3RD
b2xsaWRlQXV0b0luY3JlbWVudFNldHVwOworICAgIHRyYW5zLm9uYWJvcnQgPSB1bmV4cGVjdGVk
QWJvcnRDYWxsYmFjazsKK30KKworZnVuY3Rpb24gdGVzdENvbGxpZGVBdXRvSW5jcmVtZW50U2V0
dXAoKQoreworICAgIHJlcXVlc3QgPSBldmFsQW5kTG9nKCJkYi5zZXRWZXJzaW9uKCcyJykiKTsK
KyAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IHRlc3RDb2xsaWRlQXV0b0luY3JlbWVudDsKKyAgICBy
ZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKKyAgICByZXF1ZXN0Lm9u
YmxvY2tlZCA9IHVuZXhwZWN0ZWRCbG9ja2VkQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIHRlc3RD
b2xsaWRlQXV0b0luY3JlbWVudCgpCit7CisgICAgZGVsZXRlQWxsT2JqZWN0U3RvcmVzKGRiKTsK
KyAgICB2YXIgdHJhbnMgPSByZXF1ZXN0LnJlc3VsdDsKKyAgICBldmFsQW5kTG9nKCJzdG9yZSA9
IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdjb2xsaWRlV2l0aEF1dG9JbmNyZW1lbnQnLCB7a2V5UGF0
aDogJ2ZvbycsIGF1dG9JbmNyZW1lbnQ6IHRydWV9KSIpOworICAgIGV2YWxBbmRMb2coImluZGV4
ID0gc3RvcmUuY3JlYXRlSW5kZXgoJ2ZvbycsICdmb28nKSIpOworCisgICAgdHJhbnMub25jb21w
bGV0ZSA9IHN0b3JlQ29sbGlkZWRBdXRvSW5jcmVtZW50RGF0YTsKKyAgICB0cmFucy5vbmVycm9y
ID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7CisgICAgdHJhbnMub25hYm9ydCA9IHVuZXhwZWN0
ZWRBYm9ydENhbGxiYWNrOworfQorCitmdW5jdGlvbiBzdG9yZUNvbGxpZGVkQXV0b0luY3JlbWVu
dERhdGEoKQoreworICAgIHZhciB0cmFucyA9IGRiLnRyYW5zYWN0aW9uKCdjb2xsaWRlV2l0aEF1
dG9JbmNyZW1lbnQnLCAncmVhZHdyaXRlJyk7CisKKyAgICBvYmplY3RTdG9yZSA9IHRyYW5zLm9i
amVjdFN0b3JlKCdjb2xsaWRlV2l0aEF1dG9JbmNyZW1lbnQnKTsKKyAgICBpbmRleCA9IG9iamVj
dFN0b3JlLmluZGV4KCdmb28nKTsKKyAgICAvLyBJbnNlcnQgc29tZSBkYXRhIHRvIGZ1dHogd2l0
aCB0aGUgYXV0b0luY3JlbWVudCBzdGF0ZS4KKyAgICBmb3IgKHZhciBpID0gNTsgaSA8IDEwOyBp
KyspIHsKKyAgICAgICAgZXZhbEFuZExvZygib2JqZWN0U3RvcmUucHV0KHtmb286IiArICBpICsg
In0pIik7CisgICAgfQorICAgIC8vIFdpdGhvdXQgYSB2YWx1ZSwgdGhpcyByZXF1aXJlcyB0aGUg
YmFja2VuZCB0byBnZW5lcmF0ZSBhIGtleSwgd2hpY2ggbXVzdCBhbHNvIGJlIGluZGV4ZWQuCisg
ICAgZXZhbEFuZExvZygib2JqZWN0U3RvcmUucHV0KHsnYmFyJzogJ2Jheid9KSIpLm9uc3VjY2Vz
cyA9IGZ1bmN0aW9uKGV2dCkgeworICAgICAgICBldmVudCA9IGV2dDsKKyAgICAgICAgc2hvdWxk
QmUoImV2ZW50LnRhcmdldC5yZXN1bHQiLCAiMTAiKTsKKyAgICAgICAgZXZhbEFuZExvZygib2Jq
ZWN0U3RvcmUuZ2V0KDEwKSIpLm9uc3VjY2VzcyA9IHJlc3VsdFNob3VsZEJlKCd7ImJhciI6ImJh
eiIsImZvbyI6MTB9Jyk7CisgICAgICAgIGV2YWxBbmRMb2coImluZGV4LmdldCgxMCkiKS5vbnN1
Y2Nlc3MgPSByZXN1bHRTaG91bGRCZSgneyJiYXIiOiJiYXoiLCJmb28iOjEwfScpOworICAgIH07
CisKKyAgICB0cmFucy5vbmNvbXBsZXRlID0gdGVzdENvbGxpZGVJbmRleEluZGV4U2V0dXA7Cisg
ICAgdHJhbnMub25hYm9ydCA9IHVuZXhwZWN0ZWRBYm9ydENhbGxiYWNrOworfQorCitmdW5jdGlv
biB0ZXN0Q29sbGlkZUluZGV4SW5kZXhTZXR1cCgpIHsKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30K
KwordmFyIGpzVGVzdElzQXN5bmMgPSB0cnVlOwordGVzdCgpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>