<?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>91456</bug_id>
          
          <creation_ts>2012-07-16 17:45:23 -0700</creation_ts>
          <short_desc>IndexedDB: Key generator state not maintained across connections</short_desc>
          <delta_ts>2012-07-17 18:07:46 -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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Joshua Bell">jsbell</reporter>
          <assigned_to name="Joshua Bell">jsbell</assigned_to>
          <cc>alecflett</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dgrogan</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>670832</commentid>
    <comment_count>0</comment_count>
      <attachid>152658</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-07-16 17:45:23 -0700</bug_when>
    <thetext>Created attachment 152658
Repro case - should show different keys

The IDB spec http://dvcs.w3.org/hg/IndexedDB/raw-file/tip/Overview.html#key-generator-concept says:

&quot;The current number for a key generator never decreases, other than as a result of database operations being reverted. Deleting a record from an object store never affects the object store&apos;s key generator. Even clearing all records from an object store, for example using the clear() function, does not affect the current number of the object store&apos;s key generator.&quot;

The WebKit implementation violates this in this case:

db.open(...);
store.put(value1);
store.clear();
db.close();
db.open();
store.put(value2);

The same key will be used for value2 as was used for value1. This is because the key generator state is not actually saved, but derived from the maximum key in the database at the time it is first needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671315</commentid>
    <comment_count>1</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-07-17 09:20:58 -0700</bug_when>
    <thetext>I&apos;ll take this. Should be pretty easy...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671499</commentid>
    <comment_count>2</comment_count>
      <attachid>152806</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-07-17 12:37:39 -0700</bug_when>
    <thetext>Created attachment 152806
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671501</commentid>
    <comment_count>3</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-07-17 12:38:23 -0700</bug_when>
    <thetext>dgrogan@, alecflett@ - please take a look.

Opinions on deferring updated caching logic to a subsequent patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671506</commentid>
    <comment_count>4</comment_count>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-07-17 12:45:19 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; dgrogan@, alecflett@ - please take a look.
&gt; 
&gt; Opinions on deferring updated caching logic to a subsequent patch?

Defer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671513</commentid>
    <comment_count>5</comment_count>
      <attachid>152806</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-17 13:02:04 -0700</bug_when>
    <thetext>Comment on attachment 152806
Patch

Attachment 152806 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/13279234</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671514</commentid>
    <comment_count>6</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-07-17 13:04:04 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 152806 [details])
&gt; Attachment 152806 [details] did not pass chromium-ews (chromium-xvfb):
&gt; Output: http://queues.webkit.org/results/13279234

Whoops, guess I didn&apos;t test a during-upload refactor. New patching coming momentarily...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671518</commentid>
    <comment_count>7</comment_count>
      <attachid>152810</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-07-17 13:06:53 -0700</bug_when>
    <thetext>Created attachment 152810
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671521</commentid>
    <comment_count>8</comment_count>
      <attachid>152810</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-17 13:12:43 -0700</bug_when>
    <thetext>Comment on attachment 152810
Patch

Attachment 152810 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/13270241</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671541</commentid>
    <comment_count>9</comment_count>
      <attachid>152815</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-07-17 13:39:18 -0700</bug_when>
    <thetext>Created attachment 152815
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671606</commentid>
    <comment_count>10</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-07-17 14:35:17 -0700</bug_when>
    <thetext>There we go - final looks before I send this off for review?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671639</commentid>
    <comment_count>11</comment_count>
      <attachid>152815</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-07-17 15:13:42 -0700</bug_when>
    <thetext>Comment on attachment 152815
Patch

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

LGTM

I didn&apos;t look too closely. It&apos;d be good if Alec could also look.

&gt; Source/WebCore/Modules/indexeddb/IDBLevelDBBackingStore.cpp:420
&gt; +            keyGeneratorState = decodeInt(it-&gt;value().begin(), it-&gt;value().end());

Do you want to add some assert here? Or a fixme saying that this is unused for now but could be used?

&gt; Source/WebCore/Modules/indexeddb/IDBLevelDBBackingStore.cpp:506
&gt; +    ok = putInt(m_currentTransaction.get(), keyGeneratorStateKey, 1);

Could you add a constant or comment about the bare 1?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671643</commentid>
    <comment_count>12</comment_count>
      <attachid>152815</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-07-17 15:17:19 -0700</bug_when>
    <thetext>Comment on attachment 152815
Patch

sorry I have this habit of not commenting when it looks good...LGTM!

I was briefly happy to see that kMaxGeneratorValue was moving out to IDBKey, but I see that was just a typo :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671675</commentid>
    <comment_count>13</comment_count>
      <attachid>152854</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-07-17 15:41:13 -0700</bug_when>
    <thetext>Created attachment 152854
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671676</commentid>
    <comment_count>14</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-07-17 15:42:44 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; Do you want to add some assert here? Or a fixme saying that this is unused for now but could be used?

Done (both)

&gt; &gt; Source/WebCore/Modules/indexeddb/IDBLevelDBBackingStore.cpp:506
&gt; &gt; +    ok = putInt(m_currentTransaction.get(), keyGeneratorStateKey, 1);
&gt; 
&gt; Could you add a constant or comment about the bare 1?

Add constant, used here and in above assert.

I also did s/State/CurrentNumber/g over the patch to better match the spec terminology.

tony@ - r?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671694</commentid>
    <comment_count>15</comment_count>
      <attachid>152854</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-07-17 16:03:13 -0700</bug_when>
    <thetext>Comment on attachment 152854
Patch

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

&gt; Source/WebCore/Modules/indexeddb/IDBLevelDBBackingStore.cpp:50
&gt; +const int64_t kKeyGeneratorInitialNumber = 1; // From the IndexedDB specification.

Nit: Normally we don&apos;t prefix constants or enum values with k.  KeyGeneratorInitialNumber is fine.  Hmm, I see you use k for constants in other places.  Maybe a follow up patch to remove all the k prefixes in IDB code?

&gt; Source/WebCore/Modules/indexeddb/IDBLevelDBBackingStore.cpp:680
&gt; +            const char *p = it-&gt;key().begin();
&gt; +            const char *limit = it-&gt;key().end();

Nit: * next to char.  E.g., const char* p =</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671730</commentid>
    <comment_count>16</comment_count>
      <attachid>152869</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-07-17 16:29:00 -0700</bug_when>
    <thetext>Created attachment 152869
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671733</commentid>
    <comment_count>17</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-07-17 16:30:17 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; Nit: Normally we don&apos;t prefix constants or enum values with k.  KeyGeneratorInitialNumber is fine.  Hmm, I see you use k for constants in other places.  Maybe a follow up patch to remove all the k prefixes in IDB code?

Fixed, and will do.

&gt; &gt; Source/WebCore/Modules/indexeddb/IDBLevelDBBackingStore.cpp:680
&gt; &gt; +            const char *p = it-&gt;key().begin();
&gt; &gt; +            const char *limit = it-&gt;key().end();
&gt; 
&gt; Nit: * next to char.  E.g., const char* p =

Yeah, that was an indentation of existing code. Fixed, and will do a global fixup in the followup patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671831</commentid>
    <comment_count>18</comment_count>
      <attachid>152869</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-17 18:07:40 -0700</bug_when>
    <thetext>Comment on attachment 152869
Patch for landing

Clearing flags on attachment: 152869

Committed r122909: &lt;http://trac.webkit.org/changeset/122909&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671832</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-17 18:07:46 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>152658</attachid>
            <date>2012-07-16 17:45:23 -0700</date>
            <delta_ts>2012-07-16 17:45:23 -0700</delta_ts>
            <desc>Repro case - should show different keys</desc>
            <filename>trans.html</filename>
            <type>text/html</type>
            <size>1582</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+CjxzY3JpcHQ+CnJlcSA9IHdlYmtpdEluZGV4ZWREQi5kZWxldGVEYXRh
YmFzZSgndGtnJyk7CnJlcS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoKSB7CiAgcmVxID0gd2Via2l0
SW5kZXhlZERCLm9wZW4oJ3RrZycpOwogIHJlcS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoKSB7CiAg
ICBkYiA9IHJlcS5yZXN1bHQ7CiAgICByZXEgPSBkYi5zZXRWZXJzaW9uKCcxJyk7CiAgICByZXEu
b25zdWNjZXNzID0gZnVuY3Rpb24gKCkgewogICAgICB0cmFucyA9IHJlcS5yZXN1bHQ7CiAgICAg
IHN0b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3N0b3JlJywge2F1dG9JbmNyZW1lbnQ6IHRy
dWV9KTsKICAgICAgdHJhbnMub25jb21wbGV0ZSA9IGRvMTsKICAgIH07CiAgfTsKfTsKCmZ1bmN0
aW9uIGRvMSgpIHsKICBkYi5jbG9zZSgpOwogIHJlcSA9IHdlYmtpdEluZGV4ZWREQi5vcGVuKCd0
a2cnKTsKICByZXEub25zdWNjZXNzID0gZnVuY3Rpb24gKCkgewogICAgZGIgPSByZXEucmVzdWx0
OwogICAgdHJhbnMgPSBkYi50cmFuc2FjdGlvbignc3RvcmUnLCAncmVhZHdyaXRlJyk7CiAgICB0
cmFucy5vYmplY3RTdG9yZSgnc3RvcmUnKS5wdXQoJ3ZhbHVlMScpOwogICAgdHJhbnMub25jb21w
bGV0ZSA9IGZ1bmN0aW9uICgpIHsgY2hlY2soZG8yKTsgfTsKICB9Owp9CgpmdW5jdGlvbiBkbzIo
KSB7CiAgZGIuY2xvc2UoKTsKICByZXEgPSB3ZWJraXRJbmRleGVkREIub3BlbigndGtnJyk7CiAg
cmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uICgpIHsKICAgIGRiID0gcmVxLnJlc3VsdDsKICAgIHRy
YW5zID0gZGIudHJhbnNhY3Rpb24oJ3N0b3JlJywgJ3JlYWR3cml0ZScpOwogICAgdHJhbnMub2Jq
ZWN0U3RvcmUoJ3N0b3JlJykuY2xlYXIoKTsKICAgIHRyYW5zLm9uY29tcGxldGUgPSBkbzM7CiAg
fTsKfQoKZnVuY3Rpb24gZG8zKCkgewogIGRiLmNsb3NlKCk7CiAgcmVxID0gd2Via2l0SW5kZXhl
ZERCLm9wZW4oJ3RrZycpOwogIHJlcS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoKSB7CiAgICBkYiA9
IHJlcS5yZXN1bHQ7CiAgICB0cmFucyA9IGRiLnRyYW5zYWN0aW9uKCdzdG9yZScsICdyZWFkd3Jp
dGUnKTsKICAgIHRyYW5zLm9iamVjdFN0b3JlKCdzdG9yZScpLnB1dCgndmFsdWUyJyk7CiAgICB0
cmFucy5vbmNvbXBsZXRlID0gZnVuY3Rpb24gKCkgeyBjaGVjaygpOyB9OwogIH07Cn0KCmZ1bmN0
aW9uIGNoZWNrKGNhbGxiYWNrKSB7CiAgZG9jdW1lbnQud3JpdGUoIjxoMj4gQ2hlY2tpbmcuLi4g
PC9oMj4iKTsKICB0cmFucyA9IGRiLnRyYW5zYWN0aW9uKCdzdG9yZScsICdyZWFkb25seScpOwog
IHJlcSA9IHRyYW5zLm9iamVjdFN0b3JlKCdzdG9yZScpLm9wZW5DdXJzb3IoKTsKICByZXEub25z
dWNjZXNzID0gZnVuY3Rpb24gKCkgewogICAgaWYgKHJlcS5yZXN1bHQpIHsKICAgICAgZG9jdW1l
bnQud3JpdGUoIjxsaT4ga2V5OiAiICsgcmVxLnJlc3VsdC5rZXkgKyAiIHZhbHVlOiAiICsgcmVx
LnJlc3VsdC52YWx1ZSk7CiAgICAgIHJlcS5yZXN1bHQuY29udGludWUoKTsKICAgIH0KICB9Owog
IHRyYW5zLm9uY29tcGxldGUgPSBjYWxsYmFjazsKfQoKPC9zY3JpcHQ+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152806</attachid>
            <date>2012-07-17 12:37:39 -0700</date>
            <delta_ts>2012-07-17 13:06:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91456-20120717123738.patch</filename>
            <type>text/plain</type>
            <size>28443</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyODMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTFjMzNhZjAyNzQ3ODdk
NGJiMzJjZWM1YWQ1OTExMDdhNTY1NmNhMS4uMzkxZTY2MTMwY2VmMjBiZTEwMWNmNzE3MGVkNzBl
OTc2YzJkZGNjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDEyLTA3LTE3ICBKb3No
dWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBLZXkg
Z2VuZXJhdG9yIHN0YXRlIG5vdCBtYWludGFpbmVkIGFjcm9zcyBjb25uZWN0aW9ucworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE0NTYKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFeHBsaWNpdGx5IHN0b3Jl
IGtleSBnZW5lcmF0b3Igc3RhdGUgZm9yIGVhY2ggb2JqZWN0IHN0b3JlIGluIHRoZSBiYWNraW5n
IHN0b3JlLAorICAgICAgICByYXRoZXIgdGhhbiBkZXJpdmluZyBpdCBmcm9tIHRoZSBtYXhpbXVt
IGtleSBpbiB0aGUgZGF0YSAod2hpY2ggdmlvbGF0ZXMgdGhlIHNwZWMKKyAgICAgICAgaWYgZGF0
YSBpcyBkZWxldGVkKS4KKworICAgICAgICBUaGlzIGNoYW5nZSBlbGltaW5hdGVzIGEgKGZyYWdp
bGUpIHBlci1zdG9yZSBjYWNoZSBvZiB0aGUgdmFsdWUgdG8gc2ltcGxpZnkgdGhlCisgICAgICAg
IGNvZGUuIEEgY2FjaGUgY291bGQgYmUgcmUtaW50cm9kdWNlZCwgcmVxdWlyaW5nIGFuICJvbmJl
Zm9yZWNvbW1pdCIgaG9vayBmb3IKKyAgICAgICAgb2JqZWN0IHN0b3JlcywgYnV0IGl0IHNlZW1z
IGNsZWFuZXIgdG8gc2F2ZSB0aGF0IGZvciBhIGZvbGxvdy11cCBwYXRjaC4KKworICAgICAgICBU
ZXN0OiBzdG9yYWdlL2luZGV4ZWRkYi9rZXktZ2VuZXJhdG9yLmh0bWwKKworICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oOiBOZXcgQVBJcyBmb3IgZ2V0dGluZy9z
ZXR0aW5nIGdlbmVyYXRvciBzdGF0ZXMuCisgICAgICAgIChJREJCYWNraW5nU3RvcmUpOgorICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0T2JqZWN0U3RvcmVzKTog
UmVhZCBnZW5lcmF0b3Igc3RhdGUgKGJ1dCBjdXJyZW5ybHkgdW51c2VkIGhlcmUpLgorICAgICAg
ICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlT2JqZWN0U3RvcmUpOiBX
cml0ZSBnZW5lcmF0b3Igc3RhdGUuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldEtleUdlbmVyYXRvclN0YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6Om1heWJlVXBkYXRlS2V5R2VuZXJh
dG9yU3RhdGUpOiBVcGRhdGUsIG9wdGlvbmFsbHkgY2hlY2tpbmcKKyAgICAgICAgdG8gc2VlIGlm
IHRoZSBuZXcgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIHRoZSBvbGQuIChJZiBjYWxsZXIgZ290IHRo
ZSB2YWx1ZSBmcm9tIHRoZSBnZXRLZXlHZW5lcmF0b3JTdGF0ZQorICAgICAgICBBUEkgaXQgaXMg
c2FmZSB0byBza2lwIHRoZSBjaGVjay4pCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZS5oOgorICAgICAgICAoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZSk6
CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkNvZGluZy5jcHA6CisgICAg
ICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkNvZGluZy5oOgorICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6SURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbCk6IERpdGNoIHRoZSBjYWNoZS4KKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OnB1dCk6IE5vIG5lZWQgZm9yIGFib3J0IHRhc2suCisgICAgICAgIChXZWJD
b3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRXaXRoSW5kZXhLZXlzKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5h
bCk6IFVzZSB0aGUgbmV3ZmFuZ2xlZCBBUElzIGJlbG93LgorICAgICAgICAoV2ViQ29yZTo6SURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2VuZXJhdGVLZXkpOgorICAgICAgICAoV2ViQ29yZTo6
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6dXBkYXRlS2V5R2VuZXJhdG9yKToKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmg6CisgICAgICAg
IChJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKToKKwogMjAxMi0wNy0xNyAgS3dhbmcgWXVsIFNl
byAgPHNreXVsQGNvbXBhbnkxMDAubmV0PgogCiAgICAgICAgICJpbiBib2R5IiBpbnNlcnRpb24g
bW9kZSwgImFueSBvdGhlciBlbmQgdGFnIiBzdGVwIDIuMSBpcyB1cGRhdGVkCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oCmluZGV4IGY3
ODQwNjIxYjYxZjJjMTQxODc4OTY2MzZkNzY1Y2M4ODIyOWZkMDUuLjE2NjEwMDAwZWVmYzdkN2Uz
OWY4MTExZGUyZmQyYjc5ZTI1YmM4MTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oCkBAIC02Nyw3ICs2Nyw4IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIGJvb2wgcHV0T2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIGNvbnN0IFN0cmluZyYgdmFs
dWUsIE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciopID0gMDsKICAgICB2aXJ0dWFsIHZvaWQg
Y2xlYXJPYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgT2JqZWN0U3RvcmVSZWNv
cmRJZGVudGlmaWVyKikgPSAwOwotICAgIHZpcnR1YWwgaW50NjRfdCBuZXh0QXV0b0luY3JlbWVu
dE51bWJlcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkgPSAwOwor
ICAgIHZpcnR1YWwgaW50NjRfdCBnZXRLZXlHZW5lcmF0b3JTdGF0ZShpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBtYXliZVVw
ZGF0ZUtleUdlbmVyYXRvclN0YXRlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBpbnQ2NF90IG5ld1N0YXRlLCBib29sIGNoZWNrQ3VycmVudCkgPSAwOwogICAgIHZp
cnR1YWwgYm9vbCBrZXlFeGlzdHNJbk9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBPYmplY3RTdG9yZVJlY29yZElkZW50
aWZpZXIqIGZvdW5kUmVjb3JkSWRlbnRpZmllcikgPSAwOwogCiAgICAgY2xhc3MgT2JqZWN0U3Rv
cmVSZWNvcmRDYWxsYmFjayB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwCmluZGV4IGFiODI5M2YwZmE0
N2NlYzA4NTkxMWE1NTQ0ZWFiMTNjNTRhNzQ0NTkuLmU5NDEwNDQ0YmMxMWVjOGJjMmNmYWE5YWEw
NTkyNmEyMDVkNzZlMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwCkBAIC0zMiw2ICszMiw3IEBA
CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCiAj
aW5jbHVkZSAiSURCRmFjdG9yeUJhY2tlbmRJbXBsLmgiCisjaW5jbHVkZSAiSURCS2V5LmgiCiAj
aW5jbHVkZSAiSURCS2V5UGF0aC5oIgogI2luY2x1ZGUgIklEQktleVJhbmdlLmgiCiAjaW5jbHVk
ZSAiSURCTGV2ZWxEQkNvZGluZy5oIgpAQCAtNDE0LDYgKzQxNSwxMiBAQCB2b2lkIElEQkxldmVs
REJCYWNraW5nU3RvcmU6OmdldE9iamVjdFN0b3JlcyhpbnQ2NF90IGRhdGFiYXNlSWQsIFZlY3Rv
cjxpbnQ2NF90PgogICAgICAgICAgICAgaXQtPm5leHQoKTsKICAgICAgICAgfQogCisgICAgICAg
IGludDY0X3Qga2V5R2VuZXJhdG9yU3RhdGUgPSAtMTsKKyAgICAgICAgaWYgKGNoZWNrT2JqZWN0
U3RvcmVBbmRNZXRhRGF0YVR5cGUoaXQuZ2V0KCksIHN0b3BLZXksIG9iamVjdFN0b3JlSWQsIE9i
amVjdFN0b3JlTWV0YURhdGFLZXk6OmtLZXlHZW5lcmF0b3JTdGF0ZSkpIHsKKyAgICAgICAgICAg
IGtleUdlbmVyYXRvclN0YXRlID0gZGVjb2RlSW50KGl0LT52YWx1ZSgpLmJlZ2luKCksIGl0LT52
YWx1ZSgpLmVuZCgpKTsKKyAgICAgICAgICAgIGl0LT5uZXh0KCk7CisgICAgICAgIH0KKwogICAg
ICAgICBmb3VuZElkcy5hcHBlbmQob2JqZWN0U3RvcmVJZCk7CiAgICAgICAgIGZvdW5kTmFtZXMu
YXBwZW5kKG9iamVjdFN0b3JlTmFtZSk7CiAgICAgICAgIGZvdW5kS2V5UGF0aHMuYXBwZW5kKGtl
eVBhdGgpOwpAQCAtNDUxLDYgKzQ1OCw3IEBAIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6
Y3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmCiAgICAg
Y29uc3QgVmVjdG9yPGNoYXI+IGxhc3RWZXJzaW9uS2V5ID0gT2JqZWN0U3RvcmVNZXRhRGF0YUtl
eTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIE9iamVjdFN0b3JlTWV0YURhdGFL
ZXk6OmtMYXN0VmVyc2lvbik7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IG1heEluZGV4SWRLZXkg
PSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJ
ZCwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6a01heEluZGV4SWQpOwogICAgIGNvbnN0IFZlY3Rv
cjxjaGFyPiBoYXNLZXlQYXRoS2V5ICA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShk
YXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjprSGFzS2V5
UGF0aCk7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IGtleUdlbmVyYXRvclN0YXRlS2V5ID0gT2Jq
ZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIE9i
amVjdFN0b3JlTWV0YURhdGFLZXk6OmtLZXlHZW5lcmF0b3JTdGF0ZSk7CiAgICAgY29uc3QgVmVj
dG9yPGNoYXI+IG5hbWVzS2V5ID0gT2JqZWN0U3RvcmVOYW1lc0tleTo6ZW5jb2RlKGRhdGFiYXNl
SWQsIG5hbWUpOwogCiAgICAgYm9vbCBvayA9IHB1dFN0cmluZyhtX2N1cnJlbnRUcmFuc2FjdGlv
bi5nZXQoKSwgbmFtZUtleSwgbmFtZSk7CkBAIC00OTUsNiArNTAzLDEyIEBAIGJvb2wgSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBj
b25zdCBTdHJpbmcmCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKKyAgICBvayA9IHB1
dEludChtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwga2V5R2VuZXJhdG9yU3RhdGVLZXksIDEp
OworICAgIGlmICghb2spIHsKKyAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERC
IGVycm9yLiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCiAgICAgb2sgPSBwdXRJ
bnQobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIG5hbWVzS2V5LCBvYmplY3RTdG9yZUlkKTsK
ICAgICBpZiAoIW9rKSB7CiAgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBl
cnJvci4iKTsKQEAgLTYzNCwzNSArNjQ4LDY2IEBAIHZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6ZGVsZXRlT2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90CiAg
ICAgbV9jdXJyZW50VHJhbnNhY3Rpb24tPnJlbW92ZShleGlzdHNFbnRyeUtleSk7CiB9CiAKLWlu
dDY0X3QgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6bmV4dEF1dG9JbmNyZW1lbnROdW1iZXIoaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCisKK2ludDY0X3QgSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0S2V5R2VuZXJhdG9yU3RhdGUoaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCiB7CiAgICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0
aW9uKTsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3RhcnRLZXkgPSBPYmplY3RTdG9yZURhdGFL
ZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBtaW5JREJLZXkoKSk7Ci0gICAg
Y29uc3QgVmVjdG9yPGNoYXI+IHN0b3BLZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShk
YXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBtYXhJREJLZXkoKSk7CiAKLSAgICBPd25QdHI8TGV2
ZWxEQkl0ZXJhdG9yPiBpdCA9IG1fY3VycmVudFRyYW5zYWN0aW9uLT5jcmVhdGVJdGVyYXRvcigp
OworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBrZXlHZW5lcmF0b3JTdGF0ZUtleSA9IE9iamVjdFN0
b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBPYmplY3RT
dG9yZU1ldGFEYXRhS2V5OjprS2V5R2VuZXJhdG9yU3RhdGUpOwogCi0gICAgaW50NjRfdCBtYXhO
dW1lcmljS2V5ID0gMDsKKyAgICBpbnQ2NF90IGtleUdlbmVyYXRvclN0YXRlID0gLTE7CisgICAg
VmVjdG9yPGNoYXI+IGRhdGE7CiAKLSAgICAvLyBGSVhNRTogVGhpcyBkb2VzIGEgZm9yd2FyZCBz
Y2FuIG92ZXIgYWxsIGtleXMuIEltcHJvdmUgaXQuCi0gICAgLy8gU2luY2UgYWxsIGRhdGVzID4g
YWxsIG51bWJlcnMsIGNyZWF0ZSBEYXRlKC1JbmZpbml0eSkgYW5kIHNlZWsgYmFja3dhcmRzLgor
ICAgIGlmIChtX2N1cnJlbnRUcmFuc2FjdGlvbi0+Z2V0KGtleUdlbmVyYXRvclN0YXRlS2V5LCBk
YXRhKSkKKyAgICAgICAga2V5R2VuZXJhdG9yU3RhdGUgPSBkZWNvZGVJbnQoZGF0YS5iZWdpbigp
LCBkYXRhLmVuZCgpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgLy8gUHJldmlvdXNseSwgdGhlIGtl
eSBnZW5lcmF0b3Igc3RhdGUgd2FzIG5vdCBzdG9yZWQgZXhwbGljaXRseSBidXQgZGVyaXZlZCBm
cm9tIHRoZQorICAgICAgICAvLyBtYXhpbXVtIG51bWVyaWMga2V5IHByZXNlbnQgaW4gZXhpc3Rp
bmcgZGF0YS4gVGhpcyB2aW9sYXRlcyB0aGUgc3BlYyBhcyB0aGUgZGF0YSBtYXkKKyAgICAgICAg
Ly8gYmUgY2xlYXJlZCBidXQgdGhlIGtleSBnZW5lcmF0b3Igc3RhdGUgbXVzdCBiZSBwcmVzZXJ2
ZWQuCisgICAgICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdGFydEtleSA9IE9iamVjdFN0b3JlRGF0
YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIG1pbklEQktleSgpKTsKKyAg
ICAgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0b3BLZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVu
Y29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBtYXhJREJLZXkoKSk7CisKKyAgICAgICAg
T3duUHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSBtX2N1cnJlbnRUcmFuc2FjdGlvbi0+Y3JlYXRl
SXRlcmF0b3IoKTsKKyAgICAgICAgaW50NjRfdCBtYXhOdW1lcmljS2V5ID0gMDsKKworICAgICAg
ICBmb3IgKGl0LT5zZWVrKHN0YXJ0S2V5KTsgaXQtPmlzVmFsaWQoKSAmJiBjb21wYXJlS2V5cyhp
dC0+a2V5KCksIHN0b3BLZXkpIDwgMDsgaXQtPm5leHQoKSkgeworICAgICAgICAgICAgY29uc3Qg
Y2hhciAqcCA9IGl0LT5rZXkoKS5iZWdpbigpOworICAgICAgICAgICAgY29uc3QgY2hhciAqbGlt
aXQgPSBpdC0+a2V5KCkuZW5kKCk7CisKKyAgICAgICAgICAgIE9iamVjdFN0b3JlRGF0YUtleSBk
YXRhS2V5OworICAgICAgICAgICAgcCA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZGVjb2RlKHAsIGxp
bWl0LCAmZGF0YUtleSk7CisgICAgICAgICAgICBBU1NFUlQocCk7CisKKyAgICAgICAgICAgIGlm
IChkYXRhS2V5LnVzZXJLZXkoKS0+dHlwZSgpID09IElEQktleTo6TnVtYmVyVHlwZSkgeworICAg
ICAgICAgICAgICAgIGludDY0X3QgbiA9IHN0YXRpY19jYXN0PGludDY0X3Q+KGRhdGFLZXkudXNl
cktleSgpLT5udW1iZXIoKSk7CisgICAgICAgICAgICAgICAgaWYgKG4gPiBtYXhOdW1lcmljS2V5
KQorICAgICAgICAgICAgICAgICAgICBtYXhOdW1lcmljS2V5ID0gbjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQogCi0gICAgZm9yIChpdC0+c2VlayhzdGFydEtleSk7IGl0LT5pc1ZhbGlkKCkg
JiYgY29tcGFyZUtleXMoaXQtPmtleSgpLCBzdG9wS2V5KSA8IDA7IGl0LT5uZXh0KCkpIHsKLSAg
ICAgICAgY29uc3QgY2hhciAqcCA9IGl0LT5rZXkoKS5iZWdpbigpOwotICAgICAgICBjb25zdCBj
aGFyICpsaW1pdCA9IGl0LT5rZXkoKS5lbmQoKTsKKyAgICAgICAga2V5R2VuZXJhdG9yU3RhdGUg
PSBtYXhOdW1lcmljS2V5ICsgMTsKKyAgICB9CiAKLSAgICAgICAgT2JqZWN0U3RvcmVEYXRhS2V5
IGRhdGFLZXk7Ci0gICAgICAgIHAgPSBPYmplY3RTdG9yZURhdGFLZXk6OmRlY29kZShwLCBsaW1p
dCwgJmRhdGFLZXkpOwotICAgICAgICBBU1NFUlQocCk7CisgICAgcmV0dXJuIGtleUdlbmVyYXRv
clN0YXRlOworfQogCi0gICAgICAgIGlmIChkYXRhS2V5LnVzZXJLZXkoKS0+dHlwZSgpID09IElE
QktleTo6TnVtYmVyVHlwZSkgewotICAgICAgICAgICAgaW50NjRfdCBuID0gc3RhdGljX2Nhc3Q8
aW50NjRfdD4oZGF0YUtleS51c2VyS2V5KCktPm51bWJlcigpKTsKLSAgICAgICAgICAgIGlmIChu
ID4gbWF4TnVtZXJpY0tleSkKLSAgICAgICAgICAgICAgICBtYXhOdW1lcmljS2V5ID0gbjsKLSAg
ICAgICAgfQorYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjptYXliZVVwZGF0ZUtleUdlbmVy
YXRvclN0YXRlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2
NF90IG5ld1N0YXRlLCBib29sIGNoZWNrQ3VycmVudCkKK3sKKyAgICBBU1NFUlQobV9jdXJyZW50
VHJhbnNhY3Rpb24pOworCisgICAgaWYgKGNoZWNrQ3VycmVudCkgeworICAgICAgICBpbnQ2NF90
IGN1cnJlbnRTdGF0ZSA9IGdldEtleUdlbmVyYXRvclN0YXRlKGRhdGFiYXNlSWQsIG9iamVjdFN0
b3JlSWQpOworICAgICAgICBpZiAobmV3U3RhdGUgPD0gY3VycmVudFN0YXRlKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgcmV0dXJuIG1heE51bWVyaWNLZXkgKyAxOwor
ICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBrZXlHZW5lcmF0b3JTdGF0ZUtleSA9IE9iamVjdFN0b3Jl
TWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9y
ZU1ldGFEYXRhS2V5OjprS2V5R2VuZXJhdG9yU3RhdGUpOworICAgIGJvb2wgb2sgPSBwdXRJbnQo
bV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGtleUdlbmVyYXRvclN0YXRlS2V5LCBuZXdTdGF0
ZSk7CisgICAgaWYgKCFvaykgeworICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQg
REIgZXJyb3IuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRy
dWU7CiB9CiAKIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5PYmplY3RT
dG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURC
S2V5JiBrZXksIE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciogZm91bmRSZWNvcmRJZGVudGlm
aWVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZS5oCmluZGV4IGE2NWY5NjNlODUwNDMyNTg0ZDk3YzY4MThkYzk0
YzJjNjc1MTY2ODkuLjc2ZjlkODg4YTAyODgxMzFiYTJkNDZjMmFhZjNiNjM4NDVhNmU1NDkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNr
aW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZl
bERCQmFja2luZ1N0b3JlLmgKQEAgLTU4LDcgKzU4LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwg
Ym9vbCBwdXRPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgT2JqZWN0U3Rv
cmVSZWNvcmRJZGVudGlmaWVyKik7CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyT2JqZWN0U3RvcmUo
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpOwogICAgIHZpcnR1YWwg
dm9pZCBkZWxldGVPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKik7Ci0gICAg
dmlydHVhbCBpbnQ2NF90IG5leHRBdXRvSW5jcmVtZW50TnVtYmVyKGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKKyAgICB2aXJ0dWFsIGludDY0X3QgZ2V0S2V5R2Vu
ZXJhdG9yU3RhdGUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpOwor
ICAgIHZpcnR1YWwgYm9vbCBtYXliZVVwZGF0ZUtleUdlbmVyYXRvclN0YXRlKGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IG5ld1N0YXRlLCBib29sIGNo
ZWNrQ3VycmVudCk7CiAgICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luT2JqZWN0U3RvcmUoaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIE9i
amVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciogZm91bmRSZWNvcmRJZGVudGlmaWVyKTsKIAogICAg
IHZpcnR1YWwgYm9vbCBmb3JFYWNoT2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIE9iamVjdFN0b3JlUmVjb3JkQ2FsbGJhY2smKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJDb2Rp
bmcuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkNvZGlu
Zy5jcHAKaW5kZXggMTgzNjM3NzIxZjBiMTI3M2ZmMDFmODdhMDIzMzZiMGY3MTJiYWZiNy4uYjAz
MDE5MzZmM2YxMjk0NmY0ZjhkZDhhYWU1OTZmOGEyZTAzOTkwNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkNvZGluZy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkNvZGluZy5jcHAKQEAgLTcz
LDYgKzczLDcgQEAKIC8vICAgICA8ZGF0YWJhc2UgaWQsIDAsIDAsIDUwLCBvYmplY3Qgc3RvcmUg
aWQsIDQ+ID0+IGxhc3QgInZlcnNpb24iIG51bWJlciBbT2JqZWN0U3RvcmVNZXRhRGF0YUtleV0K
IC8vICAgICA8ZGF0YWJhc2UgaWQsIDAsIDAsIDUwLCBvYmplY3Qgc3RvcmUgaWQsIDU+ID0+IG1h
eGltdW0gaW5kZXggaWQgZXZlciBhbGxvY2F0ZWQgW09iamVjdFN0b3JlTWV0YURhdGFLZXldCiAv
LyAgICAgPGRhdGFiYXNlIGlkLCAwLCAwLCA1MCwgb2JqZWN0IHN0b3JlIGlkLCA2PiA9PiBoYXMg
a2V5IHBhdGggKHZzLiBudWxsKSBbT2JqZWN0U3RvcmVNZXRhRGF0YUtleV0KKy8vICAgICA8ZGF0
YWJhc2UgaWQsIDAsIDAsIDUwLCBvYmplY3Qgc3RvcmUgaWQsIDc+ID0+IGtleSBnZW5lcmF0b3Ig
c3RhdGUgW09iamVjdFN0b3JlTWV0YURhdGFLZXldCiAvLwogLy8KIC8vIEluZGV4IG1ldGEtZGF0
YToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVs
REJDb2RpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJD
b2RpbmcuaAppbmRleCBjYzFmNzI3OGRlZmVjNmU0NjBkOTRjMTQyMTkyNmQxNDkxODYzOWQyLi5h
NTVjNGU0NWZmYzhiNjM4NmZlMmYzN2RkN2VkYjIwNTViMjU2ZTU0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQ29kaW5nLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkNvZGluZy5oCkBAIC0xNTUs
NyArMTU1LDggQEAgcHVibGljOgogICAgICAgICBrRXZpY3RhYmxlID0gMywKICAgICAgICAga0xh
c3RWZXJzaW9uID0gNCwKICAgICAgICAga01heEluZGV4SWQgPSA1LAotICAgICAgICBrSGFzS2V5
UGF0aCA9IDYKKyAgICAgICAga0hhc0tleVBhdGggPSA2LAorICAgICAgICBrS2V5R2VuZXJhdG9y
U3RhdGUgPSA3CiAgICAgfTsKIAogICAgIE9iamVjdFN0b3JlTWV0YURhdGFLZXkoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbC5jcHAKaW5kZXggNzJlNzBhZjc3ZDA3MTNiMTUwNTZlMzY4NDczMTZi
ZjdlY2NkYTM2MC4uZDVjODVlMWNjOWUwMzFkYTJhYWUyYmY0MTZhMzNiMDJlNmNkZTlhOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKQEAgLTU3LDcgKzU3LDYgQEAgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbChjb25zdCBJREJEYXRhYmFz
ZUJhY2tlbmRJbXAKICAgICAsIG1fbmFtZShuYW1lKQogICAgICwgbV9rZXlQYXRoKGtleVBhdGgp
CiAgICAgLCBtX2F1dG9JbmNyZW1lbnQoYXV0b0luY3JlbWVudCkKLSAgICAsIG1fYXV0b0luY3Jl
bWVudE51bWJlcigtMSkKIHsKICAgICBsb2FkSW5kZXhlcygpOwogfQpAQCAtNjgsNyArNjcsNiBA
QCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKGNv
bnN0IElEQkRhdGFiYXNlQmFja2VuZEltcAogICAgICwgbV9uYW1lKG5hbWUpCiAgICAgLCBtX2tl
eVBhdGgoa2V5UGF0aCkKICAgICAsIG1fYXV0b0luY3JlbWVudChhdXRvSW5jcmVtZW50KQotICAg
ICwgbV9hdXRvSW5jcmVtZW50TnVtYmVyKC0xKQogewogfQogCkBAIC0xNTksOSArMTU3LDcgQEAg
dm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXQoUGFzc1JlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+IHBycFZhbHVlLAogICAgIE93blB0cjxWZWN0b3I8U3RyaW5nPiA+IG51bGxJ
bmRleE5hbWVzOwogICAgIE93blB0cjxWZWN0b3I8SW5kZXhLZXlzPiA+IG51bGxJbmRleEtleXM7
CiAgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKAotICAgICAgICAgICAgY3JlYXRl
Q2FsbGJhY2tUYXNrKCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbCwgb2Jq
ZWN0U3RvcmUsIHZhbHVlLCBrZXksIHB1dE1vZGUsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24sIG51
bGxJbmRleE5hbWVzLnJlbGVhc2UoKSwgbnVsbEluZGV4S2V5cy5yZWxlYXNlKCkpLAotICAgICAg
ICAgICAgLy8gRklYTUU6IE9uZSBvZiB0aGVzZSBwZXIgcHV0KCkgaXMgb3ZlcmtpbGwsIHNpbmNl
IGl0J3Mgc2ltcGx5IGEgY2FjaGUgaW52YWxpZGF0aW9uLgotICAgICAgICAgICAgY3JlYXRlQ2Fs
bGJhY2tUYXNrKCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpyZXZlcnRBdXRvSW5jcmVtZW50
S2V5Q2FjaGUsIG9iamVjdFN0b3JlKSkpCisgICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2so
JklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsLCBvYmplY3RTdG9yZSwgdmFs
dWUsIGtleSwgcHV0TW9kZSwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbiwgbnVsbEluZGV4TmFtZXMu
cmVsZWFzZSgpLCBudWxsSW5kZXhLZXlzLnJlbGVhc2UoKSkpKQogICAgICAgICBlYyA9IElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9FUlI7CiB9CiAKQEAgLTE4MSwx
NyArMTc3LDEwIEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0V2l0aEluZGV4
S2V5cyhQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1CiAgICAgT3duUHRyPFZlY3RvcjxJ
bmRleEtleXM+ID4gbmV3SW5kZXhLZXlzID0gYWRvcHRQdHIobmV3IFZlY3RvcjxJbmRleEtleXM+
KGluZGV4S2V5cykpOwogCiAgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKAotICAg
ICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpw
dXRJbnRlcm5hbCwgb2JqZWN0U3RvcmUsIHZhbHVlLCBrZXksIHB1dE1vZGUsIGNhbGxiYWNrcywg
dHJhbnNhY3Rpb24sIG5ld0luZGV4TmFtZXMucmVsZWFzZSgpLCBuZXdJbmRleEtleXMucmVsZWFz
ZSgpKSwKLSAgICAgICAgICAgIC8vIEZJWE1FOiBPbmUgb2YgdGhlc2UgcGVyIHB1dCgpIGlzIG92
ZXJraWxsLCBzaW5jZSBpdCdzIHNpbXBseSBhIGNhY2hlIGludmFsaWRhdGlvbi4KLSAgICAgICAg
ICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cmV2ZXJ0
QXV0b0luY3JlbWVudEtleUNhY2hlLCBvYmplY3RTdG9yZSkpKQorICAgICAgICAgICAgY3JlYXRl
Q2FsbGJhY2tUYXNrKCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbCwgb2Jq
ZWN0U3RvcmUsIHZhbHVlLCBrZXksIHB1dE1vZGUsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24sIG5l
d0luZGV4TmFtZXMucmVsZWFzZSgpLCBuZXdJbmRleEtleXMucmVsZWFzZSgpKSkpCiAgICAgICAg
IGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKIH0K
IAotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpyZXZlcnRBdXRvSW5jcmVtZW50S2V5
Q2FjaGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUpCi17Ci0gICAgb2JqZWN0U3RvcmUtPnJlc2V0QXV0b0lu
Y3JlbWVudEtleUNhY2hlKCk7Ci19Ci0KIG5hbWVzcGFjZSB7CiBjbGFzcyBJbmRleFdyaXRlciB7
CiBwdWJsaWM6CkBAIC0yOTEsOSArMjgwLDEwIEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6cHV0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8CiAg
ICAgT3duUHRyPFZlY3RvcjxTdHJpbmc+ID4gaW5kZXhOYW1lcyA9IHBvcEluZGV4TmFtZXM7CiAg
ICAgT3duUHRyPFZlY3RvcjxJbmRleEtleXM+ID4gaW5kZXhLZXlzID0gcG9wSW5kZXhLZXlzOwog
ICAgIEFTU0VSVCgoIWluZGV4TmFtZXMgJiYgIWluZGV4S2V5cykgfHwgaW5kZXhOYW1lcy0+c2l6
ZSgpID09IGluZGV4S2V5cy0+c2l6ZSgpKTsKKyAgICBjb25zdCBib29sIGF1dG9JbmNyZW1lbnQg
PSBvYmplY3RTdG9yZS0+YXV0b0luY3JlbWVudCgpOworICAgIGJvb2wga2V5V2FzR2VuZXJhdGVk
ID0gZmFsc2U7CiAKICAgICBpZiAocHV0TW9kZSAhPSBDdXJzb3JVcGRhdGUpIHsKLSAgICAgICAg
Y29uc3QgYm9vbCBhdXRvSW5jcmVtZW50ID0gb2JqZWN0U3RvcmUtPmF1dG9JbmNyZW1lbnQoKTsK
ICAgICAgICAgY29uc3QgYm9vbCBoYXNLZXlQYXRoID0gIW9iamVjdFN0b3JlLT5tX2tleVBhdGgu
aXNOdWxsKCk7CiAgICAgICAgIGlmIChoYXNLZXlQYXRoKSB7CiAgICAgICAgICAgICBBU1NFUlQo
IWtleSk7CkBAIC0zMDMsNyArMjkzLDggQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
OjpwdXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjwKICAgICAg
ICAgfQogICAgICAgICBpZiAoYXV0b0luY3JlbWVudCkgewogICAgICAgICAgICAgaWYgKCFrZXkp
IHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8SURCS2V5PiBhdXRvSW5jS2V5ID0gb2JqZWN0U3Rv
cmUtPmdlbkF1dG9JbmNyZW1lbnRLZXkoKTsKKyAgICAgICAgICAgICAgICBSZWZQdHI8SURCS2V5
PiBhdXRvSW5jS2V5ID0gb2JqZWN0U3RvcmUtPmdlbmVyYXRlS2V5KCk7CisgICAgICAgICAgICAg
ICAga2V5V2FzR2VuZXJhdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBpZiAoIWF1dG9JbmNL
ZXktPmlzVmFsaWQoKSkgewogICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3Io
SURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUiwg
Ik1heGltdW0ga2V5IGdlbmVyYXRvciB2YWx1ZSByZWFjaGVkLiIpKTsKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwpAQCAtMzEzLDcgKzMwNCw2IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6cHV0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8
CiAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVl
QWZ0ZXJJbmplY3Rpb24gPSBpbmplY3RLZXlJbnRvS2V5UGF0aChhdXRvSW5jS2V5LCB2YWx1ZSwg
b2JqZWN0U3RvcmUtPm1fa2V5UGF0aCk7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCh2YWx1
ZUFmdGVySW5qZWN0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZUFmdGVySW5q
ZWN0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RTdG9yZS0+cmVzZXRBdXRv
SW5jcmVtZW50S2V5Q2FjaGUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrcyBp
biBwdXQoKSBlbnN1cmUgdGhpcyBzaG91bGQgb25seSBoYXBwZW4gaWYgSS9PIGVycm9yIG9jY3Vy
cy4KICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFz
ZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAiSW50ZXJu
YWwgZXJyb3IgaW5zZXJ0aW5nIGdlbmVyYXRlZCBrZXkgaW50byB0aGUgb2JqZWN0LiIpKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTMyMSw5ICszMTEsNiBAQCB2b2lkIElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBQYXNzUmVmUHRyPAogICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlQWZ0ZXJJ
bmplY3Rpb247CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGtleSA9IGF1dG9J
bmNLZXk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBM
b2dpYyB0byB1cGRhdGUgZ2VuZXJhdG9yIHN0YXRlIHNob3VsZCBnbyBoZXJlLiBDdXJyZW50bHkg
aXQgZG9lcyBhIHNjYW4uCi0gICAgICAgICAgICAgICAgb2JqZWN0U3RvcmUtPnJlc2V0QXV0b0lu
Y3JlbWVudEtleUNhY2hlKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0z
MzIsNyArMzE5LDYgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5h
bChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjwKIAogICAgIFJlZlB0cjxJREJC
YWNraW5nU3RvcmU6Ok9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcj4gcmVjb3JkSWRlbnRpZmll
ciA9IG9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+Y3JlYXRlSW52YWxpZFJlY29yZElkZW50
aWZpZXIoKTsKICAgICBpZiAocHV0TW9kZSA9PSBBZGRPbmx5ICYmIG9iamVjdFN0b3JlLT5iYWNr
aW5nU3RvcmUoKS0+a2V5RXhpc3RzSW5PYmplY3RTdG9yZShvYmplY3RTdG9yZS0+ZGF0YWJhc2VJ
ZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwgKmtleSwgcmVjb3JkSWRlbnRpZmllci5nZXQoKSkpIHsK
LSAgICAgICAgb2JqZWN0U3RvcmUtPnJlc2V0QXV0b0luY3JlbWVudEtleUNhY2hlKCk7CiAgICAg
ICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJh
c2VFeGNlcHRpb246OkNPTlNUUkFJTlRfRVJSLCAiS2V5IGFscmVhZHkgZXhpc3RzIGluIHRoZSBv
YmplY3Qgc3RvcmUuIikpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzYzLDcgKzM0OSw2
IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0U3RvcmUtPmlkKCksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleC0+aWQoKSwga2V5LmdldCgpLCAm
ZXJyb3JNZXNzYWdlKSkgewotICAgICAgICAgICAgb2JqZWN0U3RvcmUtPnJlc2V0QXV0b0luY3Jl
bWVudEtleUNhY2hlKCk7CiAgICAgICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJh
c2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUiwgZXJyb3JNZXNz
YWdlKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTM5Myw3ICszNzgsMTAg
QEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjwKICAgICAgICAgfQogICAgIH0KIAotICAgIGNhbGxi
YWNrcy0+b25TdWNjZXNzKGtleS5nZXQoKSk7CisgICAgaWYgKGF1dG9JbmNyZW1lbnQgJiYgcHV0
TW9kZSAhPSBDdXJzb3JVcGRhdGUgJiYga2V5LT50eXBlKCkgPT0gSURCS2V5OjpOdW1iZXJUeXBl
KQorICAgICAgICBvYmplY3RTdG9yZS0+dXBkYXRlS2V5R2VuZXJhdG9yKGtleS5nZXQoKSwgIWtl
eVdhc0dlbmVyYXRlZCk7CisKKyAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhrZXkucmVsZWFzZSgp
KTsKIH0KIAogdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVGdW5jdGlvbihQ
YXNzUmVmUHRyPElEQktleVJhbmdlPiBwcnBLZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2Fj
dGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC02NTcsMTggKzY0NSwyMCBAQCB2b2lkIElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OmFkZEluZGV4VG9NYXAoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3NSZWZQdAogICAgIG9iamVjdFN0b3JlLT5tX2luZGV4ZXMuc2V0KGluZGV4UHRyLT5u
YW1lKCksIGluZGV4UHRyKTsKIH0KIAotUGFzc1JlZlB0cjxJREJLZXk+IElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OmdlbkF1dG9JbmNyZW1lbnRLZXkoKQorUGFzc1JlZlB0cjxJREJLZXk+IElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmdlbmVyYXRlS2V5KCkKIHsKICAgICBjb25zdCBpbnQ2
NF90IGtNYXhHZW5lcmF0b3JWYWx1ZSA9IDkwMDcxOTkyNTQ3NDA5OTJMTDsgLy8gTWF4aW11bSBp
bnRlZ2VyIHN0b3JhYmxlIGFzIEVDTUFTY3JpcHQgbnVtYmVyLgotICAgIGlmIChtX2F1dG9JbmNy
ZW1lbnROdW1iZXIgPiBrTWF4R2VuZXJhdG9yVmFsdWUpCisgICAgaW50NjRfdCBjdXJyZW50TnVt
YmVyID0gYmFja2luZ1N0b3JlKCktPmdldEtleUdlbmVyYXRvclN0YXRlKGRhdGFiYXNlSWQoKSwg
aWQoKSk7CisgICAgaWYgKGN1cnJlbnROdW1iZXIgPCAwIHx8IGN1cnJlbnROdW1iZXIgPiBJREJL
ZXk6OmtNYXhHZW5lcmF0b3JWYWx1ZSkKICAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlSW52
YWxpZCgpOwotICAgIGlmIChtX2F1dG9JbmNyZW1lbnROdW1iZXIgPiAwKQotICAgICAgICByZXR1
cm4gSURCS2V5OjpjcmVhdGVOdW1iZXIobV9hdXRvSW5jcmVtZW50TnVtYmVyKyspOwogCi0gICAg
bV9hdXRvSW5jcmVtZW50TnVtYmVyID0gYmFja2luZ1N0b3JlKCktPm5leHRBdXRvSW5jcmVtZW50
TnVtYmVyKGRhdGFiYXNlSWQoKSwgaWQoKSk7Ci0gICAgaWYgKG1fYXV0b0luY3JlbWVudE51bWJl
ciA+IGtNYXhHZW5lcmF0b3JWYWx1ZSkKLSAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlSW52
YWxpZCgpOwotICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZU51bWJlcihtX2F1dG9JbmNyZW1lbnRO
dW1iZXIrKyk7CisgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlTnVtYmVyKGN1cnJlbnROdW1iZXIp
OworfQorCit2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnVwZGF0ZUtleUdlbmVyYXRv
cihjb25zdCBJREJLZXkqIGtleSwgYm9vbCBjaGVja0N1cnJlbnQpCit7CisgICAgQVNTRVJUKGtl
eSAmJiBrZXktPnR5cGUoKSA9PSBJREJLZXk6Ok51bWJlclR5cGUpOworICAgIGJhY2tpbmdTdG9y
ZSgpLT5tYXliZVVwZGF0ZUtleUdlbmVyYXRvclN0YXRlKGRhdGFiYXNlSWQoKSwgaWQoKSwgc3Rh
dGljX2Nhc3Q8aW50NjRfdD4oZmxvb3Ioa2V5LT5udW1iZXIoKSkpICsgMSwgY2hlY2tDdXJyZW50
KTsKIH0KIAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgKaW5kZXggMWM3NDViNTkzZGZiNDA3ZGMz
NTBlMjI5ZWNmMTMwYjBjNTM2NjdhNi4uYTM3YzY3ZTdmNjgyMjYxYzMwMzQwM2VlMDM1OTU3MmVk
OWQyOGYzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaApAQCAtODksOCArODksOCBAQCBwcml2
YXRlOgogICAgIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwoY29uc3QgSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbCosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgYXV0
b0luY3JlbWVudCk7CiAKICAgICB2b2lkIGxvYWRJbmRleGVzKCk7Ci0gICAgUGFzc1JlZlB0cjxJ
REJLZXk+IGdlbkF1dG9JbmNyZW1lbnRLZXkoKTsKLSAgICB2b2lkIHJlc2V0QXV0b0luY3JlbWVu
dEtleUNhY2hlKCkgeyBtX2F1dG9JbmNyZW1lbnROdW1iZXIgPSAtMTsgfQorICAgIFBhc3NSZWZQ
dHI8SURCS2V5PiBnZW5lcmF0ZUtleSgpOworICAgIHZvaWQgdXBkYXRlS2V5R2VuZXJhdG9yKGNv
bnN0IElEQktleSosIGJvb2wgY2hlY2tDdXJyZW50KTsKIAogICAgIHN0YXRpYyB2b2lkIGdldElu
dGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+KTsKICAgICBzdGF0aWMgdm9pZCBwdXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIFB1dE1vZGUsIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2U+LCBQYXNzT3duUHRyPFZlY3RvcjxTdHJpbmc+ID4gcG9wSW5kZXhOYW1lcywgUGFzc093
blB0cjxWZWN0b3I8SW5kZXhLZXlzPiA+KTsKQEAgLTEwNCw3ICsxMDQsNiBAQCBwcml2YXRlOgog
ICAgIC8vIFRoZXNlIGFyZSB1c2VkIGFzIHNldFZlcnNpb24gdHJhbnNhY3Rpb24gYWJvcnQgdGFz
a3MuCiAgICAgc3RhdGljIHZvaWQgcmVtb3ZlSW5kZXhGcm9tTWFwKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRy
PElEQkluZGV4QmFja2VuZEltcGw+KTsKICAgICBzdGF0aWMgdm9pZCBhZGRJbmRleFRvTWFwKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw+LCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+KTsKLSAgICBzdGF0aWMgdm9pZCBy
ZXZlcnRBdXRvSW5jcmVtZW50S2V5Q2FjaGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NS
ZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4pOwogCiAgICAgUGFzc1JlZlB0cjxJREJC
YWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YWJhc2UtPmJh
Y2tpbmdTdG9yZSgpOyB9CiAgICAgaW50NjRfdCBkYXRhYmFzZUlkKCkgY29uc3QgeyByZXR1cm4g
bV9kYXRhYmFzZS0+aWQoKTsgfQpAQCAtMTE3LDcgKzExNiw2IEBAIHByaXZhdGU6CiAKICAgICB0
eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gPiBJbmRl
eE1hcDsKICAgICBJbmRleE1hcCBtX2luZGV4ZXM7Ci0gICAgaW50NjRfdCBtX2F1dG9JbmNyZW1l
bnROdW1iZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMDc5NGM5Y2U4
MDkwNWZhNmQ1ZjZhMDVhZjFmYjdlYzUyN2ViMGE5Ny4uMDhhNjRiYjdkMDljODMzOWQzZmQ3MTU4
MTA5MGMwNDY3NTJmZDM5NiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBi
L0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDEyLTA3LTE3ICBKb3No
dWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBLZXkg
Z2VuZXJhdG9yIHN0YXRlIG5vdCBtYWludGFpbmVkIGFjcm9zcyBjb25uZWN0aW9ucworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE0NTYKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBrZXkgZ2VuZXJh
dG9yIHRlc3QgY2FzZSB0aGF0IHNwYW5zIGRhdGFiYXNlIGNvbm5lY3Rpb25zLgorCisgICAgICAg
ICogc3RvcmFnZS9pbmRleGVkZGIva2V5LWdlbmVyYXRvci1leHBlY3RlZC50eHQ6CisgICAgICAg
ICogc3RvcmFnZS9pbmRleGVkZGIvcmVzb3VyY2VzL2tleS1nZW5lcmF0b3IuanM6CisgICAgICAg
ICh0ZXN0QWNyb3NzQ29ubmVjdGlvbnMucmVxdWVzdC5vbnN1Y2Nlc3MucmVxdWVzdC5vbnN1Y2Nl
c3MucmVxdWVzdC5vbnN1Y2Nlc3MpOgorICAgICAgICAodGVzdEFjcm9zc0Nvbm5lY3Rpb25zLnJl
cXVlc3Qub25zdWNjZXNzLnJlcXVlc3Qub25zdWNjZXNzKToKKyAgICAgICAgKHRlc3RBY3Jvc3ND
b25uZWN0aW9ucy5yZXF1ZXN0Lm9uc3VjY2Vzcyk6CisgICAgICAgICh0ZXN0QWNyb3NzQ29ubmVj
dGlvbnMuZG9GaXJzdFdyaXRlLnJlcXVlc3Qub25zdWNjZXNzKToKKyAgICAgICAgKHRlc3RBY3Jv
c3NDb25uZWN0aW9ucy5kb0ZpcnN0V3JpdGUpOgorICAgICAgICAodGVzdEFjcm9zc0Nvbm5lY3Rp
b25zLmNsb3NlQW5kUmVvcGVuLnJlcXVlc3Qub25zdWNjZXNzKToKKyAgICAgICAgKHRlc3RBY3Jv
c3NDb25uZWN0aW9ucy5jbG9zZUFuZFJlb3Blbik6CisgICAgICAgICh0ZXN0QWNyb3NzQ29ubmVj
dGlvbnMuZG9TZWNvbmRXcml0ZS5yZXF1ZXN0Lm9uc3VjY2Vzcyk6CisgICAgICAgICh0ZXN0QWNy
b3NzQ29ubmVjdGlvbnMuZG9TZWNvbmRXcml0ZS50cmFucy5vbmNvbXBsZXRlKToKKyAgICAgICAg
KHRlc3RBY3Jvc3NDb25uZWN0aW9ucy5kb1NlY29uZFdyaXRlKToKKwogMjAxMi0wNy0xNiAgw4Fk
w6FtIEthbGxhaSAgPGthZGFtQGluZi51LXN6ZWdlZC5odT4KIAogICAgICAgICBbUXRdIHBsYXRm
cm9tL3F0L2VkaXRpbmcvaW5zZXJ0aW5nIHRlc3RzIG5lZWRzIHVwZGF0ZSBhZnRlciB0ZXN0IGZv
bnQgY2hhbmdlLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIva2V5
LWdlbmVyYXRvci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9r
ZXktZ2VuZXJhdG9yLWV4cGVjdGVkLnR4dAppbmRleCA5ZGU2YmI1N2E3NTVlMWQ4ZThlYzBiMTFl
YTVmNzRmOTI1NjMzMTJlLi41MmZjYzcyODY2YWE2YmY4MzQ5YTBkODU5NjAzODQzMmI0YjVlMTg1
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9rZXktZ2VuZXJhdG9y
LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9rZXktZ2Vu
ZXJhdG9yLWV4cGVjdGVkLnR4dApAQCAtMTY3LDYgKzE2NywyNiBAQCBQQVNTIGV2ZW50LnRhcmdl
dC5lcnJvci5uYW1lIGlzICdEYXRhRXJyb3InCiBldmVudC5wcmV2ZW50RGVmYXVsdCgpCiBQQVNT
IEdvdCAiZCIgZm9yIGtleTogMgogZGIuY2xvc2UoKQorCitFbnN1cmUga2V5IGdlbmVyYXRvciBz
dGF0ZSBpcyBtYWludGFpbmVkIGFjcm9zcyBjb25uZWN0aW9uczoKK2luZGV4ZWREQi5kZWxldGVE
YXRhYmFzZSgna2V5LWdlbmVyYXRvcicpCityZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oJ2tleS1n
ZW5lcmF0b3InKQorZGIgPSByZXF1ZXN0LnJlc3VsdAorZGIuc2V0VmVyc2lvbignMScpCitkYi5j
cmVhdGVPYmplY3RTdG9yZSgnc3RvcmUnLCB7YXV0b0luY3JlbWVudDogdHJ1ZX0pCisKK3RyYW5z
ID0gZGIudHJhbnNhY3Rpb24oJ3N0b3JlJywgJ3JlYWR3cml0ZScpCityZXF1ZXN0ID0gdHJhbnMu
b2JqZWN0U3RvcmUoJ3N0b3JlJykucHV0KCd2YWx1ZTEnKQorUEFTUyByZXF1ZXN0LnJlc3VsdCBp
cyAxCit0cmFucy5vYmplY3RTdG9yZSgnc3RvcmUnKS5jbGVhcigpCitkYi5jbG9zZSgpCisKK3Jl
cXVlc3QgPSBpbmRleGVkREIub3Blbigna2V5LWdlbmVyYXRvcicpCitkYiA9IHJlcXVlc3QucmVz
dWx0Cit0cmFucyA9IGRiLnRyYW5zYWN0aW9uKCdzdG9yZScsICdyZWFkd3JpdGUnKQorcmVxdWVz
dCA9IHRyYW5zLm9iamVjdFN0b3JlKCdzdG9yZScpLnB1dCgndmFsdWUyJykKK1BBU1MgcmVxdWVz
dC5yZXN1bHQgaXMgMgorCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKIFRFU1Qg
Q09NUExFVEUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3Jlc291
cmNlcy9rZXktZ2VuZXJhdG9yLmpzIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvcmVz
b3VyY2VzL2tleS1nZW5lcmF0b3IuanMKaW5kZXggODZhMTllYTcxOGY1MjQzMzUwZjRkNTM4NDYw
NmZhMzMyZjljOWI5ZC4uNDVkOGFiZDUzYjQ2YmExNDBhMzViNTkzNzhjODdlZGY0OGExMjIyOCAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvcmVzb3VyY2VzL2tleS1n
ZW5lcmF0b3IuanMKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvcmVzb3VyY2Vz
L2tleS1nZW5lcmF0b3IuanMKQEAgLTI3LDcgKzI3LDcgQEAgZnVuY3Rpb24gcnVuVGVzdHMoKSB7
CiAKICAgICBmdW5jdGlvbiBuZXh0VGVzdCgpIHsKICAgICAgICAgaWYgKCF0ZXN0cy5sZW5ndGgp
IHsKLSAgICAgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgICAgICAgICAgdGVzdEFjcm9zc0Nv
bm5lY3Rpb25zKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMjI5LDQg
KzIyOSw2NCBAQCBkZWZpbmVUZXN0KAogICAgIH0KICk7CiAKK2Z1bmN0aW9uIHRlc3RBY3Jvc3ND
b25uZWN0aW9ucygpCit7CisgICAgZGVidWcoIiIpOworICAgIGRlYnVnKCJFbnN1cmUga2V5IGdl
bmVyYXRvciBzdGF0ZSBpcyBtYWludGFpbmVkIGFjcm9zcyBjb25uZWN0aW9uczoiKTsKKyAgICBy
ZXF1ZXN0ID0gZXZhbEFuZExvZygiaW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlKCdrZXktZ2VuZXJh
dG9yJykiKTsKKyAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsK
KyAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZXZhbEFuZExv
ZygicmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKCdrZXktZ2VuZXJhdG9yJykiKTsKKyAgICAgICAg
cmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7CisgICAgICAgIHJlcXVl
c3Qub25zdWNjZXNzID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgZXZhbEFuZExvZygiZGIg
PSByZXF1ZXN0LnJlc3VsdCIpOworICAgICAgICAgICAgcmVxdWVzdCA9IGV2YWxBbmRMb2coImRi
LnNldFZlcnNpb24oJzEnKSIpOworICAgICAgICAgICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBl
Y3RlZEVycm9yQ2FsbGJhY2s7CisgICAgICAgICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgICAgICB0cmFucyA9IHJlcXVlc3QucmVzdWx0OworICAgICAg
ICAgICAgICAgIHRyYW5zLm9uYWJvcnQgPSB1bmV4cGVjdGVkQWJvcnRDYWxsYmFjazsKKyAgICAg
ICAgICAgICAgICBldmFsQW5kTG9nKCJkYi5jcmVhdGVPYmplY3RTdG9yZSgnc3RvcmUnLCB7YXV0
b0luY3JlbWVudDogdHJ1ZX0pIik7CisgICAgICAgICAgICAgICAgdHJhbnMub25jb21wbGV0ZSA9
IGRvRmlyc3RXcml0ZTsKKyAgICAgICAgICAgIH07CisgICAgICAgIH07CisgICAgfTsKKworICAg
IGZ1bmN0aW9uIGRvRmlyc3RXcml0ZSgpIHsKKyAgICAgICAgZGVidWcoIiIpOworICAgICAgICBl
dmFsQW5kTG9nKCJ0cmFucyA9IGRiLnRyYW5zYWN0aW9uKCdzdG9yZScsICdyZWFkd3JpdGUnKSIp
OworICAgICAgICB0cmFucy5vbmFib3J0ID0gdW5leHBlY3RlZEFib3J0Q2FsbGJhY2s7CisgICAg
ICAgIGV2YWxBbmRMb2coInJlcXVlc3QgPSB0cmFucy5vYmplY3RTdG9yZSgnc3RvcmUnKS5wdXQo
J3ZhbHVlMScpIik7CisgICAgICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNh
bGxiYWNrOworICAgICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGZ1bmN0aW9uKCkgeworICAgICAg
ICAgICAgc2hvdWxkQmUoInJlcXVlc3QucmVzdWx0IiwgIjEiKTsKKyAgICAgICAgICAgIGV2YWxB
bmRMb2coInRyYW5zLm9iamVjdFN0b3JlKCdzdG9yZScpLmNsZWFyKCkiKTsKKyAgICAgICAgfTsK
KyAgICAgICAgdHJhbnMub25jb21wbGV0ZSA9IGNsb3NlQW5kUmVvcGVuOworICAgIH0KKworICAg
IGZ1bmN0aW9uIGNsb3NlQW5kUmVvcGVuKCkgeworICAgICAgICBldmFsQW5kTG9nKCJkYi5jbG9z
ZSgpIik7CisgICAgICAgIGRlYnVnKCIiKTsKKyAgICAgICAgZXZhbEFuZExvZygicmVxdWVzdCA9
IGluZGV4ZWREQi5vcGVuKCdrZXktZ2VuZXJhdG9yJykiKTsKKyAgICAgICAgcmVxdWVzdC5vbnN1
Y2Nlc3MgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBldmFsQW5kTG9nKCJkYiA9IHJlcXVl
c3QucmVzdWx0Iik7CisgICAgICAgICAgICBkb1NlY29uZFdyaXRlKCk7CisgICAgICAgIH07Cisg
ICAgfQorCisgICAgZnVuY3Rpb24gZG9TZWNvbmRXcml0ZSgpIHsKKyAgICAgICAgZXZhbEFuZExv
ZygidHJhbnMgPSBkYi50cmFuc2FjdGlvbignc3RvcmUnLCAncmVhZHdyaXRlJykiKTsKKyAgICAg
ICAgdHJhbnMub25hYm9ydCA9IHVuZXhwZWN0ZWRBYm9ydENhbGxiYWNrOworICAgICAgICBldmFs
QW5kTG9nKCJyZXF1ZXN0ID0gdHJhbnMub2JqZWN0U3RvcmUoJ3N0b3JlJykucHV0KCd2YWx1ZTIn
KSIpOworICAgICAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsK
KyAgICAgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHNo
b3VsZEJlKCJyZXF1ZXN0LnJlc3VsdCIsICIyIik7CisgICAgICAgIH07CisgICAgICAgIHRyYW5z
Lm9uY29tcGxldGUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGRlYnVnKCIiKTsKKyAgICAg
ICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgICAgICB9OworICAgIH07Cit9CisKIHRlc3QoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152810</attachid>
            <date>2012-07-17 13:06:53 -0700</date>
            <delta_ts>2012-07-17 13:39:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91456-20120717130653.patch</filename>
            <type>text/plain</type>
            <size>28422</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyODMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTFjMzNhZjAyNzQ3ODdk
NGJiMzJjZWM1YWQ1OTExMDdhNTY1NmNhMS4uMjllZDYyYjllMzYxYWEwMTcxMTJjOTQ3YzRiMjI3
MThhMDE5ZWE3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDEyLTA3LTE3ICBKb3No
dWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBLZXkg
Z2VuZXJhdG9yIHN0YXRlIG5vdCBtYWludGFpbmVkIGFjcm9zcyBjb25uZWN0aW9ucworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE0NTYKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFeHBsaWNpdGx5IHN0b3Jl
IGtleSBnZW5lcmF0b3Igc3RhdGUgZm9yIGVhY2ggb2JqZWN0IHN0b3JlIGluIHRoZSBiYWNraW5n
IHN0b3JlLAorICAgICAgICByYXRoZXIgdGhhbiBkZXJpdmluZyBpdCBmcm9tIHRoZSBtYXhpbXVt
IGtleSBpbiB0aGUgZGF0YSAod2hpY2ggdmlvbGF0ZXMgdGhlIHNwZWMKKyAgICAgICAgaWYgZGF0
YSBpcyBkZWxldGVkKS4KKworICAgICAgICBUaGlzIGNoYW5nZSBlbGltaW5hdGVzIGEgKGZyYWdp
bGUpIHBlci1zdG9yZSBjYWNoZSBvZiB0aGUgdmFsdWUgdG8gc2ltcGxpZnkgdGhlCisgICAgICAg
IGNvZGUuIEEgY2FjaGUgY291bGQgYmUgcmUtaW50cm9kdWNlZCwgcmVxdWlyaW5nIGFuICJvbmJl
Zm9yZWNvbW1pdCIgaG9vayBmb3IKKyAgICAgICAgb2JqZWN0IHN0b3JlcywgYnV0IGl0IHNlZW1z
IGNsZWFuZXIgdG8gc2F2ZSB0aGF0IGZvciBhIGZvbGxvdy11cCBwYXRjaC4KKworICAgICAgICBU
ZXN0OiBzdG9yYWdlL2luZGV4ZWRkYi9rZXktZ2VuZXJhdG9yLmh0bWwKKworICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oOiBOZXcgQVBJcyBmb3IgZ2V0dGluZy9z
ZXR0aW5nIGdlbmVyYXRvciBzdGF0ZXMuCisgICAgICAgIChJREJCYWNraW5nU3RvcmUpOgorICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0T2JqZWN0U3RvcmVzKTog
UmVhZCBnZW5lcmF0b3Igc3RhdGUgKGJ1dCBjdXJyZW50bHkgaWdub3JlZCkuCisgICAgICAgIChX
ZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVPYmplY3RTdG9yZSk6IFdyaXRl
IGdlbmVyYXRvciBzdGF0ZS4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0S2V5R2VuZXJhdG9yU3RhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6bWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JT
dGF0ZSk6IFVwZGF0ZSwgb3B0aW9uYWxseSBjaGVja2luZworICAgICAgICB0byBzZWUgaWYgdGhl
IG5ldyB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gdGhlIG9sZC4gKElmIGNhbGxlciBnb3QgdGhlIHZh
bHVlIHZpYSBnZXRLZXlHZW5lcmF0b3JTdGF0ZQorICAgICAgICBpdCBpcyBzYWZlIHRvIHNraXAg
dGhlIGNoZWNrLikKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2lu
Z1N0b3JlLmg6CisgICAgICAgIChJREJMZXZlbERCQmFja2luZ1N0b3JlKToKKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQ29kaW5nLmNwcDoKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9JREJMZXZlbERCQ29kaW5nLmg6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKTogRGl0Y2gg
dGhlIGNhY2hlLgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
cHV0KTogTm8gbmVlZCBmb3IgYWJvcnQgdGFzay4KKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OnB1dFdpdGhJbmRleEtleXMpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsKTogVXNlIHRoZSBu
ZXdmYW5nbGVkIEFQSXMgYmVsb3cuCisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpnZW5lcmF0ZUtleSk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjp1cGRhdGVLZXlHZW5lcmF0b3IpOgorICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaDoKKyAgICAgICAgKElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGwpOgorCiAyMDEyLTA3LTE3ICBLd2FuZyBZdWwgU2VvICA8c2t5dWxAY29t
cGFueTEwMC5uZXQ+CiAKICAgICAgICAgImluIGJvZHkiIGluc2VydGlvbiBtb2RlLCAiYW55IG90
aGVyIGVuZCB0YWciIHN0ZXAgMi4xIGlzIHVwZGF0ZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmgKaW5kZXggZjc4NDA2MjFiNjFmMmMx
NDE4Nzg5NjYzNmQ3NjVjYzg4MjI5ZmQwNS4uMTY2MTAwMDBlZWZjN2Q3ZTM5ZjgxMTFkZTJmZDJi
NzllMjViYzgxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCQmFja2luZ1N0b3JlLmgKQEAgLTY3LDcgKzY3LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwg
Ym9vbCBwdXRPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgT2JqZWN0U3Rv
cmVSZWNvcmRJZGVudGlmaWVyKikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBjbGVhck9iamVjdFN0
b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSA9IDA7CiAgICAg
dmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIq
KSA9IDA7Ci0gICAgdmlydHVhbCBpbnQ2NF90IG5leHRBdXRvSW5jcmVtZW50TnVtYmVyKGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSA9IDA7CisgICAgdmlydHVhbCBp
bnQ2NF90IGdldEtleUdlbmVyYXRvclN0YXRlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkKSA9IDA7CisgICAgdmlydHVhbCBib29sIG1heWJlVXBkYXRlS2V5R2VuZXJh
dG9yU3RhdGUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0
X3QgbmV3U3RhdGUsIGJvb2wgY2hlY2tDdXJyZW50KSA9IDA7CiAgICAgdmlydHVhbCBib29sIGtl
eUV4aXN0c0luT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGNvbnN0IElEQktleSYsIE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciogZm91bmRS
ZWNvcmRJZGVudGlmaWVyKSA9IDA7CiAKICAgICBjbGFzcyBPYmplY3RTdG9yZVJlY29yZENhbGxi
YWNrIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxl
dmVsREJCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAKaW5kZXggYWI4MjkzZjBmYTQ3Y2VjMDg1OTExYTU1
NDRlYWIxM2M1NGE3NDQ1OS4uZTk0MTA0NDRiYzExZWM4YmMyY2ZhYTlhYTA1OTI2YTIwNWQ3NmUx
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJJREJG
YWN0b3J5QmFja2VuZEltcGwuaCIKKyNpbmNsdWRlICJJREJLZXkuaCIKICNpbmNsdWRlICJJREJL
ZXlQYXRoLmgiCiAjaW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIKICNpbmNsdWRlICJJREJMZXZlbERC
Q29kaW5nLmgiCkBAIC00MTQsNiArNDE1LDEyIEBAIHZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6Z2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0YWJhc2VJZCwgVmVjdG9yPGludDY0X3Q+CiAg
ICAgICAgICAgICBpdC0+bmV4dCgpOwogICAgICAgICB9CiAKKyAgICAgICAgaW50NjRfdCBrZXlH
ZW5lcmF0b3JTdGF0ZSA9IC0xOworICAgICAgICBpZiAoY2hlY2tPYmplY3RTdG9yZUFuZE1ldGFE
YXRhVHlwZShpdC5nZXQoKSwgc3RvcEtleSwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRh
RGF0YUtleTo6a0tleUdlbmVyYXRvclN0YXRlKSkgeworICAgICAgICAgICAga2V5R2VuZXJhdG9y
U3RhdGUgPSBkZWNvZGVJbnQoaXQtPnZhbHVlKCkuYmVnaW4oKSwgaXQtPnZhbHVlKCkuZW5kKCkp
OworICAgICAgICAgICAgaXQtPm5leHQoKTsKKyAgICAgICAgfQorCiAgICAgICAgIGZvdW5kSWRz
LmFwcGVuZChvYmplY3RTdG9yZUlkKTsKICAgICAgICAgZm91bmROYW1lcy5hcHBlbmQob2JqZWN0
U3RvcmVOYW1lKTsKICAgICAgICAgZm91bmRLZXlQYXRocy5hcHBlbmQoa2V5UGF0aCk7CkBAIC00
NTEsNiArNDU4LDcgQEAgYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVPYmplY3RT
dG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYKICAgICBjb25zdCBWZWN0b3I8
Y2hhcj4gbGFzdFZlcnNpb25LZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0
YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6a0xhc3RWZXJz
aW9uKTsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gbWF4SW5kZXhJZEtleSA9IE9iamVjdFN0b3Jl
TWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9y
ZU1ldGFEYXRhS2V5OjprTWF4SW5kZXhJZCk7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGhhc0tl
eVBhdGhLZXkgID0gT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9i
amVjdFN0b3JlSWQsIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmtIYXNLZXlQYXRoKTsKKyAgICBj
b25zdCBWZWN0b3I8Y2hhcj4ga2V5R2VuZXJhdG9yU3RhdGVLZXkgPSBPYmplY3RTdG9yZU1ldGFE
YXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRh
RGF0YUtleTo6a0tleUdlbmVyYXRvclN0YXRlKTsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gbmFt
ZXNLZXkgPSBPYmplY3RTdG9yZU5hbWVzS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgbmFtZSk7CiAK
ICAgICBib29sIG9rID0gcHV0U3RyaW5nKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBuYW1l
S2V5LCBuYW1lKTsKQEAgLTQ5NSw2ICs1MDMsMTIgQEAgYm9vbCBJREJMZXZlbERCQmFja2luZ1N0
b3JlOjpjcmVhdGVPYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAorICAgIG9rID0gcHV0SW50KG1fY3VycmVu
dFRyYW5zYWN0aW9uLmdldCgpLCBrZXlHZW5lcmF0b3JTdGF0ZUtleSwgMSk7CisgICAgaWYgKCFv
aykgeworICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKICAgICBvayA9IHB1dEludChtX2N1cnJlbnRU
cmFuc2FjdGlvbi5nZXQoKSwgbmFtZXNLZXksIG9iamVjdFN0b3JlSWQpOwogICAgIGlmICghb2sp
IHsKICAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOwpAQCAt
NjM0LDM1ICs2NDgsNjYgQEAgdm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVPYmpl
Y3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3QKICAgICBtX2N1cnJlbnRU
cmFuc2FjdGlvbi0+cmVtb3ZlKGV4aXN0c0VudHJ5S2V5KTsKIH0KIAotaW50NjRfdCBJREJMZXZl
bERCQmFja2luZ1N0b3JlOjpuZXh0QXV0b0luY3JlbWVudE51bWJlcihpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKKworaW50NjRfdCBJREJMZXZlbERCQmFja2luZ1N0
b3JlOjpnZXRLZXlHZW5lcmF0b3JTdGF0ZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCkKIHsKICAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOwotICAgIGNv
bnN0IFZlY3RvcjxjaGFyPiBzdGFydEtleSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRh
dGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIG1pbklEQktleSgpKTsKLSAgICBjb25zdCBWZWN0b3I8
Y2hhcj4gc3RvcEtleSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9i
amVjdFN0b3JlSWQsIG1heElEQktleSgpKTsKIAotICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+
IGl0ID0gbV9jdXJyZW50VHJhbnNhY3Rpb24tPmNyZWF0ZUl0ZXJhdG9yKCk7CisgICAgY29uc3Qg
VmVjdG9yPGNoYXI+IGtleUdlbmVyYXRvclN0YXRlS2V5ID0gT2JqZWN0U3RvcmVNZXRhRGF0YUtl
eTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIE9iamVjdFN0b3JlTWV0YURhdGFL
ZXk6OmtLZXlHZW5lcmF0b3JTdGF0ZSk7CiAKLSAgICBpbnQ2NF90IG1heE51bWVyaWNLZXkgPSAw
OworICAgIGludDY0X3Qga2V5R2VuZXJhdG9yU3RhdGUgPSAtMTsKKyAgICBWZWN0b3I8Y2hhcj4g
ZGF0YTsKIAotICAgIC8vIEZJWE1FOiBUaGlzIGRvZXMgYSBmb3J3YXJkIHNjYW4gb3ZlciBhbGwg
a2V5cy4gSW1wcm92ZSBpdC4KLSAgICAvLyBTaW5jZSBhbGwgZGF0ZXMgPiBhbGwgbnVtYmVycywg
Y3JlYXRlIERhdGUoLUluZmluaXR5KSBhbmQgc2VlayBiYWNrd2FyZHMuCisgICAgaWYgKG1fY3Vy
cmVudFRyYW5zYWN0aW9uLT5nZXQoa2V5R2VuZXJhdG9yU3RhdGVLZXksIGRhdGEpKQorICAgICAg
ICBrZXlHZW5lcmF0b3JTdGF0ZSA9IGRlY29kZUludChkYXRhLmJlZ2luKCksIGRhdGEuZW5kKCkp
OworICAgIGVsc2UgeworICAgICAgICAvLyBQcmV2aW91c2x5LCB0aGUga2V5IGdlbmVyYXRvciBz
dGF0ZSB3YXMgbm90IHN0b3JlZCBleHBsaWNpdGx5IGJ1dCBkZXJpdmVkIGZyb20gdGhlCisgICAg
ICAgIC8vIG1heGltdW0gbnVtZXJpYyBrZXkgcHJlc2VudCBpbiBleGlzdGluZyBkYXRhLiBUaGlz
IHZpb2xhdGVzIHRoZSBzcGVjIGFzIHRoZSBkYXRhIG1heQorICAgICAgICAvLyBiZSBjbGVhcmVk
IGJ1dCB0aGUga2V5IGdlbmVyYXRvciBzdGF0ZSBtdXN0IGJlIHByZXNlcnZlZC4KKyAgICAgICAg
Y29uc3QgVmVjdG9yPGNoYXI+IHN0YXJ0S2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUo
ZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgbWluSURCS2V5KCkpOworICAgICAgICBjb25zdCBW
ZWN0b3I8Y2hhcj4gc3RvcEtleSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNl
SWQsIG9iamVjdFN0b3JlSWQsIG1heElEQktleSgpKTsKKworICAgICAgICBPd25QdHI8TGV2ZWxE
Qkl0ZXJhdG9yPiBpdCA9IG1fY3VycmVudFRyYW5zYWN0aW9uLT5jcmVhdGVJdGVyYXRvcigpOwor
ICAgICAgICBpbnQ2NF90IG1heE51bWVyaWNLZXkgPSAwOworCisgICAgICAgIGZvciAoaXQtPnNl
ZWsoc3RhcnRLZXkpOyBpdC0+aXNWYWxpZCgpICYmIGNvbXBhcmVLZXlzKGl0LT5rZXkoKSwgc3Rv
cEtleSkgPCAwOyBpdC0+bmV4dCgpKSB7CisgICAgICAgICAgICBjb25zdCBjaGFyICpwID0gaXQt
PmtleSgpLmJlZ2luKCk7CisgICAgICAgICAgICBjb25zdCBjaGFyICpsaW1pdCA9IGl0LT5rZXko
KS5lbmQoKTsKKworICAgICAgICAgICAgT2JqZWN0U3RvcmVEYXRhS2V5IGRhdGFLZXk7CisgICAg
ICAgICAgICBwID0gT2JqZWN0U3RvcmVEYXRhS2V5OjpkZWNvZGUocCwgbGltaXQsICZkYXRhS2V5
KTsKKyAgICAgICAgICAgIEFTU0VSVChwKTsKKworICAgICAgICAgICAgaWYgKGRhdGFLZXkudXNl
cktleSgpLT50eXBlKCkgPT0gSURCS2V5OjpOdW1iZXJUeXBlKSB7CisgICAgICAgICAgICAgICAg
aW50NjRfdCBuID0gc3RhdGljX2Nhc3Q8aW50NjRfdD4oZGF0YUtleS51c2VyS2V5KCktPm51bWJl
cigpKTsKKyAgICAgICAgICAgICAgICBpZiAobiA+IG1heE51bWVyaWNLZXkpCisgICAgICAgICAg
ICAgICAgICAgIG1heE51bWVyaWNLZXkgPSBuOworICAgICAgICAgICAgfQorICAgICAgICB9CiAK
LSAgICBmb3IgKGl0LT5zZWVrKHN0YXJ0S2V5KTsgaXQtPmlzVmFsaWQoKSAmJiBjb21wYXJlS2V5
cyhpdC0+a2V5KCksIHN0b3BLZXkpIDwgMDsgaXQtPm5leHQoKSkgewotICAgICAgICBjb25zdCBj
aGFyICpwID0gaXQtPmtleSgpLmJlZ2luKCk7Ci0gICAgICAgIGNvbnN0IGNoYXIgKmxpbWl0ID0g
aXQtPmtleSgpLmVuZCgpOworICAgICAgICBrZXlHZW5lcmF0b3JTdGF0ZSA9IG1heE51bWVyaWNL
ZXkgKyAxOworICAgIH0KIAotICAgICAgICBPYmplY3RTdG9yZURhdGFLZXkgZGF0YUtleTsKLSAg
ICAgICAgcCA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZGVjb2RlKHAsIGxpbWl0LCAmZGF0YUtleSk7
Ci0gICAgICAgIEFTU0VSVChwKTsKKyAgICByZXR1cm4ga2V5R2VuZXJhdG9yU3RhdGU7Cit9CiAK
LSAgICAgICAgaWYgKGRhdGFLZXkudXNlcktleSgpLT50eXBlKCkgPT0gSURCS2V5OjpOdW1iZXJU
eXBlKSB7Ci0gICAgICAgICAgICBpbnQ2NF90IG4gPSBzdGF0aWNfY2FzdDxpbnQ2NF90PihkYXRh
S2V5LnVzZXJLZXkoKS0+bnVtYmVyKCkpOwotICAgICAgICAgICAgaWYgKG4gPiBtYXhOdW1lcmlj
S2V5KQotICAgICAgICAgICAgICAgIG1heE51bWVyaWNLZXkgPSBuOwotICAgICAgICB9Citib29s
IElEQkxldmVsREJCYWNraW5nU3RvcmU6Om1heWJlVXBkYXRlS2V5R2VuZXJhdG9yU3RhdGUoaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgbmV3U3RhdGUs
IGJvb2wgY2hlY2tDdXJyZW50KQoreworICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7
CisKKyAgICBpZiAoY2hlY2tDdXJyZW50KSB7CisgICAgICAgIGludDY0X3QgY3VycmVudFN0YXRl
ID0gZ2V0S2V5R2VuZXJhdG9yU3RhdGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCk7CisgICAg
ICAgIGlmIChuZXdTdGF0ZSA8PSBjdXJyZW50U3RhdGUpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAKLSAgICByZXR1cm4gbWF4TnVtZXJpY0tleSArIDE7CisgICAgY29uc3QgVmVj
dG9yPGNoYXI+IGtleUdlbmVyYXRvclN0YXRlS2V5ID0gT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6
ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6
OmtLZXlHZW5lcmF0b3JTdGF0ZSk7CisgICAgYm9vbCBvayA9IHB1dEludChtX2N1cnJlbnRUcmFu
c2FjdGlvbi5nZXQoKSwga2V5R2VuZXJhdG9yU3RhdGVLZXksIG5ld1N0YXRlKTsKKyAgICBpZiAo
IW9rKSB7CisgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9v
bCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbk9iamVjdFN0b3JlKGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmIGtleSwgT2Jq
ZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKiBmb3VuZFJlY29yZElkZW50aWZpZXIpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0
b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2lu
Z1N0b3JlLmgKaW5kZXggYTY1Zjk2M2U4NTA0MzI1ODRkOTdjNjgxOGRjOTRjMmM2NzUxNjY4OS4u
NzZmOWQ4ODhhMDI4ODEzMWJhMmQ0NmMyYWFmM2I2Mzg0NWE2ZTU0OSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3Rv
cmUuaApAQCAtNTgsNyArNTgsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHB1dE9iamVj
dFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBj
b25zdCBJREJLZXkmLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBPYmplY3RTdG9yZVJlY29yZElkZW50
aWZpZXIqKTsKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJPYmplY3RTdG9yZShpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9i
amVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBjb25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqKTsKLSAgICB2aXJ0dWFsIGludDY0
X3QgbmV4dEF1dG9JbmNyZW1lbnROdW1iZXIoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQpOworICAgIHZpcnR1YWwgaW50NjRfdCBnZXRLZXlHZW5lcmF0b3JTdGF0ZShp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7CisgICAgdmlydHVhbCBi
b29sIG1heWJlVXBkYXRlS2V5R2VuZXJhdG9yU3RhdGUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgbmV3U3RhdGUsIGJvb2wgY2hlY2tDdXJyZW50KTsK
ICAgICB2aXJ0dWFsIGJvb2wga2V5RXhpc3RzSW5PYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgT2JqZWN0U3RvcmVSZWNv
cmRJZGVudGlmaWVyKiBmb3VuZFJlY29yZElkZW50aWZpZXIpOwogCiAgICAgdmlydHVhbCBib29s
IGZvckVhY2hPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVSZWNvcmRDYWxsYmFjayYpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkNvZGluZy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQ29kaW5nLmNwcAppbmRleCAx
ODM2Mzc3MjFmMGIxMjczZmYwMWY4N2EwMjMzNmIwZjcxMmJhZmI3Li5iMDMwMTkzNmYzZjEyOTQ2
ZjRmOGRkOGFhZTU5NmY4YTJlMDM5OTA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQ29kaW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQ29kaW5nLmNwcApAQCAtNzMsNiArNzMsNyBAQAog
Ly8gICAgIDxkYXRhYmFzZSBpZCwgMCwgMCwgNTAsIG9iamVjdCBzdG9yZSBpZCwgND4gPT4gbGFz
dCAidmVyc2lvbiIgbnVtYmVyIFtPYmplY3RTdG9yZU1ldGFEYXRhS2V5XQogLy8gICAgIDxkYXRh
YmFzZSBpZCwgMCwgMCwgNTAsIG9iamVjdCBzdG9yZSBpZCwgNT4gPT4gbWF4aW11bSBpbmRleCBp
ZCBldmVyIGFsbG9jYXRlZCBbT2JqZWN0U3RvcmVNZXRhRGF0YUtleV0KIC8vICAgICA8ZGF0YWJh
c2UgaWQsIDAsIDAsIDUwLCBvYmplY3Qgc3RvcmUgaWQsIDY+ID0+IGhhcyBrZXkgcGF0aCAodnMu
IG51bGwpIFtPYmplY3RTdG9yZU1ldGFEYXRhS2V5XQorLy8gICAgIDxkYXRhYmFzZSBpZCwgMCwg
MCwgNTAsIG9iamVjdCBzdG9yZSBpZCwgNz4gPT4ga2V5IGdlbmVyYXRvciBzdGF0ZSBbT2JqZWN0
U3RvcmVNZXRhRGF0YUtleV0KIC8vCiAvLwogLy8gSW5kZXggbWV0YS1kYXRhOgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkNvZGluZy5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkNvZGluZy5oCmluZGV4
IGNjMWY3Mjc4ZGVmZWM2ZTQ2MGQ5NGMxNDIxOTI2ZDE0OTE4NjM5ZDIuLmE1NWM0ZTQ1ZmZjOGI2
Mzg2ZmUyZjM3ZGQ3ZWRiMjA1NWIyNTZlNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJDb2RpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQ29kaW5nLmgKQEAgLTE1NSw3ICsxNTUsOCBAQCBw
dWJsaWM6CiAgICAgICAgIGtFdmljdGFibGUgPSAzLAogICAgICAgICBrTGFzdFZlcnNpb24gPSA0
LAogICAgICAgICBrTWF4SW5kZXhJZCA9IDUsCi0gICAgICAgIGtIYXNLZXlQYXRoID0gNgorICAg
ICAgICBrSGFzS2V5UGF0aCA9IDYsCisgICAgICAgIGtLZXlHZW5lcmF0b3JTdGF0ZSA9IDcKICAg
ICB9OwogCiAgICAgT2JqZWN0U3RvcmVNZXRhRGF0YUtleSgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsLmNwcAppbmRleCA3MmU3MGFmNzdkMDcxM2IxNTA1NmUzNjg0NzMxNmJmN2VjY2RhMzYwLi5m
MWVjZmVlZWM4Mjg3NmFlMzRkNmUwODlmNWYxNGM3NmMyMjY4ZDEyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsLmNwcApAQCAtNTcsNyArNTcsNiBAQCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
OjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKGNvbnN0IElEQkRhdGFiYXNlQmFja2VuZEltcAog
ICAgICwgbV9uYW1lKG5hbWUpCiAgICAgLCBtX2tleVBhdGgoa2V5UGF0aCkKICAgICAsIG1fYXV0
b0luY3JlbWVudChhdXRvSW5jcmVtZW50KQotICAgICwgbV9hdXRvSW5jcmVtZW50TnVtYmVyKC0x
KQogewogICAgIGxvYWRJbmRleGVzKCk7CiB9CkBAIC02OCw3ICs2Nyw2IEBAIElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGwoY29uc3QgSURCRGF0YWJh
c2VCYWNrZW5kSW1wCiAgICAgLCBtX25hbWUobmFtZSkKICAgICAsIG1fa2V5UGF0aChrZXlQYXRo
KQogICAgICwgbV9hdXRvSW5jcmVtZW50KGF1dG9JbmNyZW1lbnQpCi0gICAgLCBtX2F1dG9JbmNy
ZW1lbnROdW1iZXIoLTEpCiB7CiB9CiAKQEAgLTE1OSw5ICsxNTcsNyBAQCB2b2lkIElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OnB1dChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4g
cHJwVmFsdWUsCiAgICAgT3duUHRyPFZlY3RvcjxTdHJpbmc+ID4gbnVsbEluZGV4TmFtZXM7CiAg
ICAgT3duUHRyPFZlY3RvcjxJbmRleEtleXM+ID4gbnVsbEluZGV4S2V5czsKICAgICBpZiAoIXRy
YW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soCi0gICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2so
JklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsLCBvYmplY3RTdG9yZSwgdmFs
dWUsIGtleSwgcHV0TW9kZSwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbiwgbnVsbEluZGV4TmFtZXMu
cmVsZWFzZSgpLCBudWxsSW5kZXhLZXlzLnJlbGVhc2UoKSksCi0gICAgICAgICAgICAvLyBGSVhN
RTogT25lIG9mIHRoZXNlIHBlciBwdXQoKSBpcyBvdmVya2lsbCwgc2luY2UgaXQncyBzaW1wbHkg
YSBjYWNoZSBpbnZhbGlkYXRpb24uCi0gICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJklE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnJldmVydEF1dG9JbmNyZW1lbnRLZXlDYWNoZSwgb2Jq
ZWN0U3RvcmUpKSkKKyAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwsIG9iamVjdFN0b3JlLCB2YWx1ZSwga2V5LCBwdXRN
b2RlLCBjYWxsYmFja3MsIHRyYW5zYWN0aW9uLCBudWxsSW5kZXhOYW1lcy5yZWxlYXNlKCksIG51
bGxJbmRleEtleXMucmVsZWFzZSgpKSkpCiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRp
b246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKIH0KIApAQCAtMTgxLDE3ICsxNzcsMTAgQEAg
dm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRXaXRoSW5kZXhLZXlzKFBhc3NSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHUKICAgICBPd25QdHI8VmVjdG9yPEluZGV4S2V5cz4gPiBu
ZXdJbmRleEtleXMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPEluZGV4S2V5cz4oaW5kZXhLZXlzKSk7
CiAKICAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soCi0gICAgICAgICAgICBjcmVh
dGVDYWxsYmFja1Rhc2soJklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsLCBv
YmplY3RTdG9yZSwgdmFsdWUsIGtleSwgcHV0TW9kZSwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbiwg
bmV3SW5kZXhOYW1lcy5yZWxlYXNlKCksIG5ld0luZGV4S2V5cy5yZWxlYXNlKCkpLAotICAgICAg
ICAgICAgLy8gRklYTUU6IE9uZSBvZiB0aGVzZSBwZXIgcHV0KCkgaXMgb3ZlcmtpbGwsIHNpbmNl
IGl0J3Mgc2ltcGx5IGEgY2FjaGUgaW52YWxpZGF0aW9uLgotICAgICAgICAgICAgY3JlYXRlQ2Fs
bGJhY2tUYXNrKCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpyZXZlcnRBdXRvSW5jcmVtZW50
S2V5Q2FjaGUsIG9iamVjdFN0b3JlKSkpCisgICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2so
JklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsLCBvYmplY3RTdG9yZSwgdmFs
dWUsIGtleSwgcHV0TW9kZSwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbiwgbmV3SW5kZXhOYW1lcy5y
ZWxlYXNlKCksIG5ld0luZGV4S2V5cy5yZWxlYXNlKCkpKSkKICAgICAgICAgZWMgPSBJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOwogfQogCi12b2lkIElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OnJldmVydEF1dG9JbmNyZW1lbnRLZXlDYWNoZShTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBv
YmplY3RTdG9yZSkKLXsKLSAgICBvYmplY3RTdG9yZS0+cmVzZXRBdXRvSW5jcmVtZW50S2V5Q2Fj
aGUoKTsKLX0KLQogbmFtZXNwYWNlIHsKIGNsYXNzIEluZGV4V3JpdGVyIHsKIHB1YmxpYzoKQEAg
LTI5MSw5ICsyODAsMTAgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRl
cm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjwKICAgICBPd25QdHI8VmVj
dG9yPFN0cmluZz4gPiBpbmRleE5hbWVzID0gcG9wSW5kZXhOYW1lczsKICAgICBPd25QdHI8VmVj
dG9yPEluZGV4S2V5cz4gPiBpbmRleEtleXMgPSBwb3BJbmRleEtleXM7CiAgICAgQVNTRVJUKCgh
aW5kZXhOYW1lcyAmJiAhaW5kZXhLZXlzKSB8fCBpbmRleE5hbWVzLT5zaXplKCkgPT0gaW5kZXhL
ZXlzLT5zaXplKCkpOworICAgIGNvbnN0IGJvb2wgYXV0b0luY3JlbWVudCA9IG9iamVjdFN0b3Jl
LT5hdXRvSW5jcmVtZW50KCk7CisgICAgYm9vbCBrZXlXYXNHZW5lcmF0ZWQgPSBmYWxzZTsKIAog
ICAgIGlmIChwdXRNb2RlICE9IEN1cnNvclVwZGF0ZSkgewotICAgICAgICBjb25zdCBib29sIGF1
dG9JbmNyZW1lbnQgPSBvYmplY3RTdG9yZS0+YXV0b0luY3JlbWVudCgpOwogICAgICAgICBjb25z
dCBib29sIGhhc0tleVBhdGggPSAhb2JqZWN0U3RvcmUtPm1fa2V5UGF0aC5pc051bGwoKTsKICAg
ICAgICAgaWYgKGhhc0tleVBhdGgpIHsKICAgICAgICAgICAgIEFTU0VSVCgha2V5KTsKQEAgLTMw
Myw3ICsyOTMsOCBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFs
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPAogICAgICAgICB9CiAgICAgICAg
IGlmIChhdXRvSW5jcmVtZW50KSB7CiAgICAgICAgICAgICBpZiAoIWtleSkgewotICAgICAgICAg
ICAgICAgIFJlZlB0cjxJREJLZXk+IGF1dG9JbmNLZXkgPSBvYmplY3RTdG9yZS0+Z2VuQXV0b0lu
Y3JlbWVudEtleSgpOworICAgICAgICAgICAgICAgIFJlZlB0cjxJREJLZXk+IGF1dG9JbmNLZXkg
PSBvYmplY3RTdG9yZS0+Z2VuZXJhdGVLZXkoKTsKKyAgICAgICAgICAgICAgICBrZXlXYXNHZW5l
cmF0ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGlmICghYXV0b0luY0tleS0+aXNWYWxpZCgp
KSB7CiAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVy
cm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSLCAiTWF4aW11bSBrZXkg
Z2VuZXJhdG9yIHZhbHVlIHJlYWNoZWQuIikpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47
CkBAIC0zMTMsNyArMzA0LDYgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJ
bnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjwKICAgICAgICAgICAg
ICAgICAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWVBZnRlckluamVjdGlv
biA9IGluamVjdEtleUludG9LZXlQYXRoKGF1dG9JbmNLZXksIHZhbHVlLCBvYmplY3RTdG9yZS0+
bV9rZXlQYXRoKTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHZhbHVlQWZ0ZXJJbmplY3Rp
b24pOwogICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlQWZ0ZXJJbmplY3Rpb24pIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFN0b3JlLT5yZXNldEF1dG9JbmNyZW1lbnRLZXlD
YWNoZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2tzIGluIHB1dCgpIGVuc3Vy
ZSB0aGlzIHNob3VsZCBvbmx5IGhhcHBlbiBpZiBJL08gZXJyb3Igb2NjdXJzLgogICAgICAgICAg
ICAgICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0
ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJJbnRlcm5hbCBlcnJvciBpbnNl
cnRpbmcgZ2VuZXJhdGVkIGtleSBpbnRvIHRoZSBvYmplY3QuIikpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwpAQCAtMzIxLDkgKzMxMSw2IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQ
dHI8CiAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWVBZnRlckluamVjdGlvbjsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAga2V5ID0gYXV0b0luY0tleTsKLSAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IExvZ2ljIHRvIHVwZGF0
ZSBnZW5lcmF0b3Igc3RhdGUgc2hvdWxkIGdvIGhlcmUuIEN1cnJlbnRseSBpdCBkb2VzIGEgc2Nh
bi4KLSAgICAgICAgICAgICAgICBvYmplY3RTdG9yZS0+cmVzZXRBdXRvSW5jcmVtZW50S2V5Q2Fj
aGUoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTMzMiw3ICszMTksNiBA
QCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPAogCiAgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6
T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyPiByZWNvcmRJZGVudGlmaWVyID0gb2JqZWN0U3Rv
cmUtPmJhY2tpbmdTdG9yZSgpLT5jcmVhdGVJbnZhbGlkUmVjb3JkSWRlbnRpZmllcigpOwogICAg
IGlmIChwdXRNb2RlID09IEFkZE9ubHkgJiYgb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5r
ZXlFeGlzdHNJbk9iamVjdFN0b3JlKG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0
b3JlLT5pZCgpLCAqa2V5LCByZWNvcmRJZGVudGlmaWVyLmdldCgpKSkgewotICAgICAgICBvYmpl
Y3RTdG9yZS0+cmVzZXRBdXRvSW5jcmVtZW50S2V5Q2FjaGUoKTsKICAgICAgICAgY2FsbGJhY2tz
LT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
Q09OU1RSQUlOVF9FUlIsICJLZXkgYWxyZWFkeSBleGlzdHMgaW4gdGhlIG9iamVjdCBzdG9yZS4i
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNjMsNyArMzQ5LDYgQEAgdm9pZCBJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgUGFzc1JlZlB0cjwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvYmplY3RTdG9yZS0+aWQoKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGluZGV4LT5pZCgpLCBrZXkuZ2V0KCksICZlcnJvck1lc3NhZ2Up
KSB7Ci0gICAgICAgICAgICBvYmplY3RTdG9yZS0+cmVzZXRBdXRvSW5jcmVtZW50S2V5Q2FjaGUo
KTsKICAgICAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVh
dGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSLCBlcnJvck1lc3NhZ2UpKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMzkzLDcgKzM3OCwxMCBAQCB2b2lkIElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBQYXNzUmVmUHRyPAogICAgICAgICB9CiAgICAgfQogCi0gICAgY2FsbGJhY2tzLT5vblN1Y2Nl
c3Moa2V5LmdldCgpKTsKKyAgICBpZiAoYXV0b0luY3JlbWVudCAmJiBwdXRNb2RlICE9IEN1cnNv
clVwZGF0ZSAmJiBrZXktPnR5cGUoKSA9PSBJREJLZXk6Ok51bWJlclR5cGUpCisgICAgICAgIG9i
amVjdFN0b3JlLT51cGRhdGVLZXlHZW5lcmF0b3Ioa2V5LmdldCgpLCAha2V5V2FzR2VuZXJhdGVk
KTsKKworICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKGtleS5yZWxlYXNlKCkpOwogfQogCiB2b2lk
IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURC
S2V5UmFuZ2U+IHBycEtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJh
Y2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBFeGNlcHRp
b25Db2RlJiBlYykKQEAgLTY1NywxOCArNjQ1LDIwIEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6YWRkSW5kZXhUb01hcChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0
CiAgICAgb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5zZXQoaW5kZXhQdHItPm5hbWUoKSwgaW5kZXhQ
dHIpOwogfQogCi1QYXNzUmVmUHRyPElEQktleT4gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
Z2VuQXV0b0luY3JlbWVudEtleSgpCitQYXNzUmVmUHRyPElEQktleT4gSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6Z2VuZXJhdGVLZXkoKQogewogICAgIGNvbnN0IGludDY0X3Qga01heEdlbmVy
YXRvclZhbHVlID0gOTAwNzE5OTI1NDc0MDk5MkxMOyAvLyBNYXhpbXVtIGludGVnZXIgc3RvcmFi
bGUgYXMgRUNNQVNjcmlwdCBudW1iZXIuCi0gICAgaWYgKG1fYXV0b0luY3JlbWVudE51bWJlciA+
IGtNYXhHZW5lcmF0b3JWYWx1ZSkKKyAgICBpbnQ2NF90IGN1cnJlbnROdW1iZXIgPSBiYWNraW5n
U3RvcmUoKS0+Z2V0S2V5R2VuZXJhdG9yU3RhdGUoZGF0YWJhc2VJZCgpLCBpZCgpKTsKKyAgICBp
ZiAoY3VycmVudE51bWJlciA8IDAgfHwgY3VycmVudE51bWJlciA+IGtNYXhHZW5lcmF0b3JWYWx1
ZSkKICAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlSW52YWxpZCgpOwotICAgIGlmIChtX2F1
dG9JbmNyZW1lbnROdW1iZXIgPiAwKQotICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVOdW1i
ZXIobV9hdXRvSW5jcmVtZW50TnVtYmVyKyspOwogCi0gICAgbV9hdXRvSW5jcmVtZW50TnVtYmVy
ID0gYmFja2luZ1N0b3JlKCktPm5leHRBdXRvSW5jcmVtZW50TnVtYmVyKGRhdGFiYXNlSWQoKSwg
aWQoKSk7Ci0gICAgaWYgKG1fYXV0b0luY3JlbWVudE51bWJlciA+IGtNYXhHZW5lcmF0b3JWYWx1
ZSkKLSAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlSW52YWxpZCgpOwotICAgIHJldHVybiBJ
REJLZXk6OmNyZWF0ZU51bWJlcihtX2F1dG9JbmNyZW1lbnROdW1iZXIrKyk7CisgICAgcmV0dXJu
IElEQktleTo6Y3JlYXRlTnVtYmVyKGN1cnJlbnROdW1iZXIpOworfQorCit2b2lkIElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OnVwZGF0ZUtleUdlbmVyYXRvcihjb25zdCBJREJLZXkqIGtleSwg
Ym9vbCBjaGVja0N1cnJlbnQpCit7CisgICAgQVNTRVJUKGtleSAmJiBrZXktPnR5cGUoKSA9PSBJ
REJLZXk6Ok51bWJlclR5cGUpOworICAgIGJhY2tpbmdTdG9yZSgpLT5tYXliZVVwZGF0ZUtleUdl
bmVyYXRvclN0YXRlKGRhdGFiYXNlSWQoKSwgaWQoKSwgc3RhdGljX2Nhc3Q8aW50NjRfdD4oZmxv
b3Ioa2V5LT5udW1iZXIoKSkpICsgMSwgY2hlY2tDdXJyZW50KTsKIH0KIAogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsLmgKaW5kZXggMWM3NDViNTkzZGZiNDA3ZGMzNTBlMjI5ZWNmMTMwYjBjNTM2Njdh
Ni4uYTM3YzY3ZTdmNjgyMjYxYzMwMzQwM2VlMDM1OTU3MmVkOWQyOGYzNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGwuaApAQCAtODksOCArODksOCBAQCBwcml2YXRlOgogICAgIElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGwoY29uc3QgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCosIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgYXV0b0luY3JlbWVudCk7CiAKICAgICB2
b2lkIGxvYWRJbmRleGVzKCk7Ci0gICAgUGFzc1JlZlB0cjxJREJLZXk+IGdlbkF1dG9JbmNyZW1l
bnRLZXkoKTsKLSAgICB2b2lkIHJlc2V0QXV0b0luY3JlbWVudEtleUNhY2hlKCkgeyBtX2F1dG9J
bmNyZW1lbnROdW1iZXIgPSAtMTsgfQorICAgIFBhc3NSZWZQdHI8SURCS2V5PiBnZW5lcmF0ZUtl
eSgpOworICAgIHZvaWQgdXBkYXRlS2V5R2VuZXJhdG9yKGNvbnN0IElEQktleSosIGJvb2wgY2hl
Y2tDdXJyZW50KTsKIAogICAgIHN0YXRpYyB2b2lkIGdldEludGVybmFsKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVm
UHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKICAgICBzdGF0aWMg
dm9pZCBwdXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
LCBQYXNzUmVmUHRyPElEQktleT4sIFB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwg
UGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+LCBQYXNzT3duUHRyPFZl
Y3RvcjxTdHJpbmc+ID4gcG9wSW5kZXhOYW1lcywgUGFzc093blB0cjxWZWN0b3I8SW5kZXhLZXlz
PiA+KTsKQEAgLTEwNCw3ICsxMDQsNiBAQCBwcml2YXRlOgogICAgIC8vIFRoZXNlIGFyZSB1c2Vk
IGFzIHNldFZlcnNpb24gdHJhbnNhY3Rpb24gYWJvcnQgdGFza3MuCiAgICAgc3RhdGljIHZvaWQg
cmVtb3ZlSW5kZXhGcm9tTWFwKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+
KTsKICAgICBzdGF0aWMgdm9pZCBhZGRJbmRleFRvTWFwKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQklu
ZGV4QmFja2VuZEltcGw+KTsKLSAgICBzdGF0aWMgdm9pZCByZXZlcnRBdXRvSW5jcmVtZW50S2V5
Q2FjaGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbD4pOwogCiAgICAgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdT
dG9yZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YWJhc2UtPmJhY2tpbmdTdG9yZSgpOyB9CiAgICAg
aW50NjRfdCBkYXRhYmFzZUlkKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhYmFzZS0+aWQoKTsgfQpA
QCAtMTE3LDcgKzExNiw2IEBAIHByaXZhdGU6CiAKICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5n
LCBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gPiBJbmRleE1hcDsKICAgICBJbmRleE1hcCBt
X2luZGV4ZXM7Ci0gICAgaW50NjRfdCBtX2F1dG9JbmNyZW1lbnROdW1iZXI7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMDc5NGM5Y2U4MDkwNWZhNmQ1ZjZhMDVhZjFmYjdl
YzUyN2ViMGE5Ny4uMDhhNjRiYjdkMDljODMzOWQzZmQ3MTU4MTA5MGMwNDY3NTJmZDM5NiAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDI1IEBACisyMDEyLTA3LTE3ICBKb3NodWEgQmVsbCAgPGpzYmVsbEBjaHJv
bWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBLZXkgZ2VuZXJhdG9yIHN0YXRlIG5vdCBt
YWludGFpbmVkIGFjcm9zcyBjb25uZWN0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE0NTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGRlZCBrZXkgZ2VuZXJhdG9yIHRlc3QgY2FzZSB0aGF0IHNw
YW5zIGRhdGFiYXNlIGNvbm5lY3Rpb25zLgorCisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIv
a2V5LWdlbmVyYXRvci1leHBlY3RlZC50eHQ6CisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIv
cmVzb3VyY2VzL2tleS1nZW5lcmF0b3IuanM6CisgICAgICAgICh0ZXN0QWNyb3NzQ29ubmVjdGlv
bnMucmVxdWVzdC5vbnN1Y2Nlc3MucmVxdWVzdC5vbnN1Y2Nlc3MucmVxdWVzdC5vbnN1Y2Nlc3Mp
OgorICAgICAgICAodGVzdEFjcm9zc0Nvbm5lY3Rpb25zLnJlcXVlc3Qub25zdWNjZXNzLnJlcXVl
c3Qub25zdWNjZXNzKToKKyAgICAgICAgKHRlc3RBY3Jvc3NDb25uZWN0aW9ucy5yZXF1ZXN0Lm9u
c3VjY2Vzcyk6CisgICAgICAgICh0ZXN0QWNyb3NzQ29ubmVjdGlvbnMuZG9GaXJzdFdyaXRlLnJl
cXVlc3Qub25zdWNjZXNzKToKKyAgICAgICAgKHRlc3RBY3Jvc3NDb25uZWN0aW9ucy5kb0ZpcnN0
V3JpdGUpOgorICAgICAgICAodGVzdEFjcm9zc0Nvbm5lY3Rpb25zLmNsb3NlQW5kUmVvcGVuLnJl
cXVlc3Qub25zdWNjZXNzKToKKyAgICAgICAgKHRlc3RBY3Jvc3NDb25uZWN0aW9ucy5jbG9zZUFu
ZFJlb3Blbik6CisgICAgICAgICh0ZXN0QWNyb3NzQ29ubmVjdGlvbnMuZG9TZWNvbmRXcml0ZS5y
ZXF1ZXN0Lm9uc3VjY2Vzcyk6CisgICAgICAgICh0ZXN0QWNyb3NzQ29ubmVjdGlvbnMuZG9TZWNv
bmRXcml0ZS50cmFucy5vbmNvbXBsZXRlKToKKyAgICAgICAgKHRlc3RBY3Jvc3NDb25uZWN0aW9u
cy5kb1NlY29uZFdyaXRlKToKKwogMjAxMi0wNy0xNiAgw4Fkw6FtIEthbGxhaSAgPGthZGFtQGlu
Zi51LXN6ZWdlZC5odT4KIAogICAgICAgICBbUXRdIHBsYXRmcm9tL3F0L2VkaXRpbmcvaW5zZXJ0
aW5nIHRlc3RzIG5lZWRzIHVwZGF0ZSBhZnRlciB0ZXN0IGZvbnQgY2hhbmdlLgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIva2V5LWdlbmVyYXRvci1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9rZXktZ2VuZXJhdG9yLWV4cGVjdGVk
LnR4dAppbmRleCA5ZGU2YmI1N2E3NTVlMWQ4ZThlYzBiMTFlYTVmNzRmOTI1NjMzMTJlLi41MmZj
YzcyODY2YWE2YmY4MzQ5YTBkODU5NjAzODQzMmI0YjVlMTg1IDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9rZXktZ2VuZXJhdG9yLWV4cGVjdGVkLnR4dAorKysgYi9M
YXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9rZXktZ2VuZXJhdG9yLWV4cGVjdGVkLnR4dApA
QCAtMTY3LDYgKzE2NywyNiBAQCBQQVNTIGV2ZW50LnRhcmdldC5lcnJvci5uYW1lIGlzICdEYXRh
RXJyb3InCiBldmVudC5wcmV2ZW50RGVmYXVsdCgpCiBQQVNTIEdvdCAiZCIgZm9yIGtleTogMgog
ZGIuY2xvc2UoKQorCitFbnN1cmUga2V5IGdlbmVyYXRvciBzdGF0ZSBpcyBtYWludGFpbmVkIGFj
cm9zcyBjb25uZWN0aW9uczoKK2luZGV4ZWREQi5kZWxldGVEYXRhYmFzZSgna2V5LWdlbmVyYXRv
cicpCityZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oJ2tleS1nZW5lcmF0b3InKQorZGIgPSByZXF1
ZXN0LnJlc3VsdAorZGIuc2V0VmVyc2lvbignMScpCitkYi5jcmVhdGVPYmplY3RTdG9yZSgnc3Rv
cmUnLCB7YXV0b0luY3JlbWVudDogdHJ1ZX0pCisKK3RyYW5zID0gZGIudHJhbnNhY3Rpb24oJ3N0
b3JlJywgJ3JlYWR3cml0ZScpCityZXF1ZXN0ID0gdHJhbnMub2JqZWN0U3RvcmUoJ3N0b3JlJyku
cHV0KCd2YWx1ZTEnKQorUEFTUyByZXF1ZXN0LnJlc3VsdCBpcyAxCit0cmFucy5vYmplY3RTdG9y
ZSgnc3RvcmUnKS5jbGVhcigpCitkYi5jbG9zZSgpCisKK3JlcXVlc3QgPSBpbmRleGVkREIub3Bl
bigna2V5LWdlbmVyYXRvcicpCitkYiA9IHJlcXVlc3QucmVzdWx0Cit0cmFucyA9IGRiLnRyYW5z
YWN0aW9uKCdzdG9yZScsICdyZWFkd3JpdGUnKQorcmVxdWVzdCA9IHRyYW5zLm9iamVjdFN0b3Jl
KCdzdG9yZScpLnB1dCgndmFsdWUyJykKK1BBU1MgcmVxdWVzdC5yZXN1bHQgaXMgMgorCiBQQVNT
IHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3Jlc291cmNlcy9rZXktZ2VuZXJhdG9yLmpz
IGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvcmVzb3VyY2VzL2tleS1nZW5lcmF0b3Iu
anMKaW5kZXggODZhMTllYTcxOGY1MjQzMzUwZjRkNTM4NDYwNmZhMzMyZjljOWI5ZC4uNDVkOGFi
ZDUzYjQ2YmExNDBhMzViNTkzNzhjODdlZGY0OGExMjIyOCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvc3RvcmFnZS9pbmRleGVkZGIvcmVzb3VyY2VzL2tleS1nZW5lcmF0b3IuanMKKysrIGIvTGF5
b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvcmVzb3VyY2VzL2tleS1nZW5lcmF0b3IuanMKQEAg
LTI3LDcgKzI3LDcgQEAgZnVuY3Rpb24gcnVuVGVzdHMoKSB7CiAKICAgICBmdW5jdGlvbiBuZXh0
VGVzdCgpIHsKICAgICAgICAgaWYgKCF0ZXN0cy5sZW5ndGgpIHsKLSAgICAgICAgICAgIGZpbmlz
aEpTVGVzdCgpOworICAgICAgICAgICAgdGVzdEFjcm9zc0Nvbm5lY3Rpb25zKCk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMjI5LDQgKzIyOSw2NCBAQCBkZWZpbmVUZXN0
KAogICAgIH0KICk7CiAKK2Z1bmN0aW9uIHRlc3RBY3Jvc3NDb25uZWN0aW9ucygpCit7CisgICAg
ZGVidWcoIiIpOworICAgIGRlYnVnKCJFbnN1cmUga2V5IGdlbmVyYXRvciBzdGF0ZSBpcyBtYWlu
dGFpbmVkIGFjcm9zcyBjb25uZWN0aW9uczoiKTsKKyAgICByZXF1ZXN0ID0gZXZhbEFuZExvZygi
aW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlKCdrZXktZ2VuZXJhdG9yJykiKTsKKyAgICByZXF1ZXN0
Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKKyAgICByZXF1ZXN0Lm9uc3VjY2Vz
cyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZXZhbEFuZExvZygicmVxdWVzdCA9IGluZGV4ZWRE
Qi5vcGVuKCdrZXktZ2VuZXJhdG9yJykiKTsKKyAgICAgICAgcmVxdWVzdC5vbmVycm9yID0gdW5l
eHBlY3RlZEVycm9yQ2FsbGJhY2s7CisgICAgICAgIHJlcXVlc3Qub25zdWNjZXNzID0gZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgZXZhbEFuZExvZygiZGIgPSByZXF1ZXN0LnJlc3VsdCIpOwor
ICAgICAgICAgICAgcmVxdWVzdCA9IGV2YWxBbmRMb2coImRiLnNldFZlcnNpb24oJzEnKSIpOwor
ICAgICAgICAgICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cisg
ICAgICAgICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
ICAgICB0cmFucyA9IHJlcXVlc3QucmVzdWx0OworICAgICAgICAgICAgICAgIHRyYW5zLm9uYWJv
cnQgPSB1bmV4cGVjdGVkQWJvcnRDYWxsYmFjazsKKyAgICAgICAgICAgICAgICBldmFsQW5kTG9n
KCJkYi5jcmVhdGVPYmplY3RTdG9yZSgnc3RvcmUnLCB7YXV0b0luY3JlbWVudDogdHJ1ZX0pIik7
CisgICAgICAgICAgICAgICAgdHJhbnMub25jb21wbGV0ZSA9IGRvRmlyc3RXcml0ZTsKKyAgICAg
ICAgICAgIH07CisgICAgICAgIH07CisgICAgfTsKKworICAgIGZ1bmN0aW9uIGRvRmlyc3RXcml0
ZSgpIHsKKyAgICAgICAgZGVidWcoIiIpOworICAgICAgICBldmFsQW5kTG9nKCJ0cmFucyA9IGRi
LnRyYW5zYWN0aW9uKCdzdG9yZScsICdyZWFkd3JpdGUnKSIpOworICAgICAgICB0cmFucy5vbmFi
b3J0ID0gdW5leHBlY3RlZEFib3J0Q2FsbGJhY2s7CisgICAgICAgIGV2YWxBbmRMb2coInJlcXVl
c3QgPSB0cmFucy5vYmplY3RTdG9yZSgnc3RvcmUnKS5wdXQoJ3ZhbHVlMScpIik7CisgICAgICAg
IHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworICAgICAgICByZXF1
ZXN0Lm9uc3VjY2VzcyA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgc2hvdWxkQmUoInJlcXVl
c3QucmVzdWx0IiwgIjEiKTsKKyAgICAgICAgICAgIGV2YWxBbmRMb2coInRyYW5zLm9iamVjdFN0
b3JlKCdzdG9yZScpLmNsZWFyKCkiKTsKKyAgICAgICAgfTsKKyAgICAgICAgdHJhbnMub25jb21w
bGV0ZSA9IGNsb3NlQW5kUmVvcGVuOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNsb3NlQW5kUmVv
cGVuKCkgeworICAgICAgICBldmFsQW5kTG9nKCJkYi5jbG9zZSgpIik7CisgICAgICAgIGRlYnVn
KCIiKTsKKyAgICAgICAgZXZhbEFuZExvZygicmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKCdrZXkt
Z2VuZXJhdG9yJykiKTsKKyAgICAgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICBldmFsQW5kTG9nKCJkYiA9IHJlcXVlc3QucmVzdWx0Iik7CisgICAgICAg
ICAgICBkb1NlY29uZFdyaXRlKCk7CisgICAgICAgIH07CisgICAgfQorCisgICAgZnVuY3Rpb24g
ZG9TZWNvbmRXcml0ZSgpIHsKKyAgICAgICAgZXZhbEFuZExvZygidHJhbnMgPSBkYi50cmFuc2Fj
dGlvbignc3RvcmUnLCAncmVhZHdyaXRlJykiKTsKKyAgICAgICAgdHJhbnMub25hYm9ydCA9IHVu
ZXhwZWN0ZWRBYm9ydENhbGxiYWNrOworICAgICAgICBldmFsQW5kTG9nKCJyZXF1ZXN0ID0gdHJh
bnMub2JqZWN0U3RvcmUoJ3N0b3JlJykucHV0KCd2YWx1ZTInKSIpOworICAgICAgICByZXF1ZXN0
Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKKyAgICAgICAgcmVxdWVzdC5vbnN1
Y2Nlc3MgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHNob3VsZEJlKCJyZXF1ZXN0LnJlc3Vs
dCIsICIyIik7CisgICAgICAgIH07CisgICAgICAgIHRyYW5zLm9uY29tcGxldGUgPSBmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgIGRlYnVnKCIiKTsKKyAgICAgICAgICAgIGZpbmlzaEpTVGVzdCgp
OworICAgICAgICB9OworICAgIH07Cit9CisKIHRlc3QoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152815</attachid>
            <date>2012-07-17 13:39:18 -0700</date>
            <delta_ts>2012-07-17 15:41:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91456-20120717133918.patch</filename>
            <type>text/plain</type>
            <size>30561</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyODMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTFjMzNhZjAyNzQ3ODdk
NGJiMzJjZWM1YWQ1OTExMDdhNTY1NmNhMS4uMjllZDYyYjllMzYxYWEwMTcxMTJjOTQ3YzRiMjI3
MThhMDE5ZWE3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDEyLTA3LTE3ICBKb3No
dWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBLZXkg
Z2VuZXJhdG9yIHN0YXRlIG5vdCBtYWludGFpbmVkIGFjcm9zcyBjb25uZWN0aW9ucworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE0NTYKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFeHBsaWNpdGx5IHN0b3Jl
IGtleSBnZW5lcmF0b3Igc3RhdGUgZm9yIGVhY2ggb2JqZWN0IHN0b3JlIGluIHRoZSBiYWNraW5n
IHN0b3JlLAorICAgICAgICByYXRoZXIgdGhhbiBkZXJpdmluZyBpdCBmcm9tIHRoZSBtYXhpbXVt
IGtleSBpbiB0aGUgZGF0YSAod2hpY2ggdmlvbGF0ZXMgdGhlIHNwZWMKKyAgICAgICAgaWYgZGF0
YSBpcyBkZWxldGVkKS4KKworICAgICAgICBUaGlzIGNoYW5nZSBlbGltaW5hdGVzIGEgKGZyYWdp
bGUpIHBlci1zdG9yZSBjYWNoZSBvZiB0aGUgdmFsdWUgdG8gc2ltcGxpZnkgdGhlCisgICAgICAg
IGNvZGUuIEEgY2FjaGUgY291bGQgYmUgcmUtaW50cm9kdWNlZCwgcmVxdWlyaW5nIGFuICJvbmJl
Zm9yZWNvbW1pdCIgaG9vayBmb3IKKyAgICAgICAgb2JqZWN0IHN0b3JlcywgYnV0IGl0IHNlZW1z
IGNsZWFuZXIgdG8gc2F2ZSB0aGF0IGZvciBhIGZvbGxvdy11cCBwYXRjaC4KKworICAgICAgICBU
ZXN0OiBzdG9yYWdlL2luZGV4ZWRkYi9rZXktZ2VuZXJhdG9yLmh0bWwKKworICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oOiBOZXcgQVBJcyBmb3IgZ2V0dGluZy9z
ZXR0aW5nIGdlbmVyYXRvciBzdGF0ZXMuCisgICAgICAgIChJREJCYWNraW5nU3RvcmUpOgorICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0T2JqZWN0U3RvcmVzKTog
UmVhZCBnZW5lcmF0b3Igc3RhdGUgKGJ1dCBjdXJyZW50bHkgaWdub3JlZCkuCisgICAgICAgIChX
ZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVPYmplY3RTdG9yZSk6IFdyaXRl
IGdlbmVyYXRvciBzdGF0ZS4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0S2V5R2VuZXJhdG9yU3RhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6bWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JT
dGF0ZSk6IFVwZGF0ZSwgb3B0aW9uYWxseSBjaGVja2luZworICAgICAgICB0byBzZWUgaWYgdGhl
IG5ldyB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gdGhlIG9sZC4gKElmIGNhbGxlciBnb3QgdGhlIHZh
bHVlIHZpYSBnZXRLZXlHZW5lcmF0b3JTdGF0ZQorICAgICAgICBpdCBpcyBzYWZlIHRvIHNraXAg
dGhlIGNoZWNrLikKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2lu
Z1N0b3JlLmg6CisgICAgICAgIChJREJMZXZlbERCQmFja2luZ1N0b3JlKToKKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQ29kaW5nLmNwcDoKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9JREJMZXZlbERCQ29kaW5nLmg6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKTogRGl0Y2gg
dGhlIGNhY2hlLgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
cHV0KTogTm8gbmVlZCBmb3IgYWJvcnQgdGFzay4KKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OnB1dFdpdGhJbmRleEtleXMpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsKTogVXNlIHRoZSBu
ZXdmYW5nbGVkIEFQSXMgYmVsb3cuCisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpnZW5lcmF0ZUtleSk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjp1cGRhdGVLZXlHZW5lcmF0b3IpOgorICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaDoKKyAgICAgICAgKElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGwpOgorCiAyMDEyLTA3LTE3ICBLd2FuZyBZdWwgU2VvICA8c2t5dWxAY29t
cGFueTEwMC5uZXQ+CiAKICAgICAgICAgImluIGJvZHkiIGluc2VydGlvbiBtb2RlLCAiYW55IG90
aGVyIGVuZCB0YWciIHN0ZXAgMi4xIGlzIHVwZGF0ZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
aW5kZXggODIyNzJiMWVkMTczNGE0ODcwNzc1NThhZjU4YzU3NTcyZGQ3YzZmNy4uZjJjZTgxMDU5
NDA3ZDA2Y2QyNDExZjFlOGIxZDAxYmM0YWFhYjViYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMi0wNy0xNyAgSm9zaHVhIEJlbGwgIDxqc2JlbGxAY2hy
b21pdW0ub3JnPgorCisgICAgICAgIEluZGV4ZWREQjogS2V5IGdlbmVyYXRvciBzdGF0ZSBub3Qg
bWFpbnRhaW5lZCBhY3Jvc3MgY29ubmVjdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTkxNDU2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkIHN0dWIgbWV0aG9kIGltcGxlbWVudGF0aW9ucyB0byB0
ZXN0IGNsYXNzLgorCisgICAgICAgICogdGVzdHMvSURCRmFrZUJhY2tpbmdTdG9yZS5oOgorCiAy
MDEyLTA3LTE2ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5y
ZXZpZXdlZC4gUmVtb3ZlIHR3byBlbXB0eSBkaXJlY3Rvcmllcy4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmgKaW5kZXggZjc4NDA2MjFi
NjFmMmMxNDE4Nzg5NjYzNmQ3NjVjYzg4MjI5ZmQwNS4uMTY2MTAwMDBlZWZjN2Q3ZTM5ZjgxMTFk
ZTJmZDJiNzllMjViYzgxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCQmFja2luZ1N0b3JlLmgKQEAgLTY3LDcgKzY3LDggQEAgcHVibGljOgogICAgIHZp
cnR1YWwgYm9vbCBwdXRPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgT2Jq
ZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBjbGVhck9i
amVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSA9IDA7
CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50
aWZpZXIqKSA9IDA7Ci0gICAgdmlydHVhbCBpbnQ2NF90IG5leHRBdXRvSW5jcmVtZW50TnVtYmVy
KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSA9IDA7CisgICAgdmly
dHVhbCBpbnQ2NF90IGdldEtleUdlbmVyYXRvclN0YXRlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkKSA9IDA7CisgICAgdmlydHVhbCBib29sIG1heWJlVXBkYXRlS2V5
R2VuZXJhdG9yU3RhdGUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGludDY0X3QgbmV3U3RhdGUsIGJvb2wgY2hlY2tDdXJyZW50KSA9IDA7CiAgICAgdmlydHVhbCBi
b29sIGtleUV4aXN0c0luT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciog
Zm91bmRSZWNvcmRJZGVudGlmaWVyKSA9IDA7CiAKICAgICBjbGFzcyBPYmplY3RTdG9yZVJlY29y
ZENhbGxiYWNrIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAKaW5kZXggYWI4MjkzZjBmYTQ3Y2VjMDg1
OTExYTU1NDRlYWIxM2M1NGE3NDQ1OS4uZTk0MTA0NDRiYzExZWM4YmMyY2ZhYTlhYTA1OTI2YTIw
NWQ3NmUxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKICNpbmNsdWRl
ICJJREJGYWN0b3J5QmFja2VuZEltcGwuaCIKKyNpbmNsdWRlICJJREJLZXkuaCIKICNpbmNsdWRl
ICJJREJLZXlQYXRoLmgiCiAjaW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIKICNpbmNsdWRlICJJREJM
ZXZlbERCQ29kaW5nLmgiCkBAIC00MTQsNiArNDE1LDEyIEBAIHZvaWQgSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZTo6Z2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0YWJhc2VJZCwgVmVjdG9yPGludDY0
X3Q+CiAgICAgICAgICAgICBpdC0+bmV4dCgpOwogICAgICAgICB9CiAKKyAgICAgICAgaW50NjRf
dCBrZXlHZW5lcmF0b3JTdGF0ZSA9IC0xOworICAgICAgICBpZiAoY2hlY2tPYmplY3RTdG9yZUFu
ZE1ldGFEYXRhVHlwZShpdC5nZXQoKSwgc3RvcEtleSwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3Rv
cmVNZXRhRGF0YUtleTo6a0tleUdlbmVyYXRvclN0YXRlKSkgeworICAgICAgICAgICAga2V5R2Vu
ZXJhdG9yU3RhdGUgPSBkZWNvZGVJbnQoaXQtPnZhbHVlKCkuYmVnaW4oKSwgaXQtPnZhbHVlKCku
ZW5kKCkpOworICAgICAgICAgICAgaXQtPm5leHQoKTsKKyAgICAgICAgfQorCiAgICAgICAgIGZv
dW5kSWRzLmFwcGVuZChvYmplY3RTdG9yZUlkKTsKICAgICAgICAgZm91bmROYW1lcy5hcHBlbmQo
b2JqZWN0U3RvcmVOYW1lKTsKICAgICAgICAgZm91bmRLZXlQYXRocy5hcHBlbmQoa2V5UGF0aCk7
CkBAIC00NTEsNiArNDU4LDcgQEAgYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVP
YmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYKICAgICBjb25zdCBW
ZWN0b3I8Y2hhcj4gbGFzdFZlcnNpb25LZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNv
ZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6a0xh
c3RWZXJzaW9uKTsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gbWF4SW5kZXhJZEtleSA9IE9iamVj
dFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBPYmpl
Y3RTdG9yZU1ldGFEYXRhS2V5OjprTWF4SW5kZXhJZCk7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+
IGhhc0tleVBhdGhLZXkgID0gT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNl
SWQsIG9iamVjdFN0b3JlSWQsIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmtIYXNLZXlQYXRoKTsK
KyAgICBjb25zdCBWZWN0b3I8Y2hhcj4ga2V5R2VuZXJhdG9yU3RhdGVLZXkgPSBPYmplY3RTdG9y
ZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3Rv
cmVNZXRhRGF0YUtleTo6a0tleUdlbmVyYXRvclN0YXRlKTsKICAgICBjb25zdCBWZWN0b3I8Y2hh
cj4gbmFtZXNLZXkgPSBPYmplY3RTdG9yZU5hbWVzS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgbmFt
ZSk7CiAKICAgICBib29sIG9rID0gcHV0U3RyaW5nKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgp
LCBuYW1lS2V5LCBuYW1lKTsKQEAgLTQ5NSw2ICs1MDMsMTIgQEAgYm9vbCBJREJMZXZlbERCQmFj
a2luZ1N0b3JlOjpjcmVhdGVPYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IFN0
cmluZyYKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAorICAgIG9rID0gcHV0SW50KG1f
Y3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBrZXlHZW5lcmF0b3JTdGF0ZUtleSwgMSk7CisgICAg
aWYgKCFvaykgeworICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3Iu
Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKICAgICBvayA9IHB1dEludChtX2N1
cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgbmFtZXNLZXksIG9iamVjdFN0b3JlSWQpOwogICAgIGlm
ICghb2spIHsKICAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIp
OwpAQCAtNjM0LDM1ICs2NDgsNjYgQEAgdm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxl
dGVPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3QKICAgICBtX2N1
cnJlbnRUcmFuc2FjdGlvbi0+cmVtb3ZlKGV4aXN0c0VudHJ5S2V5KTsKIH0KIAotaW50NjRfdCBJ
REJMZXZlbERCQmFja2luZ1N0b3JlOjpuZXh0QXV0b0luY3JlbWVudE51bWJlcihpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKKworaW50NjRfdCBJREJMZXZlbERCQmFj
a2luZ1N0b3JlOjpnZXRLZXlHZW5lcmF0b3JTdGF0ZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCkKIHsKICAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOwot
ICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdGFydEtleSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5j
b2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIG1pbklEQktleSgpKTsKLSAgICBjb25zdCBW
ZWN0b3I8Y2hhcj4gc3RvcEtleSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNl
SWQsIG9iamVjdFN0b3JlSWQsIG1heElEQktleSgpKTsKIAotICAgIE93blB0cjxMZXZlbERCSXRl
cmF0b3I+IGl0ID0gbV9jdXJyZW50VHJhbnNhY3Rpb24tPmNyZWF0ZUl0ZXJhdG9yKCk7CisgICAg
Y29uc3QgVmVjdG9yPGNoYXI+IGtleUdlbmVyYXRvclN0YXRlS2V5ID0gT2JqZWN0U3RvcmVNZXRh
RGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIE9iamVjdFN0b3JlTWV0
YURhdGFLZXk6OmtLZXlHZW5lcmF0b3JTdGF0ZSk7CiAKLSAgICBpbnQ2NF90IG1heE51bWVyaWNL
ZXkgPSAwOworICAgIGludDY0X3Qga2V5R2VuZXJhdG9yU3RhdGUgPSAtMTsKKyAgICBWZWN0b3I8
Y2hhcj4gZGF0YTsKIAotICAgIC8vIEZJWE1FOiBUaGlzIGRvZXMgYSBmb3J3YXJkIHNjYW4gb3Zl
ciBhbGwga2V5cy4gSW1wcm92ZSBpdC4KLSAgICAvLyBTaW5jZSBhbGwgZGF0ZXMgPiBhbGwgbnVt
YmVycywgY3JlYXRlIERhdGUoLUluZmluaXR5KSBhbmQgc2VlayBiYWNrd2FyZHMuCisgICAgaWYg
KG1fY3VycmVudFRyYW5zYWN0aW9uLT5nZXQoa2V5R2VuZXJhdG9yU3RhdGVLZXksIGRhdGEpKQor
ICAgICAgICBrZXlHZW5lcmF0b3JTdGF0ZSA9IGRlY29kZUludChkYXRhLmJlZ2luKCksIGRhdGEu
ZW5kKCkpOworICAgIGVsc2UgeworICAgICAgICAvLyBQcmV2aW91c2x5LCB0aGUga2V5IGdlbmVy
YXRvciBzdGF0ZSB3YXMgbm90IHN0b3JlZCBleHBsaWNpdGx5IGJ1dCBkZXJpdmVkIGZyb20gdGhl
CisgICAgICAgIC8vIG1heGltdW0gbnVtZXJpYyBrZXkgcHJlc2VudCBpbiBleGlzdGluZyBkYXRh
LiBUaGlzIHZpb2xhdGVzIHRoZSBzcGVjIGFzIHRoZSBkYXRhIG1heQorICAgICAgICAvLyBiZSBj
bGVhcmVkIGJ1dCB0aGUga2V5IGdlbmVyYXRvciBzdGF0ZSBtdXN0IGJlIHByZXNlcnZlZC4KKyAg
ICAgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0YXJ0S2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5Ojpl
bmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgbWluSURCS2V5KCkpOworICAgICAgICBj
b25zdCBWZWN0b3I8Y2hhcj4gc3RvcEtleSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRh
dGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIG1heElEQktleSgpKTsKKworICAgICAgICBPd25QdHI8
TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IG1fY3VycmVudFRyYW5zYWN0aW9uLT5jcmVhdGVJdGVyYXRv
cigpOworICAgICAgICBpbnQ2NF90IG1heE51bWVyaWNLZXkgPSAwOworCisgICAgICAgIGZvciAo
aXQtPnNlZWsoc3RhcnRLZXkpOyBpdC0+aXNWYWxpZCgpICYmIGNvbXBhcmVLZXlzKGl0LT5rZXko
KSwgc3RvcEtleSkgPCAwOyBpdC0+bmV4dCgpKSB7CisgICAgICAgICAgICBjb25zdCBjaGFyICpw
ID0gaXQtPmtleSgpLmJlZ2luKCk7CisgICAgICAgICAgICBjb25zdCBjaGFyICpsaW1pdCA9IGl0
LT5rZXkoKS5lbmQoKTsKKworICAgICAgICAgICAgT2JqZWN0U3RvcmVEYXRhS2V5IGRhdGFLZXk7
CisgICAgICAgICAgICBwID0gT2JqZWN0U3RvcmVEYXRhS2V5OjpkZWNvZGUocCwgbGltaXQsICZk
YXRhS2V5KTsKKyAgICAgICAgICAgIEFTU0VSVChwKTsKKworICAgICAgICAgICAgaWYgKGRhdGFL
ZXkudXNlcktleSgpLT50eXBlKCkgPT0gSURCS2V5OjpOdW1iZXJUeXBlKSB7CisgICAgICAgICAg
ICAgICAgaW50NjRfdCBuID0gc3RhdGljX2Nhc3Q8aW50NjRfdD4oZGF0YUtleS51c2VyS2V5KCkt
Pm51bWJlcigpKTsKKyAgICAgICAgICAgICAgICBpZiAobiA+IG1heE51bWVyaWNLZXkpCisgICAg
ICAgICAgICAgICAgICAgIG1heE51bWVyaWNLZXkgPSBuOworICAgICAgICAgICAgfQorICAgICAg
ICB9CiAKLSAgICBmb3IgKGl0LT5zZWVrKHN0YXJ0S2V5KTsgaXQtPmlzVmFsaWQoKSAmJiBjb21w
YXJlS2V5cyhpdC0+a2V5KCksIHN0b3BLZXkpIDwgMDsgaXQtPm5leHQoKSkgewotICAgICAgICBj
b25zdCBjaGFyICpwID0gaXQtPmtleSgpLmJlZ2luKCk7Ci0gICAgICAgIGNvbnN0IGNoYXIgKmxp
bWl0ID0gaXQtPmtleSgpLmVuZCgpOworICAgICAgICBrZXlHZW5lcmF0b3JTdGF0ZSA9IG1heE51
bWVyaWNLZXkgKyAxOworICAgIH0KIAotICAgICAgICBPYmplY3RTdG9yZURhdGFLZXkgZGF0YUtl
eTsKLSAgICAgICAgcCA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZGVjb2RlKHAsIGxpbWl0LCAmZGF0
YUtleSk7Ci0gICAgICAgIEFTU0VSVChwKTsKKyAgICByZXR1cm4ga2V5R2VuZXJhdG9yU3RhdGU7
Cit9CiAKLSAgICAgICAgaWYgKGRhdGFLZXkudXNlcktleSgpLT50eXBlKCkgPT0gSURCS2V5OjpO
dW1iZXJUeXBlKSB7Ci0gICAgICAgICAgICBpbnQ2NF90IG4gPSBzdGF0aWNfY2FzdDxpbnQ2NF90
PihkYXRhS2V5LnVzZXJLZXkoKS0+bnVtYmVyKCkpOwotICAgICAgICAgICAgaWYgKG4gPiBtYXhO
dW1lcmljS2V5KQotICAgICAgICAgICAgICAgIG1heE51bWVyaWNLZXkgPSBuOwotICAgICAgICB9
Citib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6Om1heWJlVXBkYXRlS2V5R2VuZXJhdG9yU3Rh
dGUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgbmV3
U3RhdGUsIGJvb2wgY2hlY2tDdXJyZW50KQoreworICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2Fj
dGlvbik7CisKKyAgICBpZiAoY2hlY2tDdXJyZW50KSB7CisgICAgICAgIGludDY0X3QgY3VycmVu
dFN0YXRlID0gZ2V0S2V5R2VuZXJhdG9yU3RhdGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCk7
CisgICAgICAgIGlmIChuZXdTdGF0ZSA8PSBjdXJyZW50U3RhdGUpCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAKLSAgICByZXR1cm4gbWF4TnVtZXJpY0tleSArIDE7CisgICAgY29u
c3QgVmVjdG9yPGNoYXI+IGtleUdlbmVyYXRvclN0YXRlS2V5ID0gT2JqZWN0U3RvcmVNZXRhRGF0
YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIE9iamVjdFN0b3JlTWV0YURh
dGFLZXk6OmtLZXlHZW5lcmF0b3JTdGF0ZSk7CisgICAgYm9vbCBvayA9IHB1dEludChtX2N1cnJl
bnRUcmFuc2FjdGlvbi5nZXQoKSwga2V5R2VuZXJhdG9yU3RhdGVLZXksIG5ld1N0YXRlKTsKKyAg
ICBpZiAoIW9rKSB7CisgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJv
ci4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKIH0K
IAogYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbk9iamVjdFN0b3JlKGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmIGtl
eSwgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKiBmb3VuZFJlY29yZElkZW50aWZpZXIpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFj
a2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERC
QmFja2luZ1N0b3JlLmgKaW5kZXggYTY1Zjk2M2U4NTA0MzI1ODRkOTdjNjgxOGRjOTRjMmM2NzUx
NjY4OS4uNzZmOWQ4ODhhMDI4ODEzMWJhMmQ0NmMyYWFmM2I2Mzg0NWE2ZTU0OSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNr
aW5nU3RvcmUuaApAQCAtNTgsNyArNTgsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHB1
dE9iamVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBjb25zdCBJREJLZXkmLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBPYmplY3RTdG9yZVJlY29y
ZElkZW50aWZpZXIqKTsKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJPYmplY3RTdG9yZShpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7CiAgICAgdmlydHVhbCB2b2lkIGRl
bGV0ZU9iamVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBjb25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqKTsKLSAgICB2aXJ0dWFs
IGludDY0X3QgbmV4dEF1dG9JbmNyZW1lbnROdW1iZXIoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQpOworICAgIHZpcnR1YWwgaW50NjRfdCBnZXRLZXlHZW5lcmF0b3JT
dGF0ZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7CisgICAgdmly
dHVhbCBib29sIG1heWJlVXBkYXRlS2V5R2VuZXJhdG9yU3RhdGUoaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgbmV3U3RhdGUsIGJvb2wgY2hlY2tDdXJy
ZW50KTsKICAgICB2aXJ0dWFsIGJvb2wga2V5RXhpc3RzSW5PYmplY3RTdG9yZShpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgT2JqZWN0U3Rv
cmVSZWNvcmRJZGVudGlmaWVyKiBmb3VuZFJlY29yZElkZW50aWZpZXIpOwogCiAgICAgdmlydHVh
bCBib29sIGZvckVhY2hPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVSZWNvcmRDYWxsYmFjayYpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkNvZGluZy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQ29kaW5nLmNwcApp
bmRleCAxODM2Mzc3MjFmMGIxMjczZmYwMWY4N2EwMjMzNmIwZjcxMmJhZmI3Li5iMDMwMTkzNmYz
ZjEyOTQ2ZjRmOGRkOGFhZTU5NmY4YTJlMDM5OTA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQ29kaW5nLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQ29kaW5nLmNwcApAQCAtNzMsNiArNzMs
NyBAQAogLy8gICAgIDxkYXRhYmFzZSBpZCwgMCwgMCwgNTAsIG9iamVjdCBzdG9yZSBpZCwgND4g
PT4gbGFzdCAidmVyc2lvbiIgbnVtYmVyIFtPYmplY3RTdG9yZU1ldGFEYXRhS2V5XQogLy8gICAg
IDxkYXRhYmFzZSBpZCwgMCwgMCwgNTAsIG9iamVjdCBzdG9yZSBpZCwgNT4gPT4gbWF4aW11bSBp
bmRleCBpZCBldmVyIGFsbG9jYXRlZCBbT2JqZWN0U3RvcmVNZXRhRGF0YUtleV0KIC8vICAgICA8
ZGF0YWJhc2UgaWQsIDAsIDAsIDUwLCBvYmplY3Qgc3RvcmUgaWQsIDY+ID0+IGhhcyBrZXkgcGF0
aCAodnMuIG51bGwpIFtPYmplY3RTdG9yZU1ldGFEYXRhS2V5XQorLy8gICAgIDxkYXRhYmFzZSBp
ZCwgMCwgMCwgNTAsIG9iamVjdCBzdG9yZSBpZCwgNz4gPT4ga2V5IGdlbmVyYXRvciBzdGF0ZSBb
T2JqZWN0U3RvcmVNZXRhRGF0YUtleV0KIC8vCiAvLwogLy8gSW5kZXggbWV0YS1kYXRhOgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkNvZGlu
Zy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkNvZGluZy5o
CmluZGV4IGNjMWY3Mjc4ZGVmZWM2ZTQ2MGQ5NGMxNDIxOTI2ZDE0OTE4NjM5ZDIuLmE1NWM0ZTQ1
ZmZjOGI2Mzg2ZmUyZjM3ZGQ3ZWRiMjA1NWIyNTZlNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJDb2RpbmcuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQ29kaW5nLmgKQEAgLTE1NSw3ICsxNTUs
OCBAQCBwdWJsaWM6CiAgICAgICAgIGtFdmljdGFibGUgPSAzLAogICAgICAgICBrTGFzdFZlcnNp
b24gPSA0LAogICAgICAgICBrTWF4SW5kZXhJZCA9IDUsCi0gICAgICAgIGtIYXNLZXlQYXRoID0g
NgorICAgICAgICBrSGFzS2V5UGF0aCA9IDYsCisgICAgICAgIGtLZXlHZW5lcmF0b3JTdGF0ZSA9
IDcKICAgICB9OwogCiAgICAgT2JqZWN0U3RvcmVNZXRhRGF0YUtleSgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsLmNwcAppbmRleCA3MmU3MGFmNzdkMDcxM2IxNTA1NmUzNjg0NzMxNmJmN2VjY2Rh
MzYwLi5mMWVjZmVlZWM4Mjg3NmFlMzRkNmUwODlmNWYxNGM3NmMyMjY4ZDEyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsLmNwcApAQCAtNTcsNyArNTcsNiBAQCBJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKGNvbnN0IElEQkRhdGFiYXNlQmFja2Vu
ZEltcAogICAgICwgbV9uYW1lKG5hbWUpCiAgICAgLCBtX2tleVBhdGgoa2V5UGF0aCkKICAgICAs
IG1fYXV0b0luY3JlbWVudChhdXRvSW5jcmVtZW50KQotICAgICwgbV9hdXRvSW5jcmVtZW50TnVt
YmVyKC0xKQogewogICAgIGxvYWRJbmRleGVzKCk7CiB9CkBAIC02OCw3ICs2Nyw2IEBAIElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGwoY29uc3QgSURC
RGF0YWJhc2VCYWNrZW5kSW1wCiAgICAgLCBtX25hbWUobmFtZSkKICAgICAsIG1fa2V5UGF0aChr
ZXlQYXRoKQogICAgICwgbV9hdXRvSW5jcmVtZW50KGF1dG9JbmNyZW1lbnQpCi0gICAgLCBtX2F1
dG9JbmNyZW1lbnROdW1iZXIoLTEpCiB7CiB9CiAKQEAgLTE1OSw5ICsxNTcsNyBAQCB2b2lkIElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gcHJwVmFsdWUsCiAgICAgT3duUHRyPFZlY3RvcjxTdHJpbmc+ID4gbnVsbEluZGV4TmFt
ZXM7CiAgICAgT3duUHRyPFZlY3RvcjxJbmRleEtleXM+ID4gbnVsbEluZGV4S2V5czsKICAgICBp
ZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soCi0gICAgICAgICAgICBjcmVhdGVDYWxsYmFj
a1Rhc2soJklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsLCBvYmplY3RTdG9y
ZSwgdmFsdWUsIGtleSwgcHV0TW9kZSwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbiwgbnVsbEluZGV4
TmFtZXMucmVsZWFzZSgpLCBudWxsSW5kZXhLZXlzLnJlbGVhc2UoKSksCi0gICAgICAgICAgICAv
LyBGSVhNRTogT25lIG9mIHRoZXNlIHBlciBwdXQoKSBpcyBvdmVya2lsbCwgc2luY2UgaXQncyBz
aW1wbHkgYSBjYWNoZSBpbnZhbGlkYXRpb24uCi0gICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rh
c2soJklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnJldmVydEF1dG9JbmNyZW1lbnRLZXlDYWNo
ZSwgb2JqZWN0U3RvcmUpKSkKKyAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwsIG9iamVjdFN0b3JlLCB2YWx1ZSwga2V5
LCBwdXRNb2RlLCBjYWxsYmFja3MsIHRyYW5zYWN0aW9uLCBudWxsSW5kZXhOYW1lcy5yZWxlYXNl
KCksIG51bGxJbmRleEtleXMucmVsZWFzZSgpKSkpCiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VF
eGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKIH0KIApAQCAtMTgxLDE3ICsxNzcs
MTAgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRXaXRoSW5kZXhLZXlzKFBh
c3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHUKICAgICBPd25QdHI8VmVjdG9yPEluZGV4S2V5
cz4gPiBuZXdJbmRleEtleXMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPEluZGV4S2V5cz4oaW5kZXhL
ZXlzKSk7CiAKICAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soCi0gICAgICAgICAg
ICBjcmVhdGVDYWxsYmFja1Rhc2soJklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVy
bmFsLCBvYmplY3RTdG9yZSwgdmFsdWUsIGtleSwgcHV0TW9kZSwgY2FsbGJhY2tzLCB0cmFuc2Fj
dGlvbiwgbmV3SW5kZXhOYW1lcy5yZWxlYXNlKCksIG5ld0luZGV4S2V5cy5yZWxlYXNlKCkpLAot
ICAgICAgICAgICAgLy8gRklYTUU6IE9uZSBvZiB0aGVzZSBwZXIgcHV0KCkgaXMgb3ZlcmtpbGws
IHNpbmNlIGl0J3Mgc2ltcGx5IGEgY2FjaGUgaW52YWxpZGF0aW9uLgotICAgICAgICAgICAgY3Jl
YXRlQ2FsbGJhY2tUYXNrKCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpyZXZlcnRBdXRvSW5j
cmVtZW50S2V5Q2FjaGUsIG9iamVjdFN0b3JlKSkpCisgICAgICAgICAgICBjcmVhdGVDYWxsYmFj
a1Rhc2soJklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsLCBvYmplY3RTdG9y
ZSwgdmFsdWUsIGtleSwgcHV0TW9kZSwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbiwgbmV3SW5kZXhO
YW1lcy5yZWxlYXNlKCksIG5ld0luZGV4S2V5cy5yZWxlYXNlKCkpKSkKICAgICAgICAgZWMgPSBJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOwogfQogCi12b2lk
IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnJldmVydEF1dG9JbmNyZW1lbnRLZXlDYWNoZShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsPiBvYmplY3RTdG9yZSkKLXsKLSAgICBvYmplY3RTdG9yZS0+cmVzZXRBdXRvSW5jcmVtZW50
S2V5Q2FjaGUoKTsKLX0KLQogbmFtZXNwYWNlIHsKIGNsYXNzIEluZGV4V3JpdGVyIHsKIHB1Ymxp
YzoKQEAgLTI5MSw5ICsyODAsMTAgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpw
dXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjwKICAgICBPd25Q
dHI8VmVjdG9yPFN0cmluZz4gPiBpbmRleE5hbWVzID0gcG9wSW5kZXhOYW1lczsKICAgICBPd25Q
dHI8VmVjdG9yPEluZGV4S2V5cz4gPiBpbmRleEtleXMgPSBwb3BJbmRleEtleXM7CiAgICAgQVNT
RVJUKCghaW5kZXhOYW1lcyAmJiAhaW5kZXhLZXlzKSB8fCBpbmRleE5hbWVzLT5zaXplKCkgPT0g
aW5kZXhLZXlzLT5zaXplKCkpOworICAgIGNvbnN0IGJvb2wgYXV0b0luY3JlbWVudCA9IG9iamVj
dFN0b3JlLT5hdXRvSW5jcmVtZW50KCk7CisgICAgYm9vbCBrZXlXYXNHZW5lcmF0ZWQgPSBmYWxz
ZTsKIAogICAgIGlmIChwdXRNb2RlICE9IEN1cnNvclVwZGF0ZSkgewotICAgICAgICBjb25zdCBi
b29sIGF1dG9JbmNyZW1lbnQgPSBvYmplY3RTdG9yZS0+YXV0b0luY3JlbWVudCgpOwogICAgICAg
ICBjb25zdCBib29sIGhhc0tleVBhdGggPSAhb2JqZWN0U3RvcmUtPm1fa2V5UGF0aC5pc051bGwo
KTsKICAgICAgICAgaWYgKGhhc0tleVBhdGgpIHsKICAgICAgICAgICAgIEFTU0VSVCgha2V5KTsK
QEAgLTMwMyw3ICsyOTMsOCBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dElu
dGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPAogICAgICAgICB9CiAg
ICAgICAgIGlmIChhdXRvSW5jcmVtZW50KSB7CiAgICAgICAgICAgICBpZiAoIWtleSkgewotICAg
ICAgICAgICAgICAgIFJlZlB0cjxJREJLZXk+IGF1dG9JbmNLZXkgPSBvYmplY3RTdG9yZS0+Z2Vu
QXV0b0luY3JlbWVudEtleSgpOworICAgICAgICAgICAgICAgIFJlZlB0cjxJREJLZXk+IGF1dG9J
bmNLZXkgPSBvYmplY3RTdG9yZS0+Z2VuZXJhdGVLZXkoKTsKKyAgICAgICAgICAgICAgICBrZXlX
YXNHZW5lcmF0ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGlmICghYXV0b0luY0tleS0+aXNW
YWxpZCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRh
YmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSLCAiTWF4aW11
bSBrZXkgZ2VuZXJhdG9yIHZhbHVlIHJlYWNoZWQuIikpOwogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CkBAIC0zMTMsNyArMzA0LDYgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
OjpwdXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjwKICAgICAg
ICAgICAgICAgICAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWVBZnRlcklu
amVjdGlvbiA9IGluamVjdEtleUludG9LZXlQYXRoKGF1dG9JbmNLZXksIHZhbHVlLCBvYmplY3RT
dG9yZS0+bV9rZXlQYXRoKTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHZhbHVlQWZ0ZXJJ
bmplY3Rpb24pOwogICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlQWZ0ZXJJbmplY3Rpb24p
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFN0b3JlLT5yZXNldEF1dG9JbmNyZW1l
bnRLZXlDYWNoZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2tzIGluIHB1dCgp
IGVuc3VyZSB0aGlzIHNob3VsZCBvbmx5IGhhcHBlbiBpZiBJL08gZXJyb3Igb2NjdXJzLgogICAg
ICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6
OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJJbnRlcm5hbCBlcnJv
ciBpbnNlcnRpbmcgZ2VuZXJhdGVkIGtleSBpbnRvIHRoZSBvYmplY3QuIikpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzIxLDkgKzMxMSw2IEBAIHZvaWQgSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBh
c3NSZWZQdHI8CiAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWVBZnRlckluamVjdGlv
bjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAga2V5ID0gYXV0b0luY0tleTsK
LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IExvZ2ljIHRv
IHVwZGF0ZSBnZW5lcmF0b3Igc3RhdGUgc2hvdWxkIGdvIGhlcmUuIEN1cnJlbnRseSBpdCBkb2Vz
IGEgc2Nhbi4KLSAgICAgICAgICAgICAgICBvYmplY3RTdG9yZS0+cmVzZXRBdXRvSW5jcmVtZW50
S2V5Q2FjaGUoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTMzMiw3ICsz
MTksNiBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPAogCiAgICAgUmVmUHRyPElEQkJhY2tpbmdT
dG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyPiByZWNvcmRJZGVudGlmaWVyID0gb2Jq
ZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5jcmVhdGVJbnZhbGlkUmVjb3JkSWRlbnRpZmllcigp
OwogICAgIGlmIChwdXRNb2RlID09IEFkZE9ubHkgJiYgb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9y
ZSgpLT5rZXlFeGlzdHNJbk9iamVjdFN0b3JlKG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9i
amVjdFN0b3JlLT5pZCgpLCAqa2V5LCByZWNvcmRJZGVudGlmaWVyLmdldCgpKSkgewotICAgICAg
ICBvYmplY3RTdG9yZS0+cmVzZXRBdXRvSW5jcmVtZW50S2V5Q2FjaGUoKTsKICAgICAgICAgY2Fs
bGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6Q09OU1RSQUlOVF9FUlIsICJLZXkgYWxyZWFkeSBleGlzdHMgaW4gdGhlIG9iamVjdCBz
dG9yZS4iKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNjMsNyArMzQ5LDYgQEAgdm9p
ZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgUGFzc1JlZlB0cjwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvYmplY3RTdG9yZS0+aWQoKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4LT5pZCgpLCBrZXkuZ2V0KCksICZlcnJvck1l
c3NhZ2UpKSB7Ci0gICAgICAgICAgICBvYmplY3RTdG9yZS0+cmVzZXRBdXRvSW5jcmVtZW50S2V5
Q2FjaGUoKTsKICAgICAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9y
OjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSLCBlcnJvck1lc3NhZ2UpKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMzkzLDcgKzM3OCwxMCBAQCB2b2lk
IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQYXNzUmVmUHRyPAogICAgICAgICB9CiAgICAgfQogCi0gICAgY2FsbGJhY2tzLT5v
blN1Y2Nlc3Moa2V5LmdldCgpKTsKKyAgICBpZiAoYXV0b0luY3JlbWVudCAmJiBwdXRNb2RlICE9
IEN1cnNvclVwZGF0ZSAmJiBrZXktPnR5cGUoKSA9PSBJREJLZXk6Ok51bWJlclR5cGUpCisgICAg
ICAgIG9iamVjdFN0b3JlLT51cGRhdGVLZXlHZW5lcmF0b3Ioa2V5LmdldCgpLCAha2V5V2FzR2Vu
ZXJhdGVkKTsKKworICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKGtleS5yZWxlYXNlKCkpOwogfQog
CiB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0ZUZ1bmN0aW9uKFBhc3NSZWZQ
dHI8SURCS2V5UmFuZ2U+IHBycEtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJw
Q2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBF
eGNlcHRpb25Db2RlJiBlYykKQEAgLTY1NywxOCArNjQ1LDIwIEBAIHZvaWQgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6YWRkSW5kZXhUb01hcChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFz
c1JlZlB0CiAgICAgb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5zZXQoaW5kZXhQdHItPm5hbWUoKSwg
aW5kZXhQdHIpOwogfQogCi1QYXNzUmVmUHRyPElEQktleT4gSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6Z2VuQXV0b0luY3JlbWVudEtleSgpCitQYXNzUmVmUHRyPElEQktleT4gSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6Z2VuZXJhdGVLZXkoKQogewogICAgIGNvbnN0IGludDY0X3Qga01h
eEdlbmVyYXRvclZhbHVlID0gOTAwNzE5OTI1NDc0MDk5MkxMOyAvLyBNYXhpbXVtIGludGVnZXIg
c3RvcmFibGUgYXMgRUNNQVNjcmlwdCBudW1iZXIuCi0gICAgaWYgKG1fYXV0b0luY3JlbWVudE51
bWJlciA+IGtNYXhHZW5lcmF0b3JWYWx1ZSkKKyAgICBpbnQ2NF90IGN1cnJlbnROdW1iZXIgPSBi
YWNraW5nU3RvcmUoKS0+Z2V0S2V5R2VuZXJhdG9yU3RhdGUoZGF0YWJhc2VJZCgpLCBpZCgpKTsK
KyAgICBpZiAoY3VycmVudE51bWJlciA8IDAgfHwgY3VycmVudE51bWJlciA+IGtNYXhHZW5lcmF0
b3JWYWx1ZSkKICAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlSW52YWxpZCgpOwotICAgIGlm
IChtX2F1dG9JbmNyZW1lbnROdW1iZXIgPiAwKQotICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVh
dGVOdW1iZXIobV9hdXRvSW5jcmVtZW50TnVtYmVyKyspOwogCi0gICAgbV9hdXRvSW5jcmVtZW50
TnVtYmVyID0gYmFja2luZ1N0b3JlKCktPm5leHRBdXRvSW5jcmVtZW50TnVtYmVyKGRhdGFiYXNl
SWQoKSwgaWQoKSk7Ci0gICAgaWYgKG1fYXV0b0luY3JlbWVudE51bWJlciA+IGtNYXhHZW5lcmF0
b3JWYWx1ZSkKLSAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlSW52YWxpZCgpOwotICAgIHJl
dHVybiBJREJLZXk6OmNyZWF0ZU51bWJlcihtX2F1dG9JbmNyZW1lbnROdW1iZXIrKyk7CisgICAg
cmV0dXJuIElEQktleTo6Y3JlYXRlTnVtYmVyKGN1cnJlbnROdW1iZXIpOworfQorCit2b2lkIElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnVwZGF0ZUtleUdlbmVyYXRvcihjb25zdCBJREJLZXkq
IGtleSwgYm9vbCBjaGVja0N1cnJlbnQpCit7CisgICAgQVNTRVJUKGtleSAmJiBrZXktPnR5cGUo
KSA9PSBJREJLZXk6Ok51bWJlclR5cGUpOworICAgIGJhY2tpbmdTdG9yZSgpLT5tYXliZVVwZGF0
ZUtleUdlbmVyYXRvclN0YXRlKGRhdGFiYXNlSWQoKSwgaWQoKSwgc3RhdGljX2Nhc3Q8aW50NjRf
dD4oZmxvb3Ioa2V5LT5udW1iZXIoKSkpICsgMSwgY2hlY2tDdXJyZW50KTsKIH0KIAogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsLmgKaW5kZXggMWM3NDViNTkzZGZiNDA3ZGMzNTBlMjI5ZWNmMTMwYjBj
NTM2NjdhNi4uYTM3YzY3ZTdmNjgyMjYxYzMwMzQwM2VlMDM1OTU3MmVkOWQyOGYzNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVj
dFN0b3JlQmFja2VuZEltcGwuaApAQCAtODksOCArODksOCBAQCBwcml2YXRlOgogICAgIElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGwoY29uc3QgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCosIGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgYXV0b0luY3JlbWVudCk7CiAK
ICAgICB2b2lkIGxvYWRJbmRleGVzKCk7Ci0gICAgUGFzc1JlZlB0cjxJREJLZXk+IGdlbkF1dG9J
bmNyZW1lbnRLZXkoKTsKLSAgICB2b2lkIHJlc2V0QXV0b0luY3JlbWVudEtleUNhY2hlKCkgeyBt
X2F1dG9JbmNyZW1lbnROdW1iZXIgPSAtMTsgfQorICAgIFBhc3NSZWZQdHI8SURCS2V5PiBnZW5l
cmF0ZUtleSgpOworICAgIHZvaWQgdXBkYXRlS2V5R2VuZXJhdG9yKGNvbnN0IElEQktleSosIGJv
b2wgY2hlY2tDdXJyZW50KTsKIAogICAgIHN0YXRpYyB2b2lkIGdldEludGVybmFsKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQ
YXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKICAgICBz
dGF0aWMgdm9pZCBwdXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0
cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIFB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+LCBQYXNzT3du
UHRyPFZlY3RvcjxTdHJpbmc+ID4gcG9wSW5kZXhOYW1lcywgUGFzc093blB0cjxWZWN0b3I8SW5k
ZXhLZXlzPiA+KTsKQEAgLTEwNCw3ICsxMDQsNiBAQCBwcml2YXRlOgogICAgIC8vIFRoZXNlIGFy
ZSB1c2VkIGFzIHNldFZlcnNpb24gdHJhbnNhY3Rpb24gYWJvcnQgdGFza3MuCiAgICAgc3RhdGlj
IHZvaWQgcmVtb3ZlSW5kZXhGcm9tTWFwKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVm
UHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2Vu
ZEltcGw+KTsKICAgICBzdGF0aWMgdm9pZCBhZGRJbmRleFRvTWFwKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRy
PElEQkluZGV4QmFja2VuZEltcGw+KTsKLSAgICBzdGF0aWMgdm9pZCByZXZlcnRBdXRvSW5jcmVt
ZW50S2V5Q2FjaGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbD4pOwogCiAgICAgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJh
Y2tpbmdTdG9yZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YWJhc2UtPmJhY2tpbmdTdG9yZSgpOyB9
CiAgICAgaW50NjRfdCBkYXRhYmFzZUlkKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhYmFzZS0+aWQo
KTsgfQpAQCAtMTE3LDcgKzExNiw2IEBAIHByaXZhdGU6CiAKICAgICB0eXBlZGVmIEhhc2hNYXA8
U3RyaW5nLCBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gPiBJbmRleE1hcDsKICAgICBJbmRl
eE1hcCBtX2luZGV4ZXM7Ci0gICAgaW50NjRfdCBtX2F1dG9JbmNyZW1lbnROdW1iZXI7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0lEQkZha2VCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvSURCRmFrZUJhY2tpbmdTdG9yZS5oCmluZGV4IGVkODk0Y2IxOWZlMWQxNWFiOTlkZDU2
MWQ3NjJkM2YyNDQ4YWY5YTAuLjdkN2UwZjk2YTFhZDkxMGI4NTM0NmI1YjhkZTg1N2NhOTg4ZGM1
MzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCRmFrZUJhY2tp
bmdTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCRmFrZUJhY2tp
bmdTdG9yZS5oCkBAIC00OCw3ICs0OCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgcHV0
T2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGNvbnN0IElEQktleSYsIGNvbnN0IFN0cmluZyYgdmFsdWUsIE9iamVjdFN0b3JlUmVjb3Jk
SWRlbnRpZmllciopIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCB2b2lk
IGNsZWFyT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQpIE9WRVJSSURFIHsgfQogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9yZVJlY29y
ZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgT2JqZWN0
U3RvcmVSZWNvcmRJZGVudGlmaWVyKikgT1ZFUlJJREUgeyB9Ci0gICAgdmlydHVhbCBpbnQ2NF90
IG5leHRBdXRvSW5jcmVtZW50TnVtYmVyKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkKSBPVkVSUklERSB7IHJldHVybiAwLjA7IH0KKyAgICB2aXJ0dWFsIGludDY0X3Qg
Z2V0S2V5R2VuZXJhdG9yU3RhdGUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQpIE9WRVJSSURFIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGJvb2wgbWF5YmVVcGRh
dGVLZXlHZW5lcmF0b3JTdGF0ZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgaW50NjRfdCBuZXdTdGF0ZSwgYm9vbCBjaGVja0N1cnJlbnQpIE9WRVJSSURFIHsgcmV0
dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luT2JqZWN0U3RvcmUoaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIE9i
amVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciogZm91bmRSZWNvcmRJZGVudGlmaWVyKSBPVkVSUklE
RSB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgdmlydHVhbCBib29sIGZvckVhY2hPYmplY3RTdG9y
ZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgT2JqZWN0
U3RvcmVSZWNvcmRDYWxsYmFjayYpIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXgg
MDc5NGM5Y2U4MDkwNWZhNmQ1ZjZhMDVhZjFmYjdlYzUyN2ViMGE5Ny4uMDhhNjRiYjdkMDljODMz
OWQzZmQ3MTU4MTA5MGMwNDY3NTJmZDM5NiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDEyLTA3
LTE3ICBKb3NodWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhl
ZERCOiBLZXkgZ2VuZXJhdG9yIHN0YXRlIG5vdCBtYWludGFpbmVkIGFjcm9zcyBjb25uZWN0aW9u
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE0NTYK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBr
ZXkgZ2VuZXJhdG9yIHRlc3QgY2FzZSB0aGF0IHNwYW5zIGRhdGFiYXNlIGNvbm5lY3Rpb25zLgor
CisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIva2V5LWdlbmVyYXRvci1leHBlY3RlZC50eHQ6
CisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvcmVzb3VyY2VzL2tleS1nZW5lcmF0b3IuanM6
CisgICAgICAgICh0ZXN0QWNyb3NzQ29ubmVjdGlvbnMucmVxdWVzdC5vbnN1Y2Nlc3MucmVxdWVz
dC5vbnN1Y2Nlc3MucmVxdWVzdC5vbnN1Y2Nlc3MpOgorICAgICAgICAodGVzdEFjcm9zc0Nvbm5l
Y3Rpb25zLnJlcXVlc3Qub25zdWNjZXNzLnJlcXVlc3Qub25zdWNjZXNzKToKKyAgICAgICAgKHRl
c3RBY3Jvc3NDb25uZWN0aW9ucy5yZXF1ZXN0Lm9uc3VjY2Vzcyk6CisgICAgICAgICh0ZXN0QWNy
b3NzQ29ubmVjdGlvbnMuZG9GaXJzdFdyaXRlLnJlcXVlc3Qub25zdWNjZXNzKToKKyAgICAgICAg
KHRlc3RBY3Jvc3NDb25uZWN0aW9ucy5kb0ZpcnN0V3JpdGUpOgorICAgICAgICAodGVzdEFjcm9z
c0Nvbm5lY3Rpb25zLmNsb3NlQW5kUmVvcGVuLnJlcXVlc3Qub25zdWNjZXNzKToKKyAgICAgICAg
KHRlc3RBY3Jvc3NDb25uZWN0aW9ucy5jbG9zZUFuZFJlb3Blbik6CisgICAgICAgICh0ZXN0QWNy
b3NzQ29ubmVjdGlvbnMuZG9TZWNvbmRXcml0ZS5yZXF1ZXN0Lm9uc3VjY2Vzcyk6CisgICAgICAg
ICh0ZXN0QWNyb3NzQ29ubmVjdGlvbnMuZG9TZWNvbmRXcml0ZS50cmFucy5vbmNvbXBsZXRlKToK
KyAgICAgICAgKHRlc3RBY3Jvc3NDb25uZWN0aW9ucy5kb1NlY29uZFdyaXRlKToKKwogMjAxMi0w
Ny0xNiAgw4Fkw6FtIEthbGxhaSAgPGthZGFtQGluZi51LXN6ZWdlZC5odT4KIAogICAgICAgICBb
UXRdIHBsYXRmcm9tL3F0L2VkaXRpbmcvaW5zZXJ0aW5nIHRlc3RzIG5lZWRzIHVwZGF0ZSBhZnRl
ciB0ZXN0IGZvbnQgY2hhbmdlLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRl
eGVkZGIva2V5LWdlbmVyYXRvci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2lu
ZGV4ZWRkYi9rZXktZ2VuZXJhdG9yLWV4cGVjdGVkLnR4dAppbmRleCA5ZGU2YmI1N2E3NTVlMWQ4
ZThlYzBiMTFlYTVmNzRmOTI1NjMzMTJlLi41MmZjYzcyODY2YWE2YmY4MzQ5YTBkODU5NjAzODQz
MmI0YjVlMTg1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9rZXkt
Z2VuZXJhdG9yLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRk
Yi9rZXktZ2VuZXJhdG9yLWV4cGVjdGVkLnR4dApAQCAtMTY3LDYgKzE2NywyNiBAQCBQQVNTIGV2
ZW50LnRhcmdldC5lcnJvci5uYW1lIGlzICdEYXRhRXJyb3InCiBldmVudC5wcmV2ZW50RGVmYXVs
dCgpCiBQQVNTIEdvdCAiZCIgZm9yIGtleTogMgogZGIuY2xvc2UoKQorCitFbnN1cmUga2V5IGdl
bmVyYXRvciBzdGF0ZSBpcyBtYWludGFpbmVkIGFjcm9zcyBjb25uZWN0aW9uczoKK2luZGV4ZWRE
Qi5kZWxldGVEYXRhYmFzZSgna2V5LWdlbmVyYXRvcicpCityZXF1ZXN0ID0gaW5kZXhlZERCLm9w
ZW4oJ2tleS1nZW5lcmF0b3InKQorZGIgPSByZXF1ZXN0LnJlc3VsdAorZGIuc2V0VmVyc2lvbign
MScpCitkYi5jcmVhdGVPYmplY3RTdG9yZSgnc3RvcmUnLCB7YXV0b0luY3JlbWVudDogdHJ1ZX0p
CisKK3RyYW5zID0gZGIudHJhbnNhY3Rpb24oJ3N0b3JlJywgJ3JlYWR3cml0ZScpCityZXF1ZXN0
ID0gdHJhbnMub2JqZWN0U3RvcmUoJ3N0b3JlJykucHV0KCd2YWx1ZTEnKQorUEFTUyByZXF1ZXN0
LnJlc3VsdCBpcyAxCit0cmFucy5vYmplY3RTdG9yZSgnc3RvcmUnKS5jbGVhcigpCitkYi5jbG9z
ZSgpCisKK3JlcXVlc3QgPSBpbmRleGVkREIub3Blbigna2V5LWdlbmVyYXRvcicpCitkYiA9IHJl
cXVlc3QucmVzdWx0Cit0cmFucyA9IGRiLnRyYW5zYWN0aW9uKCdzdG9yZScsICdyZWFkd3JpdGUn
KQorcmVxdWVzdCA9IHRyYW5zLm9iamVjdFN0b3JlKCdzdG9yZScpLnB1dCgndmFsdWUyJykKK1BB
U1MgcmVxdWVzdC5yZXN1bHQgaXMgMgorCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVl
CiAKIFRFU1QgQ09NUExFVEUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhl
ZGRiL3Jlc291cmNlcy9rZXktZ2VuZXJhdG9yLmpzIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRl
eGVkZGIvcmVzb3VyY2VzL2tleS1nZW5lcmF0b3IuanMKaW5kZXggODZhMTllYTcxOGY1MjQzMzUw
ZjRkNTM4NDYwNmZhMzMyZjljOWI5ZC4uNDVkOGFiZDUzYjQ2YmExNDBhMzViNTkzNzhjODdlZGY0
OGExMjIyOCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvcmVzb3Vy
Y2VzL2tleS1nZW5lcmF0b3IuanMKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIv
cmVzb3VyY2VzL2tleS1nZW5lcmF0b3IuanMKQEAgLTI3LDcgKzI3LDcgQEAgZnVuY3Rpb24gcnVu
VGVzdHMoKSB7CiAKICAgICBmdW5jdGlvbiBuZXh0VGVzdCgpIHsKICAgICAgICAgaWYgKCF0ZXN0
cy5sZW5ndGgpIHsKLSAgICAgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgICAgICAgICAgdGVz
dEFjcm9zc0Nvbm5lY3Rpb25zKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApA
QCAtMjI5LDQgKzIyOSw2NCBAQCBkZWZpbmVUZXN0KAogICAgIH0KICk7CiAKK2Z1bmN0aW9uIHRl
c3RBY3Jvc3NDb25uZWN0aW9ucygpCit7CisgICAgZGVidWcoIiIpOworICAgIGRlYnVnKCJFbnN1
cmUga2V5IGdlbmVyYXRvciBzdGF0ZSBpcyBtYWludGFpbmVkIGFjcm9zcyBjb25uZWN0aW9uczoi
KTsKKyAgICByZXF1ZXN0ID0gZXZhbEFuZExvZygiaW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlKCdr
ZXktZ2VuZXJhdG9yJykiKTsKKyAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JD
YWxsYmFjazsKKyAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ZXZhbEFuZExvZygicmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKCdrZXktZ2VuZXJhdG9yJykiKTsK
KyAgICAgICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7CisgICAg
ICAgIHJlcXVlc3Qub25zdWNjZXNzID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgZXZhbEFu
ZExvZygiZGIgPSByZXF1ZXN0LnJlc3VsdCIpOworICAgICAgICAgICAgcmVxdWVzdCA9IGV2YWxB
bmRMb2coImRiLnNldFZlcnNpb24oJzEnKSIpOworICAgICAgICAgICAgcmVxdWVzdC5vbmVycm9y
ID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7CisgICAgICAgICAgICByZXF1ZXN0Lm9uc3VjY2Vz
cyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICB0cmFucyA9IHJlcXVlc3QucmVzdWx0
OworICAgICAgICAgICAgICAgIHRyYW5zLm9uYWJvcnQgPSB1bmV4cGVjdGVkQWJvcnRDYWxsYmFj
azsKKyAgICAgICAgICAgICAgICBldmFsQW5kTG9nKCJkYi5jcmVhdGVPYmplY3RTdG9yZSgnc3Rv
cmUnLCB7YXV0b0luY3JlbWVudDogdHJ1ZX0pIik7CisgICAgICAgICAgICAgICAgdHJhbnMub25j
b21wbGV0ZSA9IGRvRmlyc3RXcml0ZTsKKyAgICAgICAgICAgIH07CisgICAgICAgIH07CisgICAg
fTsKKworICAgIGZ1bmN0aW9uIGRvRmlyc3RXcml0ZSgpIHsKKyAgICAgICAgZGVidWcoIiIpOwor
ICAgICAgICBldmFsQW5kTG9nKCJ0cmFucyA9IGRiLnRyYW5zYWN0aW9uKCdzdG9yZScsICdyZWFk
d3JpdGUnKSIpOworICAgICAgICB0cmFucy5vbmFib3J0ID0gdW5leHBlY3RlZEFib3J0Q2FsbGJh
Y2s7CisgICAgICAgIGV2YWxBbmRMb2coInJlcXVlc3QgPSB0cmFucy5vYmplY3RTdG9yZSgnc3Rv
cmUnKS5wdXQoJ3ZhbHVlMScpIik7CisgICAgICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0
ZWRFcnJvckNhbGxiYWNrOworICAgICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGZ1bmN0aW9uKCkg
eworICAgICAgICAgICAgc2hvdWxkQmUoInJlcXVlc3QucmVzdWx0IiwgIjEiKTsKKyAgICAgICAg
ICAgIGV2YWxBbmRMb2coInRyYW5zLm9iamVjdFN0b3JlKCdzdG9yZScpLmNsZWFyKCkiKTsKKyAg
ICAgICAgfTsKKyAgICAgICAgdHJhbnMub25jb21wbGV0ZSA9IGNsb3NlQW5kUmVvcGVuOworICAg
IH0KKworICAgIGZ1bmN0aW9uIGNsb3NlQW5kUmVvcGVuKCkgeworICAgICAgICBldmFsQW5kTG9n
KCJkYi5jbG9zZSgpIik7CisgICAgICAgIGRlYnVnKCIiKTsKKyAgICAgICAgZXZhbEFuZExvZygi
cmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKCdrZXktZ2VuZXJhdG9yJykiKTsKKyAgICAgICAgcmVx
dWVzdC5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBldmFsQW5kTG9nKCJk
YiA9IHJlcXVlc3QucmVzdWx0Iik7CisgICAgICAgICAgICBkb1NlY29uZFdyaXRlKCk7CisgICAg
ICAgIH07CisgICAgfQorCisgICAgZnVuY3Rpb24gZG9TZWNvbmRXcml0ZSgpIHsKKyAgICAgICAg
ZXZhbEFuZExvZygidHJhbnMgPSBkYi50cmFuc2FjdGlvbignc3RvcmUnLCAncmVhZHdyaXRlJyki
KTsKKyAgICAgICAgdHJhbnMub25hYm9ydCA9IHVuZXhwZWN0ZWRBYm9ydENhbGxiYWNrOworICAg
ICAgICBldmFsQW5kTG9nKCJyZXF1ZXN0ID0gdHJhbnMub2JqZWN0U3RvcmUoJ3N0b3JlJykucHV0
KCd2YWx1ZTInKSIpOworICAgICAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JD
YWxsYmFjazsKKyAgICAgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSBmdW5jdGlvbigpIHsKKyAgICAg
ICAgICAgIHNob3VsZEJlKCJyZXF1ZXN0LnJlc3VsdCIsICIyIik7CisgICAgICAgIH07CisgICAg
ICAgIHRyYW5zLm9uY29tcGxldGUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGRlYnVnKCIi
KTsKKyAgICAgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgICAgICB9OworICAgIH07Cit9CisK
IHRlc3QoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152854</attachid>
            <date>2012-07-17 15:41:13 -0700</date>
            <delta_ts>2012-07-17 16:28:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91456-20120717154112.patch</filename>
            <type>text/plain</type>
            <size>31404</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyODMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTFjMzNhZjAyNzQ3ODdk
NGJiMzJjZWM1YWQ1OTExMDdhNTY1NmNhMS4uYmI0YTk3M2U2MjdkM2ExYjM1ZDRjMjNlZmIzMDI1
MTQxYjg3ZDBiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDEyLTA3LTE3ICBKb3No
dWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBLZXkg
Z2VuZXJhdG9yIHN0YXRlIG5vdCBtYWludGFpbmVkIGFjcm9zcyBjb25uZWN0aW9ucworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE0NTYKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFeHBsaWNpdGx5IHN0b3Jl
IGtleSBnZW5lcmF0b3Igc3RhdGUgZm9yIGVhY2ggb2JqZWN0IHN0b3JlIGluIHRoZSBiYWNraW5n
IHN0b3JlLAorICAgICAgICByYXRoZXIgdGhhbiBkZXJpdmluZyBpdCBmcm9tIHRoZSBtYXhpbXVt
IGtleSBpbiB0aGUgZGF0YSAod2hpY2ggdmlvbGF0ZXMgdGhlIHNwZWMKKyAgICAgICAgaWYgZGF0
YSBpcyBkZWxldGVkKS4KKworICAgICAgICBUaGlzIGNoYW5nZSBlbGltaW5hdGVzIGEgKGZyYWdp
bGUpIHBlci1zdG9yZSBjYWNoZSBvZiB0aGUgdmFsdWUgdG8gc2ltcGxpZnkgdGhlCisgICAgICAg
IGNvZGUuIEEgY2FjaGUgY291bGQgYmUgcmUtaW50cm9kdWNlZCwgcmVxdWlyaW5nIGFuICJvbmJl
Zm9yZWNvbW1pdCIgaG9vayBmb3IKKyAgICAgICAgb2JqZWN0IHN0b3JlcywgYnV0IGl0IHNlZW1z
IGNsZWFuZXIgdG8gc2F2ZSB0aGF0IGZvciBhIGZvbGxvdy11cCBwYXRjaC4KKworICAgICAgICBU
ZXN0OiBzdG9yYWdlL2luZGV4ZWRkYi9rZXktZ2VuZXJhdG9yLmh0bWwKKworICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oOiBOZXcgQVBJcyBmb3IgZ2V0dGluZy9z
ZXR0aW5nIGdlbmVyYXRvciBzdGF0ZXMuCisgICAgICAgIChJREJCYWNraW5nU3RvcmUpOgorICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0T2JqZWN0U3RvcmVzKTog
UmVhZCBnZW5lcmF0b3Igc3RhdGUgKGJ1dCBjdXJyZW50bHkgaWdub3JlZCkuCisgICAgICAgIChX
ZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVPYmplY3RTdG9yZSk6IFdyaXRl
IGdlbmVyYXRvciBzdGF0ZS4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjptYXliZVVwZGF0ZUtleUdl
bmVyYXRvckN1cnJlbnROdW1iZXIpOiBVcGRhdGUsIG9wdGlvbmFsbHkKKyAgICAgICAgY2hlY2tp
bmcgdG8gc2VlIGlmIHRoZSBuZXcgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIHRoZSBvbGQuIChJZiBj
YWxsZXIgZ290IHRoZSB2YWx1ZSB2aWEKKyAgICAgICAgZ2V0S2V5R2VuZXJhdG9yQ3VycmVudE51
bWJlciBpdCBpcyBzYWZlIHRvIHNraXAgdGhlIGNoZWNrLikKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmg6CisgICAgICAgIChJREJMZXZlbERCQmFj
a2luZ1N0b3JlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQ29kaW5n
LmNwcDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQ29kaW5nLmg6Cisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsKTogRGl0Y2ggdGhlIGNhY2hlLgorICAgICAgICAoV2ViQ29yZTo6SURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0KTogTm8gbmVlZCBmb3IgYWJvcnQgdGFzay4KKyAg
ICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dFdpdGhJbmRleEtl
eXMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
OnB1dEludGVybmFsKTogVXNlIHRoZSBuZXdmYW5nbGVkIEFQSXMgYmVsb3cuCisgICAgICAgIChX
ZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpnZW5lcmF0ZUtleSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjp1cGRhdGVLZXlHZW5lcmF0b3Ip
OgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwu
aDoKKyAgICAgICAgKElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwpOgorCiAyMDEyLTA3LTE3ICBL
d2FuZyBZdWwgU2VvICA8c2t5dWxAY29tcGFueTEwMC5uZXQ+CiAKICAgICAgICAgImluIGJvZHki
IGluc2VydGlvbiBtb2RlLCAiYW55IG90aGVyIGVuZCB0YWciIHN0ZXAgMi4xIGlzIHVwZGF0ZWQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggODIyNzJiMWVkMTczNGE0ODcwNzc1NThhZjU4
YzU3NTcyZGQ3YzZmNy4uZjJjZTgxMDU5NDA3ZDA2Y2QyNDExZjFlOGIxZDAxYmM0YWFhYjViYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMi0wNy0xNyAg
Sm9zaHVhIEJlbGwgIDxqc2JlbGxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEluZGV4ZWREQjog
S2V5IGdlbmVyYXRvciBzdGF0ZSBub3QgbWFpbnRhaW5lZCBhY3Jvc3MgY29ubmVjdGlvbnMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxNDU2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHN0dWIgbWV0
aG9kIGltcGxlbWVudGF0aW9ucyB0byB0ZXN0IGNsYXNzLgorCisgICAgICAgICogdGVzdHMvSURC
RmFrZUJhY2tpbmdTdG9yZS5oOgorCiAyMDEyLTA3LTE2ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdl
YmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gUmVtb3ZlIHR3byBlbXB0eSBkaXJlY3Rv
cmllcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJh
Y2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2lu
Z1N0b3JlLmgKaW5kZXggZjc4NDA2MjFiNjFmMmMxNDE4Nzg5NjYzNmQ3NjVjYzg4MjI5ZmQwNS4u
NzhhOWY2NjdhZGQxMzBlNjNlM2MwNzQ2ZDRhNzAzYjQ4OTU0NmJkNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmgKQEAgLTY3LDcg
KzY3LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBwdXRPYmplY3RTdG9yZVJlY29yZChp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5Jiwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSwgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKikgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCBjbGVhck9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0
b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25z
dCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqKSA9IDA7Ci0gICAgdmlydHVhbCBpbnQ2NF90
IG5leHRBdXRvSW5jcmVtZW50TnVtYmVyKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkKSA9IDA7CisgICAgdmlydHVhbCBpbnQ2NF90IGdldEtleUdlbmVyYXRvckN1cnJl
bnROdW1iZXIoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpID0gMDsK
KyAgICB2aXJ0dWFsIGJvb2wgbWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IG5ld051bWJl
ciwgYm9vbCBjaGVja0N1cnJlbnQpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wga2V5RXhpc3RzSW5P
YmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29u
c3QgSURCS2V5JiwgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKiBmb3VuZFJlY29yZElkZW50
aWZpZXIpID0gMDsKIAogICAgIGNsYXNzIE9iamVjdFN0b3JlUmVjb3JkQ2FsbGJhY2sgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERC
QmFja2luZ1N0b3JlLmNwcAppbmRleCBhYjgyOTNmMGZhNDdjZWMwODU5MTFhNTU0NGVhYjEzYzU0
YTc0NDU5Li4yMjhiZjY4ZTBjNjUyMmEwOTQ3NWEzZjAyZTljMWUwNmVlYTQ4ZDRmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0
b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERC
QmFja2luZ1N0b3JlLmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRp
b25zLmg+CiAjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIklEQkZhY3RvcnlCYWNr
ZW5kSW1wbC5oIgorI2luY2x1ZGUgIklEQktleS5oIgogI2luY2x1ZGUgIklEQktleVBhdGguaCIK
ICNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgogI2luY2x1ZGUgIklEQkxldmVsREJDb2RpbmcuaCIK
QEAgLTQ2LDYgKzQ3LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2Ug
SURCTGV2ZWxEQkNvZGluZzsKIAorY29uc3QgaW50NjRfdCBrS2V5R2VuZXJhdG9ySW5pdGlhbE51
bWJlciA9IDE7IC8vIEZyb20gdGhlIEluZGV4ZWREQiBzcGVjaWZpY2F0aW9uLgorCiB0ZW1wbGF0
ZSA8dHlwZW5hbWUgREJPclRyYW5zYWN0aW9uPgogc3RhdGljIGJvb2wgZ2V0Qm9vbChEQk9yVHJh
bnNhY3Rpb24qIGRiLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGtleSwgYm9vbCYgZm91bmRCb29sKQog
ewpAQCAtNDE0LDYgKzQxNywxNSBAQCB2b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldE9i
amVjdFN0b3JlcyhpbnQ2NF90IGRhdGFiYXNlSWQsIFZlY3RvcjxpbnQ2NF90PgogICAgICAgICAg
ICAgaXQtPm5leHQoKTsKICAgICAgICAgfQogCisgICAgICAgIGludDY0X3Qga2V5R2VuZXJhdG9y
Q3VycmVudE51bWJlciA9IC0xOworICAgICAgICBpZiAoY2hlY2tPYmplY3RTdG9yZUFuZE1ldGFE
YXRhVHlwZShpdC5nZXQoKSwgc3RvcEtleSwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRh
RGF0YUtleTo6a0tleUdlbmVyYXRvckN1cnJlbnROdW1iZXIpKSB7CisgICAgICAgICAgICBrZXlH
ZW5lcmF0b3JDdXJyZW50TnVtYmVyID0gZGVjb2RlSW50KGl0LT52YWx1ZSgpLmJlZ2luKCksIGl0
LT52YWx1ZSgpLmVuZCgpKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBSZXR1cm4ga2V5R2VuZXJh
dG9yQ3VycmVudE51bWJlciwgY2FjaGUgaW4gb2JqZWN0IHN0b3JlLCBhbmQgd3JpdGUgbGF6aWx5
IHRvIGJhY2tpbmcgc3RvcmUuCisgICAgICAgICAgICAvLyBGb3Igbm93LCBqdXN0IGFzc2VydCB0
aGF0IGlmIGl0IHdhcyB3cml0dGVuIGl0IHdhcyB2YWxpZC4KKyAgICAgICAgICAgIEFTU0VSVChr
ZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyID49IGtLZXlHZW5lcmF0b3JJbml0aWFsTnVtYmVyKTsK
KyAgICAgICAgICAgIGl0LT5uZXh0KCk7CisgICAgICAgIH0KKwogICAgICAgICBmb3VuZElkcy5h
cHBlbmQob2JqZWN0U3RvcmVJZCk7CiAgICAgICAgIGZvdW5kTmFtZXMuYXBwZW5kKG9iamVjdFN0
b3JlTmFtZSk7CiAgICAgICAgIGZvdW5kS2V5UGF0aHMuYXBwZW5kKGtleVBhdGgpOwpAQCAtNDUx
LDYgKzQ2Myw3IEBAIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlT2JqZWN0U3Rv
cmUoaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmCiAgICAgY29uc3QgVmVjdG9yPGNo
YXI+IGxhc3RWZXJzaW9uS2V5ID0gT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFi
YXNlSWQsIG9iamVjdFN0b3JlSWQsIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmtMYXN0VmVyc2lv
bik7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IG1heEluZGV4SWRLZXkgPSBPYmplY3RTdG9yZU1l
dGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVN
ZXRhRGF0YUtleTo6a01heEluZGV4SWQpOwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBoYXNLZXlQ
YXRoS2V5ICA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmpl
Y3RTdG9yZUlkLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjprSGFzS2V5UGF0aCk7CisgICAgY29u
c3QgVmVjdG9yPGNoYXI+IGtleUdlbmVyYXRvckN1cnJlbnROdW1iZXJLZXkgPSBPYmplY3RTdG9y
ZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3Rv
cmVNZXRhRGF0YUtleTo6a0tleUdlbmVyYXRvckN1cnJlbnROdW1iZXIpOwogICAgIGNvbnN0IFZl
Y3RvcjxjaGFyPiBuYW1lc0tleSA9IE9iamVjdFN0b3JlTmFtZXNLZXk6OmVuY29kZShkYXRhYmFz
ZUlkLCBuYW1lKTsKIAogICAgIGJvb2wgb2sgPSBwdXRTdHJpbmcobV9jdXJyZW50VHJhbnNhY3Rp
b24uZ2V0KCksIG5hbWVLZXksIG5hbWUpOwpAQCAtNDk1LDYgKzUwOCwxMiBAQCBib29sIElEQkxl
dmVsREJCYWNraW5nU3RvcmU6OmNyZWF0ZU9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwg
Y29uc3QgU3RyaW5nJgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCisgICAgb2sgPSBw
dXRJbnQobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGtleUdlbmVyYXRvckN1cnJlbnROdW1i
ZXJLZXksIGtLZXlHZW5lcmF0b3JJbml0aWFsTnVtYmVyKTsKKyAgICBpZiAoIW9rKSB7CisgICAg
ICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKwogICAgIG9rID0gcHV0SW50KG1fY3VycmVudFRyYW5zYWN0aW9u
LmdldCgpLCBuYW1lc0tleSwgb2JqZWN0U3RvcmVJZCk7CiAgICAgaWYgKCFvaykgewogICAgICAg
ICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7CkBAIC02MzQsMzUgKzY1
Myw2NiBAQCB2b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZU9iamVjdFN0b3JlUmVj
b3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdAogICAgIG1fY3VycmVudFRyYW5zYWN0aW9u
LT5yZW1vdmUoZXhpc3RzRW50cnlLZXkpOwogfQogCi1pbnQ2NF90IElEQkxldmVsREJCYWNraW5n
U3RvcmU6Om5leHRBdXRvSW5jcmVtZW50TnVtYmVyKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkKQorCitpbnQ2NF90IElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldEtl
eUdlbmVyYXRvckN1cnJlbnROdW1iZXIoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQpCiB7CiAgICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKLSAgICBjb25z
dCBWZWN0b3I8Y2hhcj4gc3RhcnRLZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShkYXRh
YmFzZUlkLCBvYmplY3RTdG9yZUlkLCBtaW5JREJLZXkoKSk7Ci0gICAgY29uc3QgVmVjdG9yPGNo
YXI+IHN0b3BLZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmpl
Y3RTdG9yZUlkLCBtYXhJREJLZXkoKSk7CiAKLSAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBp
dCA9IG1fY3VycmVudFRyYW5zYWN0aW9uLT5jcmVhdGVJdGVyYXRvcigpOworICAgIGNvbnN0IFZl
Y3RvcjxjaGFyPiBrZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyS2V5ID0gT2JqZWN0U3RvcmVNZXRh
RGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIE9iamVjdFN0b3JlTWV0
YURhdGFLZXk6OmtLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKTsKIAotICAgIGludDY0X3QgbWF4
TnVtZXJpY0tleSA9IDA7CisgICAgaW50NjRfdCBrZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyID0g
LTE7CisgICAgVmVjdG9yPGNoYXI+IGRhdGE7CisKKyAgICBpZiAobV9jdXJyZW50VHJhbnNhY3Rp
b24tPmdldChrZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyS2V5LCBkYXRhKSkKKyAgICAgICAga2V5
R2VuZXJhdG9yQ3VycmVudE51bWJlciA9IGRlY29kZUludChkYXRhLmJlZ2luKCksIGRhdGEuZW5k
KCkpOworICAgIGVsc2UgeworICAgICAgICAvLyBQcmV2aW91c2x5LCB0aGUga2V5IGdlbmVyYXRv
ciBzdGF0ZSB3YXMgbm90IHN0b3JlZCBleHBsaWNpdGx5IGJ1dCBkZXJpdmVkIGZyb20gdGhlCisg
ICAgICAgIC8vIG1heGltdW0gbnVtZXJpYyBrZXkgcHJlc2VudCBpbiBleGlzdGluZyBkYXRhLiBU
aGlzIHZpb2xhdGVzIHRoZSBzcGVjIGFzIHRoZSBkYXRhIG1heQorICAgICAgICAvLyBiZSBjbGVh
cmVkIGJ1dCB0aGUga2V5IGdlbmVyYXRvciBzdGF0ZSBtdXN0IGJlIHByZXNlcnZlZC4KKyAgICAg
ICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0YXJ0S2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNv
ZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgbWluSURCS2V5KCkpOworICAgICAgICBjb25z
dCBWZWN0b3I8Y2hhcj4gc3RvcEtleSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFi
YXNlSWQsIG9iamVjdFN0b3JlSWQsIG1heElEQktleSgpKTsKKworICAgICAgICBPd25QdHI8TGV2
ZWxEQkl0ZXJhdG9yPiBpdCA9IG1fY3VycmVudFRyYW5zYWN0aW9uLT5jcmVhdGVJdGVyYXRvcigp
OworICAgICAgICBpbnQ2NF90IG1heE51bWVyaWNLZXkgPSAwOworCisgICAgICAgIGZvciAoaXQt
PnNlZWsoc3RhcnRLZXkpOyBpdC0+aXNWYWxpZCgpICYmIGNvbXBhcmVLZXlzKGl0LT5rZXkoKSwg
c3RvcEtleSkgPCAwOyBpdC0+bmV4dCgpKSB7CisgICAgICAgICAgICBjb25zdCBjaGFyICpwID0g
aXQtPmtleSgpLmJlZ2luKCk7CisgICAgICAgICAgICBjb25zdCBjaGFyICpsaW1pdCA9IGl0LT5r
ZXkoKS5lbmQoKTsKKworICAgICAgICAgICAgT2JqZWN0U3RvcmVEYXRhS2V5IGRhdGFLZXk7Cisg
ICAgICAgICAgICBwID0gT2JqZWN0U3RvcmVEYXRhS2V5OjpkZWNvZGUocCwgbGltaXQsICZkYXRh
S2V5KTsKKyAgICAgICAgICAgIEFTU0VSVChwKTsKKworICAgICAgICAgICAgaWYgKGRhdGFLZXku
dXNlcktleSgpLT50eXBlKCkgPT0gSURCS2V5OjpOdW1iZXJUeXBlKSB7CisgICAgICAgICAgICAg
ICAgaW50NjRfdCBuID0gc3RhdGljX2Nhc3Q8aW50NjRfdD4oZGF0YUtleS51c2VyS2V5KCktPm51
bWJlcigpKTsKKyAgICAgICAgICAgICAgICBpZiAobiA+IG1heE51bWVyaWNLZXkpCisgICAgICAg
ICAgICAgICAgICAgIG1heE51bWVyaWNLZXkgPSBuOworICAgICAgICAgICAgfQorICAgICAgICB9
CiAKLSAgICAvLyBGSVhNRTogVGhpcyBkb2VzIGEgZm9yd2FyZCBzY2FuIG92ZXIgYWxsIGtleXMu
IEltcHJvdmUgaXQuCi0gICAgLy8gU2luY2UgYWxsIGRhdGVzID4gYWxsIG51bWJlcnMsIGNyZWF0
ZSBEYXRlKC1JbmZpbml0eSkgYW5kIHNlZWsgYmFja3dhcmRzLgorICAgICAgICBrZXlHZW5lcmF0
b3JDdXJyZW50TnVtYmVyID0gbWF4TnVtZXJpY0tleSArIDE7CisgICAgfQogCi0gICAgZm9yIChp
dC0+c2VlayhzdGFydEtleSk7IGl0LT5pc1ZhbGlkKCkgJiYgY29tcGFyZUtleXMoaXQtPmtleSgp
LCBzdG9wS2V5KSA8IDA7IGl0LT5uZXh0KCkpIHsKLSAgICAgICAgY29uc3QgY2hhciAqcCA9IGl0
LT5rZXkoKS5iZWdpbigpOwotICAgICAgICBjb25zdCBjaGFyICpsaW1pdCA9IGl0LT5rZXkoKS5l
bmQoKTsKKyAgICByZXR1cm4ga2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcjsKK30KIAotICAgICAg
ICBPYmplY3RTdG9yZURhdGFLZXkgZGF0YUtleTsKLSAgICAgICAgcCA9IE9iamVjdFN0b3JlRGF0
YUtleTo6ZGVjb2RlKHAsIGxpbWl0LCAmZGF0YUtleSk7Ci0gICAgICAgIEFTU0VSVChwKTsKK2Jv
b2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6bWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JDdXJyZW50
TnVtYmVyKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90
IG5ld051bWJlciwgYm9vbCBjaGVja0N1cnJlbnQpCit7CisgICAgQVNTRVJUKG1fY3VycmVudFRy
YW5zYWN0aW9uKTsKIAotICAgICAgICBpZiAoZGF0YUtleS51c2VyS2V5KCktPnR5cGUoKSA9PSBJ
REJLZXk6Ok51bWJlclR5cGUpIHsKLSAgICAgICAgICAgIGludDY0X3QgbiA9IHN0YXRpY19jYXN0
PGludDY0X3Q+KGRhdGFLZXkudXNlcktleSgpLT5udW1iZXIoKSk7Ci0gICAgICAgICAgICBpZiAo
biA+IG1heE51bWVyaWNLZXkpCi0gICAgICAgICAgICAgICAgbWF4TnVtZXJpY0tleSA9IG47Ci0g
ICAgICAgIH0KKyAgICBpZiAoY2hlY2tDdXJyZW50KSB7CisgICAgICAgIGludDY0X3QgY3VycmVu
dE51bWJlciA9IGdldEtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIoZGF0YWJhc2VJZCwgb2JqZWN0
U3RvcmVJZCk7CisgICAgICAgIGlmIChuZXdOdW1iZXIgPD0gY3VycmVudE51bWJlcikKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHJldHVybiBtYXhOdW1lcmljS2V5ICsg
MTsKKyAgICBjb25zdCBWZWN0b3I8Y2hhcj4ga2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcktleSA9
IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlk
LCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjprS2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcik7Cisg
ICAgYm9vbCBvayA9IHB1dEludChtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwga2V5R2VuZXJh
dG9yQ3VycmVudE51bWJlcktleSwgbmV3TnVtYmVyKTsKKyAgICBpZiAoIW9rKSB7CisgICAgICAg
IExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBJREJMZXZlbERCQmFj
a2luZ1N0b3JlOjprZXlFeGlzdHNJbk9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmIGtleSwgT2JqZWN0U3RvcmVSZWNvcmRJ
ZGVudGlmaWVyKiBmb3VuZFJlY29yZElkZW50aWZpZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmgKaW5kZXgg
YTY1Zjk2M2U4NTA0MzI1ODRkOTdjNjgxOGRjOTRjMmM2NzUxNjY4OS4uYzVhOWUyZWUzMDllOGNh
M2ZkN2Y3MGYwYWEyYmI4MGNlYzA0NmIyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaApAQCAtNTgsNyAr
NTgsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHB1dE9iamVjdFN0b3JlUmVjb3JkKGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBj
b25zdCBTdHJpbmcmIHZhbHVlLCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqKTsKICAgICB2
aXJ0dWFsIHZvaWQgY2xlYXJPYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCk7CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlUmVjb3Jk
KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBPYmplY3RT
dG9yZVJlY29yZElkZW50aWZpZXIqKTsKLSAgICB2aXJ0dWFsIGludDY0X3QgbmV4dEF1dG9JbmNy
ZW1lbnROdW1iZXIoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpOwor
ICAgIHZpcnR1YWwgaW50NjRfdCBnZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKKyAgICB2aXJ0dWFsIGJvb2wgbWF5
YmVVcGRhdGVLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IG5ld1N0YXRlLCBib29sIGNoZWNrQ3VycmVudCk7
CiAgICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIE9iamVjdFN0b3JlUmVj
b3JkSWRlbnRpZmllciogZm91bmRSZWNvcmRJZGVudGlmaWVyKTsKIAogICAgIHZpcnR1YWwgYm9v
bCBmb3JFYWNoT2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIE9iamVjdFN0b3JlUmVjb3JkQ2FsbGJhY2smKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJDb2RpbmcuY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkNvZGluZy5jcHAKaW5kZXgg
MTgzNjM3NzIxZjBiMTI3M2ZmMDFmODdhMDIzMzZiMGY3MTJiYWZiNy4uMWZmNDVhMmZkMWQ5Mjg2
Y2UwMDNhYzAzZmVlZGY0MjM1Y2RjZWU5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkNvZGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkNvZGluZy5jcHAKQEAgLTczLDYgKzczLDcgQEAK
IC8vICAgICA8ZGF0YWJhc2UgaWQsIDAsIDAsIDUwLCBvYmplY3Qgc3RvcmUgaWQsIDQ+ID0+IGxh
c3QgInZlcnNpb24iIG51bWJlciBbT2JqZWN0U3RvcmVNZXRhRGF0YUtleV0KIC8vICAgICA8ZGF0
YWJhc2UgaWQsIDAsIDAsIDUwLCBvYmplY3Qgc3RvcmUgaWQsIDU+ID0+IG1heGltdW0gaW5kZXgg
aWQgZXZlciBhbGxvY2F0ZWQgW09iamVjdFN0b3JlTWV0YURhdGFLZXldCiAvLyAgICAgPGRhdGFi
YXNlIGlkLCAwLCAwLCA1MCwgb2JqZWN0IHN0b3JlIGlkLCA2PiA9PiBoYXMga2V5IHBhdGggKHZz
LiBudWxsKSBbT2JqZWN0U3RvcmVNZXRhRGF0YUtleV0KKy8vICAgICA8ZGF0YWJhc2UgaWQsIDAs
IDAsIDUwLCBvYmplY3Qgc3RvcmUgaWQsIDc+ID0+IGtleSBnZW5lcmF0b3IgY3VycmVudCBudW1i
ZXIgW09iamVjdFN0b3JlTWV0YURhdGFLZXldCiAvLwogLy8KIC8vIEluZGV4IG1ldGEtZGF0YToK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJD
b2RpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJDb2Rp
bmcuaAppbmRleCBjYzFmNzI3OGRlZmVjNmU0NjBkOTRjMTQyMTkyNmQxNDkxODYzOWQyLi5hMjNh
MjkyNzQ3OGZkNzIwMzIzYmVhODY4OGI4YjRmMTUyMDYyZDQyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQ29kaW5nLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkNvZGluZy5oCkBAIC0xNTUsNyAr
MTU1LDggQEAgcHVibGljOgogICAgICAgICBrRXZpY3RhYmxlID0gMywKICAgICAgICAga0xhc3RW
ZXJzaW9uID0gNCwKICAgICAgICAga01heEluZGV4SWQgPSA1LAotICAgICAgICBrSGFzS2V5UGF0
aCA9IDYKKyAgICAgICAga0hhc0tleVBhdGggPSA2LAorICAgICAgICBrS2V5R2VuZXJhdG9yQ3Vy
cmVudE51bWJlciA9IDcKICAgICB9OwogCiAgICAgT2JqZWN0U3RvcmVNZXRhRGF0YUtleSgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAppbmRleCA3MmU3MGFmNzdkMDcxM2IxNTA1NmUzNjg0
NzMxNmJmN2VjY2RhMzYwLi43ZmJjZjUzNGM5ODJmZWU0NjkwNzVjM2JhYTJiMThlNGZhMDJmN2Yx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcApAQCAtNTcsNyArNTcsNiBAQCBJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKGNvbnN0IElEQkRh
dGFiYXNlQmFja2VuZEltcAogICAgICwgbV9uYW1lKG5hbWUpCiAgICAgLCBtX2tleVBhdGgoa2V5
UGF0aCkKICAgICAsIG1fYXV0b0luY3JlbWVudChhdXRvSW5jcmVtZW50KQotICAgICwgbV9hdXRv
SW5jcmVtZW50TnVtYmVyKC0xKQogewogICAgIGxvYWRJbmRleGVzKCk7CiB9CkBAIC02OCw3ICs2
Nyw2IEBAIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OklEQk9iamVjdFN0b3JlQmFja2VuZElt
cGwoY29uc3QgSURCRGF0YWJhc2VCYWNrZW5kSW1wCiAgICAgLCBtX25hbWUobmFtZSkKICAgICAs
IG1fa2V5UGF0aChrZXlQYXRoKQogICAgICwgbV9hdXRvSW5jcmVtZW50KGF1dG9JbmNyZW1lbnQp
Ci0gICAgLCBtX2F1dG9JbmNyZW1lbnROdW1iZXIoLTEpCiB7CiB9CiAKQEAgLTE1OSw5ICsxNTcs
NyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dChQYXNzUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFsdWUsCiAgICAgT3duUHRyPFZlY3RvcjxTdHJpbmc+ID4g
bnVsbEluZGV4TmFtZXM7CiAgICAgT3duUHRyPFZlY3RvcjxJbmRleEtleXM+ID4gbnVsbEluZGV4
S2V5czsKICAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soCi0gICAgICAgICAgICBj
cmVhdGVDYWxsYmFja1Rhc2soJklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFs
LCBvYmplY3RTdG9yZSwgdmFsdWUsIGtleSwgcHV0TW9kZSwgY2FsbGJhY2tzLCB0cmFuc2FjdGlv
biwgbnVsbEluZGV4TmFtZXMucmVsZWFzZSgpLCBudWxsSW5kZXhLZXlzLnJlbGVhc2UoKSksCi0g
ICAgICAgICAgICAvLyBGSVhNRTogT25lIG9mIHRoZXNlIHBlciBwdXQoKSBpcyBvdmVya2lsbCwg
c2luY2UgaXQncyBzaW1wbHkgYSBjYWNoZSBpbnZhbGlkYXRpb24uCi0gICAgICAgICAgICBjcmVh
dGVDYWxsYmFja1Rhc2soJklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnJldmVydEF1dG9JbmNy
ZW1lbnRLZXlDYWNoZSwgb2JqZWN0U3RvcmUpKSkKKyAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNr
VGFzaygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwsIG9iamVjdFN0b3Jl
LCB2YWx1ZSwga2V5LCBwdXRNb2RlLCBjYWxsYmFja3MsIHRyYW5zYWN0aW9uLCBudWxsSW5kZXhO
YW1lcy5yZWxlYXNlKCksIG51bGxJbmRleEtleXMucmVsZWFzZSgpKSkpCiAgICAgICAgIGVjID0g
SURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKIH0KIApAQCAt
MTgxLDE3ICsxNzcsMTAgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRXaXRo
SW5kZXhLZXlzKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHUKICAgICBPd25QdHI8VmVj
dG9yPEluZGV4S2V5cz4gPiBuZXdJbmRleEtleXMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPEluZGV4
S2V5cz4oaW5kZXhLZXlzKSk7CiAKICAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2so
Ci0gICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJklEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6OnB1dEludGVybmFsLCBvYmplY3RTdG9yZSwgdmFsdWUsIGtleSwgcHV0TW9kZSwgY2FsbGJh
Y2tzLCB0cmFuc2FjdGlvbiwgbmV3SW5kZXhOYW1lcy5yZWxlYXNlKCksIG5ld0luZGV4S2V5cy5y
ZWxlYXNlKCkpLAotICAgICAgICAgICAgLy8gRklYTUU6IE9uZSBvZiB0aGVzZSBwZXIgcHV0KCkg
aXMgb3ZlcmtpbGwsIHNpbmNlIGl0J3Mgc2ltcGx5IGEgY2FjaGUgaW52YWxpZGF0aW9uLgotICAg
ICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpy
ZXZlcnRBdXRvSW5jcmVtZW50S2V5Q2FjaGUsIG9iamVjdFN0b3JlKSkpCisgICAgICAgICAgICBj
cmVhdGVDYWxsYmFja1Rhc2soJklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFs
LCBvYmplY3RTdG9yZSwgdmFsdWUsIGtleSwgcHV0TW9kZSwgY2FsbGJhY2tzLCB0cmFuc2FjdGlv
biwgbmV3SW5kZXhOYW1lcy5yZWxlYXNlKCksIG5ld0luZGV4S2V5cy5yZWxlYXNlKCkpKSkKICAg
ICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJS
OwogfQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnJldmVydEF1dG9JbmNyZW1l
bnRLZXlDYWNoZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSkKLXsKLSAgICBvYmplY3RTdG9yZS0+cmVzZXRB
dXRvSW5jcmVtZW50S2V5Q2FjaGUoKTsKLX0KLQogbmFtZXNwYWNlIHsKIGNsYXNzIEluZGV4V3Jp
dGVyIHsKIHB1YmxpYzoKQEAgLTI5MSw5ICsyODAsMTAgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpwdXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0
cjwKICAgICBPd25QdHI8VmVjdG9yPFN0cmluZz4gPiBpbmRleE5hbWVzID0gcG9wSW5kZXhOYW1l
czsKICAgICBPd25QdHI8VmVjdG9yPEluZGV4S2V5cz4gPiBpbmRleEtleXMgPSBwb3BJbmRleEtl
eXM7CiAgICAgQVNTRVJUKCghaW5kZXhOYW1lcyAmJiAhaW5kZXhLZXlzKSB8fCBpbmRleE5hbWVz
LT5zaXplKCkgPT0gaW5kZXhLZXlzLT5zaXplKCkpOworICAgIGNvbnN0IGJvb2wgYXV0b0luY3Jl
bWVudCA9IG9iamVjdFN0b3JlLT5hdXRvSW5jcmVtZW50KCk7CisgICAgYm9vbCBrZXlXYXNHZW5l
cmF0ZWQgPSBmYWxzZTsKIAogICAgIGlmIChwdXRNb2RlICE9IEN1cnNvclVwZGF0ZSkgewotICAg
ICAgICBjb25zdCBib29sIGF1dG9JbmNyZW1lbnQgPSBvYmplY3RTdG9yZS0+YXV0b0luY3JlbWVu
dCgpOwogICAgICAgICBjb25zdCBib29sIGhhc0tleVBhdGggPSAhb2JqZWN0U3RvcmUtPm1fa2V5
UGF0aC5pc051bGwoKTsKICAgICAgICAgaWYgKGhhc0tleVBhdGgpIHsKICAgICAgICAgICAgIEFT
U0VSVCgha2V5KTsKQEAgLTMwMyw3ICsyOTMsOCBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6OnB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPAog
ICAgICAgICB9CiAgICAgICAgIGlmIChhdXRvSW5jcmVtZW50KSB7CiAgICAgICAgICAgICBpZiAo
IWtleSkgewotICAgICAgICAgICAgICAgIFJlZlB0cjxJREJLZXk+IGF1dG9JbmNLZXkgPSBvYmpl
Y3RTdG9yZS0+Z2VuQXV0b0luY3JlbWVudEtleSgpOworICAgICAgICAgICAgICAgIFJlZlB0cjxJ
REJLZXk+IGF1dG9JbmNLZXkgPSBvYmplY3RTdG9yZS0+Z2VuZXJhdGVLZXkoKTsKKyAgICAgICAg
ICAgICAgICBrZXlXYXNHZW5lcmF0ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGlmICghYXV0
b0luY0tleS0+aXNWYWxpZCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrcy0+b25F
cnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFf
RVJSLCAiTWF4aW11bSBrZXkgZ2VuZXJhdG9yIHZhbHVlIHJlYWNoZWQuIikpOwogICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CkBAIC0zMTMsNyArMzA0LDYgQEAgdm9pZCBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1Jl
ZlB0cjwKICAgICAgICAgICAgICAgICAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4g
dmFsdWVBZnRlckluamVjdGlvbiA9IGluamVjdEtleUludG9LZXlQYXRoKGF1dG9JbmNLZXksIHZh
bHVlLCBvYmplY3RTdG9yZS0+bV9rZXlQYXRoKTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KHZhbHVlQWZ0ZXJJbmplY3Rpb24pOwogICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlQWZ0
ZXJJbmplY3Rpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFN0b3JlLT5yZXNl
dEF1dG9JbmNyZW1lbnRLZXlDYWNoZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hl
Y2tzIGluIHB1dCgpIGVuc3VyZSB0aGlzIHNob3VsZCBvbmx5IGhhcHBlbiBpZiBJL08gZXJyb3Ig
b2NjdXJzLgogICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRh
dGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJJ
bnRlcm5hbCBlcnJvciBpbnNlcnRpbmcgZ2VuZXJhdGVkIGtleSBpbnRvIHRoZSBvYmplY3QuIikp
OwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzIxLDkgKzMxMSw2IEBAIHZv
aWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFBhc3NSZWZQdHI8CiAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWVB
ZnRlckluamVjdGlvbjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAga2V5ID0g
YXV0b0luY0tleTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gRklY
TUU6IExvZ2ljIHRvIHVwZGF0ZSBnZW5lcmF0b3Igc3RhdGUgc2hvdWxkIGdvIGhlcmUuIEN1cnJl
bnRseSBpdCBkb2VzIGEgc2Nhbi4KLSAgICAgICAgICAgICAgICBvYmplY3RTdG9yZS0+cmVzZXRB
dXRvSW5jcmVtZW50S2V5Q2FjaGUoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0K
QEAgLTMzMiw3ICszMTksNiBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dElu
dGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPAogCiAgICAgUmVmUHRy
PElEQkJhY2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyPiByZWNvcmRJZGVu
dGlmaWVyID0gb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5jcmVhdGVJbnZhbGlkUmVjb3Jk
SWRlbnRpZmllcigpOwogICAgIGlmIChwdXRNb2RlID09IEFkZE9ubHkgJiYgb2JqZWN0U3RvcmUt
PmJhY2tpbmdTdG9yZSgpLT5rZXlFeGlzdHNJbk9iamVjdFN0b3JlKG9iamVjdFN0b3JlLT5kYXRh
YmFzZUlkKCksIG9iamVjdFN0b3JlLT5pZCgpLCAqa2V5LCByZWNvcmRJZGVudGlmaWVyLmdldCgp
KSkgewotICAgICAgICBvYmplY3RTdG9yZS0+cmVzZXRBdXRvSW5jcmVtZW50S2V5Q2FjaGUoKTsK
ICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6Q09OU1RSQUlOVF9FUlIsICJLZXkgYWxyZWFkeSBleGlzdHMgaW4g
dGhlIG9iamVjdCBzdG9yZS4iKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNjMsNyAr
MzQ5LDYgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RTdG9yZS0+aWQoKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4LT5pZCgpLCBrZXkuZ2V0
KCksICZlcnJvck1lc3NhZ2UpKSB7Ci0gICAgICAgICAgICBvYmplY3RTdG9yZS0+cmVzZXRBdXRv
SW5jcmVtZW50S2V5Q2FjaGUoKTsKICAgICAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJE
YXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSLCBlcnJv
ck1lc3NhZ2UpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMzkzLDcgKzM3
OCwxMCBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPAogICAgICAgICB9CiAgICAgfQogCi0gICAg
Y2FsbGJhY2tzLT5vblN1Y2Nlc3Moa2V5LmdldCgpKTsKKyAgICBpZiAoYXV0b0luY3JlbWVudCAm
JiBwdXRNb2RlICE9IEN1cnNvclVwZGF0ZSAmJiBrZXktPnR5cGUoKSA9PSBJREJLZXk6Ok51bWJl
clR5cGUpCisgICAgICAgIG9iamVjdFN0b3JlLT51cGRhdGVLZXlHZW5lcmF0b3Ioa2V5LmdldCgp
LCAha2V5V2FzR2VuZXJhdGVkKTsKKworICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKGtleS5yZWxl
YXNlKCkpOwogfQogCiB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0ZUZ1bmN0
aW9uKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHBycEtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRy
YW5zYWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKQEAgLTY1NywxOCArNjQ1LDIwIEBAIHZvaWQg
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6YWRkSW5kZXhUb01hcChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgUGFzc1JlZlB0CiAgICAgb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5zZXQoaW5kZXhQ
dHItPm5hbWUoKSwgaW5kZXhQdHIpOwogfQogCi1QYXNzUmVmUHRyPElEQktleT4gSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6Z2VuQXV0b0luY3JlbWVudEtleSgpCitQYXNzUmVmUHRyPElEQktl
eT4gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2VuZXJhdGVLZXkoKQogewogICAgIGNvbnN0
IGludDY0X3Qga01heEdlbmVyYXRvclZhbHVlID0gOTAwNzE5OTI1NDc0MDk5MkxMOyAvLyBNYXhp
bXVtIGludGVnZXIgc3RvcmFibGUgYXMgRUNNQVNjcmlwdCBudW1iZXIuCi0gICAgaWYgKG1fYXV0
b0luY3JlbWVudE51bWJlciA+IGtNYXhHZW5lcmF0b3JWYWx1ZSkKKyAgICBpbnQ2NF90IGN1cnJl
bnROdW1iZXIgPSBiYWNraW5nU3RvcmUoKS0+Z2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihk
YXRhYmFzZUlkKCksIGlkKCkpOworICAgIGlmIChjdXJyZW50TnVtYmVyIDwgMCB8fCBjdXJyZW50
TnVtYmVyID4ga01heEdlbmVyYXRvclZhbHVlKQogICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVh
dGVJbnZhbGlkKCk7Ci0gICAgaWYgKG1fYXV0b0luY3JlbWVudE51bWJlciA+IDApCi0gICAgICAg
IHJldHVybiBJREJLZXk6OmNyZWF0ZU51bWJlcihtX2F1dG9JbmNyZW1lbnROdW1iZXIrKyk7CiAK
LSAgICBtX2F1dG9JbmNyZW1lbnROdW1iZXIgPSBiYWNraW5nU3RvcmUoKS0+bmV4dEF1dG9JbmNy
ZW1lbnROdW1iZXIoZGF0YWJhc2VJZCgpLCBpZCgpKTsKLSAgICBpZiAobV9hdXRvSW5jcmVtZW50
TnVtYmVyID4ga01heEdlbmVyYXRvclZhbHVlKQotICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVh
dGVJbnZhbGlkKCk7Ci0gICAgcmV0dXJuIElEQktleTo6Y3JlYXRlTnVtYmVyKG1fYXV0b0luY3Jl
bWVudE51bWJlcisrKTsKKyAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVOdW1iZXIoY3VycmVudE51
bWJlcik7Cit9CisKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6dXBkYXRlS2V5R2Vu
ZXJhdG9yKGNvbnN0IElEQktleSoga2V5LCBib29sIGNoZWNrQ3VycmVudCkKK3sKKyAgICBBU1NF
UlQoa2V5ICYmIGtleS0+dHlwZSgpID09IElEQktleTo6TnVtYmVyVHlwZSk7CisgICAgYmFja2lu
Z1N0b3JlKCktPm1heWJlVXBkYXRlS2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihkYXRhYmFzZUlk
KCksIGlkKCksIHN0YXRpY19jYXN0PGludDY0X3Q+KGZsb29yKGtleS0+bnVtYmVyKCkpKSArIDEs
IGNoZWNrQ3VycmVudCk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oCmluZGV4IDFjNzQ1
YjU5M2RmYjQwN2RjMzUwZTIyOWVjZjEzMGIwYzUzNjY3YTYuLmEzN2M2N2U3ZjY4MjI2MWMzMDM0
MDNlZTAzNTk1NzJlZDlkMjhmMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgKQEAgLTg5LDgg
Kzg5LDggQEAgcHJpdmF0ZToKICAgICBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKGNvbnN0IElE
QkRhdGFiYXNlQmFja2VuZEltcGwqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBh
dGgmLCBib29sIGF1dG9JbmNyZW1lbnQpOwogCiAgICAgdm9pZCBsb2FkSW5kZXhlcygpOwotICAg
IFBhc3NSZWZQdHI8SURCS2V5PiBnZW5BdXRvSW5jcmVtZW50S2V5KCk7Ci0gICAgdm9pZCByZXNl
dEF1dG9JbmNyZW1lbnRLZXlDYWNoZSgpIHsgbV9hdXRvSW5jcmVtZW50TnVtYmVyID0gLTE7IH0K
KyAgICBQYXNzUmVmUHRyPElEQktleT4gZ2VuZXJhdGVLZXkoKTsKKyAgICB2b2lkIHVwZGF0ZUtl
eUdlbmVyYXRvcihjb25zdCBJREJLZXkqLCBib29sIGNoZWNrQ3VycmVudCk7CiAKICAgICBzdGF0
aWMgdm9pZCBnZXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPik7CiAgICAgc3RhdGljIHZvaWQgcHV0SW50ZXJuYWwoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4s
IFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJREJLZXk+LCBQ
dXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlPiwgUGFzc093blB0cjxWZWN0b3I8U3RyaW5nPiA+IHBvcEluZGV4
TmFtZXMsIFBhc3NPd25QdHI8VmVjdG9yPEluZGV4S2V5cz4gPik7CkBAIC0xMDQsNyArMTA0LDYg
QEAgcHJpdmF0ZToKICAgICAvLyBUaGVzZSBhcmUgdXNlZCBhcyBzZXRWZXJzaW9uIHRyYW5zYWN0
aW9uIGFib3J0IHRhc2tzLgogICAgIHN0YXRpYyB2b2lkIHJlbW92ZUluZGV4RnJvbU1hcChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
PiwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPik7CiAgICAgc3RhdGljIHZvaWQgYWRk
SW5kZXhUb01hcChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPik7Ci0gICAg
c3RhdGljIHZvaWQgcmV2ZXJ0QXV0b0luY3JlbWVudEtleUNhY2hlKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+KTsKIAogICAgIFBh
c3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUoKSBjb25zdCB7IHJldHVybiBt
X2RhdGFiYXNlLT5iYWNraW5nU3RvcmUoKTsgfQogICAgIGludDY0X3QgZGF0YWJhc2VJZCgpIGNv
bnN0IHsgcmV0dXJuIG1fZGF0YWJhc2UtPmlkKCk7IH0KQEAgLTExNyw3ICsxMTYsNiBAQCBwcml2
YXRlOgogCiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUmVmUHRyPElEQkluZGV4QmFja2Vu
ZEltcGw+ID4gSW5kZXhNYXA7CiAgICAgSW5kZXhNYXAgbV9pbmRleGVzOwotICAgIGludDY0X3Qg
bV9hdXRvSW5jcmVtZW50TnVtYmVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJGYWtlQmFja2luZ1N0b3Jl
LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQkZha2VCYWNraW5nU3RvcmUuaApp
bmRleCBlZDg5NGNiMTlmZTFkMTVhYjk5ZGQ1NjFkNzYyZDNmMjQ0OGFmOWEwLi4wODQwNWNlMGFi
NThjOTZmYzI5NmMzZjBmOGExNGZmNjlkNjViYTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0lEQkZha2VCYWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0lEQkZha2VCYWNraW5nU3RvcmUuaApAQCAtNDgsNyArNDgsOCBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCBib29sIHB1dE9iamVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBjb25zdCBTdHJp
bmcmIHZhbHVlLCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqKSBPVkVSUklERSB7IHJldHVy
biBmYWxzZTsgfQogICAgIHZpcnR1YWwgdm9pZCBjbGVhck9iamVjdFN0b3JlKGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSBPVkVSUklERSB7IH0KICAgICB2aXJ0dWFs
IHZvaWQgZGVsZXRlT2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciopIE9WRVJS
SURFIHsgfQotICAgIHZpcnR1YWwgaW50NjRfdCBuZXh0QXV0b0luY3JlbWVudE51bWJlcihpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkgT1ZFUlJJREUgeyByZXR1cm4g
MC4wOyB9CisgICAgdmlydHVhbCBpbnQ2NF90IGdldEtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIo
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpIE9WRVJSSURFIHsgcmV0
dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGJvb2wgbWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JDdXJyZW50
TnVtYmVyKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90
IG5ld051bWJlciwgYm9vbCBjaGVja0N1cnJlbnQpIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9
CiAgICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIE9iamVjdFN0b3JlUmVj
b3JkSWRlbnRpZmllciogZm91bmRSZWNvcmRJZGVudGlmaWVyKSBPVkVSUklERSB7IHJldHVybiBm
YWxzZTsgfQogCiAgICAgdmlydHVhbCBib29sIGZvckVhY2hPYmplY3RTdG9yZVJlY29yZChpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVSZWNvcmRD
YWxsYmFjayYpIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMDc5NGM5Y2U4MDkw
NWZhNmQ1ZjZhMDVhZjFmYjdlYzUyN2ViMGE5Ny4uMDhhNjRiYjdkMDljODMzOWQzZmQ3MTU4MTA5
MGMwNDY3NTJmZDM5NiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDEyLTA3LTE3ICBKb3NodWEg
QmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBLZXkgZ2Vu
ZXJhdG9yIHN0YXRlIG5vdCBtYWludGFpbmVkIGFjcm9zcyBjb25uZWN0aW9ucworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE0NTYKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBrZXkgZ2VuZXJhdG9y
IHRlc3QgY2FzZSB0aGF0IHNwYW5zIGRhdGFiYXNlIGNvbm5lY3Rpb25zLgorCisgICAgICAgICog
c3RvcmFnZS9pbmRleGVkZGIva2V5LWdlbmVyYXRvci1leHBlY3RlZC50eHQ6CisgICAgICAgICog
c3RvcmFnZS9pbmRleGVkZGIvcmVzb3VyY2VzL2tleS1nZW5lcmF0b3IuanM6CisgICAgICAgICh0
ZXN0QWNyb3NzQ29ubmVjdGlvbnMucmVxdWVzdC5vbnN1Y2Nlc3MucmVxdWVzdC5vbnN1Y2Nlc3Mu
cmVxdWVzdC5vbnN1Y2Nlc3MpOgorICAgICAgICAodGVzdEFjcm9zc0Nvbm5lY3Rpb25zLnJlcXVl
c3Qub25zdWNjZXNzLnJlcXVlc3Qub25zdWNjZXNzKToKKyAgICAgICAgKHRlc3RBY3Jvc3NDb25u
ZWN0aW9ucy5yZXF1ZXN0Lm9uc3VjY2Vzcyk6CisgICAgICAgICh0ZXN0QWNyb3NzQ29ubmVjdGlv
bnMuZG9GaXJzdFdyaXRlLnJlcXVlc3Qub25zdWNjZXNzKToKKyAgICAgICAgKHRlc3RBY3Jvc3ND
b25uZWN0aW9ucy5kb0ZpcnN0V3JpdGUpOgorICAgICAgICAodGVzdEFjcm9zc0Nvbm5lY3Rpb25z
LmNsb3NlQW5kUmVvcGVuLnJlcXVlc3Qub25zdWNjZXNzKToKKyAgICAgICAgKHRlc3RBY3Jvc3ND
b25uZWN0aW9ucy5jbG9zZUFuZFJlb3Blbik6CisgICAgICAgICh0ZXN0QWNyb3NzQ29ubmVjdGlv
bnMuZG9TZWNvbmRXcml0ZS5yZXF1ZXN0Lm9uc3VjY2Vzcyk6CisgICAgICAgICh0ZXN0QWNyb3Nz
Q29ubmVjdGlvbnMuZG9TZWNvbmRXcml0ZS50cmFucy5vbmNvbXBsZXRlKToKKyAgICAgICAgKHRl
c3RBY3Jvc3NDb25uZWN0aW9ucy5kb1NlY29uZFdyaXRlKToKKwogMjAxMi0wNy0xNiAgw4Fkw6Ft
IEthbGxhaSAgPGthZGFtQGluZi51LXN6ZWdlZC5odT4KIAogICAgICAgICBbUXRdIHBsYXRmcm9t
L3F0L2VkaXRpbmcvaW5zZXJ0aW5nIHRlc3RzIG5lZWRzIHVwZGF0ZSBhZnRlciB0ZXN0IGZvbnQg
Y2hhbmdlLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIva2V5LWdl
bmVyYXRvci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9rZXkt
Z2VuZXJhdG9yLWV4cGVjdGVkLnR4dAppbmRleCA5ZGU2YmI1N2E3NTVlMWQ4ZThlYzBiMTFlYTVm
NzRmOTI1NjMzMTJlLi41MmZjYzcyODY2YWE2YmY4MzQ5YTBkODU5NjAzODQzMmI0YjVlMTg1IDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9rZXktZ2VuZXJhdG9yLWV4
cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9rZXktZ2VuZXJh
dG9yLWV4cGVjdGVkLnR4dApAQCAtMTY3LDYgKzE2NywyNiBAQCBQQVNTIGV2ZW50LnRhcmdldC5l
cnJvci5uYW1lIGlzICdEYXRhRXJyb3InCiBldmVudC5wcmV2ZW50RGVmYXVsdCgpCiBQQVNTIEdv
dCAiZCIgZm9yIGtleTogMgogZGIuY2xvc2UoKQorCitFbnN1cmUga2V5IGdlbmVyYXRvciBzdGF0
ZSBpcyBtYWludGFpbmVkIGFjcm9zcyBjb25uZWN0aW9uczoKK2luZGV4ZWREQi5kZWxldGVEYXRh
YmFzZSgna2V5LWdlbmVyYXRvcicpCityZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oJ2tleS1nZW5l
cmF0b3InKQorZGIgPSByZXF1ZXN0LnJlc3VsdAorZGIuc2V0VmVyc2lvbignMScpCitkYi5jcmVh
dGVPYmplY3RTdG9yZSgnc3RvcmUnLCB7YXV0b0luY3JlbWVudDogdHJ1ZX0pCisKK3RyYW5zID0g
ZGIudHJhbnNhY3Rpb24oJ3N0b3JlJywgJ3JlYWR3cml0ZScpCityZXF1ZXN0ID0gdHJhbnMub2Jq
ZWN0U3RvcmUoJ3N0b3JlJykucHV0KCd2YWx1ZTEnKQorUEFTUyByZXF1ZXN0LnJlc3VsdCBpcyAx
Cit0cmFucy5vYmplY3RTdG9yZSgnc3RvcmUnKS5jbGVhcigpCitkYi5jbG9zZSgpCisKK3JlcXVl
c3QgPSBpbmRleGVkREIub3Blbigna2V5LWdlbmVyYXRvcicpCitkYiA9IHJlcXVlc3QucmVzdWx0
Cit0cmFucyA9IGRiLnRyYW5zYWN0aW9uKCdzdG9yZScsICdyZWFkd3JpdGUnKQorcmVxdWVzdCA9
IHRyYW5zLm9iamVjdFN0b3JlKCdzdG9yZScpLnB1dCgndmFsdWUyJykKK1BBU1MgcmVxdWVzdC5y
ZXN1bHQgaXMgMgorCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09N
UExFVEUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3Jlc291cmNl
cy9rZXktZ2VuZXJhdG9yLmpzIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvcmVzb3Vy
Y2VzL2tleS1nZW5lcmF0b3IuanMKaW5kZXggODZhMTllYTcxOGY1MjQzMzUwZjRkNTM4NDYwNmZh
MzMyZjljOWI5ZC4uNDVkOGFiZDUzYjQ2YmExNDBhMzViNTkzNzhjODdlZGY0OGExMjIyOCAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvcmVzb3VyY2VzL2tleS1nZW5l
cmF0b3IuanMKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvcmVzb3VyY2VzL2tl
eS1nZW5lcmF0b3IuanMKQEAgLTI3LDcgKzI3LDcgQEAgZnVuY3Rpb24gcnVuVGVzdHMoKSB7CiAK
ICAgICBmdW5jdGlvbiBuZXh0VGVzdCgpIHsKICAgICAgICAgaWYgKCF0ZXN0cy5sZW5ndGgpIHsK
LSAgICAgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgICAgICAgICAgdGVzdEFjcm9zc0Nvbm5l
Y3Rpb25zKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMjI5LDQgKzIy
OSw2NCBAQCBkZWZpbmVUZXN0KAogICAgIH0KICk7CiAKK2Z1bmN0aW9uIHRlc3RBY3Jvc3NDb25u
ZWN0aW9ucygpCit7CisgICAgZGVidWcoIiIpOworICAgIGRlYnVnKCJFbnN1cmUga2V5IGdlbmVy
YXRvciBzdGF0ZSBpcyBtYWludGFpbmVkIGFjcm9zcyBjb25uZWN0aW9uczoiKTsKKyAgICByZXF1
ZXN0ID0gZXZhbEFuZExvZygiaW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlKCdrZXktZ2VuZXJhdG9y
JykiKTsKKyAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKKyAg
ICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZXZhbEFuZExvZygi
cmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKCdrZXktZ2VuZXJhdG9yJykiKTsKKyAgICAgICAgcmVx
dWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7CisgICAgICAgIHJlcXVlc3Qu
b25zdWNjZXNzID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgZXZhbEFuZExvZygiZGIgPSBy
ZXF1ZXN0LnJlc3VsdCIpOworICAgICAgICAgICAgcmVxdWVzdCA9IGV2YWxBbmRMb2coImRiLnNl
dFZlcnNpb24oJzEnKSIpOworICAgICAgICAgICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3Rl
ZEVycm9yQ2FsbGJhY2s7CisgICAgICAgICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgICAgICB0cmFucyA9IHJlcXVlc3QucmVzdWx0OworICAgICAgICAg
ICAgICAgIHRyYW5zLm9uYWJvcnQgPSB1bmV4cGVjdGVkQWJvcnRDYWxsYmFjazsKKyAgICAgICAg
ICAgICAgICBldmFsQW5kTG9nKCJkYi5jcmVhdGVPYmplY3RTdG9yZSgnc3RvcmUnLCB7YXV0b0lu
Y3JlbWVudDogdHJ1ZX0pIik7CisgICAgICAgICAgICAgICAgdHJhbnMub25jb21wbGV0ZSA9IGRv
Rmlyc3RXcml0ZTsKKyAgICAgICAgICAgIH07CisgICAgICAgIH07CisgICAgfTsKKworICAgIGZ1
bmN0aW9uIGRvRmlyc3RXcml0ZSgpIHsKKyAgICAgICAgZGVidWcoIiIpOworICAgICAgICBldmFs
QW5kTG9nKCJ0cmFucyA9IGRiLnRyYW5zYWN0aW9uKCdzdG9yZScsICdyZWFkd3JpdGUnKSIpOwor
ICAgICAgICB0cmFucy5vbmFib3J0ID0gdW5leHBlY3RlZEFib3J0Q2FsbGJhY2s7CisgICAgICAg
IGV2YWxBbmRMb2coInJlcXVlc3QgPSB0cmFucy5vYmplY3RTdG9yZSgnc3RvcmUnKS5wdXQoJ3Zh
bHVlMScpIik7CisgICAgICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxi
YWNrOworICAgICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGZ1bmN0aW9uKCkgeworICAgICAgICAg
ICAgc2hvdWxkQmUoInJlcXVlc3QucmVzdWx0IiwgIjEiKTsKKyAgICAgICAgICAgIGV2YWxBbmRM
b2coInRyYW5zLm9iamVjdFN0b3JlKCdzdG9yZScpLmNsZWFyKCkiKTsKKyAgICAgICAgfTsKKyAg
ICAgICAgdHJhbnMub25jb21wbGV0ZSA9IGNsb3NlQW5kUmVvcGVuOworICAgIH0KKworICAgIGZ1
bmN0aW9uIGNsb3NlQW5kUmVvcGVuKCkgeworICAgICAgICBldmFsQW5kTG9nKCJkYi5jbG9zZSgp
Iik7CisgICAgICAgIGRlYnVnKCIiKTsKKyAgICAgICAgZXZhbEFuZExvZygicmVxdWVzdCA9IGlu
ZGV4ZWREQi5vcGVuKCdrZXktZ2VuZXJhdG9yJykiKTsKKyAgICAgICAgcmVxdWVzdC5vbnN1Y2Nl
c3MgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBldmFsQW5kTG9nKCJkYiA9IHJlcXVlc3Qu
cmVzdWx0Iik7CisgICAgICAgICAgICBkb1NlY29uZFdyaXRlKCk7CisgICAgICAgIH07CisgICAg
fQorCisgICAgZnVuY3Rpb24gZG9TZWNvbmRXcml0ZSgpIHsKKyAgICAgICAgZXZhbEFuZExvZygi
dHJhbnMgPSBkYi50cmFuc2FjdGlvbignc3RvcmUnLCAncmVhZHdyaXRlJykiKTsKKyAgICAgICAg
dHJhbnMub25hYm9ydCA9IHVuZXhwZWN0ZWRBYm9ydENhbGxiYWNrOworICAgICAgICBldmFsQW5k
TG9nKCJyZXF1ZXN0ID0gdHJhbnMub2JqZWN0U3RvcmUoJ3N0b3JlJykucHV0KCd2YWx1ZTInKSIp
OworICAgICAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKKyAg
ICAgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHNob3Vs
ZEJlKCJyZXF1ZXN0LnJlc3VsdCIsICIyIik7CisgICAgICAgIH07CisgICAgICAgIHRyYW5zLm9u
Y29tcGxldGUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGRlYnVnKCIiKTsKKyAgICAgICAg
ICAgIGZpbmlzaEpTVGVzdCgpOworICAgICAgICB9OworICAgIH07Cit9CisKIHRlc3QoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152869</attachid>
            <date>2012-07-17 16:29:00 -0700</date>
            <delta_ts>2012-07-17 18:07:40 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-91456-20120717162859.patch</filename>
            <type>text/plain</type>
            <size>31497</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyODMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTFjMzNhZjAyNzQ3ODdk
NGJiMzJjZWM1YWQ1OTExMDdhNTY1NmNhMS4uMjY4MjljNDQ2YmI1YjRjYzQ0OTliYjI4OTQzNGRj
ZDYzMWNkMDE1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDEyLTA3LTE3ICBKb3No
dWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBLZXkg
Z2VuZXJhdG9yIHN0YXRlIG5vdCBtYWludGFpbmVkIGFjcm9zcyBjb25uZWN0aW9ucworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE0NTYKKworICAgICAg
ICBSZXZpZXdlZCBieSBUb255IENoYW5nLgorCisgICAgICAgIEV4cGxpY2l0bHkgc3RvcmUga2V5
IGdlbmVyYXRvciBzdGF0ZSBmb3IgZWFjaCBvYmplY3Qgc3RvcmUgaW4gdGhlIGJhY2tpbmcgc3Rv
cmUsCisgICAgICAgIHJhdGhlciB0aGFuIGRlcml2aW5nIGl0IGZyb20gdGhlIG1heGltdW0ga2V5
IGluIHRoZSBkYXRhICh3aGljaCB2aW9sYXRlcyB0aGUgc3BlYworICAgICAgICBpZiBkYXRhIGlz
IGRlbGV0ZWQpLgorCisgICAgICAgIFRoaXMgY2hhbmdlIGVsaW1pbmF0ZXMgYSAoZnJhZ2lsZSkg
cGVyLXN0b3JlIGNhY2hlIG9mIHRoZSB2YWx1ZSB0byBzaW1wbGlmeSB0aGUKKyAgICAgICAgY29k
ZS4gQSBjYWNoZSBjb3VsZCBiZSByZS1pbnRyb2R1Y2VkLCByZXF1aXJpbmcgYW4gIm9uYmVmb3Jl
Y29tbWl0IiBob29rIGZvcgorICAgICAgICBvYmplY3Qgc3RvcmVzLCBidXQgaXQgc2VlbXMgY2xl
YW5lciB0byBzYXZlIHRoYXQgZm9yIGEgZm9sbG93LXVwIHBhdGNoLgorCisgICAgICAgIFRlc3Q6
IHN0b3JhZ2UvaW5kZXhlZGRiL2tleS1nZW5lcmF0b3IuaHRtbAorCisgICAgICAgICogTW9kdWxl
cy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmg6IE5ldyBBUElzIGZvciBnZXR0aW5nL3NldHRp
bmcgZ2VuZXJhdG9yIHN0YXRlcy4KKyAgICAgICAgKElEQkJhY2tpbmdTdG9yZSk6CisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRPYmplY3RTdG9yZXMpOiBSZWFk
IGdlbmVyYXRvciBzdGF0ZSAoYnV0IGN1cnJlbnRseSBpZ25vcmVkKS4KKyAgICAgICAgKFdlYkNv
cmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OmNyZWF0ZU9iamVjdFN0b3JlKTogV3JpdGUgZ2Vu
ZXJhdG9yIHN0YXRlLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJM
ZXZlbERCQmFja2luZ1N0b3JlOjpnZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6Om1heWJlVXBkYXRlS2V5R2VuZXJh
dG9yQ3VycmVudE51bWJlcik6IFVwZGF0ZSwgb3B0aW9uYWxseQorICAgICAgICBjaGVja2luZyB0
byBzZWUgaWYgdGhlIG5ldyB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gdGhlIG9sZC4gKElmIGNhbGxl
ciBnb3QgdGhlIHZhbHVlIHZpYQorICAgICAgICBnZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVy
IGl0IGlzIHNhZmUgdG8gc2tpcCB0aGUgY2hlY2suKQorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaDoKKyAgICAgICAgKElEQkxldmVsREJCYWNraW5n
U3RvcmUpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJDb2RpbmcuY3Bw
OgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJDb2RpbmcuaDoKKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OklEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGwpOiBEaXRjaCB0aGUgY2FjaGUuCisgICAgICAgIChXZWJDb3JlOjpJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpwdXQpOiBObyBuZWVkIGZvciBhYm9ydCB0YXNrLgorICAgICAg
ICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0V2l0aEluZGV4S2V5cyk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0
SW50ZXJuYWwpOiBVc2UgdGhlIG5ld2ZhbmdsZWQgQVBJcyBiZWxvdy4KKyAgICAgICAgKFdlYkNv
cmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmdlbmVyYXRlS2V5KToKKyAgICAgICAgKFdl
YkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnVwZGF0ZUtleUdlbmVyYXRvcik6Cisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oOgor
ICAgICAgICAoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCk6CisKIDIwMTItMDctMTcgIEt3YW5n
IFl1bCBTZW8gIDxza3l1bEBjb21wYW55MTAwLm5ldD4KIAogICAgICAgICAiaW4gYm9keSIgaW5z
ZXJ0aW9uIG1vZGUsICJhbnkgb3RoZXIgZW5kIHRhZyIgc3RlcCAyLjEgaXMgdXBkYXRlZApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA4MjI3MmIxZWQxNzM0YTQ4NzA3NzU1OGFmNThjNTc1
NzJkZDdjNmY3Li5hMzVmOTA3OTU4MDAyN2ZjMTBhNjE0NWI5MjNmMzYwODEyMDM1YWYxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDEyLTA3LTE3ICBKb3No
dWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBLZXkg
Z2VuZXJhdG9yIHN0YXRlIG5vdCBtYWludGFpbmVkIGFjcm9zcyBjb25uZWN0aW9ucworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE0NTYKKworICAgICAg
ICBSZXZpZXdlZCBieSBUb255IENoYW5nLgorCisgICAgICAgIEFkZCBzdHViIG1ldGhvZCBpbXBs
ZW1lbnRhdGlvbnMgdG8gdGVzdCBjbGFzcy4KKworICAgICAgICAqIHRlc3RzL0lEQkZha2VCYWNr
aW5nU3RvcmUuaDoKKwogMjAxMi0wNy0xNiAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3Jn
PgogCiAgICAgICAgIFVucmV2aWV3ZWQuIFJlbW92ZSB0d28gZW1wdHkgZGlyZWN0b3JpZXMuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3Rv
cmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5o
CmluZGV4IGY3ODQwNjIxYjYxZjJjMTQxODc4OTY2MzZkNzY1Y2M4ODIyOWZkMDUuLjc4YTlmNjY3
YWRkMTMwZTYzZTNjMDc0NmQ0YTcwM2I0ODk1NDZiZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oCkBAIC02Nyw3ICs2Nyw4IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgcHV0T2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIGNvbnN0IFN0
cmluZyYgdmFsdWUsIE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciopID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgY2xlYXJPYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9yZVJlY29y
ZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgT2JqZWN0
U3RvcmVSZWNvcmRJZGVudGlmaWVyKikgPSAwOwotICAgIHZpcnR1YWwgaW50NjRfdCBuZXh0QXV0
b0luY3JlbWVudE51bWJlcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCkgPSAwOworICAgIHZpcnR1YWwgaW50NjRfdCBnZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVy
KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSA9IDA7CisgICAgdmly
dHVhbCBib29sIG1heWJlVXBkYXRlS2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBuZXdOdW1iZXIsIGJvb2wg
Y2hlY2tDdXJyZW50KSA9IDA7CiAgICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luT2JqZWN0U3Rv
cmUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktl
eSYsIE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciogZm91bmRSZWNvcmRJZGVudGlmaWVyKSA9
IDA7CiAKICAgICBjbGFzcyBPYmplY3RTdG9yZVJlY29yZENhbGxiYWNrIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZS5jcHAKaW5kZXggYWI4MjkzZjBmYTQ3Y2VjMDg1OTExYTU1NDRlYWIxM2M1NGE3NDQ1OS4u
ZmJmNTE3M2QyNTgzMDg4N2ZkYzhmNzNkN2UwNmQzZWZiMmU4YTZlNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZS5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgog
I2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJJREJGYWN0b3J5QmFja2VuZEltcGwu
aCIKKyNpbmNsdWRlICJJREJLZXkuaCIKICNpbmNsdWRlICJJREJLZXlQYXRoLmgiCiAjaW5jbHVk
ZSAiSURCS2V5UmFuZ2UuaCIKICNpbmNsdWRlICJJREJMZXZlbERCQ29kaW5nLmgiCkBAIC00Niw2
ICs0Nyw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIElEQkxldmVs
REJDb2Rpbmc7CiAKK2NvbnN0IGludDY0X3QgS2V5R2VuZXJhdG9ySW5pdGlhbE51bWJlciA9IDE7
IC8vIEZyb20gdGhlIEluZGV4ZWREQiBzcGVjaWZpY2F0aW9uLgorCiB0ZW1wbGF0ZSA8dHlwZW5h
bWUgREJPclRyYW5zYWN0aW9uPgogc3RhdGljIGJvb2wgZ2V0Qm9vbChEQk9yVHJhbnNhY3Rpb24q
IGRiLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGtleSwgYm9vbCYgZm91bmRCb29sKQogewpAQCAtNDE0
LDYgKzQxNywxNSBAQCB2b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldE9iamVjdFN0b3Jl
cyhpbnQ2NF90IGRhdGFiYXNlSWQsIFZlY3RvcjxpbnQ2NF90PgogICAgICAgICAgICAgaXQtPm5l
eHQoKTsKICAgICAgICAgfQogCisgICAgICAgIGludDY0X3Qga2V5R2VuZXJhdG9yQ3VycmVudE51
bWJlciA9IC0xOworICAgICAgICBpZiAoY2hlY2tPYmplY3RTdG9yZUFuZE1ldGFEYXRhVHlwZShp
dC5nZXQoKSwgc3RvcEtleSwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6
a0tleUdlbmVyYXRvckN1cnJlbnROdW1iZXIpKSB7CisgICAgICAgICAgICBrZXlHZW5lcmF0b3JD
dXJyZW50TnVtYmVyID0gZGVjb2RlSW50KGl0LT52YWx1ZSgpLmJlZ2luKCksIGl0LT52YWx1ZSgp
LmVuZCgpKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBSZXR1cm4ga2V5R2VuZXJhdG9yQ3VycmVu
dE51bWJlciwgY2FjaGUgaW4gb2JqZWN0IHN0b3JlLCBhbmQgd3JpdGUgbGF6aWx5IHRvIGJhY2tp
bmcgc3RvcmUuCisgICAgICAgICAgICAvLyBGb3Igbm93LCBqdXN0IGFzc2VydCB0aGF0IGlmIGl0
IHdhcyB3cml0dGVuIGl0IHdhcyB2YWxpZC4KKyAgICAgICAgICAgIEFTU0VSVChrZXlHZW5lcmF0
b3JDdXJyZW50TnVtYmVyID49IEtleUdlbmVyYXRvckluaXRpYWxOdW1iZXIpOworICAgICAgICAg
ICAgaXQtPm5leHQoKTsKKyAgICAgICAgfQorCiAgICAgICAgIGZvdW5kSWRzLmFwcGVuZChvYmpl
Y3RTdG9yZUlkKTsKICAgICAgICAgZm91bmROYW1lcy5hcHBlbmQob2JqZWN0U3RvcmVOYW1lKTsK
ICAgICAgICAgZm91bmRLZXlQYXRocy5hcHBlbmQoa2V5UGF0aCk7CkBAIC00NTEsNiArNDYzLDcg
QEAgYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVPYmplY3RTdG9yZShpbnQ2NF90
IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gbGFzdFZl
cnNpb25LZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2Jq
ZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6a0xhc3RWZXJzaW9uKTsKICAgICBj
b25zdCBWZWN0b3I8Y2hhcj4gbWF4SW5kZXhJZEtleSA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6
OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5
OjprTWF4SW5kZXhJZCk7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGhhc0tleVBhdGhLZXkgID0g
T2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQs
IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmtIYXNLZXlQYXRoKTsKKyAgICBjb25zdCBWZWN0b3I8
Y2hhcj4ga2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcktleSA9IE9iamVjdFN0b3JlTWV0YURhdGFL
ZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9yZU1ldGFEYXRh
S2V5OjprS2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcik7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+
IG5hbWVzS2V5ID0gT2JqZWN0U3RvcmVOYW1lc0tleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG5hbWUp
OwogCiAgICAgYm9vbCBvayA9IHB1dFN0cmluZyhtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwg
bmFtZUtleSwgbmFtZSk7CkBAIC00OTUsNiArNTA4LDEyIEBAIGJvb2wgSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZTo6Y3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBTdHJp
bmcmCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKKyAgICBvayA9IHB1dEludChtX2N1
cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwga2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcktleSwgS2V5
R2VuZXJhdG9ySW5pdGlhbE51bWJlcik7CisgICAgaWYgKCFvaykgeworICAgICAgICBMT0dfRVJS
T1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKICAgICBvayA9IHB1dEludChtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgbmFt
ZXNLZXksIG9iamVjdFN0b3JlSWQpOwogICAgIGlmICghb2spIHsKICAgICAgICAgTE9HX0VSUk9S
KCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOwpAQCAtNjM0LDM1ICs2NTMsNjYgQEAgdm9p
ZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3QKICAgICBtX2N1cnJlbnRUcmFuc2FjdGlvbi0+cmVtb3ZlKGV4
aXN0c0VudHJ5S2V5KTsKIH0KIAotaW50NjRfdCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpuZXh0
QXV0b0luY3JlbWVudE51bWJlcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCkKKworaW50NjRfdCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRLZXlHZW5lcmF0b3JD
dXJyZW50TnVtYmVyKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQog
ewogICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7Ci0gICAgY29uc3QgVmVjdG9yPGNo
YXI+IHN0YXJ0S2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2Jq
ZWN0U3RvcmVJZCwgbWluSURCS2V5KCkpOwotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdG9wS2V5
ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwg
bWF4SURCS2V5KCkpOwogCi0gICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSBtX2N1cnJl
bnRUcmFuc2FjdGlvbi0+Y3JlYXRlSXRlcmF0b3IoKTsKKyAgICBjb25zdCBWZWN0b3I8Y2hhcj4g
a2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcktleSA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVu
Y29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5Ojpr
S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcik7CiAKLSAgICBpbnQ2NF90IG1heE51bWVyaWNLZXkg
PSAwOworICAgIGludDY0X3Qga2V5R2VuZXJhdG9yQ3VycmVudE51bWJlciA9IC0xOworICAgIFZl
Y3RvcjxjaGFyPiBkYXRhOworCisgICAgaWYgKG1fY3VycmVudFRyYW5zYWN0aW9uLT5nZXQoa2V5
R2VuZXJhdG9yQ3VycmVudE51bWJlcktleSwgZGF0YSkpCisgICAgICAgIGtleUdlbmVyYXRvckN1
cnJlbnROdW1iZXIgPSBkZWNvZGVJbnQoZGF0YS5iZWdpbigpLCBkYXRhLmVuZCgpKTsKKyAgICBl
bHNlIHsKKyAgICAgICAgLy8gUHJldmlvdXNseSwgdGhlIGtleSBnZW5lcmF0b3Igc3RhdGUgd2Fz
IG5vdCBzdG9yZWQgZXhwbGljaXRseSBidXQgZGVyaXZlZCBmcm9tIHRoZQorICAgICAgICAvLyBt
YXhpbXVtIG51bWVyaWMga2V5IHByZXNlbnQgaW4gZXhpc3RpbmcgZGF0YS4gVGhpcyB2aW9sYXRl
cyB0aGUgc3BlYyBhcyB0aGUgZGF0YSBtYXkKKyAgICAgICAgLy8gYmUgY2xlYXJlZCBidXQgdGhl
IGtleSBnZW5lcmF0b3Igc3RhdGUgbXVzdCBiZSBwcmVzZXJ2ZWQuCisgICAgICAgIGNvbnN0IFZl
Y3RvcjxjaGFyPiBzdGFydEtleSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNl
SWQsIG9iamVjdFN0b3JlSWQsIG1pbklEQktleSgpKTsKKyAgICAgICAgY29uc3QgVmVjdG9yPGNo
YXI+IHN0b3BLZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmpl
Y3RTdG9yZUlkLCBtYXhJREJLZXkoKSk7CisKKyAgICAgICAgT3duUHRyPExldmVsREJJdGVyYXRv
cj4gaXQgPSBtX2N1cnJlbnRUcmFuc2FjdGlvbi0+Y3JlYXRlSXRlcmF0b3IoKTsKKyAgICAgICAg
aW50NjRfdCBtYXhOdW1lcmljS2V5ID0gMDsKKworICAgICAgICBmb3IgKGl0LT5zZWVrKHN0YXJ0
S2V5KTsgaXQtPmlzVmFsaWQoKSAmJiBjb21wYXJlS2V5cyhpdC0+a2V5KCksIHN0b3BLZXkpIDwg
MDsgaXQtPm5leHQoKSkgeworICAgICAgICAgICAgY29uc3QgY2hhciogcCA9IGl0LT5rZXkoKS5i
ZWdpbigpOworICAgICAgICAgICAgY29uc3QgY2hhciogbGltaXQgPSBpdC0+a2V5KCkuZW5kKCk7
CisKKyAgICAgICAgICAgIE9iamVjdFN0b3JlRGF0YUtleSBkYXRhS2V5OworICAgICAgICAgICAg
cCA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZGVjb2RlKHAsIGxpbWl0LCAmZGF0YUtleSk7CisgICAg
ICAgICAgICBBU1NFUlQocCk7CisKKyAgICAgICAgICAgIGlmIChkYXRhS2V5LnVzZXJLZXkoKS0+
dHlwZSgpID09IElEQktleTo6TnVtYmVyVHlwZSkgeworICAgICAgICAgICAgICAgIGludDY0X3Qg
biA9IHN0YXRpY19jYXN0PGludDY0X3Q+KGRhdGFLZXkudXNlcktleSgpLT5udW1iZXIoKSk7Cisg
ICAgICAgICAgICAgICAgaWYgKG4gPiBtYXhOdW1lcmljS2V5KQorICAgICAgICAgICAgICAgICAg
ICBtYXhOdW1lcmljS2V5ID0gbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogCi0gICAgLy8g
RklYTUU6IFRoaXMgZG9lcyBhIGZvcndhcmQgc2NhbiBvdmVyIGFsbCBrZXlzLiBJbXByb3ZlIGl0
LgotICAgIC8vIFNpbmNlIGFsbCBkYXRlcyA+IGFsbCBudW1iZXJzLCBjcmVhdGUgRGF0ZSgtSW5m
aW5pdHkpIGFuZCBzZWVrIGJhY2t3YXJkcy4KKyAgICAgICAga2V5R2VuZXJhdG9yQ3VycmVudE51
bWJlciA9IG1heE51bWVyaWNLZXkgKyAxOworICAgIH0KIAotICAgIGZvciAoaXQtPnNlZWsoc3Rh
cnRLZXkpOyBpdC0+aXNWYWxpZCgpICYmIGNvbXBhcmVLZXlzKGl0LT5rZXkoKSwgc3RvcEtleSkg
PCAwOyBpdC0+bmV4dCgpKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIgKnAgPSBpdC0+a2V5KCkuYmVn
aW4oKTsKLSAgICAgICAgY29uc3QgY2hhciAqbGltaXQgPSBpdC0+a2V5KCkuZW5kKCk7CisgICAg
cmV0dXJuIGtleUdlbmVyYXRvckN1cnJlbnROdW1iZXI7Cit9CiAKLSAgICAgICAgT2JqZWN0U3Rv
cmVEYXRhS2V5IGRhdGFLZXk7Ci0gICAgICAgIHAgPSBPYmplY3RTdG9yZURhdGFLZXk6OmRlY29k
ZShwLCBsaW1pdCwgJmRhdGFLZXkpOwotICAgICAgICBBU1NFUlQocCk7Citib29sIElEQkxldmVs
REJCYWNraW5nU3RvcmU6Om1heWJlVXBkYXRlS2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBuZXdOdW1iZXIs
IGJvb2wgY2hlY2tDdXJyZW50KQoreworICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7
CiAKLSAgICAgICAgaWYgKGRhdGFLZXkudXNlcktleSgpLT50eXBlKCkgPT0gSURCS2V5OjpOdW1i
ZXJUeXBlKSB7Ci0gICAgICAgICAgICBpbnQ2NF90IG4gPSBzdGF0aWNfY2FzdDxpbnQ2NF90Pihk
YXRhS2V5LnVzZXJLZXkoKS0+bnVtYmVyKCkpOwotICAgICAgICAgICAgaWYgKG4gPiBtYXhOdW1l
cmljS2V5KQotICAgICAgICAgICAgICAgIG1heE51bWVyaWNLZXkgPSBuOwotICAgICAgICB9Cisg
ICAgaWYgKGNoZWNrQ3VycmVudCkgeworICAgICAgICBpbnQ2NF90IGN1cnJlbnROdW1iZXIgPSBn
ZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQpOwor
ICAgICAgICBpZiAobmV3TnVtYmVyIDw9IGN1cnJlbnROdW1iZXIpCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAKLSAgICByZXR1cm4gbWF4TnVtZXJpY0tleSArIDE7CisgICAgY29u
c3QgVmVjdG9yPGNoYXI+IGtleUdlbmVyYXRvckN1cnJlbnROdW1iZXJLZXkgPSBPYmplY3RTdG9y
ZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3Rv
cmVNZXRhRGF0YUtleTo6a0tleUdlbmVyYXRvckN1cnJlbnROdW1iZXIpOworICAgIGJvb2wgb2sg
PSBwdXRJbnQobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGtleUdlbmVyYXRvckN1cnJlbnRO
dW1iZXJLZXksIG5ld051bWJlcik7CisgICAgaWYgKCFvaykgeworICAgICAgICBMT0dfRVJST1Io
IkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6
a2V5RXhpc3RzSW5PYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgY29uc3QgSURCS2V5JiBrZXksIE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciog
Zm91bmRSZWNvcmRJZGVudGlmaWVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oCmluZGV4IGE2NWY5NjNlODUw
NDMyNTg0ZDk3YzY4MThkYzk0YzJjNjc1MTY2ODkuLmM1YTllMmVlMzA5ZThjYTNmZDdmNzBmMGFh
MmJiODBjZWMwNDZiMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmgKQEAgLTU4LDcgKzU4LDggQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgYm9vbCBwdXRPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgU3RyaW5n
JiB2YWx1ZSwgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKik7CiAgICAgdmlydHVhbCB2b2lk
IGNsZWFyT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQpOwogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJ
ZGVudGlmaWVyKik7Ci0gICAgdmlydHVhbCBpbnQ2NF90IG5leHRBdXRvSW5jcmVtZW50TnVtYmVy
KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKKyAgICB2aXJ0dWFs
IGludDY0X3QgZ2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7CisgICAgdmlydHVhbCBib29sIG1heWJlVXBkYXRlS2V5
R2VuZXJhdG9yQ3VycmVudE51bWJlcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgaW50NjRfdCBuZXdTdGF0ZSwgYm9vbCBjaGVja0N1cnJlbnQpOwogICAgIHZpcnR1
YWwgYm9vbCBrZXlFeGlzdHNJbk9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZp
ZXIqIGZvdW5kUmVjb3JkSWRlbnRpZmllcik7CiAKICAgICB2aXJ0dWFsIGJvb2wgZm9yRWFjaE9i
amVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBPYmplY3RTdG9yZVJlY29yZENhbGxiYWNrJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQ29kaW5nLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJDb2RpbmcuY3BwCmluZGV4IDE4MzYzNzcyMWYw
YjEyNzNmZjAxZjg3YTAyMzM2YjBmNzEyYmFmYjcuLjFmZjQ1YTJmZDFkOTI4NmNlMDAzYWMwM2Zl
ZWRmNDIzNWNkY2VlOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkxldmVsREJDb2RpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkxldmVsREJDb2RpbmcuY3BwCkBAIC03Myw2ICs3Myw3IEBACiAvLyAgICAgPGRh
dGFiYXNlIGlkLCAwLCAwLCA1MCwgb2JqZWN0IHN0b3JlIGlkLCA0PiA9PiBsYXN0ICJ2ZXJzaW9u
IiBudW1iZXIgW09iamVjdFN0b3JlTWV0YURhdGFLZXldCiAvLyAgICAgPGRhdGFiYXNlIGlkLCAw
LCAwLCA1MCwgb2JqZWN0IHN0b3JlIGlkLCA1PiA9PiBtYXhpbXVtIGluZGV4IGlkIGV2ZXIgYWxs
b2NhdGVkIFtPYmplY3RTdG9yZU1ldGFEYXRhS2V5XQogLy8gICAgIDxkYXRhYmFzZSBpZCwgMCwg
MCwgNTAsIG9iamVjdCBzdG9yZSBpZCwgNj4gPT4gaGFzIGtleSBwYXRoICh2cy4gbnVsbCkgW09i
amVjdFN0b3JlTWV0YURhdGFLZXldCisvLyAgICAgPGRhdGFiYXNlIGlkLCAwLCAwLCA1MCwgb2Jq
ZWN0IHN0b3JlIGlkLCA3PiA9PiBrZXkgZ2VuZXJhdG9yIGN1cnJlbnQgbnVtYmVyIFtPYmplY3RT
dG9yZU1ldGFEYXRhS2V5XQogLy8KIC8vCiAvLyBJbmRleCBtZXRhLWRhdGE6CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQ29kaW5nLmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQ29kaW5nLmgKaW5kZXgg
Y2MxZjcyNzhkZWZlYzZlNDYwZDk0YzE0MjE5MjZkMTQ5MTg2MzlkMi4uYTIzYTI5Mjc0NzhmZDcy
MDMyM2JlYTg2ODhiOGI0ZjE1MjA2MmQ0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkNvZGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJDb2RpbmcuaApAQCAtMTU1LDcgKzE1NSw4IEBAIHB1
YmxpYzoKICAgICAgICAga0V2aWN0YWJsZSA9IDMsCiAgICAgICAgIGtMYXN0VmVyc2lvbiA9IDQs
CiAgICAgICAgIGtNYXhJbmRleElkID0gNSwKLSAgICAgICAga0hhc0tleVBhdGggPSA2CisgICAg
ICAgIGtIYXNLZXlQYXRoID0gNiwKKyAgICAgICAga0tleUdlbmVyYXRvckN1cnJlbnROdW1iZXIg
PSA3CiAgICAgfTsKIAogICAgIE9iamVjdFN0b3JlTWV0YURhdGFLZXkoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZElt
cGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbC5jcHAKaW5kZXggNzJlNzBhZjc3ZDA3MTNiMTUwNTZlMzY4NDczMTZiZjdlY2Nk
YTM2MC4uY2NhZDg4OTIwZjdkYmJiYTJmMzc1MGY3MGYzOGJjOTRlOTYyMTdlZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbC5jcHAKQEAgLTU3LDcgKzU3LDYgQEAgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbChjb25zdCBJREJEYXRhYmFzZUJhY2tl
bmRJbXAKICAgICAsIG1fbmFtZShuYW1lKQogICAgICwgbV9rZXlQYXRoKGtleVBhdGgpCiAgICAg
LCBtX2F1dG9JbmNyZW1lbnQoYXV0b0luY3JlbWVudCkKLSAgICAsIG1fYXV0b0luY3JlbWVudE51
bWJlcigtMSkKIHsKICAgICBsb2FkSW5kZXhlcygpOwogfQpAQCAtNjgsNyArNjcsNiBAQCBJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKGNvbnN0IElE
QkRhdGFiYXNlQmFja2VuZEltcAogICAgICwgbV9uYW1lKG5hbWUpCiAgICAgLCBtX2tleVBhdGgo
a2V5UGF0aCkKICAgICAsIG1fYXV0b0luY3JlbWVudChhdXRvSW5jcmVtZW50KQotICAgICwgbV9h
dXRvSW5jcmVtZW50TnVtYmVyKC0xKQogewogfQogCkBAIC0xNTksOSArMTU3LDcgQEAgdm9pZCBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IHBycFZhbHVlLAogICAgIE93blB0cjxWZWN0b3I8U3RyaW5nPiA+IG51bGxJbmRleE5h
bWVzOwogICAgIE93blB0cjxWZWN0b3I8SW5kZXhLZXlzPiA+IG51bGxJbmRleEtleXM7CiAgICAg
aWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKAotICAgICAgICAgICAgY3JlYXRlQ2FsbGJh
Y2tUYXNrKCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbCwgb2JqZWN0U3Rv
cmUsIHZhbHVlLCBrZXksIHB1dE1vZGUsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24sIG51bGxJbmRl
eE5hbWVzLnJlbGVhc2UoKSwgbnVsbEluZGV4S2V5cy5yZWxlYXNlKCkpLAotICAgICAgICAgICAg
Ly8gRklYTUU6IE9uZSBvZiB0aGVzZSBwZXIgcHV0KCkgaXMgb3ZlcmtpbGwsIHNpbmNlIGl0J3Mg
c2ltcGx5IGEgY2FjaGUgaW52YWxpZGF0aW9uLgotICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tU
YXNrKCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpyZXZlcnRBdXRvSW5jcmVtZW50S2V5Q2Fj
aGUsIG9iamVjdFN0b3JlKSkpCisgICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJklEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsLCBvYmplY3RTdG9yZSwgdmFsdWUsIGtl
eSwgcHV0TW9kZSwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbiwgbnVsbEluZGV4TmFtZXMucmVsZWFz
ZSgpLCBudWxsSW5kZXhLZXlzLnJlbGVhc2UoKSkpKQogICAgICAgICBlYyA9IElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9FUlI7CiB9CiAKQEAgLTE4MSwxNyArMTc3
LDEwIEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0V2l0aEluZGV4S2V5cyhQ
YXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1CiAgICAgT3duUHRyPFZlY3RvcjxJbmRleEtl
eXM+ID4gbmV3SW5kZXhLZXlzID0gYWRvcHRQdHIobmV3IFZlY3RvcjxJbmRleEtleXM+KGluZGV4
S2V5cykpOwogCiAgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKAotICAgICAgICAg
ICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRl
cm5hbCwgb2JqZWN0U3RvcmUsIHZhbHVlLCBrZXksIHB1dE1vZGUsIGNhbGxiYWNrcywgdHJhbnNh
Y3Rpb24sIG5ld0luZGV4TmFtZXMucmVsZWFzZSgpLCBuZXdJbmRleEtleXMucmVsZWFzZSgpKSwK
LSAgICAgICAgICAgIC8vIEZJWE1FOiBPbmUgb2YgdGhlc2UgcGVyIHB1dCgpIGlzIG92ZXJraWxs
LCBzaW5jZSBpdCdzIHNpbXBseSBhIGNhY2hlIGludmFsaWRhdGlvbi4KLSAgICAgICAgICAgIGNy
ZWF0ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cmV2ZXJ0QXV0b0lu
Y3JlbWVudEtleUNhY2hlLCBvYmplY3RTdG9yZSkpKQorICAgICAgICAgICAgY3JlYXRlQ2FsbGJh
Y2tUYXNrKCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbCwgb2JqZWN0U3Rv
cmUsIHZhbHVlLCBrZXksIHB1dE1vZGUsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24sIG5ld0luZGV4
TmFtZXMucmVsZWFzZSgpLCBuZXdJbmRleEtleXMucmVsZWFzZSgpKSkpCiAgICAgICAgIGVjID0g
SURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKIH0KIAotdm9p
ZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpyZXZlcnRBdXRvSW5jcmVtZW50S2V5Q2FjaGUo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbD4gb2JqZWN0U3RvcmUpCi17Ci0gICAgb2JqZWN0U3RvcmUtPnJlc2V0QXV0b0luY3JlbWVu
dEtleUNhY2hlKCk7Ci19Ci0KIG5hbWVzcGFjZSB7CiBjbGFzcyBJbmRleFdyaXRlciB7CiBwdWJs
aWM6CkBAIC0yOTEsOSArMjgwLDEwIEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
cHV0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8CiAgICAgT3du
UHRyPFZlY3RvcjxTdHJpbmc+ID4gaW5kZXhOYW1lcyA9IHBvcEluZGV4TmFtZXM7CiAgICAgT3du
UHRyPFZlY3RvcjxJbmRleEtleXM+ID4gaW5kZXhLZXlzID0gcG9wSW5kZXhLZXlzOwogICAgIEFT
U0VSVCgoIWluZGV4TmFtZXMgJiYgIWluZGV4S2V5cykgfHwgaW5kZXhOYW1lcy0+c2l6ZSgpID09
IGluZGV4S2V5cy0+c2l6ZSgpKTsKKyAgICBjb25zdCBib29sIGF1dG9JbmNyZW1lbnQgPSBvYmpl
Y3RTdG9yZS0+YXV0b0luY3JlbWVudCgpOworICAgIGJvb2wga2V5V2FzR2VuZXJhdGVkID0gZmFs
c2U7CiAKICAgICBpZiAocHV0TW9kZSAhPSBDdXJzb3JVcGRhdGUpIHsKLSAgICAgICAgY29uc3Qg
Ym9vbCBhdXRvSW5jcmVtZW50ID0gb2JqZWN0U3RvcmUtPmF1dG9JbmNyZW1lbnQoKTsKICAgICAg
ICAgY29uc3QgYm9vbCBoYXNLZXlQYXRoID0gIW9iamVjdFN0b3JlLT5tX2tleVBhdGguaXNOdWxs
KCk7CiAgICAgICAgIGlmIChoYXNLZXlQYXRoKSB7CiAgICAgICAgICAgICBBU1NFUlQoIWtleSk7
CkBAIC0zMDMsNyArMjkzLDggQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJ
bnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjwKICAgICAgICAgfQog
ICAgICAgICBpZiAoYXV0b0luY3JlbWVudCkgewogICAgICAgICAgICAgaWYgKCFrZXkpIHsKLSAg
ICAgICAgICAgICAgICBSZWZQdHI8SURCS2V5PiBhdXRvSW5jS2V5ID0gb2JqZWN0U3RvcmUtPmdl
bkF1dG9JbmNyZW1lbnRLZXkoKTsKKyAgICAgICAgICAgICAgICBSZWZQdHI8SURCS2V5PiBhdXRv
SW5jS2V5ID0gb2JqZWN0U3RvcmUtPmdlbmVyYXRlS2V5KCk7CisgICAgICAgICAgICAgICAga2V5
V2FzR2VuZXJhdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBpZiAoIWF1dG9JbmNLZXktPmlz
VmFsaWQoKSkgewogICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0
YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUiwgIk1heGlt
dW0ga2V5IGdlbmVyYXRvciB2YWx1ZSByZWFjaGVkLiIpKTsKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOwpAQCAtMzEzLDcgKzMwNCw2IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6cHV0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8CiAgICAg
ICAgICAgICAgICAgICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlQWZ0ZXJJ
bmplY3Rpb24gPSBpbmplY3RLZXlJbnRvS2V5UGF0aChhdXRvSW5jS2V5LCB2YWx1ZSwgb2JqZWN0
U3RvcmUtPm1fa2V5UGF0aCk7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCh2YWx1ZUFmdGVy
SW5qZWN0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZUFmdGVySW5qZWN0aW9u
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RTdG9yZS0+cmVzZXRBdXRvSW5jcmVt
ZW50S2V5Q2FjaGUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrcyBpbiBwdXQo
KSBlbnN1cmUgdGhpcyBzaG91bGQgb25seSBoYXBwZW4gaWYgSS9PIGVycm9yIG9jY3Vycy4KICAg
ICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9y
OjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAiSW50ZXJuYWwgZXJy
b3IgaW5zZXJ0aW5nIGdlbmVyYXRlZCBrZXkgaW50byB0aGUgb2JqZWN0LiIpKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTMyMSw5ICszMTEsNiBAQCB2b2lkIElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQ
YXNzUmVmUHRyPAogICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlQWZ0ZXJJbmplY3Rp
b247CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGtleSA9IGF1dG9JbmNLZXk7
Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBMb2dpYyB0
byB1cGRhdGUgZ2VuZXJhdG9yIHN0YXRlIHNob3VsZCBnbyBoZXJlLiBDdXJyZW50bHkgaXQgZG9l
cyBhIHNjYW4uCi0gICAgICAgICAgICAgICAgb2JqZWN0U3RvcmUtPnJlc2V0QXV0b0luY3JlbWVu
dEtleUNhY2hlKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0zMzIsNyAr
MzE5LDYgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjwKIAogICAgIFJlZlB0cjxJREJCYWNraW5n
U3RvcmU6Ok9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcj4gcmVjb3JkSWRlbnRpZmllciA9IG9i
amVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+Y3JlYXRlSW52YWxpZFJlY29yZElkZW50aWZpZXIo
KTsKICAgICBpZiAocHV0TW9kZSA9PSBBZGRPbmx5ICYmIG9iamVjdFN0b3JlLT5iYWNraW5nU3Rv
cmUoKS0+a2V5RXhpc3RzSW5PYmplY3RTdG9yZShvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBv
YmplY3RTdG9yZS0+aWQoKSwgKmtleSwgcmVjb3JkSWRlbnRpZmllci5nZXQoKSkpIHsKLSAgICAg
ICAgb2JqZWN0U3RvcmUtPnJlc2V0QXV0b0luY3JlbWVudEtleUNhY2hlKCk7CiAgICAgICAgIGNh
bGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNl
cHRpb246OkNPTlNUUkFJTlRfRVJSLCAiS2V5IGFscmVhZHkgZXhpc3RzIGluIHRoZSBvYmplY3Qg
c3RvcmUuIikpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzYzLDcgKzM0OSw2IEBAIHZv
aWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFBhc3NSZWZQdHI8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb2JqZWN0U3RvcmUtPmlkKCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleC0+aWQoKSwga2V5LmdldCgpLCAmZXJyb3JN
ZXNzYWdlKSkgewotICAgICAgICAgICAgb2JqZWN0U3RvcmUtPnJlc2V0QXV0b0luY3JlbWVudEtl
eUNhY2hlKCk7CiAgICAgICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJv
cjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUiwgZXJyb3JNZXNzYWdlKSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTM5Myw3ICszNzgsMTAgQEAgdm9p
ZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgUGFzc1JlZlB0cjwKICAgICAgICAgfQogICAgIH0KIAotICAgIGNhbGxiYWNrcy0+
b25TdWNjZXNzKGtleS5nZXQoKSk7CisgICAgaWYgKGF1dG9JbmNyZW1lbnQgJiYgcHV0TW9kZSAh
PSBDdXJzb3JVcGRhdGUgJiYga2V5LT50eXBlKCkgPT0gSURCS2V5OjpOdW1iZXJUeXBlKQorICAg
ICAgICBvYmplY3RTdG9yZS0+dXBkYXRlS2V5R2VuZXJhdG9yKGtleS5nZXQoKSwgIWtleVdhc0dl
bmVyYXRlZCk7CisKKyAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhrZXkucmVsZWFzZSgpKTsKIH0K
IAogdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVGdW5jdGlvbihQYXNzUmVm
UHRyPElEQktleVJhbmdlPiBwcnBLZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBy
cENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwg
RXhjZXB0aW9uQ29kZSYgZWMpCkBAIC02NTcsMTggKzY0NSwyMCBAQCB2b2lkIElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OmFkZEluZGV4VG9NYXAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBh
c3NSZWZQdAogICAgIG9iamVjdFN0b3JlLT5tX2luZGV4ZXMuc2V0KGluZGV4UHRyLT5uYW1lKCks
IGluZGV4UHRyKTsKIH0KIAotUGFzc1JlZlB0cjxJREJLZXk+IElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6OmdlbkF1dG9JbmNyZW1lbnRLZXkoKQorUGFzc1JlZlB0cjxJREJLZXk+IElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OmdlbmVyYXRlS2V5KCkKIHsKLSAgICBjb25zdCBpbnQ2NF90IGtN
YXhHZW5lcmF0b3JWYWx1ZSA9IDkwMDcxOTkyNTQ3NDA5OTJMTDsgLy8gTWF4aW11bSBpbnRlZ2Vy
IHN0b3JhYmxlIGFzIEVDTUFTY3JpcHQgbnVtYmVyLgotICAgIGlmIChtX2F1dG9JbmNyZW1lbnRO
dW1iZXIgPiBrTWF4R2VuZXJhdG9yVmFsdWUpCisgICAgY29uc3QgaW50NjRfdCBtYXhHZW5lcmF0
b3JWYWx1ZSA9IDkwMDcxOTkyNTQ3NDA5OTJMTDsgLy8gTWF4aW11bSBpbnRlZ2VyIHN0b3JhYmxl
IGFzIEVDTUFTY3JpcHQgbnVtYmVyLgorICAgIGludDY0X3QgY3VycmVudE51bWJlciA9IGJhY2tp
bmdTdG9yZSgpLT5nZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKGRhdGFiYXNlSWQoKSwgaWQo
KSk7CisgICAgaWYgKGN1cnJlbnROdW1iZXIgPCAwIHx8IGN1cnJlbnROdW1iZXIgPiBtYXhHZW5l
cmF0b3JWYWx1ZSkKICAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlSW52YWxpZCgpOwotICAg
IGlmIChtX2F1dG9JbmNyZW1lbnROdW1iZXIgPiAwKQotICAgICAgICByZXR1cm4gSURCS2V5Ojpj
cmVhdGVOdW1iZXIobV9hdXRvSW5jcmVtZW50TnVtYmVyKyspOwogCi0gICAgbV9hdXRvSW5jcmVt
ZW50TnVtYmVyID0gYmFja2luZ1N0b3JlKCktPm5leHRBdXRvSW5jcmVtZW50TnVtYmVyKGRhdGFi
YXNlSWQoKSwgaWQoKSk7Ci0gICAgaWYgKG1fYXV0b0luY3JlbWVudE51bWJlciA+IGtNYXhHZW5l
cmF0b3JWYWx1ZSkKLSAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlSW52YWxpZCgpOwotICAg
IHJldHVybiBJREJLZXk6OmNyZWF0ZU51bWJlcihtX2F1dG9JbmNyZW1lbnROdW1iZXIrKyk7Cisg
ICAgcmV0dXJuIElEQktleTo6Y3JlYXRlTnVtYmVyKGN1cnJlbnROdW1iZXIpOworfQorCit2b2lk
IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnVwZGF0ZUtleUdlbmVyYXRvcihjb25zdCBJREJL
ZXkqIGtleSwgYm9vbCBjaGVja0N1cnJlbnQpCit7CisgICAgQVNTRVJUKGtleSAmJiBrZXktPnR5
cGUoKSA9PSBJREJLZXk6Ok51bWJlclR5cGUpOworICAgIGJhY2tpbmdTdG9yZSgpLT5tYXliZVVw
ZGF0ZUtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIoZGF0YWJhc2VJZCgpLCBpZCgpLCBzdGF0aWNf
Y2FzdDxpbnQ2NF90PihmbG9vcihrZXktPm51bWJlcigpKSkgKyAxLCBjaGVja0N1cnJlbnQpOwog
fQogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9i
amVjdFN0b3JlQmFja2VuZEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaAppbmRleCAxYzc0NWI1OTNkZmI0MDdkYzM1MGUy
MjllY2YxMzBiMGM1MzY2N2E2Li5hMzdjNjdlN2Y2ODIyNjFjMzAzNDAzZWUwMzU5NTcyZWQ5ZDI4
ZjM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oCkBAIC04OSw4ICs4OSw4IEBAIHByaXZhdGU6
CiAgICAgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbChjb25zdCBJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsKiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCBhdXRvSW5j
cmVtZW50KTsKIAogICAgIHZvaWQgbG9hZEluZGV4ZXMoKTsKLSAgICBQYXNzUmVmUHRyPElEQktl
eT4gZ2VuQXV0b0luY3JlbWVudEtleSgpOwotICAgIHZvaWQgcmVzZXRBdXRvSW5jcmVtZW50S2V5
Q2FjaGUoKSB7IG1fYXV0b0luY3JlbWVudE51bWJlciA9IC0xOyB9CisgICAgUGFzc1JlZlB0cjxJ
REJLZXk+IGdlbmVyYXRlS2V5KCk7CisgICAgdm9pZCB1cGRhdGVLZXlHZW5lcmF0b3IoY29uc3Qg
SURCS2V5KiwgYm9vbCBjaGVja0N1cnJlbnQpOwogCiAgICAgc3RhdGljIHZvaWQgZ2V0SW50ZXJu
YWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4pOwogICAgIHN0YXRpYyB2b2lkIHB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NSZWZQdHI8SURCS2V5PiwgUHV0TW9kZSwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZT4sIFBhc3NPd25QdHI8VmVjdG9yPFN0cmluZz4gPiBwb3BJbmRleE5hbWVzLCBQYXNzT3duUHRy
PFZlY3RvcjxJbmRleEtleXM+ID4pOwpAQCAtMTA0LDcgKzEwNCw2IEBAIHByaXZhdGU6CiAgICAg
Ly8gVGhlc2UgYXJlIHVzZWQgYXMgc2V0VmVyc2lvbiB0cmFuc2FjdGlvbiBhYm9ydCB0YXNrcy4K
ICAgICBzdGF0aWMgdm9pZCByZW1vdmVJbmRleEZyb21NYXAoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURC
SW5kZXhCYWNrZW5kSW1wbD4pOwogICAgIHN0YXRpYyB2b2lkIGFkZEluZGV4VG9NYXAoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4s
IFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4pOwotICAgIHN0YXRpYyB2b2lkIHJldmVy
dEF1dG9JbmNyZW1lbnRLZXlDYWNoZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0
cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPik7CiAKICAgICBQYXNzUmVmUHRyPElEQkJhY2tp
bmdTdG9yZT4gYmFja2luZ1N0b3JlKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhYmFzZS0+YmFja2lu
Z1N0b3JlKCk7IH0KICAgICBpbnQ2NF90IGRhdGFiYXNlSWQoKSBjb25zdCB7IHJldHVybiBtX2Rh
dGFiYXNlLT5pZCgpOyB9CkBAIC0xMTcsNyArMTE2LDYgQEAgcHJpdmF0ZToKIAogICAgIHR5cGVk
ZWYgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiA+IEluZGV4TWFw
OwogICAgIEluZGV4TWFwIG1faW5kZXhlczsKLSAgICBpbnQ2NF90IG1fYXV0b0luY3JlbWVudE51
bWJlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCRmFrZUJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9JREJGYWtlQmFja2luZ1N0b3JlLmgKaW5kZXggZWQ4OTRjYjE5ZmUx
ZDE1YWI5OWRkNTYxZDc2MmQzZjI0NDhhZjlhMC4uMDg0MDVjZTBhYjU4Yzk2ZmMyOTZjM2YwZjhh
MTRmZjY5ZDY1YmExOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9J
REJGYWtlQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9J
REJGYWtlQmFja2luZ1N0b3JlLmgKQEAgLTQ4LDcgKzQ4LDggQEAgcHVibGljOgogICAgIHZpcnR1
YWwgYm9vbCBwdXRPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgT2JqZWN0
U3RvcmVSZWNvcmRJZGVudGlmaWVyKikgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2
aXJ0dWFsIHZvaWQgY2xlYXJPYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCkgT1ZFUlJJREUgeyB9CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVj
dFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBj
b25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqKSBPVkVSUklERSB7IH0KLSAgICB2aXJ0
dWFsIGludDY0X3QgbmV4dEF1dG9JbmNyZW1lbnROdW1iZXIoaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQpIE9WRVJSSURFIHsgcmV0dXJuIDAuMDsgfQorICAgIHZpcnR1
YWwgaW50NjRfdCBnZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSBPVkVSUklERSB7IHJldHVybiAwOyB9CisgICAgdmly
dHVhbCBib29sIG1heWJlVXBkYXRlS2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBuZXdOdW1iZXIsIGJvb2wg
Y2hlY2tDdXJyZW50KSBPVkVSUklERSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9v
bCBrZXlFeGlzdHNJbk9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqIGZv
dW5kUmVjb3JkSWRlbnRpZmllcikgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIHZp
cnR1YWwgYm9vbCBmb3JFYWNoT2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIE9iamVjdFN0b3JlUmVjb3JkQ2FsbGJhY2smKSBPVkVSUklE
RSB7IHJldHVybiBmYWxzZTsgfQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDA3OTRjOWNlODA5MDVmYTZkNWY2YTA1YWYxZmI3
ZWM1MjdlYjBhOTcuLmVhNTY1YjAyYTBkMDM1MTc1MzNmYzYwYmRiMDQxZjQ4ZTJjNzJjODMgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwyNSBAQAorMjAxMi0wNy0xNyAgSm9zaHVhIEJlbGwgIDxqc2JlbGxAY2hy
b21pdW0ub3JnPgorCisgICAgICAgIEluZGV4ZWREQjogS2V5IGdlbmVyYXRvciBzdGF0ZSBub3Qg
bWFpbnRhaW5lZCBhY3Jvc3MgY29ubmVjdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTkxNDU2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgVG9ueSBD
aGFuZy4KKworICAgICAgICBBZGRlZCBrZXkgZ2VuZXJhdG9yIHRlc3QgY2FzZSB0aGF0IHNwYW5z
IGRhdGFiYXNlIGNvbm5lY3Rpb25zLgorCisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIva2V5
LWdlbmVyYXRvci1leHBlY3RlZC50eHQ6CisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvcmVz
b3VyY2VzL2tleS1nZW5lcmF0b3IuanM6CisgICAgICAgICh0ZXN0QWNyb3NzQ29ubmVjdGlvbnMu
cmVxdWVzdC5vbnN1Y2Nlc3MucmVxdWVzdC5vbnN1Y2Nlc3MucmVxdWVzdC5vbnN1Y2Nlc3MpOgor
ICAgICAgICAodGVzdEFjcm9zc0Nvbm5lY3Rpb25zLnJlcXVlc3Qub25zdWNjZXNzLnJlcXVlc3Qu
b25zdWNjZXNzKToKKyAgICAgICAgKHRlc3RBY3Jvc3NDb25uZWN0aW9ucy5yZXF1ZXN0Lm9uc3Vj
Y2Vzcyk6CisgICAgICAgICh0ZXN0QWNyb3NzQ29ubmVjdGlvbnMuZG9GaXJzdFdyaXRlLnJlcXVl
c3Qub25zdWNjZXNzKToKKyAgICAgICAgKHRlc3RBY3Jvc3NDb25uZWN0aW9ucy5kb0ZpcnN0V3Jp
dGUpOgorICAgICAgICAodGVzdEFjcm9zc0Nvbm5lY3Rpb25zLmNsb3NlQW5kUmVvcGVuLnJlcXVl
c3Qub25zdWNjZXNzKToKKyAgICAgICAgKHRlc3RBY3Jvc3NDb25uZWN0aW9ucy5jbG9zZUFuZFJl
b3Blbik6CisgICAgICAgICh0ZXN0QWNyb3NzQ29ubmVjdGlvbnMuZG9TZWNvbmRXcml0ZS5yZXF1
ZXN0Lm9uc3VjY2Vzcyk6CisgICAgICAgICh0ZXN0QWNyb3NzQ29ubmVjdGlvbnMuZG9TZWNvbmRX
cml0ZS50cmFucy5vbmNvbXBsZXRlKToKKyAgICAgICAgKHRlc3RBY3Jvc3NDb25uZWN0aW9ucy5k
b1NlY29uZFdyaXRlKToKKwogMjAxMi0wNy0xNiAgw4Fkw6FtIEthbGxhaSAgPGthZGFtQGluZi51
LXN6ZWdlZC5odT4KIAogICAgICAgICBbUXRdIHBsYXRmcm9tL3F0L2VkaXRpbmcvaW5zZXJ0aW5n
IHRlc3RzIG5lZWRzIHVwZGF0ZSBhZnRlciB0ZXN0IGZvbnQgY2hhbmdlLgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIva2V5LWdlbmVyYXRvci1leHBlY3RlZC50eHQg
Yi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9rZXktZ2VuZXJhdG9yLWV4cGVjdGVkLnR4
dAppbmRleCA5ZGU2YmI1N2E3NTVlMWQ4ZThlYzBiMTFlYTVmNzRmOTI1NjMzMTJlLi41MmZjYzcy
ODY2YWE2YmY4MzQ5YTBkODU5NjAzODQzMmI0YjVlMTg1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9zdG9yYWdlL2luZGV4ZWRkYi9rZXktZ2VuZXJhdG9yLWV4cGVjdGVkLnR4dAorKysgYi9MYXlv
dXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9rZXktZ2VuZXJhdG9yLWV4cGVjdGVkLnR4dApAQCAt
MTY3LDYgKzE2NywyNiBAQCBQQVNTIGV2ZW50LnRhcmdldC5lcnJvci5uYW1lIGlzICdEYXRhRXJy
b3InCiBldmVudC5wcmV2ZW50RGVmYXVsdCgpCiBQQVNTIEdvdCAiZCIgZm9yIGtleTogMgogZGIu
Y2xvc2UoKQorCitFbnN1cmUga2V5IGdlbmVyYXRvciBzdGF0ZSBpcyBtYWludGFpbmVkIGFjcm9z
cyBjb25uZWN0aW9uczoKK2luZGV4ZWREQi5kZWxldGVEYXRhYmFzZSgna2V5LWdlbmVyYXRvcicp
CityZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oJ2tleS1nZW5lcmF0b3InKQorZGIgPSByZXF1ZXN0
LnJlc3VsdAorZGIuc2V0VmVyc2lvbignMScpCitkYi5jcmVhdGVPYmplY3RTdG9yZSgnc3RvcmUn
LCB7YXV0b0luY3JlbWVudDogdHJ1ZX0pCisKK3RyYW5zID0gZGIudHJhbnNhY3Rpb24oJ3N0b3Jl
JywgJ3JlYWR3cml0ZScpCityZXF1ZXN0ID0gdHJhbnMub2JqZWN0U3RvcmUoJ3N0b3JlJykucHV0
KCd2YWx1ZTEnKQorUEFTUyByZXF1ZXN0LnJlc3VsdCBpcyAxCit0cmFucy5vYmplY3RTdG9yZSgn
c3RvcmUnKS5jbGVhcigpCitkYi5jbG9zZSgpCisKK3JlcXVlc3QgPSBpbmRleGVkREIub3Blbign
a2V5LWdlbmVyYXRvcicpCitkYiA9IHJlcXVlc3QucmVzdWx0Cit0cmFucyA9IGRiLnRyYW5zYWN0
aW9uKCdzdG9yZScsICdyZWFkd3JpdGUnKQorcmVxdWVzdCA9IHRyYW5zLm9iamVjdFN0b3JlKCdz
dG9yZScpLnB1dCgndmFsdWUyJykKK1BBU1MgcmVxdWVzdC5yZXN1bHQgaXMgMgorCiBQQVNTIHN1
Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3Jlc291cmNlcy9rZXktZ2VuZXJhdG9yLmpzIGIv
TGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvcmVzb3VyY2VzL2tleS1nZW5lcmF0b3IuanMK
aW5kZXggODZhMTllYTcxOGY1MjQzMzUwZjRkNTM4NDYwNmZhMzMyZjljOWI5ZC4uNDVkOGFiZDUz
YjQ2YmExNDBhMzViNTkzNzhjODdlZGY0OGExMjIyOCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
c3RvcmFnZS9pbmRleGVkZGIvcmVzb3VyY2VzL2tleS1nZW5lcmF0b3IuanMKKysrIGIvTGF5b3V0
VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvcmVzb3VyY2VzL2tleS1nZW5lcmF0b3IuanMKQEAgLTI3
LDcgKzI3LDcgQEAgZnVuY3Rpb24gcnVuVGVzdHMoKSB7CiAKICAgICBmdW5jdGlvbiBuZXh0VGVz
dCgpIHsKICAgICAgICAgaWYgKCF0ZXN0cy5sZW5ndGgpIHsKLSAgICAgICAgICAgIGZpbmlzaEpT
VGVzdCgpOworICAgICAgICAgICAgdGVzdEFjcm9zc0Nvbm5lY3Rpb25zKCk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMjI5LDQgKzIyOSw2NCBAQCBkZWZpbmVUZXN0KAog
ICAgIH0KICk7CiAKK2Z1bmN0aW9uIHRlc3RBY3Jvc3NDb25uZWN0aW9ucygpCit7CisgICAgZGVi
dWcoIiIpOworICAgIGRlYnVnKCJFbnN1cmUga2V5IGdlbmVyYXRvciBzdGF0ZSBpcyBtYWludGFp
bmVkIGFjcm9zcyBjb25uZWN0aW9uczoiKTsKKyAgICByZXF1ZXN0ID0gZXZhbEFuZExvZygiaW5k
ZXhlZERCLmRlbGV0ZURhdGFiYXNlKCdrZXktZ2VuZXJhdG9yJykiKTsKKyAgICByZXF1ZXN0Lm9u
ZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKKyAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZXZhbEFuZExvZygicmVxdWVzdCA9IGluZGV4ZWREQi5v
cGVuKCdrZXktZ2VuZXJhdG9yJykiKTsKKyAgICAgICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBl
Y3RlZEVycm9yQ2FsbGJhY2s7CisgICAgICAgIHJlcXVlc3Qub25zdWNjZXNzID0gZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgZXZhbEFuZExvZygiZGIgPSByZXF1ZXN0LnJlc3VsdCIpOworICAg
ICAgICAgICAgcmVxdWVzdCA9IGV2YWxBbmRMb2coImRiLnNldFZlcnNpb24oJzEnKSIpOworICAg
ICAgICAgICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7CisgICAg
ICAgICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAg
ICB0cmFucyA9IHJlcXVlc3QucmVzdWx0OworICAgICAgICAgICAgICAgIHRyYW5zLm9uYWJvcnQg
PSB1bmV4cGVjdGVkQWJvcnRDYWxsYmFjazsKKyAgICAgICAgICAgICAgICBldmFsQW5kTG9nKCJk
Yi5jcmVhdGVPYmplY3RTdG9yZSgnc3RvcmUnLCB7YXV0b0luY3JlbWVudDogdHJ1ZX0pIik7Cisg
ICAgICAgICAgICAgICAgdHJhbnMub25jb21wbGV0ZSA9IGRvRmlyc3RXcml0ZTsKKyAgICAgICAg
ICAgIH07CisgICAgICAgIH07CisgICAgfTsKKworICAgIGZ1bmN0aW9uIGRvRmlyc3RXcml0ZSgp
IHsKKyAgICAgICAgZGVidWcoIiIpOworICAgICAgICBldmFsQW5kTG9nKCJ0cmFucyA9IGRiLnRy
YW5zYWN0aW9uKCdzdG9yZScsICdyZWFkd3JpdGUnKSIpOworICAgICAgICB0cmFucy5vbmFib3J0
ID0gdW5leHBlY3RlZEFib3J0Q2FsbGJhY2s7CisgICAgICAgIGV2YWxBbmRMb2coInJlcXVlc3Qg
PSB0cmFucy5vYmplY3RTdG9yZSgnc3RvcmUnKS5wdXQoJ3ZhbHVlMScpIik7CisgICAgICAgIHJl
cXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworICAgICAgICByZXF1ZXN0
Lm9uc3VjY2VzcyA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgc2hvdWxkQmUoInJlcXVlc3Qu
cmVzdWx0IiwgIjEiKTsKKyAgICAgICAgICAgIGV2YWxBbmRMb2coInRyYW5zLm9iamVjdFN0b3Jl
KCdzdG9yZScpLmNsZWFyKCkiKTsKKyAgICAgICAgfTsKKyAgICAgICAgdHJhbnMub25jb21wbGV0
ZSA9IGNsb3NlQW5kUmVvcGVuOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNsb3NlQW5kUmVvcGVu
KCkgeworICAgICAgICBldmFsQW5kTG9nKCJkYi5jbG9zZSgpIik7CisgICAgICAgIGRlYnVnKCIi
KTsKKyAgICAgICAgZXZhbEFuZExvZygicmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKCdrZXktZ2Vu
ZXJhdG9yJykiKTsKKyAgICAgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICBldmFsQW5kTG9nKCJkYiA9IHJlcXVlc3QucmVzdWx0Iik7CisgICAgICAgICAg
ICBkb1NlY29uZFdyaXRlKCk7CisgICAgICAgIH07CisgICAgfQorCisgICAgZnVuY3Rpb24gZG9T
ZWNvbmRXcml0ZSgpIHsKKyAgICAgICAgZXZhbEFuZExvZygidHJhbnMgPSBkYi50cmFuc2FjdGlv
bignc3RvcmUnLCAncmVhZHdyaXRlJykiKTsKKyAgICAgICAgdHJhbnMub25hYm9ydCA9IHVuZXhw
ZWN0ZWRBYm9ydENhbGxiYWNrOworICAgICAgICBldmFsQW5kTG9nKCJyZXF1ZXN0ID0gdHJhbnMu
b2JqZWN0U3RvcmUoJ3N0b3JlJykucHV0KCd2YWx1ZTInKSIpOworICAgICAgICByZXF1ZXN0Lm9u
ZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKKyAgICAgICAgcmVxdWVzdC5vbnN1Y2Nl
c3MgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHNob3VsZEJlKCJyZXF1ZXN0LnJlc3VsdCIs
ICIyIik7CisgICAgICAgIH07CisgICAgICAgIHRyYW5zLm9uY29tcGxldGUgPSBmdW5jdGlvbigp
IHsKKyAgICAgICAgICAgIGRlYnVnKCIiKTsKKyAgICAgICAgICAgIGZpbmlzaEpTVGVzdCgpOwor
ICAgICAgICB9OworICAgIH07Cit9CisKIHRlc3QoKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>