<?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>44164</bug_id>
          
          <creation_ts>2010-08-18 04:58:41 -0700</creation_ts>
          <short_desc>Implement persistance for IndexedDB ObjectStores</short_desc>
          <delta_ts>2010-08-19 08:03:17 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jeremy Orlow">jorlow</reporter>
          <assigned_to name="Jeremy Orlow">jorlow</assigned_to>
          <cc>abarth</cc>
    
    <cc>andreip</cc>
    
    <cc>bulach</cc>
    
    <cc>eric</cc>
    
    <cc>steveblock</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>266044</commentid>
    <comment_count>0</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-08-18 04:58:41 -0700</bug_when>
    <thetext>Implement persistance for IndexedDB ObjectStores</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266089</commentid>
    <comment_count>1</comment_count>
      <attachid>64703</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-08-18 07:18:07 -0700</bug_when>
    <thetext>Created attachment 64703
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266109</commentid>
    <comment_count>2</comment_count>
      <attachid>64713</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-08-18 08:08:16 -0700</bug_when>
    <thetext>Created attachment 64713
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266125</commentid>
    <comment_count>3</comment_count>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-08-18 08:38:57 -0700</bug_when>
    <thetext>nice stuff!
few comments below:

WebCore/storage/IDBDatabaseBackendImpl.cpp:101
 +      importObjectStores();
loadObjectStoreadMetadata() might be better.. &quot;import&quot; sounds like your transforming / dealing with actual data.

WebCore/platform/sql/SQLiteStatement.cpp:265
 +      if (!m_statement)
does the &quot;{&quot; rule apply per statement or per lines? should this be a block?

WebCore/storage/IDBDatabaseBackendImpl.cpp:137
 +      insert.bindInt(3, (int)autoIncrement);
are c-style casts allowed?

WebCore/storage/IDBObjectStoreBackendImpl.cpp:206
 +      insert.bindInt(3, (int)unique);
ditto

WebCore/storage/IDBObjectStoreBackendImpl.cpp:262
 +  void IDBObjectStoreBackendImpl::importIndexes()
loadIndexesMetadata() ?

WebCore/storage/IDBFactoryBackendImpl.cpp:85
 +          &quot;CREATE TABLE IF NOT EXISTS Indexes (id INTEGER PRIMARY KEY, name TEXT, keyPath TEXT, isUnique INTEGER)&quot;,
shouldn&apos;t index have an FK to ObjectStores(id) ?
also, is there &quot;alternate key&quot;? I suppose (name, objectStoreId) should be unique.

WebCore/storage/IDBObjectStoreBackendImpl.cpp:66
 +  static String whereClause(IDBKey* key)
passing IDBKeyType would be clearer (I thought this would be dealing with the actual value..)

WebCore/storage/IDBObjectStoreBackendImpl.cpp:101
 +      SQLiteStatement query(sqliteDatabase(), &quot;SELECT value FROM ObjectStoreData WHERE&quot; + whereClause(key.get()));
yeah, passing type would be clearer. also, adding the space after the WHERE and removing from the three places above would look simpler.

WebCore/storage/IDBObjectStoreBackendImpl.cpp:111
 +      callbacks-&gt;onSuccess(SerializedScriptValue::createFromWire(query.getColumnText(0)));
hmm, AFAICT this will break JSC, it doesn&apos;t provide &quot;fromWire&quot; :(

WebCore/storage/IDBObjectStoreBackendImpl.cpp:169
 +      putQuery.bindText(4, value-&gt;toWireString());
ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266154</commentid>
    <comment_count>4</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-08-18 09:15:33 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; nice stuff!
&gt; few comments below:
&gt; 
&gt; WebCore/storage/IDBDatabaseBackendImpl.cpp:101
&gt;  +      importObjectStores();
&gt; loadObjectStoreadMetadata() might be better.. &quot;import&quot; sounds like your transforming / dealing with actual data.

done 
 
&gt; WebCore/platform/sql/SQLiteStatement.cpp:265
&gt;  +      if (!m_statement)
&gt; does the &quot;{&quot; rule apply per statement or per lines? should this be a block?

I&apos;d agree normally, but the rest of the file does it this way.
 
&gt; WebCore/storage/IDBDatabaseBackendImpl.cpp:137
&gt;  +      insert.bindInt(3, (int)autoIncrement);
&gt; are c-style casts allowed?

fixed

&gt; WebCore/storage/IDBObjectStoreBackendImpl.cpp:206
&gt;  +      insert.bindInt(3, (int)unique);
&gt; ditto

fixed

&gt; WebCore/storage/IDBObjectStoreBackendImpl.cpp:262
&gt;  +  void IDBObjectStoreBackendImpl::importIndexes()
&gt; loadIndexesMetadata() ?

fixed

&gt; WebCore/storage/IDBFactoryBackendImpl.cpp:85
&gt;  +          &quot;CREATE TABLE IF NOT EXISTS Indexes (id INTEGER PRIMARY KEY, name TEXT, keyPath TEXT, isUnique INTEGER)&quot;,
&gt; shouldn&apos;t index have an FK to ObjectStores(id) ?
&gt; also, is there &quot;alternate key&quot;? I suppose (name, objectStoreId) should be unique.

did foreign key...couldn&apos;t do the alternate key as far as I could tell (without making it be my primary key)

&gt; WebCore/storage/IDBObjectStoreBackendImpl.cpp:66
&gt;  +  static String whereClause(IDBKey* key)
&gt; passing IDBKeyType would be clearer (I thought this would be dealing with the actual value..)

done

&gt; WebCore/storage/IDBObjectStoreBackendImpl.cpp:101
&gt;  +      SQLiteStatement query(sqliteDatabase(), &quot;SELECT value FROM ObjectStoreData WHERE&quot; + whereClause(key.get()));
&gt; yeah, passing type would be clearer. also, adding the space after the WHERE and removing from the three places above would look simpler.

done

&gt; WebCore/storage/IDBObjectStoreBackendImpl.cpp:111
&gt;  +      callbacks-&gt;onSuccess(SerializedScriptValue::createFromWire(query.getColumnText(0)));
&gt; hmm, AFAICT this will break JSC, it doesn&apos;t provide &quot;fromWire&quot; :(

It will be a major change to implement that for JSC.  Given that no one from JSC land seems to care about IndexedDB at the moment, we&apos;re going to punt on it.

&gt; WebCore/storage/IDBObjectStoreBackendImpl.cpp:169
&gt;  +      putQuery.bindText(4, value-&gt;toWireString());
&gt; ditto

yup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266156</commentid>
    <comment_count>5</comment_count>
      <attachid>64718</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-08-18 09:17:58 -0700</bug_when>
    <thetext>Created attachment 64718
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266163</commentid>
    <comment_count>6</comment_count>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2010-08-18 09:36:28 -0700</bug_when>
    <thetext>&gt; CREATE TABLE IF NOT EXISTS ObjectStores (id INTEGER PRIMARY KEY, name TEXT, keyPath TEXT, doAutoIncrement INTEGER)&quot;

You are doing a delete based on name. Please create an index on &apos;name&apos;.


&gt; CREATE TABLE IF NOT EXISTS Indexes (id INTEGER PRIMARY KEY, name TEXT, keyPath TEXT, isUnique INTEGER)&quot;

You may want to add a foreign key on ObjectStores and use cascade delete like so:

objectStoreID INTEGER REFERENCES ObjectStore(id) ON DELETE CASCADE</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266200</commentid>
    <comment_count>7</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-08-18 10:17:44 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; &gt; CREATE TABLE IF NOT EXISTS ObjectStores (id INTEGER PRIMARY KEY, name TEXT, keyPath TEXT, doAutoIncrement INTEGER)&quot;
&gt; 
&gt; You are doing a delete based on name. Please create an index on &apos;name&apos;.
&gt; 
&gt; 
&gt; &gt; CREATE TABLE IF NOT EXISTS Indexes (id INTEGER PRIMARY KEY, name TEXT, keyPath TEXT, isUnique INTEGER)&quot;
&gt; 
&gt; You may want to add a foreign key on ObjectStores and use cascade delete like so:
&gt; 
&gt; objectStoreID INTEGER REFERENCES ObjectStore(id) ON DELETE CASCADE

Added foreign keys, indexes, and fixed some style issue.  Please recheck all SQL stuff in this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266201</commentid>
    <comment_count>8</comment_count>
      <attachid>64727</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-08-18 10:18:17 -0700</bug_when>
    <thetext>Created attachment 64727
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266251</commentid>
    <comment_count>9</comment_count>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2010-08-18 10:59:35 -0700</bug_when>
    <thetext>Umm, what happened to IndexData table? You had that in the previous patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266333</commentid>
    <comment_count>10</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-08-18 13:17:02 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Umm, what happened to IndexData table? You had that in the previous patch.

Deleted since it&apos;s not used yet.  Will re add in next patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266614</commentid>
    <comment_count>11</comment_count>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-08-19 03:07:19 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; Umm, what happened to IndexData table? You had that in the previous patch.
&gt; 
&gt; Deleted since it&apos;s not used yet.  Will re add in next patch.

looks fine by me, ignorable comment:

WebCore/storage/IDBFactoryBackendImpl.cpp:93
 +          &quot;DROP TABLE IF EXISTS ObjectStoreData&quot;,
perhads drop &quot;Data&quot; ? it doesn&apos;t seem to add much.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266627</commentid>
    <comment_count>12</comment_count>
      <attachid>64727</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-08-19 04:21:07 -0700</bug_when>
    <thetext>Comment on attachment 64727
Patch

WebCore/storage/IDBFactoryBackendImpl.cpp:81
 +          &quot;CREATE TABLE IF NOT EXISTS MetaData (id INTEGER PRIMARY KEY, name TEXT, description TEXT, version TEXT)&quot;,
What&apos;s this id used for?

WebCore/storage/IDBObjectStoreBackendImpl.cpp:55
 +      loadIndexes();
Can we do this lazily? It looks like m_indexes isn&apos;t needed until script requests it?

WebCore/storage/IDBObjectStoreBackendImpl.cpp:75
 +          return &quot;keyString IS NULL  AND  keyDate IS NULL  AND  keyNumber IS NULL  AND  objectStoreId = ?&quot;;
Do we need the NULL tests for the &apos;other&apos; columns (except maybe the &apos;NULL&apos; type)? These should be NULL unless we have a logic error, right? If we want to test for logic errors, we could do that in an ASSERT/debug statement?

WebCore/storage/IDBObjectStoreBackendImpl.cpp:66
 +  static String whereClause(IDBKey::Type type)
When I first read this method, I assumed the returned clause would include &apos;WHERE&apos;. I think that makes more sense.

WebCore/storage/IDBObjectStoreBackendImpl.cpp:106
 +      query.bindInt64(2, m_id);
Could you use constants for these column indexes? Especially as they&apos;re implementation details of whereClause().

WebCore/storage/IDBObjectStoreBackendImpl.cpp:207
 +      SQLiteStatement insert(sqliteDatabase(), &quot;INSERT INTO Indexes (name, keyPath, isUnique) VALUES (?, ?, ?)&quot;);
This is missing the foreign key value</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266629</commentid>
    <comment_count>13</comment_count>
      <attachid>64727</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-08-19 04:38:22 -0700</bug_when>
    <thetext>Comment on attachment 64727
Patch

(In reply to comment #12)
&gt; (From update of attachment 64727 [details])
&gt; WebCore/storage/IDBFactoryBackendImpl.cpp:81
&gt;  +          &quot;CREATE TABLE IF NOT EXISTS MetaData (id INTEGER PRIMARY KEY, name TEXT, description TEXT, version TEXT)&quot;,
&gt; What&apos;s this id used for?

Nothing.  But if you don&apos;t have one, SQLite will create one anyway and just leave it unnamed.  So there&apos;s no reason not to.

&gt; WebCore/storage/IDBObjectStoreBackendImpl.cpp:55
&gt;  +      loadIndexes();
&gt; Can we do this lazily? It looks like m_indexes isn&apos;t needed until script requests it?

No, because meta-data is accessed synchronously.
 
&gt; WebCore/storage/IDBObjectStoreBackendImpl.cpp:75
&gt;  +          return &quot;keyString IS NULL  AND  keyDate IS NULL  AND  keyNumber IS NULL  AND  objectStoreId = ?&quot;;
&gt; Do we need the NULL tests for the &apos;other&apos; columns (except maybe the &apos;NULL&apos; type)? These should be NULL unless we have a logic error, right? If we want to test for logic errors, we could do that in an ASSERT/debug statement?

Yeah, I guess that makes sense.
 
&gt; WebCore/storage/IDBObjectStoreBackendImpl.cpp:66
&gt;  +  static String whereClause(IDBKey::Type type)
&gt; When I first read this method, I assumed the returned clause would include &apos;WHERE&apos;. I think that makes more sense.

k

&gt; WebCore/storage/IDBObjectStoreBackendImpl.cpp:106
&gt;  +      query.bindInt64(2, m_id);
&gt; Could you use constants for these column indexes? Especially as they&apos;re implementation details of whereClause().

I don&apos;t see a point to using constants.  They&apos;re tied to the SELECT statements directly above.  Putting a constant at the beginning of the file makes no sense.  Putting it next to the select seems only marginally better.

&gt; WebCore/storage/IDBObjectStoreBackendImpl.cpp:207
&gt;  +      SQLiteStatement insert(sqliteDatabase(), &quot;INSERT INTO Indexes (name, keyPath, isUnique) VALUES (?, ?, ?)&quot;);
&gt; This is missing the foreign key value

Indeed.


Will post another version soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266632</commentid>
    <comment_count>14</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-08-19 04:41:32 -0700</bug_when>
    <thetext>&gt; &gt; WebCore/storage/IDBObjectStoreBackendImpl.cpp:106
&gt; &gt;  +      query.bindInt64(2, m_id);
&gt; &gt; Could you use constants for these column indexes? Especially as they&apos;re implementation details of whereClause().
&gt; 
&gt; I don&apos;t see a point to using constants.  They&apos;re tied to the SELECT statements
&gt; directly above.  Putting a constant at the beginning of the file makes no
&gt; sense.  Putting it next to the select seems only marginally better.
My point is that they&apos;s tied to the implementation of whereClause(), so having a numbers like this elsewhere in the code seems brittle. Maybe put the constants next to whereClause()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266640</commentid>
    <comment_count>15</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-08-19 04:43:47 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; &gt; &gt; WebCore/storage/IDBObjectStoreBackendImpl.cpp:106
&gt; &gt; &gt;  +      query.bindInt64(2, m_id);
&gt; &gt; &gt; Could you use constants for these column indexes? Especially as they&apos;re implementation details of whereClause().
&gt; &gt; 
&gt; &gt; I don&apos;t see a point to using constants.  They&apos;re tied to the SELECT statements
&gt; &gt; directly above.  Putting a constant at the beginning of the file makes no
&gt; &gt; sense.  Putting it next to the select seems only marginally better.
&gt; My point is that they&apos;s tied to the implementation of whereClause(), so having a numbers like this elsewhere in the code seems brittle. Maybe put the constants next to whereClause()?

Actually I see another problem with it as well.  Will try to make it better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266661</commentid>
    <comment_count>16</comment_count>
      <attachid>64831</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-08-19 05:11:54 -0700</bug_when>
    <thetext>Created attachment 64831
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266710</commentid>
    <comment_count>17</comment_count>
      <attachid>64831</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-08-19 07:12:52 -0700</bug_when>
    <thetext>Comment on attachment 64831
Patch

WebCore/storage/IDBObjectStoreBackendImpl.cpp:83
 +  static int bindKey(SQLiteStatement&amp; query, int column, IDBKey* key)
I&apos;m not sure it makes much sense for this to be a separate method

WebCore/storage/IDBObjectStoreBackendImpl.cpp:101
 +  static void bindWhereClause(SQLiteStatement&amp; query, int64_t id, IDBKey* key)
Nice. Is bindWhereClauseStatement() more clear?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266719</commentid>
    <comment_count>18</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-08-19 07:23:11 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (From update of attachment 64831 [details])
&gt; WebCore/storage/IDBObjectStoreBackendImpl.cpp:83
&gt;  +  static int bindKey(SQLiteStatement&amp; query, int column, IDBKey* key)
&gt; I&apos;m not sure it makes much sense for this to be a separate method

In my next patch, I use it.  :-)
 
&gt; WebCore/storage/IDBObjectStoreBackendImpl.cpp:101
&gt;  +  static void bindWhereClause(SQLiteStatement&amp; query, int64_t id, IDBKey* key)
&gt; Nice. Is bindWhereClauseStatement() more clear?

Personally, I don&apos;t think so.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266727</commentid>
    <comment_count>19</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-08-19 07:38:56 -0700</bug_when>
    <thetext>Committed r65667: &lt;http://trac.webkit.org/changeset/65667&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266744</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-19 08:03:17 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/65667 might have broken Chromium Mac Release</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64703</attachid>
            <date>2010-08-18 07:18:07 -0700</date>
            <delta_ts>2010-08-18 08:08:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-44164-20100818151804.patch</filename>
            <type>text/plain</type>
            <size>26685</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NTg5NTgwYjJmOGRlMjNmNmExYjcyNWQ1MGUxMjMxMjZmZjc4OGEyZC4uZjczM2RkOWIyMmM5NTdi
MTNjMzFjNDMzMjAzOTI2YWE2MjFmY2NmNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MiBAQAorMjAxMC0wOC0xOCAgSmVy
ZW15IE9ybG93ICA8am9ybG93QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgcGVyc2lzdGFuY2UgZm9yIEluZGV4
ZWREQiBPYmplY3RTdG9yZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQ0MTY0CisKKyAgICAgICAgR2V0IHJpZCBvZiB0aGUgaW4tbWVtb3J5IHN0b3Jh
Z2Ugb2YgT2JqZWN0U3RvcmVzIGFuZCBpbnN0ZWFkCisgICAgICAgIHVzZSBTUUwgYmFja2VkIG1l
bW9yeS4KKworICAgICAgICBFeGlzdGluZyB0ZXN0cyBnaXZlIG1vc3Qgb2YgdGhlIGNvdmVyYWdl
LiAgV2lsbCB1cGRhdGUgdGhlIG1hbnVhbAorICAgICAgICB0ZXN0IGluIHRoZSBuZXh0IHBhdGNo
ICh3aGljaCB3aWxsIGFsc28gcmUtd29yayBkYXRhYmFzZS5kZXNjcmlwdGlvbikuCisKKyAgICAg
ICAgKiBtYW51YWwtdGVzdHMvaW5kZXhlZC1kYXRhYmFzZS5odG1sOiBHZXQgcmlkIG9mIHJhY2Ug
d2hlcmUgeW91IGNhbiBjbGljayBiZWZvcmUgdGhlIHBhZ2UgbG9hZHMuCisgICAgICAgICogcGxh
dGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5jcHA6IEFkZCB0d28gaGVscGVyIGZ1bmN0aW9ucwor
ICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpiaW5kSW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlNRTGl0ZVN0YXRlbWVudDo6aXNDb2x1bW5OdWxsKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9zcWwvU1FMaXRlU3RhdGVtZW50Lmg6CisgICAgICAgICogc3RvcmFnZS9JREJDdXJzb3JCYWNr
ZW5kSW1wbC5jcHA6IAorICAgICAgICAqIHN0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6
OmNyZWF0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6OnJlbW92ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNl
QmFja2VuZEltcGw6OmltcG9ydE9iamVjdFN0b3Jlcyk6CisgICAgICAgICogc3RvcmFnZS9JREJE
YXRhYmFzZUJhY2tlbmRJbXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tl
bmRJbXBsOjpzcWxpdGVEYXRhYmFzZSk6CisgICAgICAgICogc3RvcmFnZS9JREJGYWN0b3J5QmFj
a2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlVGFibGVzKToKKyAgICAgICAg
KiBzdG9yYWdlL0lEQkluZGV4QmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURC
SW5kZXhCYWNrZW5kSW1wbDo6SURCSW5kZXhCYWNrZW5kSW1wbCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJJbmRleEJhY2tlbmRJbXBsOjpzcWxpdGVEYXRhYmFzZSk6CisgICAgICAgICogc3RvcmFn
ZS9JREJJbmRleEJhY2tlbmRJbXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleEJhY2tl
bmRJbXBsOjpjcmVhdGUpOgorICAgICAgICAqIHN0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OndoZXJlQ2xhdXNl
KToKKyAgICAgICAgKFdlYkNvcmU6OmJpbmRLZXkpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpyZW1vdmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6Y3JlYXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6cmVtb3ZlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6b3BlbkN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjppbXBvcnRJbmRleGVzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OnNxbGl0ZURhdGFiYXNlKToKKyAgICAgICAgKiBzdG9yYWdl
L0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpkYXRhYmFzZSk6CisKIDIwMTAtMDgtMTEgIEplcmVteSBPcmxvdyAg
PGpvcmxvd0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQmVnaW5uaW5ncyBvZiBJbmRleGVkREIg
cGVyc2lzdGFuY2UgKyBJREJEYXRhYmFzZS5kZXNjcmlwdGlvbiBmbGVzaGVkIG91dApkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9tYW51YWwtdGVzdHMvaW5kZXhlZC1kYXRhYmFzZS5odG1sIGIvV2ViQ29y
ZS9tYW51YWwtdGVzdHMvaW5kZXhlZC1kYXRhYmFzZS5odG1sCmluZGV4IGQwZmIzODE0ZDcwOTlj
NDg3NjA4N2QwZTQ1NTJiZDU1NWE3NDdkMzQuLmJjYzhmZTQzNTVlZWI5YWVmZTE5OWUzYzVmZGVh
OTBmZThmZWQwZDQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbWFudWFsLXRlc3RzL2luZGV4ZWQtZGF0
YWJhc2UuaHRtbAorKysgYi9XZWJDb3JlL21hbnVhbC10ZXN0cy9pbmRleGVkLWRhdGFiYXNlLmh0
bWwKQEAgLTE2LDYgKzE2LDggQEAKIAogPHNjcmlwdD4KIAorICAgIHJlYWR5Q291bnQgPSAwOwor
CiAgICAgaWYgKCEoJ2luZGV4ZWREQicgaW4gd2luZG93KSkKICAgICAgICAgZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoImVuYWJsZWQiKS5pbm5lckhUTUwgPSAiPGZvbnQgY29sb3I9cmVkPllvdXIg
YnVpbGQgZG9lcyBOT1Qgc2VlbSB0byBoYXZlIGl0IGVuYWJsZWQuICBTbyBhbGwgY29kZSBvbiB0
aGlzIHBhZ2UgaXMgZGlzYWJsZWQuPC9mb250PiI7CiAgICAgZWxzZSB7CkBAIC0yNSw2ICsyNyw3
IEBACiAgICAgICAgIHJlcXVlc3Qub25zdWNjZXNzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAg
ICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzdWx0IikuaW5uZXJIVE1MID0gIjxmb250IGNv
bG9yPWdyZWVuPlN1Y2Nlc3MhPC9mb250PiI7CiAgICAgICAgICAgICB3aW5kb3cubmFtZURCID0g
ZXZlbnQucmVzdWx0OworICAgICAgICAgICAgKytyZWFkeUNvdW50OwogICAgICAgICB9OwogICAg
ICAgICByZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgIGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJyZXN1bHQiKS5pbm5lckhUTUwgPSAiPGZvbnQgY29sb3I9cmVkPkVy
cm9yOiAiICsgZXZlbnQubWVzc2FnZSArICIuPC9mb250PiI7CkBAIC0zMywxNyArMzYsMjggQEAK
ICAgICAgICAgcmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKCJhbm90aGVyIiwgInRlc3Qgb2YgdGhl
IGRlc2NyaXB0aW9uIGF0dHJpYnV0ZSIpOwogICAgICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGZ1
bmN0aW9uKCkgewogICAgICAgICAgICAgd2luZG93LmFub3RoZXJEQiA9IGV2ZW50LnJlc3VsdDsK
KyAgICAgICAgICAgICsrcmVhZHlDb3VudDsKICAgICAgICAgfTsKICAgICB9CiAKICAgICBmdW5j
dGlvbiB1cGRhdGVEZXNjcmlwdGlvbigpCiAgICAgeworICAgICAgICBpZiAocmVhZENvdW50IDwg
MikgeworICAgICAgICAgICAgYWxlcnQoIlRoZSBwYWdlIGhhcyBub3QgZmluaXNoZWQgbG9hZGlu
Zy4gIEhvbGQgb24gYSBzZWMuLi4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CiAgICAgICAgIGluZGV4ZWREQi5vcGVuKCJuYW1lIiwgInRlc3Qgb2YgdGhlIGRlc2NyaXB0aW9u
IGF0dHJpYnV0ZSIpOwogICAgICAgICBpbmRleGVkREIub3BlbigiYW5vdGhlciIsICJ4eXoiKTsK
ICAgICB9CiAKICAgICBmdW5jdGlvbiByZWFkRGVzY3JpcHRpb24oKQogICAgIHsKKyAgICAgICAg
aWYgKHJlYWRDb3VudCA8IDIpIHsKKyAgICAgICAgICAgIGFsZXJ0KCJUaGUgcGFnZSBoYXMgbm90
IGZpbmlzaGVkIGxvYWRpbmcuICBIb2xkIG9uIGEgc2VjLi4uIik7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKwogICAgICAgICBpZiAod2luZG93Lm5hbWVEQi5kZXNjcmlwdGlvbiAh
PSAidGVzdCBvZiB0aGUgZGVzY3JpcHRpb24gYXR0cmlidXRlIikgewogICAgICAgICAgICAgLy8g
U2luY2Ugd2UgcGFzc2VkIGluIG5vdGhpbmcsIHRoZSBkZXNjcmlwdGlvbiBzaG91bGQgbm90IGJl
IHJlc2V0LgogICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRlc2NyaXB0aW9u
IikuaW5uZXJIVE1MID0gIjxmb250IGNvbG9yPXJlZD5GYWlsdXJlOiAoRGF0YWJhc2UgJ25hbWUn
IHdhcyB0aGlzOiAiICsgd2luZG93Lm5hbWVEQi5kZXNjcmlwdGlvbiArICIpLjwvZm9udD4iOwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmNwcCBiL1dl
YkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5jcHAKaW5kZXggNGRjODBmYjVhMGQ0
Nzk3ODlhZWRjMTEyMDdjZTA2OTQ0M2YxZDgzZC4uMDM3ZWM3OWYzMmQzNzAxMzdkZjI0NGJkYjQ2
ZjhmMzAzY2IzOTAwYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3Rh
dGVtZW50LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3Bw
CkBAIC0xOTIsNiArMTkyLDE0IEBAIGludCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRUZXh0KGludCBp
bmRleCwgY29uc3QgU3RyaW5nJiB0ZXh0KQogICAgIHJldHVybiBzcWxpdGUzX2JpbmRfdGV4dDE2
KG1fc3RhdGVtZW50LCBpbmRleCwgY2hhcmFjdGVycywgc2l6ZW9mKFVDaGFyKSAqIHRleHQubGVu
Z3RoKCksIFNRTElURV9UUkFOU0lFTlQpOwogfQogCitpbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5k
SW50KGludCBpbmRleCwgaW50IGludGVnZXIpCit7CisgICAgQVNTRVJUKG1faXNQcmVwYXJlZCk7
CisgICAgQVNTRVJUKGluZGV4ID4gMCk7CisgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVk
PihpbmRleCkgPD0gYmluZFBhcmFtZXRlckNvdW50KCkpOworCisgICAgcmV0dXJuIHNxbGl0ZTNf
YmluZF9pbnQobV9zdGF0ZW1lbnQsIGluZGV4LCBpbnRlZ2VyKTsKK30KIAogaW50IFNRTGl0ZVN0
YXRlbWVudDo6YmluZEludDY0KGludCBpbmRleCwgaW50NjRfdCBpbnRlZ2VyKQogewpAQCAtMjUx
LDYgKzI1OSwxOCBAQCBpbnQgU1FMaXRlU3RhdGVtZW50Ojpjb2x1bW5Db3VudCgpCiAgICAgcmV0
dXJuIHNxbGl0ZTNfZGF0YV9jb3VudChtX3N0YXRlbWVudCk7CiB9CiAKK2Jvb2wgU1FMaXRlU3Rh
dGVtZW50Ojppc0NvbHVtbk51bGwoaW50IGNvbCkKK3sKKyAgICBBU1NFUlQoY29sID49IDApOwor
ICAgIGlmICghbV9zdGF0ZW1lbnQpCisgICAgICAgIGlmIChwcmVwYXJlQW5kU3RlcCgpICE9IFNR
TElURV9ST1cpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGNvbHVtbkNvdW50
KCkgPD0gY29sKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gc3FsaXRlM19j
b2x1bW5fdHlwZShtX3N0YXRlbWVudCwgY29sKSA9PSBTUUxJVEVfTlVMTDsKK30KKwogU3RyaW5n
IFNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uTmFtZShpbnQgY29sKQogewogICAgIEFTU0VSVChj
b2wgPj0gMCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1l
bnQuaCBiL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5oCmluZGV4IGU2MmI0
ZjBlYTkxNTVlMjQyMDEyZmNiMGYxODkwZWQwMmIyMmY1MWQuLjE0NDRmMGVlZWQxOWRjMmEzM2My
YWE5ZWQ0NGRmMzRjZTFhZWQ3OGQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NR
TGl0ZVN0YXRlbWVudC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVu
dC5oCkBAIC00Miw2ICs0Miw3IEBAIHB1YmxpYzoKICAgICBpbnQgcHJlcGFyZSgpOwogICAgIGlu
dCBiaW5kQmxvYihpbnQgaW5kZXgsIGNvbnN0IHZvaWQqIGJsb2IsIGludCBzaXplKTsKICAgICBp
bnQgYmluZFRleHQoaW50IGluZGV4LCBjb25zdCBTdHJpbmcmKTsKKyAgICBpbnQgYmluZEludChp
bnQgaW5kZXgsIGludCk7CiAgICAgaW50IGJpbmRJbnQ2NChpbnQgaW5kZXgsIGludDY0X3QpOwog
ICAgIGludCBiaW5kRG91YmxlKGludCBpbmRleCwgZG91YmxlKTsKICAgICBpbnQgYmluZE51bGwo
aW50IGluZGV4KTsKQEAgLTcwLDYgKzcxLDcgQEAgcHVibGljOgogICAgIC8vIHJldHVybmVkIGlu
IHRoZSBsYXN0IHN0ZXAoKQogICAgIGludCBjb2x1bW5Db3VudCgpOwogICAgIAorICAgIGJvb2wg
aXNDb2x1bW5OdWxsKGludCBjb2wpOwogICAgIFN0cmluZyBnZXRDb2x1bW5OYW1lKGludCBjb2wp
OwogICAgIFNRTFZhbHVlIGdldENvbHVtblZhbHVlKGludCBjb2wpOwogICAgIFN0cmluZyBnZXRD
b2x1bW5UZXh0KGludCBjb2wpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNv
ckJhY2tlbmRJbXBsLmNwcCBiL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3JCYWNrZW5kSW1wbC5j
cHAKaW5kZXggNGUwOGI4ZjQ4MGViYzU5MWUyNWM0Y2ZkNTdiNDNhMDBhYWYwNjJhNy4uZDMyOThi
MzgwZGM4ZjliYjk3YzYzOWUzNWFiMzliMDc2YmY1MWRkZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9z
dG9yYWdlL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvSURC
Q3Vyc29yQmFja2VuZEltcGwuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiSURCS2V5
UmFuZ2UuaCIKICNpbmNsdWRlICJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgiCiAjaW5jbHVk
ZSAiSURCUmVxdWVzdC5oIgorI2luY2x1ZGUgIlNRTGl0ZURhdGFiYXNlLmgiCiAjaW5jbHVkZSAi
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcCBiL1dlYkNvcmUv
c3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAppbmRleCBlNTUwZTE4Njk0ZTUwMzMy
ODA1N2FmMjMwOTYwZjExMDQ5MWQzNDQ1Li5mZjU5M2UwZjVkODI5MzAzZmMzMjQ3NTU0NjM5NzJi
MjgyMWI1MjkwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5k
SW1wbC5jcHAKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3Bw
CkBAIC05Nyw2ICs5Nyw4IEBAIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OklEQkRhdGFiYXNlQmFj
a2VuZEltcGwoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmCiAKICAgICBpZiAoIXJl
c3VsdCB8fCBtX2Rlc2NyaXB0aW9uICE9IGZvdW5kRGVzY3JpcHRpb24pCiAgICAgICAgIHNldE1l
dGFEYXRhKG1fc3FsaXRlRGF0YWJhc2UuZ2V0KCksIG1fbmFtZSwgbV9kZXNjcmlwdGlvbiwgbV92
ZXJzaW9uKTsKKworICAgIGltcG9ydE9iamVjdFN0b3JlcygpOwogfQogCiBJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsOjp+SURCRGF0YWJhc2VCYWNrZW5kSW1wbCgpCkBAIC0xMjcsNyArMTI5LDE4IEBA
IHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBS
ZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9yZSA9IElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZShuYW1lLCBrZXlQYXRoLCBhdXRvSW5jcmVtZW50
KTsKKyAgICBTUUxpdGVTdGF0ZW1lbnQgaW5zZXJ0KHNxbGl0ZURhdGFiYXNlKCksICJJTlNFUlQg
SU5UTyBPYmplY3RTdG9yZXMgKG5hbWUsIGtleVBhdGgsIGRvQXV0b0luY3JlbWVudCkgVkFMVUVT
ICg/LCA/LCA/KSIpOworICAgIGJvb2wgb2sgPSBpbnNlcnQucHJlcGFyZSgpID09IFNRTFJlc3Vs
dE9rOworICAgIEFTU0VSVChvayk7IC8vIEZJWE1FOiBCZXR0ZXIgZXJyb3IgaGFuZGxpbmcuCisg
ICAgaW5zZXJ0LmJpbmRUZXh0KDEsIG5hbWUpOworICAgIGluc2VydC5iaW5kVGV4dCgyLCBrZXlQ
YXRoKTsKKyAgICBpbnNlcnQuYmluZEludCgzLCAoaW50KWF1dG9JbmNyZW1lbnQpOworICAgIG9r
ID0gaW5zZXJ0LnN0ZXAoKSA9PSBTUUxSZXN1bHREb25lOworICAgIEFTU0VSVChvayk7IC8vIEZJ
WE1FOiBCZXR0ZXIgZXJyb3IgaGFuZGxpbmcuCisgICAgaW50NjRfdCBpZCA9IHNxbGl0ZURhdGFi
YXNlKCkubGFzdEluc2VydFJvd0lEKCk7CisKKyAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9yZSA9IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNy
ZWF0ZSh0aGlzLCBpZCwgbmFtZSwga2V5UGF0aCwgYXV0b0luY3JlbWVudCk7CisgICAgQVNTRVJU
KG9iamVjdFN0b3JlLT5uYW1lKCkgPT0gbmFtZSk7CiAgICAgbV9vYmplY3RTdG9yZXMuc2V0KG5h
bWUsIG9iamVjdFN0b3JlKTsKICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhvYmplY3RTdG9yZS5y
ZWxlYXNlKCkpOwogfQpAQCAtMTQ2LDYgKzE1OSwxNiBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6OnJlbW92ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJ
RAogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgU1FMaXRlU3RhdGVtZW50IGRlbGV0ZVF1
ZXJ5KHNxbGl0ZURhdGFiYXNlKCksICJERUxFVEUgRlJPTSBPYmplY3RTdG9yZXMgV0hFUkUgbmFt
ZSA9ID8iKTsKKyAgICBib29sIG9rID0gZGVsZXRlUXVlcnkucHJlcGFyZSgpID09IFNRTFJlc3Vs
dE9rOworICAgIEFTU0VSVChvayk7IC8vIEZJWE1FOiBCZXR0ZXIgZXJyb3IgaGFuZGxpbmcuCisg
ICAgZGVsZXRlUXVlcnkuYmluZFRleHQoMSwgbmFtZSk7CisgICAgb2sgPSBkZWxldGVRdWVyeS5z
dGVwKCkgPT0gU1FMUmVzdWx0RG9uZTsKKyAgICBBU1NFUlQob2spOyAvLyBGSVhNRTogQmV0dGVy
IGVycm9yIGhhbmRsaW5nLgorCisgICAgLy8gRklYTUU6IERlbGV0ZSBhbGwgaW5kZXhlcyBhc3Nv
Y2lhdGVkIHdpdGggdGhpcyBvYmplY3Qgc3RvcmUgKGFuZCBoYXZlIHRoYXQgY29kZSBkZWxldGUg
YWxsIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbmRleGVzKS4KKyAgICAvLyBGSVhNRTogRGVs
ZXRlIGFsbCBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG9iamVjdCBzdG9yZS4KKwogICAgIG1f
b2JqZWN0U3RvcmVzLnJlbW92ZShuYW1lKTsKICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcygpOwog
fQpAQCAtMTU3LDYgKzE4MCwyMiBAQCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZT4gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6dHJhbnNhY3Rpb24oRAogICAgIHJldHVy
biAwOwogfQogCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmltcG9ydE9iamVjdFN0b3Jl
cygpCit7CisgICAgU1FMaXRlU3RhdGVtZW50IG9iamVjdFN0b3Jlc1F1ZXJ5KHNxbGl0ZURhdGFi
YXNlKCksICJTRUxFQ1QgaWQsIG5hbWUsIGtleVBhdGgsIGRvQXV0b0luY3JlbWVudCBGUk9NIE9i
amVjdFN0b3JlcyIpOworICAgIGJvb2wgb2sgPSBvYmplY3RTdG9yZXNRdWVyeS5wcmVwYXJlKCkg
PT0gU1FMUmVzdWx0T2s7CisgICAgQVNTRVJUKG9rKTsgLy8gRklYTUU6IEJldHRlciBlcnJvciBo
YW5kbGluZz8KKworICAgIHdoaWxlIChvYmplY3RTdG9yZXNRdWVyeS5zdGVwKCkgPT0gU1FMUmVz
dWx0Um93KSB7CisgICAgICAgIGludDY0X3QgaWQgPSBvYmplY3RTdG9yZXNRdWVyeS5nZXRDb2x1
bW5JbnQ2NCgwKTsKKyAgICAgICAgU3RyaW5nIG5hbWUgPSBvYmplY3RTdG9yZXNRdWVyeS5nZXRD
b2x1bW5UZXh0KDEpOworICAgICAgICBTdHJpbmcga2V5UGF0aCA9IG9iamVjdFN0b3Jlc1F1ZXJ5
LmdldENvbHVtblRleHQoMik7CisgICAgICAgIGJvb2wgYXV0b0luY3JlbWVudCA9ICEhb2JqZWN0
U3RvcmVzUXVlcnkuZ2V0Q29sdW1uSW50KDMpOworCisgICAgICAgIG1fb2JqZWN0U3RvcmVzLnNl
dChuYW1lLCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGUodGhpcywgaWQsIG5hbWUs
IGtleVBhdGgsIGF1dG9JbmNyZW1lbnQpKTsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaCBiL1dlYkNvcmUvc3RvcmFn
ZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgKaW5kZXggNjBiZWMxZjc4Nzg3Y2ExZWY5Y2JmNDgz
MDVhOWM4OWYzNjVjYTM5Ni4uYjZiOTFjZmRiMzI2OWM3ODY3YmZiNGI5ZDM1NWY5OTczOGM3MWVl
NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaAor
KysgYi9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oCkBAIC00Niw2ICs0
Niw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5JREJEYXRhYmFzZUJhY2tlbmRJbXBsKCk7CiAK
ICAgICB2b2lkIHNldERlc2NyaXB0aW9uKGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24pOworICAg
IFNRTGl0ZURhdGFiYXNlJiBzcWxpdGVEYXRhYmFzZSgpIGNvbnN0IHsgcmV0dXJuICptX3NxbGl0
ZURhdGFiYXNlLmdldCgpOyB9CiAKICAgICAvLyBJbXBsZW1lbnRzIElEQkRhdGFiYXNlCiAgICAg
dmlydHVhbCBTdHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQpAQCAtNjAsNiAr
NjEsOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIElEQkRhdGFiYXNlQmFja2VuZEltcGwoY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uLCBQYXNzT3duUHRyPFNR
TGl0ZURhdGFiYXNlPiBkYXRhYmFzZSk7CiAKKyAgICB2b2lkIGltcG9ydE9iamVjdFN0b3Jlcygp
OworCiAgICAgT3duUHRyPFNRTGl0ZURhdGFiYXNlPiBtX3NxbGl0ZURhdGFiYXNlOwogCiAgICAg
U3RyaW5nIG1fbmFtZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFj
a2VuZEltcGwuY3BwIGIvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAK
aW5kZXggOTA1NzI2ZmM5OGI3MjhiNDBiYmY5ODNmNjhiNWMyZGRlNzIyOGQzYy4uZjBlNjVlYWY3
MmEwZTA4ZmE1Nzc3NzI1ZjI4MGNhYTBhNzhlNDFhYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9y
YWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0lEQkZh
Y3RvcnlCYWNrZW5kSW1wbC5jcHAKQEAgLTc1LDggKzc1LDE4IEBAIHN0YXRpYyBQYXNzT3duUHRy
PFNRTGl0ZURhdGFiYXNlPiBvcGVuU1FMaXRlRGF0YWJhc2UoU2VjdXJpdHlPcmlnaW4qIHNlY3Vy
aXR5T3JpCiAKIHN0YXRpYyBib29sIGNyZWF0ZVRhYmxlcyhTUUxpdGVEYXRhYmFzZSogc3FsaXRl
RGF0YWJhc2UpCiB7CisgICAgLy8gRklYTUU6IFJlbW92ZSBhbGwgdGhlIGRyb3AgdGFibGUgY29t
bWFuZHMgb25jZSB0aGUgb24gZGlzayBzdHJ1Y3R1cmUgc3RhYmlsaXplcy4KICAgICBzdGF0aWMg
Y29uc3QgY2hhciogY29tbWFuZHNbXSA9IHsKLSAgICAgICAgIkNSRUFURSBUQUJMRSBJRiBOT1Qg
RVhJU1RTIE1ldGFEYXRhIChuYW1lIFRFWFQsIGRlc2NyaXB0aW9uIFRFWFQsIHZlcnNpb24gVEVY
VCkiCisgICAgICAgICJEUk9QIFRBQkxFIElGIEVYSVNUUyBNZXRhRGF0YSIsCisgICAgICAgICJD
UkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBNZXRhRGF0YSAoaWQgSU5URUdFUiBQUklNQVJZIEtF
WSwgbmFtZSBURVhULCBkZXNjcmlwdGlvbiBURVhULCB2ZXJzaW9uIFRFWFQpIiwKKyAgICAgICAg
IkRST1AgVEFCTEUgSUYgRVhJU1RTIE9iamVjdFN0b3JlcyIsCisgICAgICAgICJDUkVBVEUgVEFC
TEUgSUYgTk9UIEVYSVNUUyBPYmplY3RTdG9yZXMgKGlkIElOVEVHRVIgUFJJTUFSWSBLRVksIG5h
bWUgVEVYVCwga2V5UGF0aCBURVhULCBkb0F1dG9JbmNyZW1lbnQgSU5URUdFUikiLAorICAgICAg
ICAiRFJPUCBUQUJMRSBJRiBFWElTVFMgSW5kZXhlcyIsCisgICAgICAgICJDUkVBVEUgVEFCTEUg
SUYgTk9UIEVYSVNUUyBJbmRleGVzIChpZCBJTlRFR0VSIFBSSU1BUlkgS0VZLCBuYW1lIFRFWFQs
IGtleVBhdGggVEVYVCwgaXNVbmlxdWUgSU5URUdFUikiLAorICAgICAgICAiRFJPUCBUQUJMRSBJ
RiBFWElTVFMgT2JqZWN0U3RvcmVEYXRhIiwKKyAgICAgICAgIkNSRUFURSBUQUJMRSBJRiBOT1Qg
RVhJU1RTIE9iamVjdFN0b3JlRGF0YSAoaWQgSU5URUdFUiBQUklNQVJZIEtFWSwga2V5X3N0cmlu
ZyBURVhULCBrZXlfZGF0ZSBJTlRFR0VSLCBrZXlfbnVtYmVyIElOVEVHRVIsIHZhbHVlIFRFWFQp
IiwKKyAgICAgICAgIkRST1AgVEFCTEUgSUYgRVhJU1RTIEluZGV4RGF0YSIsCisgICAgICAgICJD
UkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBJbmRleERhdGEgKGlkIElOVEVHRVIgUFJJTUFSWSBL
RVksIGtleV9zdHJpbmcgVEVYVCwga2V5X2RhdGUgSU5URUdFUiwga2V5X251bWJlciBJTlRFR0VS
LCB2YWx1ZSBJTlRFR0VSKSIKICAgICAgICAgfTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgYXJyYXlzaXplKGNvbW1hbmRzKTsgKytpKSB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3Jh
Z2UvSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAgYi9XZWJDb3JlL3N0b3JhZ2UvSURCSW5kZXhCYWNr
ZW5kSW1wbC5jcHAKaW5kZXggNDA2ZTM3ZjZmZDE3OWQ0ZWE4NGE4MWY1NjlmMTE0NjZkYzMzZmEz
OS4uMTgwZmYxZDhiZWQyNzdjYTBkYTkzODVjODI5MzEyZThkYzY3N2I0NSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4QmFja2VuZEltcGwuY3BwCisrKyBiL1dlYkNvcmUvc3Rv
cmFnZS9JREJJbmRleEJhY2tlbmRJbXBsLmNwcApAQCAtMjgsMTAgKzI4LDE2IEBACiAKICNpZiBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAorI2luY2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZElt
cGwuaCIKKyNpbmNsdWRlICJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgiCisjaW5jbHVkZSAi
U1FMaXRlRGF0YWJhc2UuaCIKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1JREJJbmRleEJhY2tl
bmRJbXBsOjpJREJJbmRleEJhY2tlbmRJbXBsKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3Ry
aW5nJiBrZXlQYXRoLCBib29sIHVuaXF1ZSkKLSAgICA6IG1fbmFtZShuYW1lKQorSURCSW5kZXhC
YWNrZW5kSW1wbDo6SURCSW5kZXhCYWNrZW5kSW1wbChJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
KiBvYmplY3RTdG9yZSwgaW50NjRfdCBpZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJp
bmcmIGtleVBhdGgsIGJvb2wgdW5pcXVlKQorICAgIDogbV9vYmplY3RTdG9yZShvYmplY3RTdG9y
ZSkKKyAgICAsIG1faWQoaWQpCisgICAgLCBtX25hbWUobmFtZSkKICAgICAsIG1fa2V5UGF0aChr
ZXlQYXRoKQogICAgICwgbV91bmlxdWUodW5pcXVlKQogewpAQCAtNDEsNiArNDcsMTEgQEAgSURC
SW5kZXhCYWNrZW5kSW1wbDo6fklEQkluZGV4QmFja2VuZEltcGwoKQogewogfQogCitTUUxpdGVE
YXRhYmFzZSYgSURCSW5kZXhCYWNrZW5kSW1wbDo6c3FsaXRlRGF0YWJhc2UoKSBjb25zdAorewor
ICAgIHJldHVybiBtX29iamVjdFN0b3JlLT5kYXRhYmFzZSgpLT5zcWxpdGVEYXRhYmFzZSgpOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRleEJhY2tlbmRJbXBs
LmggYi9XZWJDb3JlL3N0b3JhZ2UvSURCSW5kZXhCYWNrZW5kSW1wbC5oCmluZGV4IGNhM2YwMWVh
M2RjYTgzZjc3ZDlkODJlNTdmZDAxNGI0YWM5ZWY0NTkuLmFjZjZiMWYyMGZjYTZkMWMxMmFhODBh
YTM1YjM0NmQyMTI2MWQyNzEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRleEJh
Y2tlbmRJbXBsLmgKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4QmFja2VuZEltcGwuaApA
QCAtMzIsMTEgKzMyLDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDsKK2NsYXNzIFNRTGl0ZURhdGFiYXNlOworCiBjbGFzcyBJREJJ
bmRleEJhY2tlbmRJbXBsIDogcHVibGljIElEQkluZGV4QmFja2VuZEludGVyZmFjZSB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gY3JlYXRlKGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIHVuaXF1ZSkKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBjcmVhdGUoSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbCogb2JqZWN0U3RvcmUsIGludDY0X3QgaWQsIGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIHVuaXF1ZSkKICAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgSURCSW5kZXhCYWNrZW5kSW1wbChuYW1lLCBrZXlQYXRoLCB1
bmlxdWUpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJJbmRleEJhY2tlbmRJbXBs
KG9iamVjdFN0b3JlLCBpZCwgbmFtZSwga2V5UGF0aCwgdW5pcXVlKSk7CiAgICAgfQogICAgIHZp
cnR1YWwgfklEQkluZGV4QmFja2VuZEltcGwoKTsKIApAQCAtNDYsOCArNDksMTMgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgYm9vbCB1bmlxdWUoKSB7IHJldHVybiBtX3VuaXF1ZTsgfQogCiBwcml2
YXRlOgotICAgIElEQkluZGV4QmFja2VuZEltcGwoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBT
dHJpbmcmIGtleVBhdGgsIGJvb2wgdW5pcXVlKTsKKyAgICBJREJJbmRleEJhY2tlbmRJbXBsKElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGwqLCBpbnQ2NF90IGlkLCBjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCB1bmlxdWUpOworCisgICAgU1FMaXRlRGF0YWJh
c2UmIHNxbGl0ZURhdGFiYXNlKCkgY29uc3Q7CisKKyAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbD4gbV9vYmplY3RTdG9yZTsKIAorICAgIGludDY0X3QgbV9pZDsKICAgICBTdHJp
bmcgbV9uYW1lOwogICAgIFN0cmluZyBtX2tleVBhdGg7CiAgICAgYm9vbCBtX3VuaXF1ZTsKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcCBi
L1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAppbmRleCA5NzMy
YmMxZWJkYWZiNTAwZTgyN2RhYmI2MjhhNTZiZmM1ZTExMDk5Li4zMTA4ZDRhYzRkZjgwZDk4NjZi
NDFiMjQ1NjhjNDdlYmI2OTFlYzVkIDEwMDc1NQotLS0gYS9XZWJDb3JlL3N0b3JhZ2UvSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0
b3JlQmFja2VuZEltcGwuY3BwCkBAIC0zMCwxMCArMzAsMTIgQEAKICNpbmNsdWRlICJJREJCaW5k
aW5nVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiSURCQ2FsbGJhY2tzLmgiCiAjaW5jbHVkZSAiSURC
Q3Vyc29yQmFja2VuZEltcGwuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgi
CiAjaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKICNpbmNsdWRlICJJREJJbmRleEJh
Y2tlbmRJbXBsLmgiCiAjaW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIKLSNpbmNsdWRlICJJREJLZXlU
cmVlLmgiCisjaW5jbHVkZSAiU1FMaXRlRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJTUUxpdGVTdGF0
ZW1lbnQuaCIKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCkBAIC00MywxMiArNDUs
MTQgQEAgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6fklEQk9iamVjdFN0b3JlQmFja2VuZElt
cGwoKQogewogfQogCi1JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29s
IGF1dG9JbmNyZW1lbnQpCi0gICAgOiBtX25hbWUobmFtZSkKK0lEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGwoSURCRGF0YWJhc2VCYWNrZW5kSW1wbCog
ZGF0YWJhc2UsIGludDY0X3QgaWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBr
ZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQpCisgICAgOiBtX2RhdGFiYXNlKGRhdGFiYXNlKQor
ICAgICwgbV9pZChpZCkKKyAgICAsIG1fbmFtZShuYW1lKQogICAgICwgbV9rZXlQYXRoKGtleVBh
dGgpCiAgICAgLCBtX2F1dG9JbmNyZW1lbnQoYXV0b0luY3JlbWVudCkKLSAgICAsIG1fdHJlZShU
cmVlOjpjcmVhdGUoKSkKIHsKKyAgICBpbXBvcnRJbmRleGVzKCk7CiB9CiAKIFBhc3NSZWZQdHI8
RE9NU3RyaW5nTGlzdD4gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6aW5kZXhOYW1lcygpIGNv
bnN0CkBAIC01OSwxNCArNjMsNTIgQEAgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjppbmRleE5hbWVzKCkgY29uc3QKICAgICByZXR1cm4gaW5kZXhO
YW1lcy5yZWxlYXNlKCk7CiB9CiAKK3N0YXRpYyBTdHJpbmcgd2hlcmVDbGF1c2UoSURCS2V5KiBr
ZXkpCit7CisgICAgc3dpdGNoIChrZXktPnR5cGUoKSkgeworICAgIGNhc2UgSURCS2V5OjpTdHJp
bmdUeXBlOgorICAgICAgICByZXR1cm4gIiBrZXlfc3RyaW5nID0gPyAgQU5EICBrZXlfZGF0ZSBJ
UyBOVUxMICBBTkQgIGtleV9udW1iZXIgSVMgTlVMTCAiOworICAgIGNhc2UgSURCS2V5OjpOdW1i
ZXJUeXBlOgorICAgICAgICByZXR1cm4gIiBrZXlfc3RyaW5nIElTIE5VTEwgIEFORCAga2V5X2Rh
dGUgSVMgTlVMTCAgQU5EICBrZXlfbnVtYmVyID0gPyAiOworICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQgZGF0ZS4KKyAgICBjYXNlIElEQktleTo6TnVsbFR5cGU6CisgICAgICAgIHJldHVybiAiIGtl
eV9zdHJpbmcgSVMgTlVMTCAgQU5EICBrZXlfZGF0ZSBJUyBOVUxMICBBTkQgIGtleV9udW1iZXIg
SVMgTlVMTCAiOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVy
biAiIjsKK30KKworc3RhdGljIHZvaWQgYmluZEtleShTUUxpdGVTdGF0ZW1lbnQmIHF1ZXJ5LCBJ
REJLZXkqIGtleSwgaW50IGNvbHVtbikKK3sKKyAgICBzd2l0Y2ggKGtleS0+dHlwZSgpKSB7Cisg
ICAgY2FzZSBJREJLZXk6OlN0cmluZ1R5cGU6CisgICAgICAgIHF1ZXJ5LmJpbmRUZXh0KGNvbHVt
biwga2V5LT5zdHJpbmcoKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIElEQktleTo6TnVt
YmVyVHlwZToKKyAgICAgICAgcXVlcnkuYmluZEludChjb2x1bW4sIGtleS0+bnVtYmVyKCkpOwor
ICAgICAgICByZXR1cm47CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBkYXRlLgorICAgIGNhc2Ug
SURCS2V5OjpOdWxsVHlwZToKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworfQorCiB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmdldChQ
YXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tz
KQogewotICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlID0gbV90cmVlLT5n
ZXQoa2V5LmdldCgpKTsKLSAgICBpZiAoIXZhbHVlKSB7CisgICAgU1FMaXRlU3RhdGVtZW50IHF1
ZXJ5KHNxbGl0ZURhdGFiYXNlKCksICJTRUxFQ1QgdmFsdWUgRlJPTSBPYmplY3RTdG9yZURhdGEg
V0hFUkUiICsgd2hlcmVDbGF1c2Uoa2V5LmdldCgpKSk7CisgICAgYm9vbCBvayA9IHF1ZXJ5LnBy
ZXBhcmUoKSA9PSBTUUxSZXN1bHRPazsKKyAgICBBU1NFUlQob2spOyAvLyBGSVhNRTogQmV0dGVy
IGVycm9yIGhhbmRsaW5nPworCisgICAgYmluZEtleShxdWVyeSwga2V5LmdldCgpLCAxKTsKKyAg
ICBpZiAocXVlcnkuc3RlcCgpICE9IFNRTFJlc3VsdFJvdykgewogICAgICAgICBjYWxsYmFja3Mt
Pm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpO
T1RfRk9VTkRfRVJSLCAiS2V5IGRvZXMgbm90IGV4aXN0IGluIHRoZSBvYmplY3Qgc3RvcmUuIikp
OwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKHZhbHVl
LmdldCgpKTsKKworICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZTo6Y3JlYXRlRnJvbVdpcmUocXVlcnkuZ2V0Q29sdW1uVGV4dCgwKSkpOwogfQogCiB2b2lkIElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBwcnBLZXksIGJvb2wgYWRkT25seSwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKQEAgLTg4LDE4ICsxMzAsNjIgQEAgdm9p
ZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+IHZhbHVlLCBQYXMKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChh
ZGRPbmx5ICYmIG1fdHJlZS0+Z2V0KGtleS5nZXQoKSkpIHsKKyAgICBTUUxpdGVTdGF0ZW1lbnQg
Z2V0UXVlcnkoc3FsaXRlRGF0YWJhc2UoKSwgIlNFTEVDVCBpZCBGUk9NIE9iamVjdFN0b3JlRGF0
YSBXSEVSRSIgKyB3aGVyZUNsYXVzZShrZXkuZ2V0KCkpKTsKKyAgICBib29sIG9rID0gZ2V0UXVl
cnkucHJlcGFyZSgpID09IFNRTFJlc3VsdE9rOworICAgIEFTU0VSVChvayk7IC8vIEZJWE1FOiBC
ZXR0ZXIgZXJyb3IgaGFuZGxpbmc/CisKKyAgICBiaW5kS2V5KGdldFF1ZXJ5LCBrZXkuZ2V0KCks
IDEpOworICAgIGJvb2wgZXhpc3RpbmdWYWx1ZSA9IGdldFF1ZXJ5LnN0ZXAoKSAhPSBTUUxSZXN1
bHRSb3c7CisgICAgaWYgKGFkZE9ubHkgJiYgZXhpc3RpbmdWYWx1ZSkgewogICAgICAgICBjYWxs
YmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpDT05TVFJBSU5UX0VSUiwgIktleSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgb2JqZWN0IHN0
b3JlLiIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fdHJlZS0+cHV0KGtleS5n
ZXQoKSwgdmFsdWUuZ2V0KCkpOworICAgIFN0cmluZyBzcWwgPSBleGlzdGluZ1ZhbHVlID8gIlVQ
REFURSBPYmplY3RTdG9yZURhdGEgU0VUIGtleV9zdHJpbmcgPSA/LCBrZXlfZGF0ZSA9ID8sIGtl
eV9udW1iZXIgPSA/LCB2YWx1ZSA9ID8gV0hFUkUgaWQgPSA/IgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDogIklOU0VSVCBPYmplY3RTdG9yZURhdGEgKGtleV9zdHJpbmcsIGtleV9k
YXRlLCBrZXlfbnVtYmVyLCB2YWx1ZSkgVkFMVUVTICg/LCA/LCA/LCA/KSI7CisgICAgU1FMaXRl
U3RhdGVtZW50IHB1dFF1ZXJ5KHNxbGl0ZURhdGFiYXNlKCksIHNxbCk7CisgICAgc3dpdGNoIChr
ZXktPnR5cGUoKSkgeworICAgIGNhc2UgSURCS2V5OjpTdHJpbmdUeXBlOgorICAgICAgICBwdXRR
dWVyeS5iaW5kVGV4dCgxLCBrZXktPnN0cmluZygpKTsKKyAgICAgICAgcHV0UXVlcnkuYmluZE51
bGwoMik7CisgICAgICAgIHB1dFF1ZXJ5LmJpbmROdWxsKDMpOworICAgICAgICBicmVhazsKKyAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IGRhdGUuCisgICAgY2FzZSBJREJLZXk6Ok51bWJlclR5cGU6
CisgICAgICAgIHB1dFF1ZXJ5LmJpbmROdWxsKDEpOworICAgICAgICBwdXRRdWVyeS5iaW5kTnVs
bCgyKTsKKyAgICAgICAgcHV0UXVlcnkuYmluZEludCgzLCBrZXktPm51bWJlcigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBJREJLZXk6Ok51bGxUeXBlOgorICAgICAgICBwdXRRdWVyeS5i
aW5kTnVsbCgxKTsKKyAgICAgICAgcHV0UXVlcnkuYmluZE51bGwoMik7CisgICAgICAgIHB1dFF1
ZXJ5LmJpbmROdWxsKDMpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgcHV0UXVlcnkuYmluZFRleHQoNCwgdmFs
dWUtPnRvV2lyZVN0cmluZygpKTsKKyAgICBpZiAoZXhpc3RpbmdWYWx1ZSkKKyAgICAgICAgcHV0
UXVlcnkuYmluZEludCg1LCBnZXRRdWVyeS5nZXRDb2x1bW5JbnQoMCkpOworCisgICAgb2sgPSBw
dXRRdWVyeS5zdGVwKCkgPT0gU1FMUmVzdWx0RG9uZTsKKyAgICBBU1NFUlQob2spOyAvLyBGSVhN
RTogQmV0dGVyIGVycm9yIGhhbmRsaW5nPworCiAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3Moa2V5
LmdldCgpKTsKIH0KIAogdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpyZW1vdmUoUGFz
c1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykK
IHsKLSAgICBtX3RyZWUtPnJlbW92ZShrZXkuZ2V0KCkpOworICAgIFNRTGl0ZVN0YXRlbWVudCBx
dWVyeShzcWxpdGVEYXRhYmFzZSgpLCAiREVMRVRFIEZST00gT2JqZWN0U3RvcmVEYXRhIFdIRVJF
IiArIHdoZXJlQ2xhdXNlKGtleS5nZXQoKSkpOworICAgIGJvb2wgb2sgPSBxdWVyeS5wcmVwYXJl
KCkgPT0gU1FMUmVzdWx0T2s7CisgICAgQVNTRVJUKG9rKTsgLy8gRklYTUU6IEJldHRlciBlcnJv
ciBoYW5kbGluZz8KKworICAgIGJpbmRLZXkocXVlcnksIGtleS5nZXQoKSwgMSk7CisgICAgaWYg
KHF1ZXJ5LnN0ZXAoKSAhPSBTUUxSZXN1bHRSb3cpIHsKKyAgICAgICAgY2FsbGJhY2tzLT5vbkVy
cm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0ZP
VU5EX0VSUiwgIktleSBkb2VzIG5vdCBleGlzdCBpbiB0aGUgb2JqZWN0IHN0b3JlLiIpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKCk7CiB9CiAK
QEAgLTExMCw3ICsxOTYsMTcgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVh
dGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2UKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGluZGV4
ID0gSURCSW5kZXhCYWNrZW5kSW1wbDo6Y3JlYXRlKG5hbWUsIGtleVBhdGgsIHVuaXF1ZSk7Cisg
ICAgU1FMaXRlU3RhdGVtZW50IGluc2VydChzcWxpdGVEYXRhYmFzZSgpLCAiSU5TRVJUIElOVE8g
SW5kZXhlcyAobmFtZSwga2V5UGF0aCwgaXNVbmlxdWUpIFZBTFVFUyAoPywgPywgPykiKTsKKyAg
ICBib29sIG9rID0gaW5zZXJ0LnByZXBhcmUoKSA9PSBTUUxSZXN1bHRPazsKKyAgICBBU1NFUlQo
b2spOyAvLyBGSVhNRTogQmV0dGVyIGVycm9yIGhhbmRsaW5nLgorICAgIGluc2VydC5iaW5kVGV4
dCgxLCBuYW1lKTsKKyAgICBpbnNlcnQuYmluZFRleHQoMiwga2V5UGF0aCk7CisgICAgaW5zZXJ0
LmJpbmRJbnQoMywgKGludCl1bmlxdWUpOworICAgIG9rID0gaW5zZXJ0LnN0ZXAoKSA9PSBTUUxS
ZXN1bHREb25lOworICAgIEFTU0VSVChvayk7IC8vIEZJWE1FOiBCZXR0ZXIgZXJyb3IgaGFuZGxp
bmcuCisgICAgaW50NjRfdCBpZCA9IHNxbGl0ZURhdGFiYXNlKCkubGFzdEluc2VydFJvd0lEKCk7
CisKKyAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBpbmRleCA9IElEQkluZGV4
QmFja2VuZEltcGw6OmNyZWF0ZSh0aGlzLCBpZCwgbmFtZSwga2V5UGF0aCwgdW5pcXVlKTsKICAg
ICBBU1NFUlQoaW5kZXgtPm5hbWUoKSA9PSBuYW1lKTsKICAgICBtX2luZGV4ZXMuc2V0KG5hbWUs
IGluZGV4KTsKICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhpbmRleC5yZWxlYXNlKCkpOwpAQCAt
MTI4LDE5ICsyMjQsNTggQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpyZW1vdmVJ
bmRleChjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2EKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAorICAgIFNRTGl0ZVN0YXRlbWVudCBkZWxldGVRdWVyeShzcWxpdGVEYXRhYmFz
ZSgpLCAiREVMRVRFIEZST00gSW5kZXhlcyBXSEVSRSBuYW1lID0gPyIpOworICAgIGJvb2wgb2sg
PSBkZWxldGVRdWVyeS5wcmVwYXJlKCkgPT0gU1FMUmVzdWx0T2s7CisgICAgQVNTRVJUKG9rKTsg
Ly8gRklYTUU6IEJldHRlciBlcnJvciBoYW5kbGluZy4KKyAgICBkZWxldGVRdWVyeS5iaW5kVGV4
dCgxLCBuYW1lKTsKKyAgICBvayA9IGRlbGV0ZVF1ZXJ5LnN0ZXAoKSA9PSBTUUxSZXN1bHREb25l
OworICAgIEFTU0VSVChvayk7IC8vIEZJWE1FOiBCZXR0ZXIgZXJyb3IgaGFuZGxpbmcuCisKKyAg
ICAvLyBGSVhNRTogRGVsZXRlIGFsbCBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGluZGV4Lgor
CiAgICAgbV9pbmRleGVzLnJlbW92ZShuYW1lKTsKICAgICBjYWxsYmFja3MtPm9uU3VjY2Vzcygp
OwogfQogCiB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Om9wZW5DdXJzb3IoUGFzc1Jl
ZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKIHsKKyAgICAvLyBGSVhNRTogRnVsbHkgaW1w
bGVtZW50LgorCiAgICAgUmVmUHRyPElEQktleT4ga2V5ID0gcmFuZ2UtPmxlZnQoKTsKLSAgICBS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSA9IG1fdHJlZS0+Z2V0KGtleS5nZXQo
KSk7Ci0gICAgaWYgKHZhbHVlKSB7Ci0gICAgICAgIFJlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW50
ZXJmYWNlPiBjdXJzb3IgPSBJREJDdXJzb3JCYWNrZW5kSW1wbDo6Y3JlYXRlKHRoaXMsIHJhbmdl
LCBzdGF0aWNfY2FzdDxJREJDdXJzb3I6OkRpcmVjdGlvbj4oZGlyZWN0aW9uKSwga2V5LCB2YWx1
ZSk7Ci0gICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKGN1cnNvci5yZWxlYXNlKCkpOwotICAg
IH0gZWxzZQotICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoKTsKKyAgICBTUUxpdGVTdGF0ZW1l
bnQgcXVlcnkoc3FsaXRlRGF0YWJhc2UoKSwgIlNFTEVDVCBpZCwgdmFsdWUgRlJPTSBPYmplY3RT
dG9yZURhdGEgV0hFUkUiICsgd2hlcmVDbGF1c2Uoa2V5LmdldCgpKSk7CisgICAgYm9vbCBvayA9
IHF1ZXJ5LnByZXBhcmUoKSA9PSBTUUxSZXN1bHRPazsKKyAgICBBU1NFUlQob2spOyAvLyBGSVhN
RTogQmV0dGVyIGVycm9yIGhhbmRsaW5nPworCisgICAgYmluZEtleShxdWVyeSwga2V5LmdldCgp
LCAxKTsKKyAgICBpZiAocXVlcnkuc3RlcCgpICE9IFNRTFJlc3VsdFJvdykgeworICAgICAgICBj
YWxsYmFja3MtPm9uU3VjY2VzcygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6
OmNyZWF0ZUZyb21XaXJlKHF1ZXJ5LmdldENvbHVtblRleHQoMSkpOworICAgIFJlZlB0cjxJREJD
dXJzb3JCYWNrZW5kSW50ZXJmYWNlPiBjdXJzb3IgPSBJREJDdXJzb3JCYWNrZW5kSW1wbDo6Y3Jl
YXRlKHRoaXMsIHJhbmdlLCBzdGF0aWNfY2FzdDxJREJDdXJzb3I6OkRpcmVjdGlvbj4oZGlyZWN0
aW9uKSwga2V5LnJlbGVhc2UoKSwgdmFsdWUucmVsZWFzZSgpKTsKKyAgICBjYWxsYmFja3MtPm9u
U3VjY2VzcyhjdXJzb3IucmVsZWFzZSgpKTsKK30KKwordm9pZCBJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjppbXBvcnRJbmRleGVzKCkKK3sKKyAgICBTUUxpdGVTdGF0ZW1lbnQgaW5kZXhRdWVy
eShzcWxpdGVEYXRhYmFzZSgpLCAiU0VMRUNUIGlkLCBuYW1lLCBrZXlQYXRoLCBpc1VuaXF1ZSBG
Uk9NIEluZGV4ZXMiKTsKKyAgICBib29sIG9rID0gaW5kZXhRdWVyeS5wcmVwYXJlKCkgPT0gU1FM
UmVzdWx0T2s7CisgICAgQVNTRVJUKG9rKTsgLy8gRklYTUU6IEJldHRlciBlcnJvciBoYW5kbGlu
Zz8KKworICAgIHdoaWxlIChpbmRleFF1ZXJ5LnN0ZXAoKSA9PSBTUUxSZXN1bHRSb3cpIHsKKyAg
ICAgICAgaW50NjRfdCBpZCA9IGluZGV4UXVlcnkuZ2V0Q29sdW1uSW50NjQoMCk7CisgICAgICAg
IFN0cmluZyBuYW1lID0gaW5kZXhRdWVyeS5nZXRDb2x1bW5UZXh0KDEpOworICAgICAgICBTdHJp
bmcga2V5UGF0aCA9IGluZGV4UXVlcnkuZ2V0Q29sdW1uVGV4dCgyKTsKKyAgICAgICAgYm9vbCB1
bmlxdWUgPSAhIWluZGV4UXVlcnkuZ2V0Q29sdW1uSW50KDMpOworCisgICAgICAgIG1faW5kZXhl
cy5zZXQobmFtZSwgSURCSW5kZXhCYWNrZW5kSW1wbDo6Y3JlYXRlKHRoaXMsIGlkLCBuYW1lLCBr
ZXlQYXRoLCB1bmlxdWUpKTsKKyAgICB9Cit9CisKK1NRTGl0ZURhdGFiYXNlJiBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpzcWxpdGVEYXRhYmFzZSgpIGNvbnN0IAoreworICAgIHJldHVybiBt
X2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5o
IGIvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaAppbmRleCA0Yjkw
OWFmNzQwOWMzNDcwMjUyZmI5NTU5ZjFlOTkwY2VmODUyZmM5Li41MDY5MmZiZGJmNzg3ODI1Y2M3
Mjg2YjIyNzc1MjEwNDc1M2JiMGY1IDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0b3JhZ2UvSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbC5oCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsLmgKQEAgLTM0LDEzICszNCwxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBWYWx1ZVR5cGU+IGNsYXNzIElEQktleVRyZWU7CitjbGFz
cyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOworY2xhc3MgU1FMaXRlRGF0YWJhc2U7CiAKIGNsYXNz
IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwgOiBwdWJsaWMgSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW50ZXJmYWNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbnRlcmZhY2U+IGNyZWF0ZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50KQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElE
Qk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gY3JlYXRlKElEQkRhdGFiYXNlQmFja2VuZElt
cGwqIGRhdGFiYXNlLCBpbnQ2NF90IGlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKG5hbWUsIGtleVBhdGgsIGF1dG9J
bmNyZW1lbnQpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsKGRhdGFiYXNlLCBpZCwgbmFtZSwga2V5UGF0aCwgYXV0b0luY3JlbWVudCkpOwog
ICAgIH0KICAgICB+SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCgpOwogCkBAIC01OCwxOCArNTks
MjMgQEAgcHVibGljOgogCiAgICAgdm9pZCBvcGVuQ3Vyc29yKFBhc3NSZWZQdHI8SURCS2V5UmFu
Z2U+IHJhbmdlLCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPik7CiAKKyAgICBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKiBkYXRhYmFzZSgpIGNvbnN0IHsg
cmV0dXJuIG1fZGF0YWJhc2UuZ2V0KCk7IH0KKwogcHJpdmF0ZToKLSAgICBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBi
b29sIGF1dG9JbmNyZW1lbnQpOworICAgIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwoSURCRGF0
YWJhc2VCYWNrZW5kSW1wbCosIGludDY0X3QgaWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
U3RyaW5nJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQpOworCisgICAgdm9pZCBpbXBvcnRJ
bmRleGVzKCk7CisgICAgU1FMaXRlRGF0YWJhc2UmIHNxbGl0ZURhdGFiYXNlKCkgY29uc3Q7CiAK
KyAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gbV9kYXRhYmFzZTsKKworICAgIGlu
dDY0X3QgbV9pZDsKICAgICBTdHJpbmcgbV9uYW1lOwogICAgIFN0cmluZyBtX2tleVBhdGg7CiAg
ICAgYm9vbCBtX2F1dG9JbmNyZW1lbnQ7CiAKICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBS
ZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiA+IEluZGV4TWFwOwogICAgIEluZGV4TWFw
IG1faW5kZXhlczsKLQotICAgIHR5cGVkZWYgSURCS2V5VHJlZTxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IFRyZWU7Ci0gICAgUmVmUHRyPFRyZWU+IG1fdHJlZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64713</attachid>
            <date>2010-08-18 08:08:16 -0700</date>
            <delta_ts>2010-08-18 09:17:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-44164-20100818160813.patch</filename>
            <type>text/plain</type>
            <size>29570</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA5M2IzZjBhZjRhZDdkNzk3ZDIzY2QyOGE4NDUyYTk1NGQ1ZmZmYjdkLi40NTE0Mjg1
ZDg1ZGRmMTI3NDQ0ZTM1ZTg5YmExMjUwNTkyY2JkN2JkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAK
KzIwMTAtMDgtMTggIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgSW1wbGVtZW50IHBlcnNpc3RhbmNlIGZvciBJbmRleGVkREIgT2JqZWN0U3RvcmVzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDE2NAorCisgICAg
ICAgIFJlbW92ZSBvbGQgb2JqZWN0IHN0b3JlcyBiZWZvcmUgcnVubmluZyB0ZXN0LgorCisgICAg
ICAgICogc3RvcmFnZS9pbmRleGVkZGIvcmVzb3VyY2VzL3NoYXJlZC5qczoKKyAgICAgICAgKGRl
bGV0ZUFsbE9iamVjdFN0b3Jlcyk6CisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvc2NyaXB0
LXRlc3RzL29iamVjdHN0b3JlLWJhc2ljcy5qczoKKyAgICAgICAgKG9wZW5TdWNjZXNzKToKKyAg
ICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9zY3JpcHQtdGVzdHMvb3Blbi1jdXJzb3IuanM6Cisg
ICAgICAgIChvcGVuU3VjY2Vzcyk6CisKIDIwMTAtMDgtMDkgIEplcmVteSBPcmxvdyAgPGpvcmxv
d0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU3RldmUgQmxvY2suCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9yZXNvdXJjZXMvc2hhcmVkLmpz
IGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvcmVzb3VyY2VzL3NoYXJlZC5qcwppbmRl
eCBlNTEwYmUxOGNiYzFkOGNkY2IzYjc3M2ZjZWI1ZmJkZDA3ZDA4YjA2Li42NzY5ZWQyY2JhODkx
OTEyZGRjOTczZmJiNGQ2YmUxM2RiYzllZjFmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdG9y
YWdlL2luZGV4ZWRkYi9yZXNvdXJjZXMvc2hhcmVkLmpzCisrKyBiL0xheW91dFRlc3RzL3N0b3Jh
Z2UvaW5kZXhlZGRiL3Jlc291cmNlcy9zaGFyZWQuanMKQEAgLTUzLDMgKzUzLDEwIEBAIGZ1bmN0
aW9uIHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrKCkKICAgICBkb25lKCk7CiB9CiAKK2Z1bmN0aW9u
IGRlbGV0ZUFsbE9iamVjdFN0b3JlcyhkYikKK3sKKyAgICBvYmplY3RTdG9yZXMgPSBkYi5vYmpl
Y3RTdG9yZXM7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3RTdG9yZXMubGVuZ3RoOyAr
K2kpCisgICAgICAgIGRiLnJlbW92ZU9iamVjdFN0b3JlKG9iamVjdFN0b3Jlc1tpXSk7Cit9CisK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3NjcmlwdC10ZXN0cy9v
YmplY3RzdG9yZS1iYXNpY3MuanMgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9zY3Jp
cHQtdGVzdHMvb2JqZWN0c3RvcmUtYmFzaWNzLmpzCmluZGV4IDk4Njk1Nzk3ZWMyMjE5NzI0NjVm
NGRiNzE4MTQ3ODkyMWFlODc0YzEuLjYzNjc1YWQwNWQzNjk1NjYwNjg5ZDdhM2ZmYTkyNGNmMzE0
NzE1MTIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3NjcmlwdC10
ZXN0cy9vYmplY3RzdG9yZS1iYXNpY3MuanMKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRl
eGVkZGIvc2NyaXB0LXRlc3RzL29iamVjdHN0b3JlLWJhc2ljcy5qcwpAQCAtMTYsOCArMTYsNyBA
QCBmdW5jdGlvbiBvcGVuU3VjY2VzcygpCiAgICAgdmVyaWZ5U3VjY2Vzc0V2ZW50KGV2ZW50KTsK
ICAgICBkYiA9IGV2YWxBbmRMb2coImRiID0gZXZlbnQucmVzdWx0Iik7CiAKLSAgICAvLyBGSVhN
RTogcmVtb3ZlIGFueSBwcmV2aW91c2x5IGNyZWF0ZWQgb2JqZWN0IHN0b3Jlcy4KLSAgICAvLyBU
aGlzIHJlcXVpcmVzIElEQkRhdGFiYXNlUmVxdWVzdDo6cmVtb3ZlT2JqZWN0U3RvcmUgdG8gYmUg
aW1wbGVtZW50ZWQuCisgICAgZGVsZXRlQWxsT2JqZWN0U3RvcmVzKGRiKTsKIAogICAgIHJlc3Vs
dCA9IGV2YWxBbmRMb2coImRiLmNyZWF0ZU9iamVjdFN0b3JlKCdzdG9yZU5hbWUnLCBudWxsKSIp
OwogICAgIHZlcmlmeVJlc3VsdChyZXN1bHQpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3Rv
cmFnZS9pbmRleGVkZGIvc2NyaXB0LXRlc3RzL29wZW4tY3Vyc29yLmpzIGIvTGF5b3V0VGVzdHMv
c3RvcmFnZS9pbmRleGVkZGIvc2NyaXB0LXRlc3RzL29wZW4tY3Vyc29yLmpzCmluZGV4IGUzYzYx
NWM0YTVhZTcwNTBjZDI3YzYwMjA4NzU1YmViYjI5ZmQwNzcuLmZmMGI3MTEzN2EyMDY3NmUyNzM2
YTZhNTUwM2QwYjhhZTIwZTExYTYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5k
ZXhlZGRiL3NjcmlwdC10ZXN0cy9vcGVuLWN1cnNvci5qcworKysgYi9MYXlvdXRUZXN0cy9zdG9y
YWdlL2luZGV4ZWRkYi9zY3JpcHQtdGVzdHMvb3Blbi1jdXJzb3IuanMKQEAgLTYwLDYgKzYwLDkg
QEAgZnVuY3Rpb24gb3BlblN1Y2Nlc3MoKQogewogICAgIHZlcmlmeVN1Y2Nlc3NFdmVudChldmVu
dCk7CiAgICAgdmFyIGRiID0gZXZhbEFuZExvZygiZGIgPSBldmVudC5yZXN1bHQiKTsKKworICAg
IGRlbGV0ZUFsbE9iamVjdFN0b3JlcyhkYik7CisKICAgICByZXN1bHQgPSBldmFsQW5kTG9nKCJk
Yi5jcmVhdGVPYmplY3RTdG9yZSgndGVzdCcpIik7CiAgICAgdmVyaWZ5UmVzdWx0KHJlc3VsdCk7
CiAgICAgcmVzdWx0Lm9uc3VjY2VzcyA9IGNyZWF0ZU9iamVjdFN0b3JlU3VjY2VzczsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTg5NTgw
YjJmOGRlMjNmNmExYjcyNWQ1MGUxMjMxMjZmZjc4OGEyZC4uZjczM2RkOWIyMmM5NTdiMTNjMzFj
NDMzMjAzOTI2YWE2MjFmY2NmNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIv
V2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MiBAQAorMjAxMC0wOC0xOCAgSmVyZW15IE9y
bG93ICA8am9ybG93QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgcGVyc2lzdGFuY2UgZm9yIEluZGV4ZWREQiBP
YmplY3RTdG9yZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTQ0MTY0CisKKyAgICAgICAgR2V0IHJpZCBvZiB0aGUgaW4tbWVtb3J5IHN0b3JhZ2Ugb2Yg
T2JqZWN0U3RvcmVzIGFuZCBpbnN0ZWFkCisgICAgICAgIHVzZSBTUUwgYmFja2VkIG1lbW9yeS4K
KworICAgICAgICBFeGlzdGluZyB0ZXN0cyBnaXZlIG1vc3Qgb2YgdGhlIGNvdmVyYWdlLiAgV2ls
bCB1cGRhdGUgdGhlIG1hbnVhbAorICAgICAgICB0ZXN0IGluIHRoZSBuZXh0IHBhdGNoICh3aGlj
aCB3aWxsIGFsc28gcmUtd29yayBkYXRhYmFzZS5kZXNjcmlwdGlvbikuCisKKyAgICAgICAgKiBt
YW51YWwtdGVzdHMvaW5kZXhlZC1kYXRhYmFzZS5odG1sOiBHZXQgcmlkIG9mIHJhY2Ugd2hlcmUg
eW91IGNhbiBjbGljayBiZWZvcmUgdGhlIHBhZ2UgbG9hZHMuCisgICAgICAgICogcGxhdGZvcm0v
c3FsL1NRTGl0ZVN0YXRlbWVudC5jcHA6IEFkZCB0d28gaGVscGVyIGZ1bmN0aW9ucworICAgICAg
ICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpiaW5kSW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlNRTGl0ZVN0YXRlbWVudDo6aXNDb2x1bW5OdWxsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwv
U1FMaXRlU3RhdGVtZW50Lmg6CisgICAgICAgICogc3RvcmFnZS9JREJDdXJzb3JCYWNrZW5kSW1w
bC5jcHA6IAorICAgICAgICAqIHN0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpJREJEYXRhYmFzZUJhY2tl
bmRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0
ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6
OnJlbW92ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6OmltcG9ydE9iamVjdFN0b3Jlcyk6CisgICAgICAgICogc3RvcmFnZS9JREJEYXRhYmFz
ZUJhY2tlbmRJbXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBs
OjpzcWxpdGVEYXRhYmFzZSk6CisgICAgICAgICogc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZElt
cGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlVGFibGVzKToKKyAgICAgICAgKiBzdG9y
YWdlL0lEQkluZGV4QmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXhC
YWNrZW5kSW1wbDo6SURCSW5kZXhCYWNrZW5kSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJJ
bmRleEJhY2tlbmRJbXBsOjpzcWxpdGVEYXRhYmFzZSk6CisgICAgICAgICogc3RvcmFnZS9JREJJ
bmRleEJhY2tlbmRJbXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJbXBs
OjpjcmVhdGUpOgorICAgICAgICAqIHN0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OndoZXJlQ2xhdXNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmJpbmRLZXkpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsOjpyZW1vdmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6Y3JlYXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6cmVtb3ZlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6b3BlbkN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjppbXBvcnRJbmRleGVzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OnNxbGl0ZURhdGFiYXNlKToKKyAgICAgICAgKiBzdG9yYWdlL0lEQk9i
amVjdFN0b3JlQmFja2VuZEltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpkYXRhYmFzZSk6CisKIDIwMTAtMDgtMTEgIEplcmVteSBPcmxvdyAgPGpvcmxv
d0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQmVnaW5uaW5ncyBvZiBJbmRleGVkREIgcGVyc2lz
dGFuY2UgKyBJREJEYXRhYmFzZS5kZXNjcmlwdGlvbiBmbGVzaGVkIG91dApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9tYW51YWwtdGVzdHMvaW5kZXhlZC1kYXRhYmFzZS5odG1sIGIvV2ViQ29yZS9tYW51
YWwtdGVzdHMvaW5kZXhlZC1kYXRhYmFzZS5odG1sCmluZGV4IGQwZmIzODE0ZDcwOTljNDg3NjA4
N2QwZTQ1NTJiZDU1NWE3NDdkMzQuLmJjYzhmZTQzNTVlZWI5YWVmZTE5OWUzYzVmZGVhOTBmZThm
ZWQwZDQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbWFudWFsLXRlc3RzL2luZGV4ZWQtZGF0YWJhc2Uu
aHRtbAorKysgYi9XZWJDb3JlL21hbnVhbC10ZXN0cy9pbmRleGVkLWRhdGFiYXNlLmh0bWwKQEAg
LTE2LDYgKzE2LDggQEAKIAogPHNjcmlwdD4KIAorICAgIHJlYWR5Q291bnQgPSAwOworCiAgICAg
aWYgKCEoJ2luZGV4ZWREQicgaW4gd2luZG93KSkKICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoImVuYWJsZWQiKS5pbm5lckhUTUwgPSAiPGZvbnQgY29sb3I9cmVkPllvdXIgYnVpbGQg
ZG9lcyBOT1Qgc2VlbSB0byBoYXZlIGl0IGVuYWJsZWQuICBTbyBhbGwgY29kZSBvbiB0aGlzIHBh
Z2UgaXMgZGlzYWJsZWQuPC9mb250PiI7CiAgICAgZWxzZSB7CkBAIC0yNSw2ICsyNyw3IEBACiAg
ICAgICAgIHJlcXVlc3Qub25zdWNjZXNzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgicmVzdWx0IikuaW5uZXJIVE1MID0gIjxmb250IGNvbG9yPWdy
ZWVuPlN1Y2Nlc3MhPC9mb250PiI7CiAgICAgICAgICAgICB3aW5kb3cubmFtZURCID0gZXZlbnQu
cmVzdWx0OworICAgICAgICAgICAgKytyZWFkeUNvdW50OwogICAgICAgICB9OwogICAgICAgICBy
ZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJyZXN1bHQiKS5pbm5lckhUTUwgPSAiPGZvbnQgY29sb3I9cmVkPkVycm9yOiAi
ICsgZXZlbnQubWVzc2FnZSArICIuPC9mb250PiI7CkBAIC0zMywxNyArMzYsMjggQEAKICAgICAg
ICAgcmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKCJhbm90aGVyIiwgInRlc3Qgb2YgdGhlIGRlc2Ny
aXB0aW9uIGF0dHJpYnV0ZSIpOwogICAgICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGZ1bmN0aW9u
KCkgewogICAgICAgICAgICAgd2luZG93LmFub3RoZXJEQiA9IGV2ZW50LnJlc3VsdDsKKyAgICAg
ICAgICAgICsrcmVhZHlDb3VudDsKICAgICAgICAgfTsKICAgICB9CiAKICAgICBmdW5jdGlvbiB1
cGRhdGVEZXNjcmlwdGlvbigpCiAgICAgeworICAgICAgICBpZiAocmVhZENvdW50IDwgMikgewor
ICAgICAgICAgICAgYWxlcnQoIlRoZSBwYWdlIGhhcyBub3QgZmluaXNoZWQgbG9hZGluZy4gIEhv
bGQgb24gYSBzZWMuLi4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCiAgICAg
ICAgIGluZGV4ZWREQi5vcGVuKCJuYW1lIiwgInRlc3Qgb2YgdGhlIGRlc2NyaXB0aW9uIGF0dHJp
YnV0ZSIpOwogICAgICAgICBpbmRleGVkREIub3BlbigiYW5vdGhlciIsICJ4eXoiKTsKICAgICB9
CiAKICAgICBmdW5jdGlvbiByZWFkRGVzY3JpcHRpb24oKQogICAgIHsKKyAgICAgICAgaWYgKHJl
YWRDb3VudCA8IDIpIHsKKyAgICAgICAgICAgIGFsZXJ0KCJUaGUgcGFnZSBoYXMgbm90IGZpbmlz
aGVkIGxvYWRpbmcuICBIb2xkIG9uIGEgc2VjLi4uIik7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKwogICAgICAgICBpZiAod2luZG93Lm5hbWVEQi5kZXNjcmlwdGlvbiAhPSAidGVz
dCBvZiB0aGUgZGVzY3JpcHRpb24gYXR0cmlidXRlIikgewogICAgICAgICAgICAgLy8gU2luY2Ug
d2UgcGFzc2VkIGluIG5vdGhpbmcsIHRoZSBkZXNjcmlwdGlvbiBzaG91bGQgbm90IGJlIHJlc2V0
LgogICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRlc2NyaXB0aW9uIikuaW5u
ZXJIVE1MID0gIjxmb250IGNvbG9yPXJlZD5GYWlsdXJlOiAoRGF0YWJhc2UgJ25hbWUnIHdhcyB0
aGlzOiAiICsgd2luZG93Lm5hbWVEQi5kZXNjcmlwdGlvbiArICIpLjwvZm9udD4iOwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmNwcCBiL1dlYkNvcmUv
cGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5jcHAKaW5kZXggNGRjODBmYjVhMGQ0Nzk3ODlh
ZWRjMTEyMDdjZTA2OTQ0M2YxZDgzZC4uMDM3ZWM3OWYzMmQzNzAxMzdkZjI0NGJkYjQ2ZjhmMzAz
Y2IzOTAwYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50
LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3BwCkBAIC0x
OTIsNiArMTkyLDE0IEBAIGludCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRUZXh0KGludCBpbmRleCwg
Y29uc3QgU3RyaW5nJiB0ZXh0KQogICAgIHJldHVybiBzcWxpdGUzX2JpbmRfdGV4dDE2KG1fc3Rh
dGVtZW50LCBpbmRleCwgY2hhcmFjdGVycywgc2l6ZW9mKFVDaGFyKSAqIHRleHQubGVuZ3RoKCks
IFNRTElURV9UUkFOU0lFTlQpOwogfQogCitpbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kSW50KGlu
dCBpbmRleCwgaW50IGludGVnZXIpCit7CisgICAgQVNTRVJUKG1faXNQcmVwYXJlZCk7CisgICAg
QVNTRVJUKGluZGV4ID4gMCk7CisgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmRl
eCkgPD0gYmluZFBhcmFtZXRlckNvdW50KCkpOworCisgICAgcmV0dXJuIHNxbGl0ZTNfYmluZF9p
bnQobV9zdGF0ZW1lbnQsIGluZGV4LCBpbnRlZ2VyKTsKK30KIAogaW50IFNRTGl0ZVN0YXRlbWVu
dDo6YmluZEludDY0KGludCBpbmRleCwgaW50NjRfdCBpbnRlZ2VyKQogewpAQCAtMjUxLDYgKzI1
OSwxOCBAQCBpbnQgU1FMaXRlU3RhdGVtZW50Ojpjb2x1bW5Db3VudCgpCiAgICAgcmV0dXJuIHNx
bGl0ZTNfZGF0YV9jb3VudChtX3N0YXRlbWVudCk7CiB9CiAKK2Jvb2wgU1FMaXRlU3RhdGVtZW50
Ojppc0NvbHVtbk51bGwoaW50IGNvbCkKK3sKKyAgICBBU1NFUlQoY29sID49IDApOworICAgIGlm
ICghbV9zdGF0ZW1lbnQpCisgICAgICAgIGlmIChwcmVwYXJlQW5kU3RlcCgpICE9IFNRTElURV9S
T1cpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGNvbHVtbkNvdW50KCkgPD0g
Y29sKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gc3FsaXRlM19jb2x1bW5f
dHlwZShtX3N0YXRlbWVudCwgY29sKSA9PSBTUUxJVEVfTlVMTDsKK30KKwogU3RyaW5nIFNRTGl0
ZVN0YXRlbWVudDo6Z2V0Q29sdW1uTmFtZShpbnQgY29sKQogewogICAgIEFTU0VSVChjb2wgPj0g
MCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuaCBi
L1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5oCmluZGV4IGU2MmI0ZjBlYTkx
NTVlMjQyMDEyZmNiMGYxODkwZWQwMmIyMmY1MWQuLjE0NDRmMGVlZWQxOWRjMmEzM2MyYWE5ZWQ0
NGRmMzRjZTFhZWQ3OGQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0
YXRlbWVudC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5oCkBA
IC00Miw2ICs0Miw3IEBAIHB1YmxpYzoKICAgICBpbnQgcHJlcGFyZSgpOwogICAgIGludCBiaW5k
QmxvYihpbnQgaW5kZXgsIGNvbnN0IHZvaWQqIGJsb2IsIGludCBzaXplKTsKICAgICBpbnQgYmlu
ZFRleHQoaW50IGluZGV4LCBjb25zdCBTdHJpbmcmKTsKKyAgICBpbnQgYmluZEludChpbnQgaW5k
ZXgsIGludCk7CiAgICAgaW50IGJpbmRJbnQ2NChpbnQgaW5kZXgsIGludDY0X3QpOwogICAgIGlu
dCBiaW5kRG91YmxlKGludCBpbmRleCwgZG91YmxlKTsKICAgICBpbnQgYmluZE51bGwoaW50IGlu
ZGV4KTsKQEAgLTcwLDYgKzcxLDcgQEAgcHVibGljOgogICAgIC8vIHJldHVybmVkIGluIHRoZSBs
YXN0IHN0ZXAoKQogICAgIGludCBjb2x1bW5Db3VudCgpOwogICAgIAorICAgIGJvb2wgaXNDb2x1
bW5OdWxsKGludCBjb2wpOwogICAgIFN0cmluZyBnZXRDb2x1bW5OYW1lKGludCBjb2wpOwogICAg
IFNRTFZhbHVlIGdldENvbHVtblZhbHVlKGludCBjb2wpOwogICAgIFN0cmluZyBnZXRDb2x1bW5U
ZXh0KGludCBjb2wpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvckJhY2tl
bmRJbXBsLmNwcCBiL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAKaW5k
ZXggNGUwOGI4ZjQ4MGViYzU5MWUyNWM0Y2ZkNTdiNDNhMDBhYWYwNjJhNy4uZDMyOThiMzgwZGM4
ZjliYjk3YzYzOWUzNWFiMzliMDc2YmY1MWRkZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdl
L0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29y
QmFja2VuZEltcGwuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiSURCS2V5UmFuZ2Uu
aCIKICNpbmNsdWRlICJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgiCiAjaW5jbHVkZSAiSURC
UmVxdWVzdC5oIgorI2luY2x1ZGUgIlNRTGl0ZURhdGFiYXNlLmgiCiAjaW5jbHVkZSAiU2VyaWFs
aXplZFNjcmlwdFZhbHVlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcCBiL1dlYkNvcmUvc3RvcmFn
ZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAppbmRleCBlNTUwZTE4Njk0ZTUwMzMyODA1N2Fm
MjMwOTYwZjExMDQ5MWQzNDQ1Li5mZjU5M2UwZjVkODI5MzAzZmMzMjQ3NTU0NjM5NzJiMjgyMWI1
MjkwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5j
cHAKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCkBAIC05
Nyw2ICs5Nyw4IEBAIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OklEQkRhdGFiYXNlQmFja2VuZElt
cGwoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmCiAKICAgICBpZiAoIXJlc3VsdCB8
fCBtX2Rlc2NyaXB0aW9uICE9IGZvdW5kRGVzY3JpcHRpb24pCiAgICAgICAgIHNldE1ldGFEYXRh
KG1fc3FsaXRlRGF0YWJhc2UuZ2V0KCksIG1fbmFtZSwgbV9kZXNjcmlwdGlvbiwgbV92ZXJzaW9u
KTsKKworICAgIGltcG9ydE9iamVjdFN0b3JlcygpOwogfQogCiBJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjp+SURCRGF0YWJhc2VCYWNrZW5kSW1wbCgpCkBAIC0xMjcsNyArMTI5LDE4IEBAIHZvaWQg
SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBTdHJpbmcmCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQdHI8
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9yZSA9IElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OmNyZWF0ZShuYW1lLCBrZXlQYXRoLCBhdXRvSW5jcmVtZW50KTsKKyAg
ICBTUUxpdGVTdGF0ZW1lbnQgaW5zZXJ0KHNxbGl0ZURhdGFiYXNlKCksICJJTlNFUlQgSU5UTyBP
YmplY3RTdG9yZXMgKG5hbWUsIGtleVBhdGgsIGRvQXV0b0luY3JlbWVudCkgVkFMVUVTICg/LCA/
LCA/KSIpOworICAgIGJvb2wgb2sgPSBpbnNlcnQucHJlcGFyZSgpID09IFNRTFJlc3VsdE9rOwor
ICAgIEFTU0VSVChvayk7IC8vIEZJWE1FOiBCZXR0ZXIgZXJyb3IgaGFuZGxpbmcuCisgICAgaW5z
ZXJ0LmJpbmRUZXh0KDEsIG5hbWUpOworICAgIGluc2VydC5iaW5kVGV4dCgyLCBrZXlQYXRoKTsK
KyAgICBpbnNlcnQuYmluZEludCgzLCAoaW50KWF1dG9JbmNyZW1lbnQpOworICAgIG9rID0gaW5z
ZXJ0LnN0ZXAoKSA9PSBTUUxSZXN1bHREb25lOworICAgIEFTU0VSVChvayk7IC8vIEZJWE1FOiBC
ZXR0ZXIgZXJyb3IgaGFuZGxpbmcuCisgICAgaW50NjRfdCBpZCA9IHNxbGl0ZURhdGFiYXNlKCku
bGFzdEluc2VydFJvd0lEKCk7CisKKyAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50
ZXJmYWNlPiBvYmplY3RTdG9yZSA9IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZSh0
aGlzLCBpZCwgbmFtZSwga2V5UGF0aCwgYXV0b0luY3JlbWVudCk7CisgICAgQVNTRVJUKG9iamVj
dFN0b3JlLT5uYW1lKCkgPT0gbmFtZSk7CiAgICAgbV9vYmplY3RTdG9yZXMuc2V0KG5hbWUsIG9i
amVjdFN0b3JlKTsKICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhvYmplY3RTdG9yZS5yZWxlYXNl
KCkpOwogfQpAQCAtMTQ2LDYgKzE1OSwxNiBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6
OnJlbW92ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJRAogICAg
ICAgICByZXR1cm47CiAgICAgfQogCisgICAgU1FMaXRlU3RhdGVtZW50IGRlbGV0ZVF1ZXJ5KHNx
bGl0ZURhdGFiYXNlKCksICJERUxFVEUgRlJPTSBPYmplY3RTdG9yZXMgV0hFUkUgbmFtZSA9ID8i
KTsKKyAgICBib29sIG9rID0gZGVsZXRlUXVlcnkucHJlcGFyZSgpID09IFNRTFJlc3VsdE9rOwor
ICAgIEFTU0VSVChvayk7IC8vIEZJWE1FOiBCZXR0ZXIgZXJyb3IgaGFuZGxpbmcuCisgICAgZGVs
ZXRlUXVlcnkuYmluZFRleHQoMSwgbmFtZSk7CisgICAgb2sgPSBkZWxldGVRdWVyeS5zdGVwKCkg
PT0gU1FMUmVzdWx0RG9uZTsKKyAgICBBU1NFUlQob2spOyAvLyBGSVhNRTogQmV0dGVyIGVycm9y
IGhhbmRsaW5nLgorCisgICAgLy8gRklYTUU6IERlbGV0ZSBhbGwgaW5kZXhlcyBhc3NvY2lhdGVk
IHdpdGggdGhpcyBvYmplY3Qgc3RvcmUgKGFuZCBoYXZlIHRoYXQgY29kZSBkZWxldGUgYWxsIGRh
dGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbmRleGVzKS4KKyAgICAvLyBGSVhNRTogRGVsZXRlIGFs
bCBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG9iamVjdCBzdG9yZS4KKwogICAgIG1fb2JqZWN0
U3RvcmVzLnJlbW92ZShuYW1lKTsKICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcygpOwogfQpAQCAt
MTU3LDYgKzE4MCwyMiBAQCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZT4gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6dHJhbnNhY3Rpb24oRAogICAgIHJldHVybiAwOwog
fQogCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmltcG9ydE9iamVjdFN0b3JlcygpCit7
CisgICAgU1FMaXRlU3RhdGVtZW50IG9iamVjdFN0b3Jlc1F1ZXJ5KHNxbGl0ZURhdGFiYXNlKCks
ICJTRUxFQ1QgaWQsIG5hbWUsIGtleVBhdGgsIGRvQXV0b0luY3JlbWVudCBGUk9NIE9iamVjdFN0
b3JlcyIpOworICAgIGJvb2wgb2sgPSBvYmplY3RTdG9yZXNRdWVyeS5wcmVwYXJlKCkgPT0gU1FM
UmVzdWx0T2s7CisgICAgQVNTRVJUKG9rKTsgLy8gRklYTUU6IEJldHRlciBlcnJvciBoYW5kbGlu
Zz8KKworICAgIHdoaWxlIChvYmplY3RTdG9yZXNRdWVyeS5zdGVwKCkgPT0gU1FMUmVzdWx0Um93
KSB7CisgICAgICAgIGludDY0X3QgaWQgPSBvYmplY3RTdG9yZXNRdWVyeS5nZXRDb2x1bW5JbnQ2
NCgwKTsKKyAgICAgICAgU3RyaW5nIG5hbWUgPSBvYmplY3RTdG9yZXNRdWVyeS5nZXRDb2x1bW5U
ZXh0KDEpOworICAgICAgICBTdHJpbmcga2V5UGF0aCA9IG9iamVjdFN0b3Jlc1F1ZXJ5LmdldENv
bHVtblRleHQoMik7CisgICAgICAgIGJvb2wgYXV0b0luY3JlbWVudCA9ICEhb2JqZWN0U3RvcmVz
UXVlcnkuZ2V0Q29sdW1uSW50KDMpOworCisgICAgICAgIG1fb2JqZWN0U3RvcmVzLnNldChuYW1l
LCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGUodGhpcywgaWQsIG5hbWUsIGtleVBh
dGgsIGF1dG9JbmNyZW1lbnQpKTsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaCBiL1dlYkNvcmUvc3RvcmFnZS9JREJE
YXRhYmFzZUJhY2tlbmRJbXBsLmgKaW5kZXggNjBiZWMxZjc4Nzg3Y2ExZWY5Y2JmNDgzMDVhOWM4
OWYzNjVjYTM5Ni4uYjZiOTFjZmRiMzI2OWM3ODY3YmZiNGI5ZDM1NWY5OTczOGM3MWVlNCAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaAorKysgYi9X
ZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oCkBAIC00Niw2ICs0Niw3IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIH5JREJEYXRhYmFzZUJhY2tlbmRJbXBsKCk7CiAKICAgICB2
b2lkIHNldERlc2NyaXB0aW9uKGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24pOworICAgIFNRTGl0
ZURhdGFiYXNlJiBzcWxpdGVEYXRhYmFzZSgpIGNvbnN0IHsgcmV0dXJuICptX3NxbGl0ZURhdGFi
YXNlLmdldCgpOyB9CiAKICAgICAvLyBJbXBsZW1lbnRzIElEQkRhdGFiYXNlCiAgICAgdmlydHVh
bCBTdHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQpAQCAtNjAsNiArNjEsOCBA
QCBwdWJsaWM6CiBwcml2YXRlOgogICAgIElEQkRhdGFiYXNlQmFja2VuZEltcGwoY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uLCBQYXNzT3duUHRyPFNRTGl0ZURh
dGFiYXNlPiBkYXRhYmFzZSk7CiAKKyAgICB2b2lkIGltcG9ydE9iamVjdFN0b3JlcygpOworCiAg
ICAgT3duUHRyPFNRTGl0ZURhdGFiYXNlPiBtX3NxbGl0ZURhdGFiYXNlOwogCiAgICAgU3RyaW5n
IG1fbmFtZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZElt
cGwuY3BwIGIvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKaW5kZXgg
OTA1NzI2ZmM5OGI3MjhiNDBiYmY5ODNmNjhiNWMyZGRlNzIyOGQzYy4uZTJjMGNkOGNhN2ZkYzA0
ZDhkOTgzNGNlYzM5NTRiOGQzZGE2MzQ4NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0lE
QkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlC
YWNrZW5kSW1wbC5jcHAKQEAgLTc1LDggKzc1LDE4IEBAIHN0YXRpYyBQYXNzT3duUHRyPFNRTGl0
ZURhdGFiYXNlPiBvcGVuU1FMaXRlRGF0YWJhc2UoU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3Jp
CiAKIHN0YXRpYyBib29sIGNyZWF0ZVRhYmxlcyhTUUxpdGVEYXRhYmFzZSogc3FsaXRlRGF0YWJh
c2UpCiB7CisgICAgLy8gRklYTUU6IFJlbW92ZSBhbGwgdGhlIGRyb3AgdGFibGUgY29tbWFuZHMg
b25jZSB0aGUgb24gZGlzayBzdHJ1Y3R1cmUgc3RhYmlsaXplcy4KICAgICBzdGF0aWMgY29uc3Qg
Y2hhciogY29tbWFuZHNbXSA9IHsKLSAgICAgICAgIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RT
IE1ldGFEYXRhIChuYW1lIFRFWFQsIGRlc2NyaXB0aW9uIFRFWFQsIHZlcnNpb24gVEVYVCkiCisg
ICAgICAgICJEUk9QIFRBQkxFIElGIEVYSVNUUyBNZXRhRGF0YSIsCisgICAgICAgICJDUkVBVEUg
VEFCTEUgSUYgTk9UIEVYSVNUUyBNZXRhRGF0YSAoaWQgSU5URUdFUiBQUklNQVJZIEtFWSwgbmFt
ZSBURVhULCBkZXNjcmlwdGlvbiBURVhULCB2ZXJzaW9uIFRFWFQpIiwKKyAgICAgICAgIkRST1Ag
VEFCTEUgSUYgRVhJU1RTIE9iamVjdFN0b3JlcyIsCisgICAgICAgICJDUkVBVEUgVEFCTEUgSUYg
Tk9UIEVYSVNUUyBPYmplY3RTdG9yZXMgKGlkIElOVEVHRVIgUFJJTUFSWSBLRVksIG5hbWUgVEVY
VCwga2V5UGF0aCBURVhULCBkb0F1dG9JbmNyZW1lbnQgSU5URUdFUikiLAorICAgICAgICAiRFJP
UCBUQUJMRSBJRiBFWElTVFMgSW5kZXhlcyIsCisgICAgICAgICJDUkVBVEUgVEFCTEUgSUYgTk9U
IEVYSVNUUyBJbmRleGVzIChpZCBJTlRFR0VSIFBSSU1BUlkgS0VZLCBuYW1lIFRFWFQsIGtleVBh
dGggVEVYVCwgaXNVbmlxdWUgSU5URUdFUikiLAorICAgICAgICAiRFJPUCBUQUJMRSBJRiBFWElT
VFMgT2JqZWN0U3RvcmVEYXRhIiwKKyAgICAgICAgIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RT
IE9iamVjdFN0b3JlRGF0YSAoaWQgSU5URUdFUiBQUklNQVJZIEtFWSwga2V5X3N0cmluZyBURVhU
LCBrZXlfZGF0ZSBJTlRFR0VSLCBrZXlfbnVtYmVyIElOVEVHRVIsIHZhbHVlIFRFWFQpIiwKKyAg
ICAgICAgIkRST1AgVEFCTEUgSUYgRVhJU1RTIEluZGV4RGF0YSIsCisgICAgICAgICJDUkVBVEUg
VEFCTEUgSUYgTk9UIEVYSVNUUyBJbmRleERhdGEgKGlkIElOVEVHRVIgUFJJTUFSWSBLRVksIGtl
eV9zdHJpbmcgVEVYVCwga2V5X2RhdGUgSU5URUdFUiwga2V5X251bWJlciBJTlRFR0VSLCB2YWx1
ZSBURVhUKSIKICAgICAgICAgfTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJyYXlz
aXplKGNvbW1hbmRzKTsgKytpKSB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2UvSURCSW5k
ZXhCYWNrZW5kSW1wbC5jcHAgYi9XZWJDb3JlL3N0b3JhZ2UvSURCSW5kZXhCYWNrZW5kSW1wbC5j
cHAKaW5kZXggNDA2ZTM3ZjZmZDE3OWQ0ZWE4NGE4MWY1NjlmMTE0NjZkYzMzZmEzOS4uMTgwZmYx
ZDhiZWQyNzdjYTBkYTkzODVjODI5MzEyZThkYzY3N2I0NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9z
dG9yYWdlL0lEQkluZGV4QmFja2VuZEltcGwuY3BwCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9JREJJ
bmRleEJhY2tlbmRJbXBsLmNwcApAQCAtMjgsMTAgKzI4LDE2IEBACiAKICNpZiBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKIAorI2luY2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZEltcGwuaCIKKyNp
bmNsdWRlICJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgiCisjaW5jbHVkZSAiU1FMaXRlRGF0
YWJhc2UuaCIKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1JREJJbmRleEJhY2tlbmRJbXBsOjpJ
REJJbmRleEJhY2tlbmRJbXBsKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQ
YXRoLCBib29sIHVuaXF1ZSkKLSAgICA6IG1fbmFtZShuYW1lKQorSURCSW5kZXhCYWNrZW5kSW1w
bDo6SURCSW5kZXhCYWNrZW5kSW1wbChJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKiBvYmplY3RT
dG9yZSwgaW50NjRfdCBpZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBh
dGgsIGJvb2wgdW5pcXVlKQorICAgIDogbV9vYmplY3RTdG9yZShvYmplY3RTdG9yZSkKKyAgICAs
IG1faWQoaWQpCisgICAgLCBtX25hbWUobmFtZSkKICAgICAsIG1fa2V5UGF0aChrZXlQYXRoKQog
ICAgICwgbV91bmlxdWUodW5pcXVlKQogewpAQCAtNDEsNiArNDcsMTEgQEAgSURCSW5kZXhCYWNr
ZW5kSW1wbDo6fklEQkluZGV4QmFja2VuZEltcGwoKQogewogfQogCitTUUxpdGVEYXRhYmFzZSYg
SURCSW5kZXhCYWNrZW5kSW1wbDo6c3FsaXRlRGF0YWJhc2UoKSBjb25zdAoreworICAgIHJldHVy
biBtX29iamVjdFN0b3JlLT5kYXRhYmFzZSgpLT5zcWxpdGVEYXRhYmFzZSgpOworfQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRleEJhY2tlbmRJbXBsLmggYi9XZWJD
b3JlL3N0b3JhZ2UvSURCSW5kZXhCYWNrZW5kSW1wbC5oCmluZGV4IGNhM2YwMWVhM2RjYTgzZjc3
ZDlkODJlNTdmZDAxNGI0YWM5ZWY0NTkuLmFjZjZiMWYyMGZjYTZkMWMxMmFhODBhYTM1YjM0NmQy
MTI2MWQyNzEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRleEJhY2tlbmRJbXBs
LmgKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4QmFja2VuZEltcGwuaApAQCAtMzIsMTEg
KzMyLDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDsKK2NsYXNzIFNRTGl0ZURhdGFiYXNlOworCiBjbGFzcyBJREJJbmRleEJhY2tl
bmRJbXBsIDogcHVibGljIElEQkluZGV4QmFja2VuZEludGVyZmFjZSB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gY3JlYXRlKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIHVuaXF1ZSkKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBjcmVhdGUoSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbCogb2JqZWN0U3RvcmUsIGludDY0X3QgaWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIHVuaXF1ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgSURCSW5kZXhCYWNrZW5kSW1wbChuYW1lLCBrZXlQYXRoLCB1bmlxdWUpKTsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJJbmRleEJhY2tlbmRJbXBsKG9iamVjdFN0
b3JlLCBpZCwgbmFtZSwga2V5UGF0aCwgdW5pcXVlKSk7CiAgICAgfQogICAgIHZpcnR1YWwgfklE
QkluZGV4QmFja2VuZEltcGwoKTsKIApAQCAtNDYsOCArNDksMTMgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgYm9vbCB1bmlxdWUoKSB7IHJldHVybiBtX3VuaXF1ZTsgfQogCiBwcml2YXRlOgotICAg
IElEQkluZGV4QmFja2VuZEltcGwoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtl
eVBhdGgsIGJvb2wgdW5pcXVlKTsKKyAgICBJREJJbmRleEJhY2tlbmRJbXBsKElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGwqLCBpbnQ2NF90IGlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0
cmluZyYga2V5UGF0aCwgYm9vbCB1bmlxdWUpOworCisgICAgU1FMaXRlRGF0YWJhc2UmIHNxbGl0
ZURhdGFiYXNlKCkgY29uc3Q7CisKKyAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bD4gbV9vYmplY3RTdG9yZTsKIAorICAgIGludDY0X3QgbV9pZDsKICAgICBTdHJpbmcgbV9uYW1l
OwogICAgIFN0cmluZyBtX2tleVBhdGg7CiAgICAgYm9vbCBtX3VuaXF1ZTsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcCBiL1dlYkNvcmUv
c3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAppbmRleCA5NzMyYmMxZWJkYWZi
NTAwZTgyN2RhYmI2MjhhNTZiZmM1ZTExMDk5Li5hYjQ1MmQ1NTI4MGZiNjQ1YjRlYzFlYTJiMGJj
ZjZkZjI0NDg1NzVhIDEwMDc1NQotLS0gYS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbC5jcHAKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGwuY3BwCkBAIC0zMCwxMCArMzAsMTIgQEAKICNpbmNsdWRlICJJREJCaW5kaW5nVXRpbGl0
aWVzLmgiCiAjaW5jbHVkZSAiSURCQ2FsbGJhY2tzLmgiCiAjaW5jbHVkZSAiSURCQ3Vyc29yQmFj
a2VuZEltcGwuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgiCiAjaW5jbHVk
ZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKICNpbmNsdWRlICJJREJJbmRleEJhY2tlbmRJbXBs
LmgiCiAjaW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIKLSNpbmNsdWRlICJJREJLZXlUcmVlLmgiCisj
aW5jbHVkZSAiU1FMaXRlRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJTUUxpdGVTdGF0ZW1lbnQuaCIK
IAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCkBAIC00MywxMiArNDUsMTQgQEAgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6fklEQk9iamVjdFN0b3JlQmFja2VuZEltcGwoKQogewog
fQogCi1JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIGF1dG9JbmNy
ZW1lbnQpCi0gICAgOiBtX25hbWUobmFtZSkKK0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OklE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGwoSURCRGF0YWJhc2VCYWNrZW5kSW1wbCogZGF0YWJhc2Us
IGludDY0X3QgaWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBi
b29sIGF1dG9JbmNyZW1lbnQpCisgICAgOiBtX2RhdGFiYXNlKGRhdGFiYXNlKQorICAgICwgbV9p
ZChpZCkKKyAgICAsIG1fbmFtZShuYW1lKQogICAgICwgbV9rZXlQYXRoKGtleVBhdGgpCiAgICAg
LCBtX2F1dG9JbmNyZW1lbnQoYXV0b0luY3JlbWVudCkKLSAgICAsIG1fdHJlZShUcmVlOjpjcmVh
dGUoKSkKIHsKKyAgICBpbXBvcnRJbmRleGVzKCk7CiB9CiAKIFBhc3NSZWZQdHI8RE9NU3RyaW5n
TGlzdD4gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6aW5kZXhOYW1lcygpIGNvbnN0CkBAIC01
OSwxNCArNjMsNTIgQEAgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjppbmRleE5hbWVzKCkgY29uc3QKICAgICByZXR1cm4gaW5kZXhOYW1lcy5yZWxl
YXNlKCk7CiB9CiAKK3N0YXRpYyBTdHJpbmcgd2hlcmVDbGF1c2UoSURCS2V5KiBrZXkpCit7Cisg
ICAgc3dpdGNoIChrZXktPnR5cGUoKSkgeworICAgIGNhc2UgSURCS2V5OjpTdHJpbmdUeXBlOgor
ICAgICAgICByZXR1cm4gIiBrZXlfc3RyaW5nID0gPyAgQU5EICBrZXlfZGF0ZSBJUyBOVUxMICBB
TkQgIGtleV9udW1iZXIgSVMgTlVMTCAiOworICAgIGNhc2UgSURCS2V5OjpOdW1iZXJUeXBlOgor
ICAgICAgICByZXR1cm4gIiBrZXlfc3RyaW5nIElTIE5VTEwgIEFORCAga2V5X2RhdGUgSVMgTlVM
TCAgQU5EICBrZXlfbnVtYmVyID0gPyAiOworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZGF0ZS4K
KyAgICBjYXNlIElEQktleTo6TnVsbFR5cGU6CisgICAgICAgIHJldHVybiAiIGtleV9zdHJpbmcg
SVMgTlVMTCAgQU5EICBrZXlfZGF0ZSBJUyBOVUxMICBBTkQgIGtleV9udW1iZXIgSVMgTlVMTCAi
OworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAiIjsKK30K
Kworc3RhdGljIHZvaWQgYmluZEtleShTUUxpdGVTdGF0ZW1lbnQmIHF1ZXJ5LCBJREJLZXkqIGtl
eSwgaW50IGNvbHVtbikKK3sKKyAgICBzd2l0Y2ggKGtleS0+dHlwZSgpKSB7CisgICAgY2FzZSBJ
REJLZXk6OlN0cmluZ1R5cGU6CisgICAgICAgIHF1ZXJ5LmJpbmRUZXh0KGNvbHVtbiwga2V5LT5z
dHJpbmcoKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIElEQktleTo6TnVtYmVyVHlwZToK
KyAgICAgICAgcXVlcnkuYmluZEludChjb2x1bW4sIGtleS0+bnVtYmVyKCkpOworICAgICAgICBy
ZXR1cm47CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBkYXRlLgorICAgIGNhc2UgSURCS2V5OjpO
dWxsVHlwZToKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworfQorCiB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmdldChQYXNzUmVmUHRy
PElEQktleT4ga2V5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQogewotICAg
IFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlID0gbV90cmVlLT5nZXQoa2V5Lmdl
dCgpKTsKLSAgICBpZiAoIXZhbHVlKSB7CisgICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KHNxbGl0
ZURhdGFiYXNlKCksICJTRUxFQ1QgdmFsdWUgRlJPTSBPYmplY3RTdG9yZURhdGEgV0hFUkUiICsg
d2hlcmVDbGF1c2Uoa2V5LmdldCgpKSk7CisgICAgYm9vbCBvayA9IHF1ZXJ5LnByZXBhcmUoKSA9
PSBTUUxSZXN1bHRPazsKKyAgICBBU1NFUlQob2spOyAvLyBGSVhNRTogQmV0dGVyIGVycm9yIGhh
bmRsaW5nPworCisgICAgYmluZEtleShxdWVyeSwga2V5LmdldCgpLCAxKTsKKyAgICBpZiAocXVl
cnkuc3RlcCgpICE9IFNRTFJlc3VsdFJvdykgewogICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3Io
SURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfRk9VTkRf
RVJSLCAiS2V5IGRvZXMgbm90IGV4aXN0IGluIHRoZSBvYmplY3Qgc3RvcmUuIikpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQotICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKHZhbHVlLmdldCgpKTsK
KworICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRl
RnJvbVdpcmUocXVlcnkuZ2V0Q29sdW1uVGV4dCgwKSkpOwogfQogCiB2b2lkIElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OnB1dChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFs
dWUsIFBhc3NSZWZQdHI8SURCS2V5PiBwcnBLZXksIGJvb2wgYWRkT25seSwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcykKQEAgLTg4LDE4ICsxMzAsNjQgQEAgdm9pZCBJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpwdXQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IHZhbHVlLCBQYXMKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChhZGRPbmx5ICYm
IG1fdHJlZS0+Z2V0KGtleS5nZXQoKSkpIHsKKyAgICBTUUxpdGVTdGF0ZW1lbnQgZ2V0UXVlcnko
c3FsaXRlRGF0YWJhc2UoKSwgIlNFTEVDVCBpZCBGUk9NIE9iamVjdFN0b3JlRGF0YSBXSEVSRSIg
KyB3aGVyZUNsYXVzZShrZXkuZ2V0KCkpKTsKKyAgICBib29sIG9rID0gZ2V0UXVlcnkucHJlcGFy
ZSgpID09IFNRTFJlc3VsdE9rOworICAgIEFTU0VSVChvayk7IC8vIEZJWE1FOiBCZXR0ZXIgZXJy
b3IgaGFuZGxpbmc/CisKKyAgICBiaW5kS2V5KGdldFF1ZXJ5LCBrZXkuZ2V0KCksIDEpOworICAg
IGJvb2wgZXhpc3RpbmdWYWx1ZSA9IGdldFF1ZXJ5LnN0ZXAoKSA9PSBTUUxSZXN1bHRSb3c7Cisg
ICAgaWYgKGFkZE9ubHkgJiYgZXhpc3RpbmdWYWx1ZSkgewogICAgICAgICBjYWxsYmFja3MtPm9u
RXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDT05T
VFJBSU5UX0VSUiwgIktleSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgb2JqZWN0IHN0b3JlLiIpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fdHJlZS0+cHV0KGtleS5nZXQoKSwgdmFs
dWUuZ2V0KCkpOworICAgIFN0cmluZyBzcWwgPSBleGlzdGluZ1ZhbHVlID8gIlVQREFURSBPYmpl
Y3RTdG9yZURhdGEgU0VUIGtleV9zdHJpbmcgPSA/LCBrZXlfZGF0ZSA9ID8sIGtleV9udW1iZXIg
PSA/LCB2YWx1ZSA9ID8gV0hFUkUgaWQgPSA/IgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDogIklOU0VSVCBJTlRPIE9iamVjdFN0b3JlRGF0YSAoa2V5X3N0cmluZywga2V5X2RhdGUs
IGtleV9udW1iZXIsIHZhbHVlKSBWQUxVRVMgKD8sID8sID8sID8pIjsKKyAgICBTUUxpdGVTdGF0
ZW1lbnQgcHV0UXVlcnkoc3FsaXRlRGF0YWJhc2UoKSwgc3FsKTsKKyAgICBvayA9IHB1dFF1ZXJ5
LnByZXBhcmUoKSA9PSBTUUxSZXN1bHRPazsKKyAgICBBU1NFUlQob2spOyAvLyBGSVhNRTogQmV0
dGVyIGVycm9yIGhhbmRsaW5nPworICAgIHN3aXRjaCAoa2V5LT50eXBlKCkpIHsKKyAgICBjYXNl
IElEQktleTo6U3RyaW5nVHlwZToKKyAgICAgICAgcHV0UXVlcnkuYmluZFRleHQoMSwga2V5LT5z
dHJpbmcoKSk7CisgICAgICAgIHB1dFF1ZXJ5LmJpbmROdWxsKDIpOworICAgICAgICBwdXRRdWVy
eS5iaW5kTnVsbCgzKTsKKyAgICAgICAgYnJlYWs7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBk
YXRlLgorICAgIGNhc2UgSURCS2V5OjpOdW1iZXJUeXBlOgorICAgICAgICBwdXRRdWVyeS5iaW5k
TnVsbCgxKTsKKyAgICAgICAgcHV0UXVlcnkuYmluZE51bGwoMik7CisgICAgICAgIHB1dFF1ZXJ5
LmJpbmRJbnQoMywga2V5LT5udW1iZXIoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSURC
S2V5OjpOdWxsVHlwZToKKyAgICAgICAgcHV0UXVlcnkuYmluZE51bGwoMSk7CisgICAgICAgIHB1
dFF1ZXJ5LmJpbmROdWxsKDIpOworICAgICAgICBwdXRRdWVyeS5iaW5kTnVsbCgzKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgfQorICAgIHB1dFF1ZXJ5LmJpbmRUZXh0KDQsIHZhbHVlLT50b1dpcmVTdHJpbmcoKSk7Cisg
ICAgaWYgKGV4aXN0aW5nVmFsdWUpCisgICAgICAgIHB1dFF1ZXJ5LmJpbmRJbnQoNSwgZ2V0UXVl
cnkuZ2V0Q29sdW1uSW50KDApKTsKKworICAgIG9rID0gcHV0UXVlcnkuc3RlcCgpID09IFNRTFJl
c3VsdERvbmU7CisgICAgQVNTRVJUKG9rKTsgLy8gRklYTUU6IEJldHRlciBlcnJvciBoYW5kbGlu
Zz8KKwogICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKGtleS5nZXQoKSk7CiB9CiAKIHZvaWQgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cmVtb3ZlKFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCiB7Ci0gICAgbV90cmVlLT5yZW1vdmUo
a2V5LmdldCgpKTsKKyAgICBTUUxpdGVTdGF0ZW1lbnQgcXVlcnkoc3FsaXRlRGF0YWJhc2UoKSwg
IkRFTEVURSBGUk9NIE9iamVjdFN0b3JlRGF0YSBXSEVSRSIgKyB3aGVyZUNsYXVzZShrZXkuZ2V0
KCkpKTsKKyAgICBib29sIG9rID0gcXVlcnkucHJlcGFyZSgpID09IFNRTFJlc3VsdE9rOworICAg
IEFTU0VSVChvayk7IC8vIEZJWE1FOiBCZXR0ZXIgZXJyb3IgaGFuZGxpbmc/CisKKyAgICBiaW5k
S2V5KHF1ZXJ5LCBrZXkuZ2V0KCksIDEpOworICAgIGlmIChxdWVyeS5zdGVwKCkgIT0gU1FMUmVz
dWx0RG9uZSkgeworICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6
Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfRk9VTkRfRVJSLCAiS2V5IGRvZXMgbm90
IGV4aXN0IGluIHRoZSBvYmplY3Qgc3RvcmUuIikpOworICAgICAgICByZXR1cm47CisgICAgfQor
CiAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoKTsKIH0KIApAQCAtMTEwLDcgKzE5OCwxNyBAQCB2
b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZUluZGV4KGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgU3RyaW5nJiBrZQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVm
UHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gaW5kZXggPSBJREJJbmRleEJhY2tlbmRJbXBs
OjpjcmVhdGUobmFtZSwga2V5UGF0aCwgdW5pcXVlKTsKKyAgICBTUUxpdGVTdGF0ZW1lbnQgaW5z
ZXJ0KHNxbGl0ZURhdGFiYXNlKCksICJJTlNFUlQgSU5UTyBJbmRleGVzIChuYW1lLCBrZXlQYXRo
LCBpc1VuaXF1ZSkgVkFMVUVTICg/LCA/LCA/KSIpOworICAgIGJvb2wgb2sgPSBpbnNlcnQucHJl
cGFyZSgpID09IFNRTFJlc3VsdE9rOworICAgIEFTU0VSVChvayk7IC8vIEZJWE1FOiBCZXR0ZXIg
ZXJyb3IgaGFuZGxpbmcuCisgICAgaW5zZXJ0LmJpbmRUZXh0KDEsIG5hbWUpOworICAgIGluc2Vy
dC5iaW5kVGV4dCgyLCBrZXlQYXRoKTsKKyAgICBpbnNlcnQuYmluZEludCgzLCAoaW50KXVuaXF1
ZSk7CisgICAgb2sgPSBpbnNlcnQuc3RlcCgpID09IFNRTFJlc3VsdERvbmU7CisgICAgQVNTRVJU
KG9rKTsgLy8gRklYTUU6IEJldHRlciBlcnJvciBoYW5kbGluZy4KKyAgICBpbnQ2NF90IGlkID0g
c3FsaXRlRGF0YWJhc2UoKS5sYXN0SW5zZXJ0Um93SUQoKTsKKworICAgIFJlZlB0cjxJREJJbmRl
eEJhY2tlbmRJbnRlcmZhY2U+IGluZGV4ID0gSURCSW5kZXhCYWNrZW5kSW1wbDo6Y3JlYXRlKHRo
aXMsIGlkLCBuYW1lLCBrZXlQYXRoLCB1bmlxdWUpOwogICAgIEFTU0VSVChpbmRleC0+bmFtZSgp
ID09IG5hbWUpOwogICAgIG1faW5kZXhlcy5zZXQobmFtZSwgaW5kZXgpOwogICAgIGNhbGxiYWNr
cy0+b25TdWNjZXNzKGluZGV4LnJlbGVhc2UoKSk7CkBAIC0xMjgsMTkgKzIyNiw1OCBAQCB2b2lk
IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnJlbW92ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFt
ZSwgUGFzc1JlZlB0cjxJREJDYQogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgU1FMaXRl
U3RhdGVtZW50IGRlbGV0ZVF1ZXJ5KHNxbGl0ZURhdGFiYXNlKCksICJERUxFVEUgRlJPTSBJbmRl
eGVzIFdIRVJFIG5hbWUgPSA/Iik7CisgICAgYm9vbCBvayA9IGRlbGV0ZVF1ZXJ5LnByZXBhcmUo
KSA9PSBTUUxSZXN1bHRPazsKKyAgICBBU1NFUlQob2spOyAvLyBGSVhNRTogQmV0dGVyIGVycm9y
IGhhbmRsaW5nLgorICAgIGRlbGV0ZVF1ZXJ5LmJpbmRUZXh0KDEsIG5hbWUpOworICAgIG9rID0g
ZGVsZXRlUXVlcnkuc3RlcCgpID09IFNRTFJlc3VsdERvbmU7CisgICAgQVNTRVJUKG9rKTsgLy8g
RklYTUU6IEJldHRlciBlcnJvciBoYW5kbGluZy4KKworICAgIC8vIEZJWE1FOiBEZWxldGUgYWxs
IGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoaXMgaW5kZXguCisKICAgICBtX2luZGV4ZXMucmVtb3Zl
KG5hbWUpOwogICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKCk7CiB9CiAKIHZvaWQgSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6b3BlbkN1cnNvcihQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5n
ZSwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzKQogeworICAgIC8vIEZJWE1FOiBGdWxseSBpbXBsZW1lbnQuCisKICAgICBSZWZQdHI8
SURCS2V5PiBrZXkgPSByYW5nZS0+bGVmdCgpOwotICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IHZhbHVlID0gbV90cmVlLT5nZXQoa2V5LmdldCgpKTsKLSAgICBpZiAodmFsdWUpIHsK
LSAgICAgICAgUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U+IGN1cnNvciA9IElEQkN1
cnNvckJhY2tlbmRJbXBsOjpjcmVhdGUodGhpcywgcmFuZ2UsIHN0YXRpY19jYXN0PElEQkN1cnNv
cjo6RGlyZWN0aW9uPihkaXJlY3Rpb24pLCBrZXksIHZhbHVlKTsKLSAgICAgICAgY2FsbGJhY2tz
LT5vblN1Y2Nlc3MoY3Vyc29yLnJlbGVhc2UoKSk7Ci0gICAgfSBlbHNlCi0gICAgICBjYWxsYmFj
a3MtPm9uU3VjY2VzcygpOworICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVyeShzcWxpdGVEYXRhYmFz
ZSgpLCAiU0VMRUNUIGlkLCB2YWx1ZSBGUk9NIE9iamVjdFN0b3JlRGF0YSBXSEVSRSIgKyB3aGVy
ZUNsYXVzZShrZXkuZ2V0KCkpKTsKKyAgICBib29sIG9rID0gcXVlcnkucHJlcGFyZSgpID09IFNR
TFJlc3VsdE9rOworICAgIEFTU0VSVChvayk7IC8vIEZJWE1FOiBCZXR0ZXIgZXJyb3IgaGFuZGxp
bmc/CisKKyAgICBiaW5kS2V5KHF1ZXJ5LCBrZXkuZ2V0KCksIDEpOworICAgIGlmIChxdWVyeS5z
dGVwKCkgIT0gU1FMUmVzdWx0Um93KSB7CisgICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiB2YWx1ZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUocXVlcnku
Z2V0Q29sdW1uVGV4dCgxKSk7CisgICAgUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U+
IGN1cnNvciA9IElEQkN1cnNvckJhY2tlbmRJbXBsOjpjcmVhdGUodGhpcywgcmFuZ2UsIHN0YXRp
Y19jYXN0PElEQkN1cnNvcjo6RGlyZWN0aW9uPihkaXJlY3Rpb24pLCBrZXkucmVsZWFzZSgpLCB2
YWx1ZS5yZWxlYXNlKCkpOworICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKGN1cnNvci5yZWxlYXNl
KCkpOworfQorCit2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmltcG9ydEluZGV4ZXMo
KQoreworICAgIFNRTGl0ZVN0YXRlbWVudCBpbmRleFF1ZXJ5KHNxbGl0ZURhdGFiYXNlKCksICJT
RUxFQ1QgaWQsIG5hbWUsIGtleVBhdGgsIGlzVW5pcXVlIEZST00gSW5kZXhlcyIpOworICAgIGJv
b2wgb2sgPSBpbmRleFF1ZXJ5LnByZXBhcmUoKSA9PSBTUUxSZXN1bHRPazsKKyAgICBBU1NFUlQo
b2spOyAvLyBGSVhNRTogQmV0dGVyIGVycm9yIGhhbmRsaW5nPworCisgICAgd2hpbGUgKGluZGV4
UXVlcnkuc3RlcCgpID09IFNRTFJlc3VsdFJvdykgeworICAgICAgICBpbnQ2NF90IGlkID0gaW5k
ZXhRdWVyeS5nZXRDb2x1bW5JbnQ2NCgwKTsKKyAgICAgICAgU3RyaW5nIG5hbWUgPSBpbmRleFF1
ZXJ5LmdldENvbHVtblRleHQoMSk7CisgICAgICAgIFN0cmluZyBrZXlQYXRoID0gaW5kZXhRdWVy
eS5nZXRDb2x1bW5UZXh0KDIpOworICAgICAgICBib29sIHVuaXF1ZSA9ICEhaW5kZXhRdWVyeS5n
ZXRDb2x1bW5JbnQoMyk7CisKKyAgICAgICAgbV9pbmRleGVzLnNldChuYW1lLCBJREJJbmRleEJh
Y2tlbmRJbXBsOjpjcmVhdGUodGhpcywgaWQsIG5hbWUsIGtleVBhdGgsIHVuaXF1ZSkpOworICAg
IH0KK30KKworU1FMaXRlRGF0YWJhc2UmIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNxbGl0
ZURhdGFiYXNlKCkgY29uc3QgCit7CisgICAgcmV0dXJuIG1fZGF0YWJhc2UtPnNxbGl0ZURhdGFi
YXNlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
c3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmggYi9XZWJDb3JlL3N0b3JhZ2UvSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oCmluZGV4IDRiOTA5YWY3NDA5YzM0NzAyNTJmYjk1NTlm
MWU5OTBjZWY4NTJmYzkuLjUwNjkyZmJkYmY3ODc4MjVjYzcyODZiMjI3NzUyMTA0NzUzYmIwZjUg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgK
KysrIGIvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaApAQCAtMzQs
MTMgKzM0LDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdGVtcGxhdGUgPHR5cGVuYW1l
IFZhbHVlVHlwZT4gY2xhc3MgSURCS2V5VHJlZTsKK2NsYXNzIElEQkRhdGFiYXNlQmFja2VuZElt
cGw7CitjbGFzcyBTUUxpdGVEYXRhYmFzZTsKIAogY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbCA6IHB1YmxpYyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UgewogcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gY3Jl
YXRlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIGF1dG9J
bmNyZW1lbnQpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50
ZXJmYWNlPiBjcmVhdGUoSURCRGF0YWJhc2VCYWNrZW5kSW1wbCogZGF0YWJhc2UsIGludDY0X3Qg
aWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIGF1dG9J
bmNyZW1lbnQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGwobmFtZSwga2V5UGF0aCwgYXV0b0luY3JlbWVudCkpOworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwoZGF0YWJhc2UsIGlk
LCBuYW1lLCBrZXlQYXRoLCBhdXRvSW5jcmVtZW50KSk7CiAgICAgfQogICAgIH5JREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsKCk7CiAKQEAgLTU4LDE4ICs1OSwyMyBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIG9wZW5DdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIHVuc2lnbmVkIHNo
b3J0IGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKIAorICAgIElEQkRhdGFi
YXNlQmFja2VuZEltcGwqIGRhdGFiYXNlKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhYmFzZS5nZXQo
KTsgfQorCiBwcml2YXRlOgotICAgIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwoY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCk7Cisg
ICAgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbChJREJEYXRhYmFzZUJhY2tlbmRJbXBsKiwgaW50
NjRfdCBpZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wg
YXV0b0luY3JlbWVudCk7CisKKyAgICB2b2lkIGltcG9ydEluZGV4ZXMoKTsKKyAgICBTUUxpdGVE
YXRhYmFzZSYgc3FsaXRlRGF0YWJhc2UoKSBjb25zdDsKIAorICAgIFJlZlB0cjxJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsPiBtX2RhdGFiYXNlOworCisgICAgaW50NjRfdCBtX2lkOwogICAgIFN0cmlu
ZyBtX25hbWU7CiAgICAgU3RyaW5nIG1fa2V5UGF0aDsKICAgICBib29sIG1fYXV0b0luY3JlbWVu
dDsKIAogICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJ
bnRlcmZhY2U+ID4gSW5kZXhNYXA7CiAgICAgSW5kZXhNYXAgbV9pbmRleGVzOwotCi0gICAgdHlw
ZWRlZiBJREJLZXlUcmVlPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gVHJlZTsKLSAgICBSZWZQdHI8
VHJlZT4gbV90cmVlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64718</attachid>
            <date>2010-08-18 09:17:58 -0700</date>
            <delta_ts>2010-08-18 10:18:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-44164-20100818171756.patch</filename>
            <type>text/plain</type>
            <size>29772</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA5M2IzZjBhZjRhZDdkNzk3ZDIzY2QyOGE4NDUyYTk1NGQ1ZmZmYjdkLi40NTE0Mjg1
ZDg1ZGRmMTI3NDQ0ZTM1ZTg5YmExMjUwNTkyY2JkN2JkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAK
KzIwMTAtMDgtMTggIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgSW1wbGVtZW50IHBlcnNpc3RhbmNlIGZvciBJbmRleGVkREIgT2JqZWN0U3RvcmVzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDE2NAorCisgICAg
ICAgIFJlbW92ZSBvbGQgb2JqZWN0IHN0b3JlcyBiZWZvcmUgcnVubmluZyB0ZXN0LgorCisgICAg
ICAgICogc3RvcmFnZS9pbmRleGVkZGIvcmVzb3VyY2VzL3NoYXJlZC5qczoKKyAgICAgICAgKGRl
bGV0ZUFsbE9iamVjdFN0b3Jlcyk6CisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvc2NyaXB0
LXRlc3RzL29iamVjdHN0b3JlLWJhc2ljcy5qczoKKyAgICAgICAgKG9wZW5TdWNjZXNzKToKKyAg
ICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9zY3JpcHQtdGVzdHMvb3Blbi1jdXJzb3IuanM6Cisg
ICAgICAgIChvcGVuU3VjY2Vzcyk6CisKIDIwMTAtMDgtMDkgIEplcmVteSBPcmxvdyAgPGpvcmxv
d0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU3RldmUgQmxvY2suCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9yZXNvdXJjZXMvc2hhcmVkLmpz
IGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvcmVzb3VyY2VzL3NoYXJlZC5qcwppbmRl
eCBlNTEwYmUxOGNiYzFkOGNkY2IzYjc3M2ZjZWI1ZmJkZDA3ZDA4YjA2Li42NzY5ZWQyY2JhODkx
OTEyZGRjOTczZmJiNGQ2YmUxM2RiYzllZjFmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdG9y
YWdlL2luZGV4ZWRkYi9yZXNvdXJjZXMvc2hhcmVkLmpzCisrKyBiL0xheW91dFRlc3RzL3N0b3Jh
Z2UvaW5kZXhlZGRiL3Jlc291cmNlcy9zaGFyZWQuanMKQEAgLTUzLDMgKzUzLDEwIEBAIGZ1bmN0
aW9uIHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrKCkKICAgICBkb25lKCk7CiB9CiAKK2Z1bmN0aW9u
IGRlbGV0ZUFsbE9iamVjdFN0b3JlcyhkYikKK3sKKyAgICBvYmplY3RTdG9yZXMgPSBkYi5vYmpl
Y3RTdG9yZXM7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3RTdG9yZXMubGVuZ3RoOyAr
K2kpCisgICAgICAgIGRiLnJlbW92ZU9iamVjdFN0b3JlKG9iamVjdFN0b3Jlc1tpXSk7Cit9CisK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3NjcmlwdC10ZXN0cy9v
YmplY3RzdG9yZS1iYXNpY3MuanMgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9zY3Jp
cHQtdGVzdHMvb2JqZWN0c3RvcmUtYmFzaWNzLmpzCmluZGV4IDk4Njk1Nzk3ZWMyMjE5NzI0NjVm
NGRiNzE4MTQ3ODkyMWFlODc0YzEuLjYzNjc1YWQwNWQzNjk1NjYwNjg5ZDdhM2ZmYTkyNGNmMzE0
NzE1MTIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3NjcmlwdC10
ZXN0cy9vYmplY3RzdG9yZS1iYXNpY3MuanMKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRl
eGVkZGIvc2NyaXB0LXRlc3RzL29iamVjdHN0b3JlLWJhc2ljcy5qcwpAQCAtMTYsOCArMTYsNyBA
QCBmdW5jdGlvbiBvcGVuU3VjY2VzcygpCiAgICAgdmVyaWZ5U3VjY2Vzc0V2ZW50KGV2ZW50KTsK
ICAgICBkYiA9IGV2YWxBbmRMb2coImRiID0gZXZlbnQucmVzdWx0Iik7CiAKLSAgICAvLyBGSVhN
RTogcmVtb3ZlIGFueSBwcmV2aW91c2x5IGNyZWF0ZWQgb2JqZWN0IHN0b3Jlcy4KLSAgICAvLyBU
aGlzIHJlcXVpcmVzIElEQkRhdGFiYXNlUmVxdWVzdDo6cmVtb3ZlT2JqZWN0U3RvcmUgdG8gYmUg
aW1wbGVtZW50ZWQuCisgICAgZGVsZXRlQWxsT2JqZWN0U3RvcmVzKGRiKTsKIAogICAgIHJlc3Vs
dCA9IGV2YWxBbmRMb2coImRiLmNyZWF0ZU9iamVjdFN0b3JlKCdzdG9yZU5hbWUnLCBudWxsKSIp
OwogICAgIHZlcmlmeVJlc3VsdChyZXN1bHQpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3Rv
cmFnZS9pbmRleGVkZGIvc2NyaXB0LXRlc3RzL29wZW4tY3Vyc29yLmpzIGIvTGF5b3V0VGVzdHMv
c3RvcmFnZS9pbmRleGVkZGIvc2NyaXB0LXRlc3RzL29wZW4tY3Vyc29yLmpzCmluZGV4IGUzYzYx
NWM0YTVhZTcwNTBjZDI3YzYwMjA4NzU1YmViYjI5ZmQwNzcuLmZmMGI3MTEzN2EyMDY3NmUyNzM2
YTZhNTUwM2QwYjhhZTIwZTExYTYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5k
ZXhlZGRiL3NjcmlwdC10ZXN0cy9vcGVuLWN1cnNvci5qcworKysgYi9MYXlvdXRUZXN0cy9zdG9y
YWdlL2luZGV4ZWRkYi9zY3JpcHQtdGVzdHMvb3Blbi1jdXJzb3IuanMKQEAgLTYwLDYgKzYwLDkg
QEAgZnVuY3Rpb24gb3BlblN1Y2Nlc3MoKQogewogICAgIHZlcmlmeVN1Y2Nlc3NFdmVudChldmVu
dCk7CiAgICAgdmFyIGRiID0gZXZhbEFuZExvZygiZGIgPSBldmVudC5yZXN1bHQiKTsKKworICAg
IGRlbGV0ZUFsbE9iamVjdFN0b3JlcyhkYik7CisKICAgICByZXN1bHQgPSBldmFsQW5kTG9nKCJk
Yi5jcmVhdGVPYmplY3RTdG9yZSgndGVzdCcpIik7CiAgICAgdmVyaWZ5UmVzdWx0KHJlc3VsdCk7
CiAgICAgcmVzdWx0Lm9uc3VjY2VzcyA9IGNyZWF0ZU9iamVjdFN0b3JlU3VjY2VzczsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTg5NTgw
YjJmOGRlMjNmNmExYjcyNWQ1MGUxMjMxMjZmZjc4OGEyZC4uZjczM2RkOWIyMmM5NTdiMTNjMzFj
NDMzMjAzOTI2YWE2MjFmY2NmNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIv
V2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MiBAQAorMjAxMC0wOC0xOCAgSmVyZW15IE9y
bG93ICA8am9ybG93QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgcGVyc2lzdGFuY2UgZm9yIEluZGV4ZWREQiBP
YmplY3RTdG9yZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTQ0MTY0CisKKyAgICAgICAgR2V0IHJpZCBvZiB0aGUgaW4tbWVtb3J5IHN0b3JhZ2Ugb2Yg
T2JqZWN0U3RvcmVzIGFuZCBpbnN0ZWFkCisgICAgICAgIHVzZSBTUUwgYmFja2VkIG1lbW9yeS4K
KworICAgICAgICBFeGlzdGluZyB0ZXN0cyBnaXZlIG1vc3Qgb2YgdGhlIGNvdmVyYWdlLiAgV2ls
bCB1cGRhdGUgdGhlIG1hbnVhbAorICAgICAgICB0ZXN0IGluIHRoZSBuZXh0IHBhdGNoICh3aGlj
aCB3aWxsIGFsc28gcmUtd29yayBkYXRhYmFzZS5kZXNjcmlwdGlvbikuCisKKyAgICAgICAgKiBt
YW51YWwtdGVzdHMvaW5kZXhlZC1kYXRhYmFzZS5odG1sOiBHZXQgcmlkIG9mIHJhY2Ugd2hlcmUg
eW91IGNhbiBjbGljayBiZWZvcmUgdGhlIHBhZ2UgbG9hZHMuCisgICAgICAgICogcGxhdGZvcm0v
c3FsL1NRTGl0ZVN0YXRlbWVudC5jcHA6IEFkZCB0d28gaGVscGVyIGZ1bmN0aW9ucworICAgICAg
ICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpiaW5kSW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlNRTGl0ZVN0YXRlbWVudDo6aXNDb2x1bW5OdWxsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwv
U1FMaXRlU3RhdGVtZW50Lmg6CisgICAgICAgICogc3RvcmFnZS9JREJDdXJzb3JCYWNrZW5kSW1w
bC5jcHA6IAorICAgICAgICAqIHN0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpJREJEYXRhYmFzZUJhY2tl
bmRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0
ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6
OnJlbW92ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6OmltcG9ydE9iamVjdFN0b3Jlcyk6CisgICAgICAgICogc3RvcmFnZS9JREJEYXRhYmFz
ZUJhY2tlbmRJbXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBs
OjpzcWxpdGVEYXRhYmFzZSk6CisgICAgICAgICogc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZElt
cGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlVGFibGVzKToKKyAgICAgICAgKiBzdG9y
YWdlL0lEQkluZGV4QmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXhC
YWNrZW5kSW1wbDo6SURCSW5kZXhCYWNrZW5kSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJJ
bmRleEJhY2tlbmRJbXBsOjpzcWxpdGVEYXRhYmFzZSk6CisgICAgICAgICogc3RvcmFnZS9JREJJ
bmRleEJhY2tlbmRJbXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJbXBs
OjpjcmVhdGUpOgorICAgICAgICAqIHN0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OndoZXJlQ2xhdXNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmJpbmRLZXkpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsOjpyZW1vdmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6Y3JlYXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6cmVtb3ZlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6b3BlbkN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjppbXBvcnRJbmRleGVzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OnNxbGl0ZURhdGFiYXNlKToKKyAgICAgICAgKiBzdG9yYWdlL0lEQk9i
amVjdFN0b3JlQmFja2VuZEltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpkYXRhYmFzZSk6CisKIDIwMTAtMDgtMTEgIEplcmVteSBPcmxvdyAgPGpvcmxv
d0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQmVnaW5uaW5ncyBvZiBJbmRleGVkREIgcGVyc2lz
dGFuY2UgKyBJREJEYXRhYmFzZS5kZXNjcmlwdGlvbiBmbGVzaGVkIG91dApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9tYW51YWwtdGVzdHMvaW5kZXhlZC1kYXRhYmFzZS5odG1sIGIvV2ViQ29yZS9tYW51
YWwtdGVzdHMvaW5kZXhlZC1kYXRhYmFzZS5odG1sCmluZGV4IGQwZmIzODE0ZDcwOTljNDg3NjA4
N2QwZTQ1NTJiZDU1NWE3NDdkMzQuLmJjYzhmZTQzNTVlZWI5YWVmZTE5OWUzYzVmZGVhOTBmZThm
ZWQwZDQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbWFudWFsLXRlc3RzL2luZGV4ZWQtZGF0YWJhc2Uu
aHRtbAorKysgYi9XZWJDb3JlL21hbnVhbC10ZXN0cy9pbmRleGVkLWRhdGFiYXNlLmh0bWwKQEAg
LTE2LDYgKzE2LDggQEAKIAogPHNjcmlwdD4KIAorICAgIHJlYWR5Q291bnQgPSAwOworCiAgICAg
aWYgKCEoJ2luZGV4ZWREQicgaW4gd2luZG93KSkKICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoImVuYWJsZWQiKS5pbm5lckhUTUwgPSAiPGZvbnQgY29sb3I9cmVkPllvdXIgYnVpbGQg
ZG9lcyBOT1Qgc2VlbSB0byBoYXZlIGl0IGVuYWJsZWQuICBTbyBhbGwgY29kZSBvbiB0aGlzIHBh
Z2UgaXMgZGlzYWJsZWQuPC9mb250PiI7CiAgICAgZWxzZSB7CkBAIC0yNSw2ICsyNyw3IEBACiAg
ICAgICAgIHJlcXVlc3Qub25zdWNjZXNzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgicmVzdWx0IikuaW5uZXJIVE1MID0gIjxmb250IGNvbG9yPWdy
ZWVuPlN1Y2Nlc3MhPC9mb250PiI7CiAgICAgICAgICAgICB3aW5kb3cubmFtZURCID0gZXZlbnQu
cmVzdWx0OworICAgICAgICAgICAgKytyZWFkeUNvdW50OwogICAgICAgICB9OwogICAgICAgICBy
ZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJyZXN1bHQiKS5pbm5lckhUTUwgPSAiPGZvbnQgY29sb3I9cmVkPkVycm9yOiAi
ICsgZXZlbnQubWVzc2FnZSArICIuPC9mb250PiI7CkBAIC0zMywxNyArMzYsMjggQEAKICAgICAg
ICAgcmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKCJhbm90aGVyIiwgInRlc3Qgb2YgdGhlIGRlc2Ny
aXB0aW9uIGF0dHJpYnV0ZSIpOwogICAgICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGZ1bmN0aW9u
KCkgewogICAgICAgICAgICAgd2luZG93LmFub3RoZXJEQiA9IGV2ZW50LnJlc3VsdDsKKyAgICAg
ICAgICAgICsrcmVhZHlDb3VudDsKICAgICAgICAgfTsKICAgICB9CiAKICAgICBmdW5jdGlvbiB1
cGRhdGVEZXNjcmlwdGlvbigpCiAgICAgeworICAgICAgICBpZiAocmVhZENvdW50IDwgMikgewor
ICAgICAgICAgICAgYWxlcnQoIlRoZSBwYWdlIGhhcyBub3QgZmluaXNoZWQgbG9hZGluZy4gIEhv
bGQgb24gYSBzZWMuLi4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCiAgICAg
ICAgIGluZGV4ZWREQi5vcGVuKCJuYW1lIiwgInRlc3Qgb2YgdGhlIGRlc2NyaXB0aW9uIGF0dHJp
YnV0ZSIpOwogICAgICAgICBpbmRleGVkREIub3BlbigiYW5vdGhlciIsICJ4eXoiKTsKICAgICB9
CiAKICAgICBmdW5jdGlvbiByZWFkRGVzY3JpcHRpb24oKQogICAgIHsKKyAgICAgICAgaWYgKHJl
YWRDb3VudCA8IDIpIHsKKyAgICAgICAgICAgIGFsZXJ0KCJUaGUgcGFnZSBoYXMgbm90IGZpbmlz
aGVkIGxvYWRpbmcuICBIb2xkIG9uIGEgc2VjLi4uIik7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKwogICAgICAgICBpZiAod2luZG93Lm5hbWVEQi5kZXNjcmlwdGlvbiAhPSAidGVz
dCBvZiB0aGUgZGVzY3JpcHRpb24gYXR0cmlidXRlIikgewogICAgICAgICAgICAgLy8gU2luY2Ug
d2UgcGFzc2VkIGluIG5vdGhpbmcsIHRoZSBkZXNjcmlwdGlvbiBzaG91bGQgbm90IGJlIHJlc2V0
LgogICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRlc2NyaXB0aW9uIikuaW5u
ZXJIVE1MID0gIjxmb250IGNvbG9yPXJlZD5GYWlsdXJlOiAoRGF0YWJhc2UgJ25hbWUnIHdhcyB0
aGlzOiAiICsgd2luZG93Lm5hbWVEQi5kZXNjcmlwdGlvbiArICIpLjwvZm9udD4iOwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmNwcCBiL1dlYkNvcmUv
cGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5jcHAKaW5kZXggNGRjODBmYjVhMGQ0Nzk3ODlh
ZWRjMTEyMDdjZTA2OTQ0M2YxZDgzZC4uMDM3ZWM3OWYzMmQzNzAxMzdkZjI0NGJkYjQ2ZjhmMzAz
Y2IzOTAwYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50
LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3BwCkBAIC0x
OTIsNiArMTkyLDE0IEBAIGludCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRUZXh0KGludCBpbmRleCwg
Y29uc3QgU3RyaW5nJiB0ZXh0KQogICAgIHJldHVybiBzcWxpdGUzX2JpbmRfdGV4dDE2KG1fc3Rh
dGVtZW50LCBpbmRleCwgY2hhcmFjdGVycywgc2l6ZW9mKFVDaGFyKSAqIHRleHQubGVuZ3RoKCks
IFNRTElURV9UUkFOU0lFTlQpOwogfQogCitpbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kSW50KGlu
dCBpbmRleCwgaW50IGludGVnZXIpCit7CisgICAgQVNTRVJUKG1faXNQcmVwYXJlZCk7CisgICAg
QVNTRVJUKGluZGV4ID4gMCk7CisgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmRl
eCkgPD0gYmluZFBhcmFtZXRlckNvdW50KCkpOworCisgICAgcmV0dXJuIHNxbGl0ZTNfYmluZF9p
bnQobV9zdGF0ZW1lbnQsIGluZGV4LCBpbnRlZ2VyKTsKK30KIAogaW50IFNRTGl0ZVN0YXRlbWVu
dDo6YmluZEludDY0KGludCBpbmRleCwgaW50NjRfdCBpbnRlZ2VyKQogewpAQCAtMjUxLDYgKzI1
OSwxOCBAQCBpbnQgU1FMaXRlU3RhdGVtZW50Ojpjb2x1bW5Db3VudCgpCiAgICAgcmV0dXJuIHNx
bGl0ZTNfZGF0YV9jb3VudChtX3N0YXRlbWVudCk7CiB9CiAKK2Jvb2wgU1FMaXRlU3RhdGVtZW50
Ojppc0NvbHVtbk51bGwoaW50IGNvbCkKK3sKKyAgICBBU1NFUlQoY29sID49IDApOworICAgIGlm
ICghbV9zdGF0ZW1lbnQpCisgICAgICAgIGlmIChwcmVwYXJlQW5kU3RlcCgpICE9IFNRTElURV9S
T1cpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGNvbHVtbkNvdW50KCkgPD0g
Y29sKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gc3FsaXRlM19jb2x1bW5f
dHlwZShtX3N0YXRlbWVudCwgY29sKSA9PSBTUUxJVEVfTlVMTDsKK30KKwogU3RyaW5nIFNRTGl0
ZVN0YXRlbWVudDo6Z2V0Q29sdW1uTmFtZShpbnQgY29sKQogewogICAgIEFTU0VSVChjb2wgPj0g
MCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuaCBi
L1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5oCmluZGV4IGU2MmI0ZjBlYTkx
NTVlMjQyMDEyZmNiMGYxODkwZWQwMmIyMmY1MWQuLjE0NDRmMGVlZWQxOWRjMmEzM2MyYWE5ZWQ0
NGRmMzRjZTFhZWQ3OGQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0
YXRlbWVudC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5oCkBA
IC00Miw2ICs0Miw3IEBAIHB1YmxpYzoKICAgICBpbnQgcHJlcGFyZSgpOwogICAgIGludCBiaW5k
QmxvYihpbnQgaW5kZXgsIGNvbnN0IHZvaWQqIGJsb2IsIGludCBzaXplKTsKICAgICBpbnQgYmlu
ZFRleHQoaW50IGluZGV4LCBjb25zdCBTdHJpbmcmKTsKKyAgICBpbnQgYmluZEludChpbnQgaW5k
ZXgsIGludCk7CiAgICAgaW50IGJpbmRJbnQ2NChpbnQgaW5kZXgsIGludDY0X3QpOwogICAgIGlu
dCBiaW5kRG91YmxlKGludCBpbmRleCwgZG91YmxlKTsKICAgICBpbnQgYmluZE51bGwoaW50IGlu
ZGV4KTsKQEAgLTcwLDYgKzcxLDcgQEAgcHVibGljOgogICAgIC8vIHJldHVybmVkIGluIHRoZSBs
YXN0IHN0ZXAoKQogICAgIGludCBjb2x1bW5Db3VudCgpOwogICAgIAorICAgIGJvb2wgaXNDb2x1
bW5OdWxsKGludCBjb2wpOwogICAgIFN0cmluZyBnZXRDb2x1bW5OYW1lKGludCBjb2wpOwogICAg
IFNRTFZhbHVlIGdldENvbHVtblZhbHVlKGludCBjb2wpOwogICAgIFN0cmluZyBnZXRDb2x1bW5U
ZXh0KGludCBjb2wpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvckJhY2tl
bmRJbXBsLmNwcCBiL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAKaW5k
ZXggNGUwOGI4ZjQ4MGViYzU5MWUyNWM0Y2ZkNTdiNDNhMDBhYWYwNjJhNy4uZDMyOThiMzgwZGM4
ZjliYjk3YzYzOWUzNWFiMzliMDc2YmY1MWRkZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdl
L0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29y
QmFja2VuZEltcGwuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiSURCS2V5UmFuZ2Uu
aCIKICNpbmNsdWRlICJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgiCiAjaW5jbHVkZSAiSURC
UmVxdWVzdC5oIgorI2luY2x1ZGUgIlNRTGl0ZURhdGFiYXNlLmgiCiAjaW5jbHVkZSAiU2VyaWFs
aXplZFNjcmlwdFZhbHVlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcCBiL1dlYkNvcmUvc3RvcmFn
ZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAppbmRleCBlNTUwZTE4Njk0ZTUwMzMyODA1N2Fm
MjMwOTYwZjExMDQ5MWQzNDQ1Li41NDhlNmE2MDU2MDZlZTQyODVhOWQzODVjODk4ODhiODViNDYw
M2ZhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5j
cHAKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCkBAIC05
Nyw2ICs5Nyw4IEBAIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OklEQkRhdGFiYXNlQmFja2VuZElt
cGwoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmCiAKICAgICBpZiAoIXJlc3VsdCB8
fCBtX2Rlc2NyaXB0aW9uICE9IGZvdW5kRGVzY3JpcHRpb24pCiAgICAgICAgIHNldE1ldGFEYXRh
KG1fc3FsaXRlRGF0YWJhc2UuZ2V0KCksIG1fbmFtZSwgbV9kZXNjcmlwdGlvbiwgbV92ZXJzaW9u
KTsKKworICAgIGxvYWRPYmplY3RTdG9yZXMoKTsKIH0KIAogSURCRGF0YWJhc2VCYWNrZW5kSW1w
bDo6fklEQkRhdGFiYXNlQmFja2VuZEltcGwoKQpAQCAtMTI3LDcgKzEyOSwxOCBAQCB2b2lkIElE
QkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgU3RyaW5nJgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRyPElE
Qk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gb2JqZWN0U3RvcmUgPSBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpjcmVhdGUobmFtZSwga2V5UGF0aCwgYXV0b0luY3JlbWVudCk7CisgICAg
U1FMaXRlU3RhdGVtZW50IGluc2VydChzcWxpdGVEYXRhYmFzZSgpLCAiSU5TRVJUIElOVE8gT2Jq
ZWN0U3RvcmVzIChuYW1lLCBrZXlQYXRoLCBkb0F1dG9JbmNyZW1lbnQpIFZBTFVFUyAoPywgPywg
PykiKTsKKyAgICBib29sIG9rID0gaW5zZXJ0LnByZXBhcmUoKSA9PSBTUUxSZXN1bHRPazsKKyAg
ICBBU1NFUlQob2spOyAvLyBGSVhNRTogQmV0dGVyIGVycm9yIGhhbmRsaW5nLgorICAgIGluc2Vy
dC5iaW5kVGV4dCgxLCBuYW1lKTsKKyAgICBpbnNlcnQuYmluZFRleHQoMiwga2V5UGF0aCk7Cisg
ICAgaW5zZXJ0LmJpbmRJbnQoMywgc3RhdGljX2Nhc3Q8aW50PihhdXRvSW5jcmVtZW50KSk7Cisg
ICAgb2sgPSBpbnNlcnQuc3RlcCgpID09IFNRTFJlc3VsdERvbmU7CisgICAgQVNTRVJUKG9rKTsg
Ly8gRklYTUU6IEJldHRlciBlcnJvciBoYW5kbGluZy4KKyAgICBpbnQ2NF90IGlkID0gc3FsaXRl
RGF0YWJhc2UoKS5sYXN0SW5zZXJ0Um93SUQoKTsKKworICAgIFJlZlB0cjxJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbnRlcmZhY2U+IG9iamVjdFN0b3JlID0gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6Y3JlYXRlKHRoaXMsIGlkLCBuYW1lLCBrZXlQYXRoLCBhdXRvSW5jcmVtZW50KTsKKyAgICBB
U1NFUlQob2JqZWN0U3RvcmUtPm5hbWUoKSA9PSBuYW1lKTsKICAgICBtX29iamVjdFN0b3Jlcy5z
ZXQobmFtZSwgb2JqZWN0U3RvcmUpOwogICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKG9iamVjdFN0
b3JlLnJlbGVhc2UoKSk7CiB9CkBAIC0xNDYsNiArMTU5LDE2IEBAIHZvaWQgSURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6cmVtb3ZlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVm
UHRyPElECiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBTUUxpdGVTdGF0ZW1lbnQgZGVs
ZXRlUXVlcnkoc3FsaXRlRGF0YWJhc2UoKSwgIkRFTEVURSBGUk9NIE9iamVjdFN0b3JlcyBXSEVS
RSBuYW1lID0gPyIpOworICAgIGJvb2wgb2sgPSBkZWxldGVRdWVyeS5wcmVwYXJlKCkgPT0gU1FM
UmVzdWx0T2s7CisgICAgQVNTRVJUKG9rKTsgLy8gRklYTUU6IEJldHRlciBlcnJvciBoYW5kbGlu
Zy4KKyAgICBkZWxldGVRdWVyeS5iaW5kVGV4dCgxLCBuYW1lKTsKKyAgICBvayA9IGRlbGV0ZVF1
ZXJ5LnN0ZXAoKSA9PSBTUUxSZXN1bHREb25lOworICAgIEFTU0VSVChvayk7IC8vIEZJWE1FOiBC
ZXR0ZXIgZXJyb3IgaGFuZGxpbmcuCisKKyAgICAvLyBGSVhNRTogRGVsZXRlIGFsbCBpbmRleGVz
IGFzc29jaWF0ZWQgd2l0aCB0aGlzIG9iamVjdCBzdG9yZSAoYW5kIGhhdmUgdGhhdCBjb2RlIGRl
bGV0ZSBhbGwgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIGluZGV4ZXMpLgorICAgIC8vIEZJWE1F
OiBEZWxldGUgYWxsIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoaXMgb2JqZWN0IHN0b3JlLgorCiAg
ICAgbV9vYmplY3RTdG9yZXMucmVtb3ZlKG5hbWUpOwogICAgIGNhbGxiYWNrcy0+b25TdWNjZXNz
KCk7CiB9CkBAIC0xNTcsNiArMTgwLDIyIEBAIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlPiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjp0cmFuc2FjdGlvbihECiAgICAg
cmV0dXJuIDA7CiB9CiAKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6bG9hZE9iamVjdFN0
b3JlcygpCit7CisgICAgU1FMaXRlU3RhdGVtZW50IG9iamVjdFN0b3Jlc1F1ZXJ5KHNxbGl0ZURh
dGFiYXNlKCksICJTRUxFQ1QgaWQsIG5hbWUsIGtleVBhdGgsIGRvQXV0b0luY3JlbWVudCBGUk9N
IE9iamVjdFN0b3JlcyIpOworICAgIGJvb2wgb2sgPSBvYmplY3RTdG9yZXNRdWVyeS5wcmVwYXJl
KCkgPT0gU1FMUmVzdWx0T2s7CisgICAgQVNTRVJUKG9rKTsgLy8gRklYTUU6IEJldHRlciBlcnJv
ciBoYW5kbGluZz8KKworICAgIHdoaWxlIChvYmplY3RTdG9yZXNRdWVyeS5zdGVwKCkgPT0gU1FM
UmVzdWx0Um93KSB7CisgICAgICAgIGludDY0X3QgaWQgPSBvYmplY3RTdG9yZXNRdWVyeS5nZXRD
b2x1bW5JbnQ2NCgwKTsKKyAgICAgICAgU3RyaW5nIG5hbWUgPSBvYmplY3RTdG9yZXNRdWVyeS5n
ZXRDb2x1bW5UZXh0KDEpOworICAgICAgICBTdHJpbmcga2V5UGF0aCA9IG9iamVjdFN0b3Jlc1F1
ZXJ5LmdldENvbHVtblRleHQoMik7CisgICAgICAgIGJvb2wgYXV0b0luY3JlbWVudCA9ICEhb2Jq
ZWN0U3RvcmVzUXVlcnkuZ2V0Q29sdW1uSW50KDMpOworCisgICAgICAgIG1fb2JqZWN0U3RvcmVz
LnNldChuYW1lLCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGUodGhpcywgaWQsIG5h
bWUsIGtleVBhdGgsIGF1dG9JbmNyZW1lbnQpKTsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaCBiL1dlYkNvcmUvc3Rv
cmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgKaW5kZXggNjBiZWMxZjc4Nzg3Y2ExZWY5Y2Jm
NDgzMDVhOWM4OWYzNjVjYTM5Ni4uYzhjNWE5MWY1ZDFmMzAzM2JmNjdkYTZjM2Q3M2I1ZTJlMGIz
MzFmYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwu
aAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oCkBAIC00Niw2
ICs0Niw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5JREJEYXRhYmFzZUJhY2tlbmRJbXBsKCk7
CiAKICAgICB2b2lkIHNldERlc2NyaXB0aW9uKGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24pOwor
ICAgIFNRTGl0ZURhdGFiYXNlJiBzcWxpdGVEYXRhYmFzZSgpIGNvbnN0IHsgcmV0dXJuICptX3Nx
bGl0ZURhdGFiYXNlLmdldCgpOyB9CiAKICAgICAvLyBJbXBsZW1lbnRzIElEQkRhdGFiYXNlCiAg
ICAgdmlydHVhbCBTdHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQpAQCAtNjAs
NiArNjEsOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIElEQkRhdGFiYXNlQmFja2VuZEltcGwo
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uLCBQYXNzT3duUHRy
PFNRTGl0ZURhdGFiYXNlPiBkYXRhYmFzZSk7CiAKKyAgICB2b2lkIGxvYWRPYmplY3RTdG9yZXMo
KTsKKwogICAgIE93blB0cjxTUUxpdGVEYXRhYmFzZT4gbV9zcWxpdGVEYXRhYmFzZTsKIAogICAg
IFN0cmluZyBtX25hbWU7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJh
Y2tlbmRJbXBsLmNwcCBiL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3Bw
CmluZGV4IDkwNTcyNmZjOThiNzI4YjQwYmJmOTgzZjY4YjVjMmRkZTcyMjhkM2MuLmVlYWQwOTYz
OGIwNjYzZjJjYjVhNDI1MDY0YmEwODE0NjQwMGY4ZWQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3Rv
cmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9JREJG
YWN0b3J5QmFja2VuZEltcGwuY3BwCkBAIC03NSw4ICs3NSwxNiBAQCBzdGF0aWMgUGFzc093blB0
cjxTUUxpdGVEYXRhYmFzZT4gb3BlblNRTGl0ZURhdGFiYXNlKFNlY3VyaXR5T3JpZ2luKiBzZWN1
cml0eU9yaQogCiBzdGF0aWMgYm9vbCBjcmVhdGVUYWJsZXMoU1FMaXRlRGF0YWJhc2UqIHNxbGl0
ZURhdGFiYXNlKQogeworICAgIC8vIEZJWE1FOiBSZW1vdmUgYWxsIHRoZSBkcm9wIHRhYmxlIGNv
bW1hbmRzIG9uY2UgdGhlIG9uIGRpc2sgc3RydWN0dXJlIHN0YWJpbGl6ZXMuCiAgICAgc3RhdGlj
IGNvbnN0IGNoYXIqIGNvbW1hbmRzW10gPSB7Ci0gICAgICAgICJDUkVBVEUgVEFCTEUgSUYgTk9U
IEVYSVNUUyBNZXRhRGF0YSAobmFtZSBURVhULCBkZXNjcmlwdGlvbiBURVhULCB2ZXJzaW9uIFRF
WFQpIgorICAgICAgICAiRFJPUCBUQUJMRSBJRiBFWElTVFMgTWV0YURhdGEiLAorICAgICAgICAi
Q1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgTWV0YURhdGEgKGlkIElOVEVHRVIgUFJJTUFSWSBL
RVksIG5hbWUgVEVYVCwgZGVzY3JpcHRpb24gVEVYVCwgdmVyc2lvbiBURVhUKSIsCisgICAgICAg
ICJEUk9QIFRBQkxFIElGIEVYSVNUUyBPYmplY3RTdG9yZXMiLAorICAgICAgICAiQ1JFQVRFIFRB
QkxFIElGIE5PVCBFWElTVFMgT2JqZWN0U3RvcmVzIChpZCBJTlRFR0VSIFBSSU1BUlkgS0VZLCBu
YW1lIFRFWFQsIGtleVBhdGggVEVYVCwgZG9BdXRvSW5jcmVtZW50IElOVEVHRVIpIiwKKyAgICAg
ICAgIkRST1AgVEFCTEUgSUYgRVhJU1RTIEluZGV4ZXMiLAorICAgICAgICAiQ1JFQVRFIFRBQkxF
IElGIE5PVCBFWElTVFMgSW5kZXhlcyAoaWQgSU5URUdFUiBQUklNQVJZIEtFWSwgbmFtZSBURVhU
LCBrZXlQYXRoIFRFWFQsIGlzVW5pcXVlIElOVEVHRVIpIiwKKyAgICAgICAgIkRST1AgVEFCTEUg
SUYgRVhJU1RTIE9iamVjdFN0b3JlRGF0YSIsCisgICAgICAgICJDUkVBVEUgVEFCTEUgSUYgTk9U
IEVYSVNUUyBPYmplY3RTdG9yZURhdGEgKGlkIElOVEVHRVIgUFJJTUFSWSBLRVksIG9iamVjdF9z
dG9yZV9pZCBJTlRFR0VSLCBrZXlfc3RyaW5nIFRFWFQsIGtleV9kYXRlIElOVEVHRVIsIGtleV9u
dW1iZXIgSU5URUdFUiwgdmFsdWUgVEVYVCwgRk9SRUlHTiBLRVkob2JqZWN0X3N0b3JlX2lkKSBS
RUZFUkVOQ0VTIE9iamVjdFN0b3JlcyhpZCkpIiwKICAgICAgICAgfTsKIAogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgYXJyYXlzaXplKGNvbW1hbmRzKTsgKytpKSB7CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3N0b3JhZ2UvSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAgYi9XZWJDb3JlL3N0b3JhZ2Uv
SURCSW5kZXhCYWNrZW5kSW1wbC5jcHAKaW5kZXggNDA2ZTM3ZjZmZDE3OWQ0ZWE4NGE4MWY1Njlm
MTE0NjZkYzMzZmEzOS4uMTgwZmYxZDhiZWQyNzdjYTBkYTkzODVjODI5MzEyZThkYzY3N2I0NSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4QmFja2VuZEltcGwuY3BwCisrKyBi
L1dlYkNvcmUvc3RvcmFnZS9JREJJbmRleEJhY2tlbmRJbXBsLmNwcApAQCAtMjgsMTAgKzI4LDE2
IEBACiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAorI2luY2x1ZGUgIklEQkRhdGFi
YXNlQmFja2VuZEltcGwuaCIKKyNpbmNsdWRlICJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgi
CisjaW5jbHVkZSAiU1FMaXRlRGF0YWJhc2UuaCIKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1J
REJJbmRleEJhY2tlbmRJbXBsOjpJREJJbmRleEJhY2tlbmRJbXBsKGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIHVuaXF1ZSkKLSAgICA6IG1fbmFtZShuYW1l
KQorSURCSW5kZXhCYWNrZW5kSW1wbDo6SURCSW5kZXhCYWNrZW5kSW1wbChJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsKiBvYmplY3RTdG9yZSwgaW50NjRfdCBpZCwgY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgdW5pcXVlKQorICAgIDogbV9vYmplY3RTdG9y
ZShvYmplY3RTdG9yZSkKKyAgICAsIG1faWQoaWQpCisgICAgLCBtX25hbWUobmFtZSkKICAgICAs
IG1fa2V5UGF0aChrZXlQYXRoKQogICAgICwgbV91bmlxdWUodW5pcXVlKQogewpAQCAtNDEsNiAr
NDcsMTEgQEAgSURCSW5kZXhCYWNrZW5kSW1wbDo6fklEQkluZGV4QmFja2VuZEltcGwoKQogewog
fQogCitTUUxpdGVEYXRhYmFzZSYgSURCSW5kZXhCYWNrZW5kSW1wbDo6c3FsaXRlRGF0YWJhc2Uo
KSBjb25zdAoreworICAgIHJldHVybiBtX29iamVjdFN0b3JlLT5kYXRhYmFzZSgpLT5zcWxpdGVE
YXRhYmFzZSgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRl
eEJhY2tlbmRJbXBsLmggYi9XZWJDb3JlL3N0b3JhZ2UvSURCSW5kZXhCYWNrZW5kSW1wbC5oCmlu
ZGV4IGNhM2YwMWVhM2RjYTgzZjc3ZDlkODJlNTdmZDAxNGI0YWM5ZWY0NTkuLmFjZjZiMWYyMGZj
YTZkMWMxMmFhODBhYTM1YjM0NmQyMTI2MWQyNzEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3RvcmFn
ZS9JREJJbmRleEJhY2tlbmRJbXBsLmgKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4QmFj
a2VuZEltcGwuaApAQCAtMzIsMTEgKzMyLDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAor
Y2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDsKK2NsYXNzIFNRTGl0ZURhdGFiYXNlOwor
CiBjbGFzcyBJREJJbmRleEJhY2tlbmRJbXBsIDogcHVibGljIElEQkluZGV4QmFja2VuZEludGVy
ZmFjZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1w
bD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29s
IHVuaXF1ZSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBjcmVh
dGUoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCogb2JqZWN0U3RvcmUsIGludDY0X3QgaWQsIGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIHVuaXF1ZSkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCSW5kZXhCYWNrZW5kSW1wbChuYW1l
LCBrZXlQYXRoLCB1bmlxdWUpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJJbmRl
eEJhY2tlbmRJbXBsKG9iamVjdFN0b3JlLCBpZCwgbmFtZSwga2V5UGF0aCwgdW5pcXVlKSk7CiAg
ICAgfQogICAgIHZpcnR1YWwgfklEQkluZGV4QmFja2VuZEltcGwoKTsKIApAQCAtNDYsOCArNDks
MTMgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCB1bmlxdWUoKSB7IHJldHVybiBtX3VuaXF1
ZTsgfQogCiBwcml2YXRlOgotICAgIElEQkluZGV4QmFja2VuZEltcGwoY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgdW5pcXVlKTsKKyAgICBJREJJbmRleEJh
Y2tlbmRJbXBsKElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwqLCBpbnQ2NF90IGlkLCBjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCB1bmlxdWUpOworCisgICAg
U1FMaXRlRGF0YWJhc2UmIHNxbGl0ZURhdGFiYXNlKCkgY29uc3Q7CisKKyAgICBSZWZQdHI8SURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gbV9vYmplY3RTdG9yZTsKIAorICAgIGludDY0X3QgbV9p
ZDsKICAgICBTdHJpbmcgbV9uYW1lOwogICAgIFN0cmluZyBtX2tleVBhdGg7CiAgICAgYm9vbCBt
X3VuaXF1ZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsLmNwcCBiL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNw
cAppbmRleCA5NzMyYmMxZWJkYWZiNTAwZTgyN2RhYmI2MjhhNTZiZmM1ZTExMDk5Li5hN2IwNmE4
ZTE1MjYxNzQ1YjM1N2Y5OGY1YWQwOGQ4MTVlZjBkOWI2IDEwMDc1NQotLS0gYS9XZWJDb3JlL3N0
b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKKysrIGIvV2ViQ29yZS9zdG9yYWdl
L0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwCkBAIC0zMCwxMCArMzAsMTIgQEAKICNpbmNs
dWRlICJJREJCaW5kaW5nVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiSURCQ2FsbGJhY2tzLmgiCiAj
aW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZEltcGwuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsLmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKICNpbmNsdWRl
ICJJREJJbmRleEJhY2tlbmRJbXBsLmgiCiAjaW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIKLSNpbmNs
dWRlICJJREJLZXlUcmVlLmgiCisjaW5jbHVkZSAiU1FMaXRlRGF0YWJhc2UuaCIKKyNpbmNsdWRl
ICJTUUxpdGVTdGF0ZW1lbnQuaCIKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCkBA
IC00MywxMiArNDUsMTQgQEAgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6fklEQk9iamVjdFN0
b3JlQmFja2VuZEltcGwoKQogewogfQogCi1JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBr
ZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQpCi0gICAgOiBtX25hbWUobmFtZSkKK0lEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGwoSURCRGF0YWJhc2VC
YWNrZW5kSW1wbCogZGF0YWJhc2UsIGludDY0X3QgaWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQpCisgICAgOiBtX2RhdGFiYXNl
KGRhdGFiYXNlKQorICAgICwgbV9pZChpZCkKKyAgICAsIG1fbmFtZShuYW1lKQogICAgICwgbV9r
ZXlQYXRoKGtleVBhdGgpCiAgICAgLCBtX2F1dG9JbmNyZW1lbnQoYXV0b0luY3JlbWVudCkKLSAg
ICAsIG1fdHJlZShUcmVlOjpjcmVhdGUoKSkKIHsKKyAgICBsb2FkSW5kZXhlcygpOwogfQogCiBQ
YXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmluZGV4
TmFtZXMoKSBjb25zdApAQCAtNTksMTQgKzYzLDUzIEBAIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlz
dD4gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6aW5kZXhOYW1lcygpIGNvbnN0CiAgICAgcmV0
dXJuIGluZGV4TmFtZXMucmVsZWFzZSgpOwogfQogCitzdGF0aWMgU3RyaW5nIHdoZXJlQ2xhdXNl
KElEQktleTo6VHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgSURC
S2V5OjpTdHJpbmdUeXBlOgorICAgICAgICByZXR1cm4gImtleV9zdHJpbmcgPSA/ICBBTkQgIGtl
eV9kYXRlIElTIE5VTEwgIEFORCAga2V5X251bWJlciBJUyBOVUxMICBBTkQgIG9iamVjdF9zdG9y
ZV9pZCA9ID8iOworICAgIGNhc2UgSURCS2V5OjpOdW1iZXJUeXBlOgorICAgICAgICByZXR1cm4g
ImtleV9zdHJpbmcgSVMgTlVMTCAgQU5EICBrZXlfZGF0ZSBJUyBOVUxMICBBTkQgIGtleV9udW1i
ZXIgPSA/ICBBTkQgIG9iamVjdF9zdG9yZV9pZCA9ID8iOworICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQgZGF0ZS4KKyAgICBjYXNlIElEQktleTo6TnVsbFR5cGU6CisgICAgICAgIHJldHVybiAia2V5
X3N0cmluZyBJUyBOVUxMICBBTkQgIGtleV9kYXRlIElTIE5VTEwgIEFORCAga2V5X251bWJlciBJ
UyBOVUxMICBBTkQgIG9iamVjdF9zdG9yZV9pZCA9ID8iOworICAgIH0KKworICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAiIjsKK30KKworc3RhdGljIHZvaWQgYmluZEtleShT
UUxpdGVTdGF0ZW1lbnQmIHF1ZXJ5LCBJREJLZXkqIGtleSwgaW50IGNvbHVtbikKK3sKKyAgICBz
d2l0Y2ggKGtleS0+dHlwZSgpKSB7CisgICAgY2FzZSBJREJLZXk6OlN0cmluZ1R5cGU6CisgICAg
ICAgIHF1ZXJ5LmJpbmRUZXh0KGNvbHVtbiwga2V5LT5zdHJpbmcoKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIElEQktleTo6TnVtYmVyVHlwZToKKyAgICAgICAgcXVlcnkuYmluZEludChj
b2x1bW4sIGtleS0+bnVtYmVyKCkpOworICAgICAgICByZXR1cm47CisgICAgLy8gRklYTUU6IElt
cGxlbWVudCBkYXRlLgorICAgIGNhc2UgSURCS2V5OjpOdWxsVHlwZToKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCiB2b2lkIElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OmdldChQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQogewotICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IHZhbHVlID0gbV90cmVlLT5nZXQoa2V5LmdldCgpKTsKLSAgICBpZiAoIXZhbHVlKSB7
CisgICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KHNxbGl0ZURhdGFiYXNlKCksICJTRUxFQ1QgdmFs
dWUgRlJPTSBPYmplY3RTdG9yZURhdGEgV0hFUkUgIiArIHdoZXJlQ2xhdXNlKGtleS0+dHlwZSgp
KSk7CisgICAgYm9vbCBvayA9IHF1ZXJ5LnByZXBhcmUoKSA9PSBTUUxSZXN1bHRPazsKKyAgICBB
U1NFUlQob2spOyAvLyBGSVhNRTogQmV0dGVyIGVycm9yIGhhbmRsaW5nPworCisgICAgYmluZEtl
eShxdWVyeSwga2V5LmdldCgpLCAxKTsKKyAgICBxdWVyeS5iaW5kSW50NjQoMiwgbV9pZCk7Cisg
ICAgaWYgKHF1ZXJ5LnN0ZXAoKSAhPSBTUUxSZXN1bHRSb3cpIHsKICAgICAgICAgY2FsbGJhY2tz
LT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
Tk9UX0ZPVU5EX0VSUiwgIktleSBkb2VzIG5vdCBleGlzdCBpbiB0aGUgb2JqZWN0IHN0b3JlLiIp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBjYWxsYmFja3MtPm9uU3VjY2Vzcyh2YWx1
ZS5nZXQoKSk7CisKKyAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0VmFs
dWU6OmNyZWF0ZUZyb21XaXJlKHF1ZXJ5LmdldENvbHVtblRleHQoMCkpKTsKIH0KIAogdm9pZCBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4gcHJwS2V5LCBib29sIGFkZE9ubHksIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCkBAIC04OCwxOCArMTMxLDY3IEBAIHZv
aWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiB2YWx1ZSwgUGFzCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAo
YWRkT25seSAmJiBtX3RyZWUtPmdldChrZXkuZ2V0KCkpKSB7CisgICAgU1FMaXRlU3RhdGVtZW50
IGdldFF1ZXJ5KHNxbGl0ZURhdGFiYXNlKCksICJTRUxFQ1QgaWQgRlJPTSBPYmplY3RTdG9yZURh
dGEgV0hFUkUgIiArIHdoZXJlQ2xhdXNlKGtleS0+dHlwZSgpKSk7CisgICAgYm9vbCBvayA9IGdl
dFF1ZXJ5LnByZXBhcmUoKSA9PSBTUUxSZXN1bHRPazsKKyAgICBBU1NFUlQob2spOyAvLyBGSVhN
RTogQmV0dGVyIGVycm9yIGhhbmRsaW5nPworCisgICAgYmluZEtleShnZXRRdWVyeSwga2V5Lmdl
dCgpLCAxKTsKKyAgICBnZXRRdWVyeS5iaW5kSW50NjQoMiwgbV9pZCk7CisgICAgYm9vbCBleGlz
dGluZ1ZhbHVlID0gZ2V0UXVlcnkuc3RlcCgpID09IFNRTFJlc3VsdFJvdzsKKyAgICBpZiAoYWRk
T25seSAmJiBleGlzdGluZ1ZhbHVlKSB7CiAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJE
YXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkNPTlNUUkFJTlRfRVJS
LCAiS2V5IGFscmVhZHkgZXhpc3RzIGluIHRoZSBvYmplY3Qgc3RvcmUuIikpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgbV90cmVlLT5wdXQoa2V5LmdldCgpLCB2YWx1ZS5nZXQoKSk7
CisgICAgU3RyaW5nIHNxbCA9IGV4aXN0aW5nVmFsdWUgPyAiVVBEQVRFIE9iamVjdFN0b3JlRGF0
YSBTRVQga2V5X3N0cmluZyA9ID8sIGtleV9kYXRlID0gPywga2V5X251bWJlciA9ID8sIHZhbHVl
ID0gPyBXSEVSRSBvYmplY3Rfc3RvcmVfaWQgPSA/IEFORCBpZCA9ID8iCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOiAiSU5TRVJUIElOVE8gT2JqZWN0U3RvcmVEYXRhIChrZXlfc3Ry
aW5nLCBrZXlfZGF0ZSwga2V5X251bWJlciwgdmFsdWUsIG9iamVjdF9zdG9yZV9pZCkgVkFMVUVT
ICg/LCA/LCA/LCA/LCA/KSI7CisgICAgU1FMaXRlU3RhdGVtZW50IHB1dFF1ZXJ5KHNxbGl0ZURh
dGFiYXNlKCksIHNxbCk7CisgICAgb2sgPSBwdXRRdWVyeS5wcmVwYXJlKCkgPT0gU1FMUmVzdWx0
T2s7CisgICAgQVNTRVJUKG9rKTsgLy8gRklYTUU6IEJldHRlciBlcnJvciBoYW5kbGluZz8KKyAg
ICBzd2l0Y2ggKGtleS0+dHlwZSgpKSB7CisgICAgY2FzZSBJREJLZXk6OlN0cmluZ1R5cGU6Cisg
ICAgICAgIHB1dFF1ZXJ5LmJpbmRUZXh0KDEsIGtleS0+c3RyaW5nKCkpOworICAgICAgICBwdXRR
dWVyeS5iaW5kTnVsbCgyKTsKKyAgICAgICAgcHV0UXVlcnkuYmluZE51bGwoMyk7CisgICAgICAg
IGJyZWFrOworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZGF0ZS4KKyAgICBjYXNlIElEQktleTo6
TnVtYmVyVHlwZToKKyAgICAgICAgcHV0UXVlcnkuYmluZE51bGwoMSk7CisgICAgICAgIHB1dFF1
ZXJ5LmJpbmROdWxsKDIpOworICAgICAgICBwdXRRdWVyeS5iaW5kSW50KDMsIGtleS0+bnVtYmVy
KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIElEQktleTo6TnVsbFR5cGU6CisgICAgICAg
IHB1dFF1ZXJ5LmJpbmROdWxsKDEpOworICAgICAgICBwdXRRdWVyeS5iaW5kTnVsbCgyKTsKKyAg
ICAgICAgcHV0UXVlcnkuYmluZE51bGwoMyk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICBwdXRRdWVyeS5iaW5k
VGV4dCg0LCB2YWx1ZS0+dG9XaXJlU3RyaW5nKCkpOworICAgIHB1dFF1ZXJ5LmJpbmRJbnQ2NCg1
LCBtX2lkKTsKKyAgICBpZiAoZXhpc3RpbmdWYWx1ZSkKKyAgICAgICAgcHV0UXVlcnkuYmluZElu
dCg2LCBnZXRRdWVyeS5nZXRDb2x1bW5JbnQoMCkpOworCisgICAgb2sgPSBwdXRRdWVyeS5zdGVw
KCkgPT0gU1FMUmVzdWx0RG9uZTsKKyAgICBBU1NFUlQob2spOyAvLyBGSVhNRTogQmV0dGVyIGVy
cm9yIGhhbmRsaW5nPworCiAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3Moa2V5LmdldCgpKTsKIH0K
IAogdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpyZW1vdmUoUGFzc1JlZlB0cjxJREJL
ZXk+IGtleSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKIHsKLSAgICBtX3Ry
ZWUtPnJlbW92ZShrZXkuZ2V0KCkpOworICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVyeShzcWxpdGVE
YXRhYmFzZSgpLCAiREVMRVRFIEZST00gT2JqZWN0U3RvcmVEYXRhIFdIRVJFICIgKyB3aGVyZUNs
YXVzZShrZXktPnR5cGUoKSkpOworICAgIGJvb2wgb2sgPSBxdWVyeS5wcmVwYXJlKCkgPT0gU1FM
UmVzdWx0T2s7CisgICAgQVNTRVJUKG9rKTsgLy8gRklYTUU6IEJldHRlciBlcnJvciBoYW5kbGlu
Zz8KKworICAgIGJpbmRLZXkocXVlcnksIGtleS5nZXQoKSwgMSk7CisgICAgcXVlcnkuYmluZElu
dDY0KDIsIG1faWQpOworICAgIGlmIChxdWVyeS5zdGVwKCkgIT0gU1FMUmVzdWx0RG9uZSkgewor
ICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpOT1RfRk9VTkRfRVJSLCAiS2V5IGRvZXMgbm90IGV4aXN0IGluIHRo
ZSBvYmplY3Qgc3RvcmUuIikpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgY2FsbGJh
Y2tzLT5vblN1Y2Nlc3MoKTsKIH0KIApAQCAtMTEwLDcgKzIwMiwxNyBAQCB2b2lkIElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
U3RyaW5nJiBrZQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRyPElEQkluZGV4
QmFja2VuZEludGVyZmFjZT4gaW5kZXggPSBJREJJbmRleEJhY2tlbmRJbXBsOjpjcmVhdGUobmFt
ZSwga2V5UGF0aCwgdW5pcXVlKTsKKyAgICBTUUxpdGVTdGF0ZW1lbnQgaW5zZXJ0KHNxbGl0ZURh
dGFiYXNlKCksICJJTlNFUlQgSU5UTyBJbmRleGVzIChuYW1lLCBrZXlQYXRoLCBpc1VuaXF1ZSkg
VkFMVUVTICg/LCA/LCA/KSIpOworICAgIGJvb2wgb2sgPSBpbnNlcnQucHJlcGFyZSgpID09IFNR
TFJlc3VsdE9rOworICAgIEFTU0VSVChvayk7IC8vIEZJWE1FOiBCZXR0ZXIgZXJyb3IgaGFuZGxp
bmcuCisgICAgaW5zZXJ0LmJpbmRUZXh0KDEsIG5hbWUpOworICAgIGluc2VydC5iaW5kVGV4dCgy
LCBrZXlQYXRoKTsKKyAgICBpbnNlcnQuYmluZEludCgzLCBzdGF0aWNfY2FzdDxpbnQ+KHVuaXF1
ZSkpOworICAgIG9rID0gaW5zZXJ0LnN0ZXAoKSA9PSBTUUxSZXN1bHREb25lOworICAgIEFTU0VS
VChvayk7IC8vIEZJWE1FOiBCZXR0ZXIgZXJyb3IgaGFuZGxpbmcuCisgICAgaW50NjRfdCBpZCA9
IHNxbGl0ZURhdGFiYXNlKCkubGFzdEluc2VydFJvd0lEKCk7CisKKyAgICBSZWZQdHI8SURCSW5k
ZXhCYWNrZW5kSW50ZXJmYWNlPiBpbmRleCA9IElEQkluZGV4QmFja2VuZEltcGw6OmNyZWF0ZSh0
aGlzLCBpZCwgbmFtZSwga2V5UGF0aCwgdW5pcXVlKTsKICAgICBBU1NFUlQoaW5kZXgtPm5hbWUo
KSA9PSBuYW1lKTsKICAgICBtX2luZGV4ZXMuc2V0KG5hbWUsIGluZGV4KTsKICAgICBjYWxsYmFj
a3MtPm9uU3VjY2VzcyhpbmRleC5yZWxlYXNlKCkpOwpAQCAtMTI4LDE5ICsyMzAsNTkgQEAgdm9p
ZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpyZW1vdmVJbmRleChjb25zdCBTdHJpbmcmIG5h
bWUsIFBhc3NSZWZQdHI8SURCQ2EKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIFNRTGl0
ZVN0YXRlbWVudCBkZWxldGVRdWVyeShzcWxpdGVEYXRhYmFzZSgpLCAiREVMRVRFIEZST00gSW5k
ZXhlcyBXSEVSRSBuYW1lID0gPyIpOworICAgIGJvb2wgb2sgPSBkZWxldGVRdWVyeS5wcmVwYXJl
KCkgPT0gU1FMUmVzdWx0T2s7CisgICAgQVNTRVJUKG9rKTsgLy8gRklYTUU6IEJldHRlciBlcnJv
ciBoYW5kbGluZy4KKyAgICBkZWxldGVRdWVyeS5iaW5kVGV4dCgxLCBuYW1lKTsKKyAgICBvayA9
IGRlbGV0ZVF1ZXJ5LnN0ZXAoKSA9PSBTUUxSZXN1bHREb25lOworICAgIEFTU0VSVChvayk7IC8v
IEZJWE1FOiBCZXR0ZXIgZXJyb3IgaGFuZGxpbmcuCisKKyAgICAvLyBGSVhNRTogRGVsZXRlIGFs
bCBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGluZGV4LgorCiAgICAgbV9pbmRleGVzLnJlbW92
ZShuYW1lKTsKICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcygpOwogfQogCiB2b2lkIElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6Om9wZW5DdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFu
Z2UsIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNh
bGxiYWNrcykKIHsKKyAgICAvLyBGSVhNRTogRnVsbHkgaW1wbGVtZW50LgorCiAgICAgUmVmUHRy
PElEQktleT4ga2V5ID0gcmFuZ2UtPmxlZnQoKTsKLSAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiB2YWx1ZSA9IG1fdHJlZS0+Z2V0KGtleS5nZXQoKSk7Ci0gICAgaWYgKHZhbHVlKSB7
Ci0gICAgICAgIFJlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlPiBjdXJzb3IgPSBJREJD
dXJzb3JCYWNrZW5kSW1wbDo6Y3JlYXRlKHRoaXMsIHJhbmdlLCBzdGF0aWNfY2FzdDxJREJDdXJz
b3I6OkRpcmVjdGlvbj4oZGlyZWN0aW9uKSwga2V5LCB2YWx1ZSk7Ci0gICAgICAgIGNhbGxiYWNr
cy0+b25TdWNjZXNzKGN1cnNvci5yZWxlYXNlKCkpOwotICAgIH0gZWxzZQotICAgICAgY2FsbGJh
Y2tzLT5vblN1Y2Nlc3MoKTsKKyAgICBTUUxpdGVTdGF0ZW1lbnQgcXVlcnkoc3FsaXRlRGF0YWJh
c2UoKSwgIlNFTEVDVCBpZCwgdmFsdWUgRlJPTSBPYmplY3RTdG9yZURhdGEgV0hFUkUgIiArIHdo
ZXJlQ2xhdXNlKGtleS0+dHlwZSgpKSk7CisgICAgYm9vbCBvayA9IHF1ZXJ5LnByZXBhcmUoKSA9
PSBTUUxSZXN1bHRPazsKKyAgICBBU1NFUlQob2spOyAvLyBGSVhNRTogQmV0dGVyIGVycm9yIGhh
bmRsaW5nPworCisgICAgYmluZEtleShxdWVyeSwga2V5LmdldCgpLCAxKTsKKyAgICBxdWVyeS5i
aW5kSW50NjQoMiwgbV9pZCk7CisgICAgaWYgKHF1ZXJ5LnN0ZXAoKSAhPSBTUUxSZXN1bHRSb3cp
IHsKKyAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlID0gU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZShxdWVyeS5nZXRDb2x1bW5UZXh0KDEpKTsKKyAg
ICBSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZT4gY3Vyc29yID0gSURCQ3Vyc29yQmFj
a2VuZEltcGw6OmNyZWF0ZSh0aGlzLCByYW5nZSwgc3RhdGljX2Nhc3Q8SURCQ3Vyc29yOjpEaXJl
Y3Rpb24+KGRpcmVjdGlvbiksIGtleS5yZWxlYXNlKCksIHZhbHVlLnJlbGVhc2UoKSk7CisgICAg
Y2FsbGJhY2tzLT5vblN1Y2Nlc3MoY3Vyc29yLnJlbGVhc2UoKSk7Cit9CisKK3ZvaWQgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6bG9hZEluZGV4ZXMoKQoreworICAgIFNRTGl0ZVN0YXRlbWVu
dCBpbmRleFF1ZXJ5KHNxbGl0ZURhdGFiYXNlKCksICJTRUxFQ1QgaWQsIG5hbWUsIGtleVBhdGgs
IGlzVW5pcXVlIEZST00gSW5kZXhlcyIpOworICAgIGJvb2wgb2sgPSBpbmRleFF1ZXJ5LnByZXBh
cmUoKSA9PSBTUUxSZXN1bHRPazsKKyAgICBBU1NFUlQob2spOyAvLyBGSVhNRTogQmV0dGVyIGVy
cm9yIGhhbmRsaW5nPworCisgICAgd2hpbGUgKGluZGV4UXVlcnkuc3RlcCgpID09IFNRTFJlc3Vs
dFJvdykgeworICAgICAgICBpbnQ2NF90IGlkID0gaW5kZXhRdWVyeS5nZXRDb2x1bW5JbnQ2NCgw
KTsKKyAgICAgICAgU3RyaW5nIG5hbWUgPSBpbmRleFF1ZXJ5LmdldENvbHVtblRleHQoMSk7Cisg
ICAgICAgIFN0cmluZyBrZXlQYXRoID0gaW5kZXhRdWVyeS5nZXRDb2x1bW5UZXh0KDIpOworICAg
ICAgICBib29sIHVuaXF1ZSA9ICEhaW5kZXhRdWVyeS5nZXRDb2x1bW5JbnQoMyk7CisKKyAgICAg
ICAgbV9pbmRleGVzLnNldChuYW1lLCBJREJJbmRleEJhY2tlbmRJbXBsOjpjcmVhdGUodGhpcywg
aWQsIG5hbWUsIGtleVBhdGgsIHVuaXF1ZSkpOworICAgIH0KK30KKworU1FMaXRlRGF0YWJhc2Um
IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNxbGl0ZURhdGFiYXNlKCkgY29uc3QgCit7Cisg
ICAgcmV0dXJuIG1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsLmggYi9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5o
CmluZGV4IDRiOTA5YWY3NDA5YzM0NzAyNTJmYjk1NTlmMWU5OTBjZWY4NTJmYzkuLjAyZGNmMDRh
MDJjODZlYjcxODQ0YWEzMWU4YTgzZDJmNzc5MTI5ZjEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3Rv
cmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0lE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGwuaApAQCAtMzQsMTMgKzM0LDE0IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotdGVtcGxhdGUgPHR5cGVuYW1lIFZhbHVlVHlwZT4gY2xhc3MgSURCS2V5
VHJlZTsKK2NsYXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw7CitjbGFzcyBTUUxpdGVEYXRhYmFz
ZTsKIAogY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCA6IHB1YmxpYyBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbnRlcmZhY2UgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElE
Qk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gY3JlYXRlKGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQpCisgICAgc3RhdGljIFBh
c3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBjcmVhdGUoSURCRGF0YWJh
c2VCYWNrZW5kSW1wbCogZGF0YWJhc2UsIGludDY0X3QgaWQsIGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQpCiAgICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwobmFtZSwga2V5
UGF0aCwgYXV0b0luY3JlbWVudCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGwoZGF0YWJhc2UsIGlkLCBuYW1lLCBrZXlQYXRoLCBhdXRvSW5j
cmVtZW50KSk7CiAgICAgfQogICAgIH5JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKCk7CiAKQEAg
LTU4LDE4ICs1OSwyMyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIG9wZW5DdXJzb3IoUGFzc1JlZlB0
cjxJREJLZXlSYW5nZT4gcmFuZ2UsIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+KTsKIAorICAgIElEQkRhdGFiYXNlQmFja2VuZEltcGwqIGRhdGFiYXNl
KCkgY29uc3QgeyByZXR1cm4gbV9kYXRhYmFzZS5nZXQoKTsgfQorCiBwcml2YXRlOgotICAgIElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGwoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcm
IGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCk7CisgICAgSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbChJREJEYXRhYmFzZUJhY2tlbmRJbXBsKiwgaW50NjRfdCBpZCwgY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCk7CisKKyAgICB2
b2lkIGxvYWRJbmRleGVzKCk7CisgICAgU1FMaXRlRGF0YWJhc2UmIHNxbGl0ZURhdGFiYXNlKCkg
Y29uc3Q7CiAKKyAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gbV9kYXRhYmFzZTsK
KworICAgIGludDY0X3QgbV9pZDsKICAgICBTdHJpbmcgbV9uYW1lOwogICAgIFN0cmluZyBtX2tl
eVBhdGg7CiAgICAgYm9vbCBtX2F1dG9JbmNyZW1lbnQ7CiAKICAgICB0eXBlZGVmIEhhc2hNYXA8
U3RyaW5nLCBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiA+IEluZGV4TWFwOwogICAg
IEluZGV4TWFwIG1faW5kZXhlczsKLQotICAgIHR5cGVkZWYgSURCS2V5VHJlZTxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+IFRyZWU7Ci0gICAgUmVmUHRyPFRyZWU+IG1fdHJlZTsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64727</attachid>
            <date>2010-08-18 10:18:17 -0700</date>
            <delta_ts>2010-08-19 05:11:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-44164-20100818181815.patch</filename>
            <type>text/plain</type>
            <size>30171</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA5M2IzZjBhZjRhZDdkNzk3ZDIzY2QyOGE4NDUyYTk1NGQ1ZmZmYjdkLi40NTE0Mjg1
ZDg1ZGRmMTI3NDQ0ZTM1ZTg5YmExMjUwNTkyY2JkN2JkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAK
KzIwMTAtMDgtMTggIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgSW1wbGVtZW50IHBlcnNpc3RhbmNlIGZvciBJbmRleGVkREIgT2JqZWN0U3RvcmVzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDE2NAorCisgICAg
ICAgIFJlbW92ZSBvbGQgb2JqZWN0IHN0b3JlcyBiZWZvcmUgcnVubmluZyB0ZXN0LgorCisgICAg
ICAgICogc3RvcmFnZS9pbmRleGVkZGIvcmVzb3VyY2VzL3NoYXJlZC5qczoKKyAgICAgICAgKGRl
bGV0ZUFsbE9iamVjdFN0b3Jlcyk6CisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvc2NyaXB0
LXRlc3RzL29iamVjdHN0b3JlLWJhc2ljcy5qczoKKyAgICAgICAgKG9wZW5TdWNjZXNzKToKKyAg
ICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9zY3JpcHQtdGVzdHMvb3Blbi1jdXJzb3IuanM6Cisg
ICAgICAgIChvcGVuU3VjY2Vzcyk6CisKIDIwMTAtMDgtMDkgIEplcmVteSBPcmxvdyAgPGpvcmxv
d0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU3RldmUgQmxvY2suCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9yZXNvdXJjZXMvc2hhcmVkLmpz
IGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvcmVzb3VyY2VzL3NoYXJlZC5qcwppbmRl
eCBlNTEwYmUxOGNiYzFkOGNkY2IzYjc3M2ZjZWI1ZmJkZDA3ZDA4YjA2Li42NzY5ZWQyY2JhODkx
OTEyZGRjOTczZmJiNGQ2YmUxM2RiYzllZjFmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdG9y
YWdlL2luZGV4ZWRkYi9yZXNvdXJjZXMvc2hhcmVkLmpzCisrKyBiL0xheW91dFRlc3RzL3N0b3Jh
Z2UvaW5kZXhlZGRiL3Jlc291cmNlcy9zaGFyZWQuanMKQEAgLTUzLDMgKzUzLDEwIEBAIGZ1bmN0
aW9uIHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrKCkKICAgICBkb25lKCk7CiB9CiAKK2Z1bmN0aW9u
IGRlbGV0ZUFsbE9iamVjdFN0b3JlcyhkYikKK3sKKyAgICBvYmplY3RTdG9yZXMgPSBkYi5vYmpl
Y3RTdG9yZXM7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3RTdG9yZXMubGVuZ3RoOyAr
K2kpCisgICAgICAgIGRiLnJlbW92ZU9iamVjdFN0b3JlKG9iamVjdFN0b3Jlc1tpXSk7Cit9CisK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3NjcmlwdC10ZXN0cy9v
YmplY3RzdG9yZS1iYXNpY3MuanMgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9zY3Jp
cHQtdGVzdHMvb2JqZWN0c3RvcmUtYmFzaWNzLmpzCmluZGV4IDk4Njk1Nzk3ZWMyMjE5NzI0NjVm
NGRiNzE4MTQ3ODkyMWFlODc0YzEuLjYzNjc1YWQwNWQzNjk1NjYwNjg5ZDdhM2ZmYTkyNGNmMzE0
NzE1MTIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3NjcmlwdC10
ZXN0cy9vYmplY3RzdG9yZS1iYXNpY3MuanMKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRl
eGVkZGIvc2NyaXB0LXRlc3RzL29iamVjdHN0b3JlLWJhc2ljcy5qcwpAQCAtMTYsOCArMTYsNyBA
QCBmdW5jdGlvbiBvcGVuU3VjY2VzcygpCiAgICAgdmVyaWZ5U3VjY2Vzc0V2ZW50KGV2ZW50KTsK
ICAgICBkYiA9IGV2YWxBbmRMb2coImRiID0gZXZlbnQucmVzdWx0Iik7CiAKLSAgICAvLyBGSVhN
RTogcmVtb3ZlIGFueSBwcmV2aW91c2x5IGNyZWF0ZWQgb2JqZWN0IHN0b3Jlcy4KLSAgICAvLyBU
aGlzIHJlcXVpcmVzIElEQkRhdGFiYXNlUmVxdWVzdDo6cmVtb3ZlT2JqZWN0U3RvcmUgdG8gYmUg
aW1wbGVtZW50ZWQuCisgICAgZGVsZXRlQWxsT2JqZWN0U3RvcmVzKGRiKTsKIAogICAgIHJlc3Vs
dCA9IGV2YWxBbmRMb2coImRiLmNyZWF0ZU9iamVjdFN0b3JlKCdzdG9yZU5hbWUnLCBudWxsKSIp
OwogICAgIHZlcmlmeVJlc3VsdChyZXN1bHQpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3Rv
cmFnZS9pbmRleGVkZGIvc2NyaXB0LXRlc3RzL29wZW4tY3Vyc29yLmpzIGIvTGF5b3V0VGVzdHMv
c3RvcmFnZS9pbmRleGVkZGIvc2NyaXB0LXRlc3RzL29wZW4tY3Vyc29yLmpzCmluZGV4IGUzYzYx
NWM0YTVhZTcwNTBjZDI3YzYwMjA4NzU1YmViYjI5ZmQwNzcuLmZmMGI3MTEzN2EyMDY3NmUyNzM2
YTZhNTUwM2QwYjhhZTIwZTExYTYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5k
ZXhlZGRiL3NjcmlwdC10ZXN0cy9vcGVuLWN1cnNvci5qcworKysgYi9MYXlvdXRUZXN0cy9zdG9y
YWdlL2luZGV4ZWRkYi9zY3JpcHQtdGVzdHMvb3Blbi1jdXJzb3IuanMKQEAgLTYwLDYgKzYwLDkg
QEAgZnVuY3Rpb24gb3BlblN1Y2Nlc3MoKQogewogICAgIHZlcmlmeVN1Y2Nlc3NFdmVudChldmVu
dCk7CiAgICAgdmFyIGRiID0gZXZhbEFuZExvZygiZGIgPSBldmVudC5yZXN1bHQiKTsKKworICAg
IGRlbGV0ZUFsbE9iamVjdFN0b3JlcyhkYik7CisKICAgICByZXN1bHQgPSBldmFsQW5kTG9nKCJk
Yi5jcmVhdGVPYmplY3RTdG9yZSgndGVzdCcpIik7CiAgICAgdmVyaWZ5UmVzdWx0KHJlc3VsdCk7
CiAgICAgcmVzdWx0Lm9uc3VjY2VzcyA9IGNyZWF0ZU9iamVjdFN0b3JlU3VjY2VzczsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTg5NTgw
YjJmOGRlMjNmNmExYjcyNWQ1MGUxMjMxMjZmZjc4OGEyZC4uZjczM2RkOWIyMmM5NTdiMTNjMzFj
NDMzMjAzOTI2YWE2MjFmY2NmNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIv
V2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MiBAQAorMjAxMC0wOC0xOCAgSmVyZW15IE9y
bG93ICA8am9ybG93QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgcGVyc2lzdGFuY2UgZm9yIEluZGV4ZWREQiBP
YmplY3RTdG9yZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTQ0MTY0CisKKyAgICAgICAgR2V0IHJpZCBvZiB0aGUgaW4tbWVtb3J5IHN0b3JhZ2Ugb2Yg
T2JqZWN0U3RvcmVzIGFuZCBpbnN0ZWFkCisgICAgICAgIHVzZSBTUUwgYmFja2VkIG1lbW9yeS4K
KworICAgICAgICBFeGlzdGluZyB0ZXN0cyBnaXZlIG1vc3Qgb2YgdGhlIGNvdmVyYWdlLiAgV2ls
bCB1cGRhdGUgdGhlIG1hbnVhbAorICAgICAgICB0ZXN0IGluIHRoZSBuZXh0IHBhdGNoICh3aGlj
aCB3aWxsIGFsc28gcmUtd29yayBkYXRhYmFzZS5kZXNjcmlwdGlvbikuCisKKyAgICAgICAgKiBt
YW51YWwtdGVzdHMvaW5kZXhlZC1kYXRhYmFzZS5odG1sOiBHZXQgcmlkIG9mIHJhY2Ugd2hlcmUg
eW91IGNhbiBjbGljayBiZWZvcmUgdGhlIHBhZ2UgbG9hZHMuCisgICAgICAgICogcGxhdGZvcm0v
c3FsL1NRTGl0ZVN0YXRlbWVudC5jcHA6IEFkZCB0d28gaGVscGVyIGZ1bmN0aW9ucworICAgICAg
ICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpiaW5kSW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlNRTGl0ZVN0YXRlbWVudDo6aXNDb2x1bW5OdWxsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwv
U1FMaXRlU3RhdGVtZW50Lmg6CisgICAgICAgICogc3RvcmFnZS9JREJDdXJzb3JCYWNrZW5kSW1w
bC5jcHA6IAorICAgICAgICAqIHN0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpJREJEYXRhYmFzZUJhY2tl
bmRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0
ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6
OnJlbW92ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6OmltcG9ydE9iamVjdFN0b3Jlcyk6CisgICAgICAgICogc3RvcmFnZS9JREJEYXRhYmFz
ZUJhY2tlbmRJbXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBs
OjpzcWxpdGVEYXRhYmFzZSk6CisgICAgICAgICogc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZElt
cGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlVGFibGVzKToKKyAgICAgICAgKiBzdG9y
YWdlL0lEQkluZGV4QmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXhC
YWNrZW5kSW1wbDo6SURCSW5kZXhCYWNrZW5kSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJJ
bmRleEJhY2tlbmRJbXBsOjpzcWxpdGVEYXRhYmFzZSk6CisgICAgICAgICogc3RvcmFnZS9JREJJ
bmRleEJhY2tlbmRJbXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJbXBs
OjpjcmVhdGUpOgorICAgICAgICAqIHN0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OndoZXJlQ2xhdXNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmJpbmRLZXkpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsOjpyZW1vdmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6Y3JlYXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6cmVtb3ZlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6b3BlbkN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjppbXBvcnRJbmRleGVzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OnNxbGl0ZURhdGFiYXNlKToKKyAgICAgICAgKiBzdG9yYWdlL0lEQk9i
amVjdFN0b3JlQmFja2VuZEltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpkYXRhYmFzZSk6CisKIDIwMTAtMDgtMTEgIEplcmVteSBPcmxvdyAgPGpvcmxv
d0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQmVnaW5uaW5ncyBvZiBJbmRleGVkREIgcGVyc2lz
dGFuY2UgKyBJREJEYXRhYmFzZS5kZXNjcmlwdGlvbiBmbGVzaGVkIG91dApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9tYW51YWwtdGVzdHMvaW5kZXhlZC1kYXRhYmFzZS5odG1sIGIvV2ViQ29yZS9tYW51
YWwtdGVzdHMvaW5kZXhlZC1kYXRhYmFzZS5odG1sCmluZGV4IGQwZmIzODE0ZDcwOTljNDg3NjA4
N2QwZTQ1NTJiZDU1NWE3NDdkMzQuLmJjYzhmZTQzNTVlZWI5YWVmZTE5OWUzYzVmZGVhOTBmZThm
ZWQwZDQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbWFudWFsLXRlc3RzL2luZGV4ZWQtZGF0YWJhc2Uu
aHRtbAorKysgYi9XZWJDb3JlL21hbnVhbC10ZXN0cy9pbmRleGVkLWRhdGFiYXNlLmh0bWwKQEAg
LTE2LDYgKzE2LDggQEAKIAogPHNjcmlwdD4KIAorICAgIHJlYWR5Q291bnQgPSAwOworCiAgICAg
aWYgKCEoJ2luZGV4ZWREQicgaW4gd2luZG93KSkKICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoImVuYWJsZWQiKS5pbm5lckhUTUwgPSAiPGZvbnQgY29sb3I9cmVkPllvdXIgYnVpbGQg
ZG9lcyBOT1Qgc2VlbSB0byBoYXZlIGl0IGVuYWJsZWQuICBTbyBhbGwgY29kZSBvbiB0aGlzIHBh
Z2UgaXMgZGlzYWJsZWQuPC9mb250PiI7CiAgICAgZWxzZSB7CkBAIC0yNSw2ICsyNyw3IEBACiAg
ICAgICAgIHJlcXVlc3Qub25zdWNjZXNzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgicmVzdWx0IikuaW5uZXJIVE1MID0gIjxmb250IGNvbG9yPWdy
ZWVuPlN1Y2Nlc3MhPC9mb250PiI7CiAgICAgICAgICAgICB3aW5kb3cubmFtZURCID0gZXZlbnQu
cmVzdWx0OworICAgICAgICAgICAgKytyZWFkeUNvdW50OwogICAgICAgICB9OwogICAgICAgICBy
ZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJyZXN1bHQiKS5pbm5lckhUTUwgPSAiPGZvbnQgY29sb3I9cmVkPkVycm9yOiAi
ICsgZXZlbnQubWVzc2FnZSArICIuPC9mb250PiI7CkBAIC0zMywxNyArMzYsMjggQEAKICAgICAg
ICAgcmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKCJhbm90aGVyIiwgInRlc3Qgb2YgdGhlIGRlc2Ny
aXB0aW9uIGF0dHJpYnV0ZSIpOwogICAgICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGZ1bmN0aW9u
KCkgewogICAgICAgICAgICAgd2luZG93LmFub3RoZXJEQiA9IGV2ZW50LnJlc3VsdDsKKyAgICAg
ICAgICAgICsrcmVhZHlDb3VudDsKICAgICAgICAgfTsKICAgICB9CiAKICAgICBmdW5jdGlvbiB1
cGRhdGVEZXNjcmlwdGlvbigpCiAgICAgeworICAgICAgICBpZiAocmVhZENvdW50IDwgMikgewor
ICAgICAgICAgICAgYWxlcnQoIlRoZSBwYWdlIGhhcyBub3QgZmluaXNoZWQgbG9hZGluZy4gIEhv
bGQgb24gYSBzZWMuLi4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCiAgICAg
ICAgIGluZGV4ZWREQi5vcGVuKCJuYW1lIiwgInRlc3Qgb2YgdGhlIGRlc2NyaXB0aW9uIGF0dHJp
YnV0ZSIpOwogICAgICAgICBpbmRleGVkREIub3BlbigiYW5vdGhlciIsICJ4eXoiKTsKICAgICB9
CiAKICAgICBmdW5jdGlvbiByZWFkRGVzY3JpcHRpb24oKQogICAgIHsKKyAgICAgICAgaWYgKHJl
YWRDb3VudCA8IDIpIHsKKyAgICAgICAgICAgIGFsZXJ0KCJUaGUgcGFnZSBoYXMgbm90IGZpbmlz
aGVkIGxvYWRpbmcuICBIb2xkIG9uIGEgc2VjLi4uIik7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKwogICAgICAgICBpZiAod2luZG93Lm5hbWVEQi5kZXNjcmlwdGlvbiAhPSAidGVz
dCBvZiB0aGUgZGVzY3JpcHRpb24gYXR0cmlidXRlIikgewogICAgICAgICAgICAgLy8gU2luY2Ug
d2UgcGFzc2VkIGluIG5vdGhpbmcsIHRoZSBkZXNjcmlwdGlvbiBzaG91bGQgbm90IGJlIHJlc2V0
LgogICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRlc2NyaXB0aW9uIikuaW5u
ZXJIVE1MID0gIjxmb250IGNvbG9yPXJlZD5GYWlsdXJlOiAoRGF0YWJhc2UgJ25hbWUnIHdhcyB0
aGlzOiAiICsgd2luZG93Lm5hbWVEQi5kZXNjcmlwdGlvbiArICIpLjwvZm9udD4iOwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmNwcCBiL1dlYkNvcmUv
cGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5jcHAKaW5kZXggNGRjODBmYjVhMGQ0Nzk3ODlh
ZWRjMTEyMDdjZTA2OTQ0M2YxZDgzZC4uMDM3ZWM3OWYzMmQzNzAxMzdkZjI0NGJkYjQ2ZjhmMzAz
Y2IzOTAwYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50
LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3BwCkBAIC0x
OTIsNiArMTkyLDE0IEBAIGludCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRUZXh0KGludCBpbmRleCwg
Y29uc3QgU3RyaW5nJiB0ZXh0KQogICAgIHJldHVybiBzcWxpdGUzX2JpbmRfdGV4dDE2KG1fc3Rh
dGVtZW50LCBpbmRleCwgY2hhcmFjdGVycywgc2l6ZW9mKFVDaGFyKSAqIHRleHQubGVuZ3RoKCks
IFNRTElURV9UUkFOU0lFTlQpOwogfQogCitpbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kSW50KGlu
dCBpbmRleCwgaW50IGludGVnZXIpCit7CisgICAgQVNTRVJUKG1faXNQcmVwYXJlZCk7CisgICAg
QVNTRVJUKGluZGV4ID4gMCk7CisgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmRl
eCkgPD0gYmluZFBhcmFtZXRlckNvdW50KCkpOworCisgICAgcmV0dXJuIHNxbGl0ZTNfYmluZF9p
bnQobV9zdGF0ZW1lbnQsIGluZGV4LCBpbnRlZ2VyKTsKK30KIAogaW50IFNRTGl0ZVN0YXRlbWVu
dDo6YmluZEludDY0KGludCBpbmRleCwgaW50NjRfdCBpbnRlZ2VyKQogewpAQCAtMjUxLDYgKzI1
OSwxOCBAQCBpbnQgU1FMaXRlU3RhdGVtZW50Ojpjb2x1bW5Db3VudCgpCiAgICAgcmV0dXJuIHNx
bGl0ZTNfZGF0YV9jb3VudChtX3N0YXRlbWVudCk7CiB9CiAKK2Jvb2wgU1FMaXRlU3RhdGVtZW50
Ojppc0NvbHVtbk51bGwoaW50IGNvbCkKK3sKKyAgICBBU1NFUlQoY29sID49IDApOworICAgIGlm
ICghbV9zdGF0ZW1lbnQpCisgICAgICAgIGlmIChwcmVwYXJlQW5kU3RlcCgpICE9IFNRTElURV9S
T1cpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGNvbHVtbkNvdW50KCkgPD0g
Y29sKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gc3FsaXRlM19jb2x1bW5f
dHlwZShtX3N0YXRlbWVudCwgY29sKSA9PSBTUUxJVEVfTlVMTDsKK30KKwogU3RyaW5nIFNRTGl0
ZVN0YXRlbWVudDo6Z2V0Q29sdW1uTmFtZShpbnQgY29sKQogewogICAgIEFTU0VSVChjb2wgPj0g
MCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuaCBi
L1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5oCmluZGV4IGU2MmI0ZjBlYTkx
NTVlMjQyMDEyZmNiMGYxODkwZWQwMmIyMmY1MWQuLjE0NDRmMGVlZWQxOWRjMmEzM2MyYWE5ZWQ0
NGRmMzRjZTFhZWQ3OGQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0
YXRlbWVudC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5oCkBA
IC00Miw2ICs0Miw3IEBAIHB1YmxpYzoKICAgICBpbnQgcHJlcGFyZSgpOwogICAgIGludCBiaW5k
QmxvYihpbnQgaW5kZXgsIGNvbnN0IHZvaWQqIGJsb2IsIGludCBzaXplKTsKICAgICBpbnQgYmlu
ZFRleHQoaW50IGluZGV4LCBjb25zdCBTdHJpbmcmKTsKKyAgICBpbnQgYmluZEludChpbnQgaW5k
ZXgsIGludCk7CiAgICAgaW50IGJpbmRJbnQ2NChpbnQgaW5kZXgsIGludDY0X3QpOwogICAgIGlu
dCBiaW5kRG91YmxlKGludCBpbmRleCwgZG91YmxlKTsKICAgICBpbnQgYmluZE51bGwoaW50IGlu
ZGV4KTsKQEAgLTcwLDYgKzcxLDcgQEAgcHVibGljOgogICAgIC8vIHJldHVybmVkIGluIHRoZSBs
YXN0IHN0ZXAoKQogICAgIGludCBjb2x1bW5Db3VudCgpOwogICAgIAorICAgIGJvb2wgaXNDb2x1
bW5OdWxsKGludCBjb2wpOwogICAgIFN0cmluZyBnZXRDb2x1bW5OYW1lKGludCBjb2wpOwogICAg
IFNRTFZhbHVlIGdldENvbHVtblZhbHVlKGludCBjb2wpOwogICAgIFN0cmluZyBnZXRDb2x1bW5U
ZXh0KGludCBjb2wpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvckJhY2tl
bmRJbXBsLmNwcCBiL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAKaW5k
ZXggNGUwOGI4ZjQ4MGViYzU5MWUyNWM0Y2ZkNTdiNDNhMDBhYWYwNjJhNy4uZDMyOThiMzgwZGM4
ZjliYjk3YzYzOWUzNWFiMzliMDc2YmY1MWRkZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdl
L0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29y
QmFja2VuZEltcGwuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiSURCS2V5UmFuZ2Uu
aCIKICNpbmNsdWRlICJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgiCiAjaW5jbHVkZSAiSURC
UmVxdWVzdC5oIgorI2luY2x1ZGUgIlNRTGl0ZURhdGFiYXNlLmgiCiAjaW5jbHVkZSAiU2VyaWFs
aXplZFNjcmlwdFZhbHVlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcCBiL1dlYkNvcmUvc3RvcmFn
ZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAppbmRleCBlNTUwZTE4Njk0ZTUwMzMyODA1N2Fm
MjMwOTYwZjExMDQ5MWQzNDQ1Li4zYWNmMmE1YTA5ZTI3YzVjMGU2YjBmNDMyZWQ3NTdlNzVkZTVh
NGYzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5j
cHAKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCkBAIC05
Nyw2ICs5Nyw4IEBAIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OklEQkRhdGFiYXNlQmFja2VuZElt
cGwoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmCiAKICAgICBpZiAoIXJlc3VsdCB8
fCBtX2Rlc2NyaXB0aW9uICE9IGZvdW5kRGVzY3JpcHRpb24pCiAgICAgICAgIHNldE1ldGFEYXRh
KG1fc3FsaXRlRGF0YWJhc2UuZ2V0KCksIG1fbmFtZSwgbV9kZXNjcmlwdGlvbiwgbV92ZXJzaW9u
KTsKKworICAgIGxvYWRPYmplY3RTdG9yZXMoKTsKIH0KIAogSURCRGF0YWJhc2VCYWNrZW5kSW1w
bDo6fklEQkRhdGFiYXNlQmFja2VuZEltcGwoKQpAQCAtMTI3LDcgKzEyOSwxOCBAQCB2b2lkIElE
QkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgU3RyaW5nJgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRyPElE
Qk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gb2JqZWN0U3RvcmUgPSBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpjcmVhdGUobmFtZSwga2V5UGF0aCwgYXV0b0luY3JlbWVudCk7CisgICAg
U1FMaXRlU3RhdGVtZW50IGluc2VydChzcWxpdGVEYXRhYmFzZSgpLCAiSU5TRVJUIElOVE8gT2Jq
ZWN0U3RvcmVzIChuYW1lLCBrZXlQYXRoLCBkb0F1dG9JbmNyZW1lbnQpIFZBTFVFUyAoPywgPywg
PykiKTsKKyAgICBib29sIG9rID0gaW5zZXJ0LnByZXBhcmUoKSA9PSBTUUxSZXN1bHRPazsKKyAg
ICBBU1NFUlQob2spOyAvLyBGSVhNRTogQmV0dGVyIGVycm9yIGhhbmRsaW5nLgorICAgIGluc2Vy
dC5iaW5kVGV4dCgxLCBuYW1lKTsKKyAgICBpbnNlcnQuYmluZFRleHQoMiwga2V5UGF0aCk7Cisg
ICAgaW5zZXJ0LmJpbmRJbnQoMywgc3RhdGljX2Nhc3Q8aW50PihhdXRvSW5jcmVtZW50KSk7Cisg
ICAgb2sgPSBpbnNlcnQuc3RlcCgpID09IFNRTFJlc3VsdERvbmU7CisgICAgQVNTRVJUKG9rKTsg
Ly8gRklYTUU6IEJldHRlciBlcnJvciBoYW5kbGluZy4KKyAgICBpbnQ2NF90IGlkID0gc3FsaXRl
RGF0YWJhc2UoKS5sYXN0SW5zZXJ0Um93SUQoKTsKKworICAgIFJlZlB0cjxJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbnRlcmZhY2U+IG9iamVjdFN0b3JlID0gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6Y3JlYXRlKHRoaXMsIGlkLCBuYW1lLCBrZXlQYXRoLCBhdXRvSW5jcmVtZW50KTsKKyAgICBB
U1NFUlQob2JqZWN0U3RvcmUtPm5hbWUoKSA9PSBuYW1lKTsKICAgICBtX29iamVjdFN0b3Jlcy5z
ZXQobmFtZSwgb2JqZWN0U3RvcmUpOwogICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKG9iamVjdFN0
b3JlLnJlbGVhc2UoKSk7CiB9CkBAIC0xNDYsNiArMTU5LDEzIEBAIHZvaWQgSURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6cmVtb3ZlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVm
UHRyPElECiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBTUUxpdGVTdGF0ZW1lbnQgZGVs
ZXRlUXVlcnkoc3FsaXRlRGF0YWJhc2UoKSwgIkRFTEVURSBGUk9NIE9iamVjdFN0b3JlcyBXSEVS
RSBuYW1lID0gPyIpOworICAgIGJvb2wgb2sgPSBkZWxldGVRdWVyeS5wcmVwYXJlKCkgPT0gU1FM
UmVzdWx0T2s7CisgICAgQVNTRVJUKG9rKTsgLy8gRklYTUU6IEJldHRlciBlcnJvciBoYW5kbGlu
Zy4KKyAgICBkZWxldGVRdWVyeS5iaW5kVGV4dCgxLCBuYW1lKTsKKyAgICBvayA9IGRlbGV0ZVF1
ZXJ5LnN0ZXAoKSA9PSBTUUxSZXN1bHREb25lOworICAgIEFTU0VSVChvayk7IC8vIEZJWE1FOiBC
ZXR0ZXIgZXJyb3IgaGFuZGxpbmcuCisKICAgICBtX29iamVjdFN0b3Jlcy5yZW1vdmUobmFtZSk7
CiAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoKTsKIH0KQEAgLTE1Nyw2ICsxNzcsMjIgQEAgUGFz
c1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6OnRyYW5zYWN0aW9uKEQKICAgICByZXR1cm4gMDsKIH0KIAordm9pZCBJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsOjpsb2FkT2JqZWN0U3RvcmVzKCkKK3sKKyAgICBTUUxpdGVTdGF0ZW1lbnQg
b2JqZWN0U3RvcmVzUXVlcnkoc3FsaXRlRGF0YWJhc2UoKSwgIlNFTEVDVCBpZCwgbmFtZSwga2V5
UGF0aCwgZG9BdXRvSW5jcmVtZW50IEZST00gT2JqZWN0U3RvcmVzIik7CisgICAgYm9vbCBvayA9
IG9iamVjdFN0b3Jlc1F1ZXJ5LnByZXBhcmUoKSA9PSBTUUxSZXN1bHRPazsKKyAgICBBU1NFUlQo
b2spOyAvLyBGSVhNRTogQmV0dGVyIGVycm9yIGhhbmRsaW5nPworCisgICAgd2hpbGUgKG9iamVj
dFN0b3Jlc1F1ZXJ5LnN0ZXAoKSA9PSBTUUxSZXN1bHRSb3cpIHsKKyAgICAgICAgaW50NjRfdCBp
ZCA9IG9iamVjdFN0b3Jlc1F1ZXJ5LmdldENvbHVtbkludDY0KDApOworICAgICAgICBTdHJpbmcg
bmFtZSA9IG9iamVjdFN0b3Jlc1F1ZXJ5LmdldENvbHVtblRleHQoMSk7CisgICAgICAgIFN0cmlu
ZyBrZXlQYXRoID0gb2JqZWN0U3RvcmVzUXVlcnkuZ2V0Q29sdW1uVGV4dCgyKTsKKyAgICAgICAg
Ym9vbCBhdXRvSW5jcmVtZW50ID0gISFvYmplY3RTdG9yZXNRdWVyeS5nZXRDb2x1bW5JbnQoMyk7
CisKKyAgICAgICAgbV9vYmplY3RTdG9yZXMuc2V0KG5hbWUsIElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6OmNyZWF0ZSh0aGlzLCBpZCwgbmFtZSwga2V5UGF0aCwgYXV0b0luY3JlbWVudCkpOwor
ICAgIH0KK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VC
YWNrZW5kSW1wbC5oIGIvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaApp
bmRleCA2MGJlYzFmNzg3ODdjYTFlZjljYmY0ODMwNWE5Yzg5ZjM2NWNhMzk2Li5jOGM1YTkxZjVk
MWYzMDMzYmY2N2RhNmMzZDczYjVlMmUwYjMzMWZiIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0b3Jh
Z2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRh
YmFzZUJhY2tlbmRJbXBsLmgKQEAgLTQ2LDYgKzQ2LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
fklEQkRhdGFiYXNlQmFja2VuZEltcGwoKTsKIAogICAgIHZvaWQgc2V0RGVzY3JpcHRpb24oY29u
c3QgU3RyaW5nJiBkZXNjcmlwdGlvbik7CisgICAgU1FMaXRlRGF0YWJhc2UmIHNxbGl0ZURhdGFi
YXNlKCkgY29uc3QgeyByZXR1cm4gKm1fc3FsaXRlRGF0YWJhc2UuZ2V0KCk7IH0KIAogICAgIC8v
IEltcGxlbWVudHMgSURCRGF0YWJhc2UKICAgICB2aXJ0dWFsIFN0cmluZyBuYW1lKCkgY29uc3Qg
eyByZXR1cm4gbV9uYW1lOyB9CkBAIC02MCw2ICs2MSw4IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAg
ICAgSURCRGF0YWJhc2VCYWNrZW5kSW1wbChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYgZGVzY3JpcHRpb24sIFBhc3NPd25QdHI8U1FMaXRlRGF0YWJhc2U+IGRhdGFiYXNlKTsKIAor
ICAgIHZvaWQgbG9hZE9iamVjdFN0b3JlcygpOworCiAgICAgT3duUHRyPFNRTGl0ZURhdGFiYXNl
PiBtX3NxbGl0ZURhdGFiYXNlOwogCiAgICAgU3RyaW5nIG1fbmFtZTsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwIGIvV2ViQ29yZS9zdG9yYWdl
L0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKaW5kZXggOTA1NzI2ZmM5OGI3MjhiNDBiYmY5ODNm
NjhiNWMyZGRlNzIyOGQzYy4uNTFkNzczYzRkMDI2MTI0ODJjMWM0YWZmZTFkZmMyN2M3ZTZiODU5
ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAK
KysrIGIvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKQEAgLTc1LDgg
Kzc1LDI1IEBAIHN0YXRpYyBQYXNzT3duUHRyPFNRTGl0ZURhdGFiYXNlPiBvcGVuU1FMaXRlRGF0
YWJhc2UoU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpCiAKIHN0YXRpYyBib29sIGNyZWF0ZVRh
YmxlcyhTUUxpdGVEYXRhYmFzZSogc3FsaXRlRGF0YWJhc2UpCiB7CisgICAgLy8gRklYTUU6IFJl
bW92ZSBhbGwgdGhlIGRyb3AgdGFibGUgY29tbWFuZHMgb25jZSB0aGUgb24gZGlzayBzdHJ1Y3R1
cmUgc3RhYmlsaXplcy4KICAgICBzdGF0aWMgY29uc3QgY2hhciogY29tbWFuZHNbXSA9IHsKLSAg
ICAgICAgIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIE1ldGFEYXRhIChuYW1lIFRFWFQsIGRl
c2NyaXB0aW9uIFRFWFQsIHZlcnNpb24gVEVYVCkiCisgICAgICAgICJEUk9QIFRBQkxFIElGIEVY
SVNUUyBNZXRhRGF0YSIsCisgICAgICAgICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBNZXRh
RGF0YSAoaWQgSU5URUdFUiBQUklNQVJZIEtFWSwgbmFtZSBURVhULCBkZXNjcmlwdGlvbiBURVhU
LCB2ZXJzaW9uIFRFWFQpIiwKKworICAgICAgICAiRFJPUCBUQUJMRSBJRiBFWElTVFMgT2JqZWN0
U3RvcmVzIiwKKyAgICAgICAgIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIE9iamVjdFN0b3Jl
cyAoaWQgSU5URUdFUiBQUklNQVJZIEtFWSwgbmFtZSBURVhULCBrZXlQYXRoIFRFWFQsIGRvQXV0
b0luY3JlbWVudCBJTlRFR0VSKSIsCisgICAgICAgICJEUk9QIElOREVYIElGIEVYSVNUUyBPYmpl
Y3RTdG9yZXNfbmFtZSIsCisgICAgICAgICJDUkVBVEUgVU5JUVVFIElOREVYIElGIE5PVCBFWElT
VFMgT2JqZWN0U3RvcmVzX25hbWUgT04gT2JqZWN0U3RvcmVzKG5hbWUpIiwKKworICAgICAgICAi
RFJPUCBUQUJMRSBJRiBFWElTVFMgSW5kZXhlcyIsCisgICAgICAgICJDUkVBVEUgVEFCTEUgSUYg
Tk9UIEVYSVNUUyBJbmRleGVzIChpZCBJTlRFR0VSIFBSSU1BUlkgS0VZLCBvYmplY3RTdG9yZUlk
IElOVEVHRVIgUkVGRVJFTkNFUyBPYmplY3RTdG9yZShpZCkgT04gREVMRVRFIENBU0NBREUsIG5h
bWUgVEVYVCwga2V5UGF0aCBURVhULCBpc1VuaXF1ZSBJTlRFR0VSKSIsCisgICAgICAgICJEUk9Q
IElOREVYIElGIEVYSVNUUyBJbmRleGVzX2NvbXBvc2l0IiwKKyAgICAgICAgIkNSRUFURSBVTklR
VUUgSU5ERVggSUYgTk9UIEVYSVNUUyBJbmRleGVzX2NvbXBvc2l0IE9OIEluZGV4ZXMob2JqZWN0
U3RvcmVJZCwgbmFtZSkiLAorCisgICAgICAgICJEUk9QIFRBQkxFIElGIEVYSVNUUyBPYmplY3RT
dG9yZURhdGEiLAorICAgICAgICAiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgT2JqZWN0U3Rv
cmVEYXRhIChpZCBJTlRFR0VSIFBSSU1BUlkgS0VZLCBvYmplY3RTdG9yZUlkIElOVEVHRVIgUkVG
RVJFTkNFUyBPYmplY3RTdG9yZShpZCkgT04gREVMRVRFIENBU0NBREUsIGtleVN0cmluZyBURVhU
LCBrZXlEYXRlIElOVEVHRVIsIGtleU51bWJlciBJTlRFR0VSLCB2YWx1ZSBURVhUKSIsCisgICAg
ICAgICJEUk9QIElOREVYIElGIEVYSVNUUyBPYmplY3RTdG9yZURhdGFfY29tcG9zaXQiLAorICAg
ICAgICAiQ1JFQVRFIFVOSVFVRSBJTkRFWCBJRiBOT1QgRVhJU1RTIE9iamVjdFN0b3JlRGF0YV9j
b21wb3NpdCBPTiBPYmplY3RTdG9yZURhdGEoa2V5U3RyaW5nLCBrZXlEYXRlLCBrZXlOdW1iZXIs
IG9iamVjdFN0b3JlSWQpIgogICAgICAgICB9OwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBhcnJheXNpemUoY29tbWFuZHMpOyArK2kpIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFn
ZS9JREJJbmRleEJhY2tlbmRJbXBsLmNwcCBiL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRleEJhY2tl
bmRJbXBsLmNwcAppbmRleCA0MDZlMzdmNmZkMTc5ZDRlYTg0YTgxZjU2OWYxMTQ2NmRjMzNmYTM5
Li4xODBmZjFkOGJlZDI3N2NhMGRhOTM4NWM4MjkzMTJlOGRjNjc3YjQ1IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3N0b3JhZ2UvSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAKKysrIGIvV2ViQ29yZS9zdG9y
YWdlL0lEQkluZGV4QmFja2VuZEltcGwuY3BwCkBAIC0yOCwxMCArMjgsMTYgQEAKIAogI2lmIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCisjaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kSW1w
bC5oIgorI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaCIKKyNpbmNsdWRlICJT
UUxpdGVEYXRhYmFzZS5oIgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUlEQkluZGV4QmFja2Vu
ZEltcGw6OklEQkluZGV4QmFja2VuZEltcGwoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJp
bmcmIGtleVBhdGgsIGJvb2wgdW5pcXVlKQotICAgIDogbV9uYW1lKG5hbWUpCitJREJJbmRleEJh
Y2tlbmRJbXBsOjpJREJJbmRleEJhY2tlbmRJbXBsKElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwq
IG9iamVjdFN0b3JlLCBpbnQ2NF90IGlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYga2V5UGF0aCwgYm9vbCB1bmlxdWUpCisgICAgOiBtX29iamVjdFN0b3JlKG9iamVjdFN0b3Jl
KQorICAgICwgbV9pZChpZCkKKyAgICAsIG1fbmFtZShuYW1lKQogICAgICwgbV9rZXlQYXRoKGtl
eVBhdGgpCiAgICAgLCBtX3VuaXF1ZSh1bmlxdWUpCiB7CkBAIC00MSw2ICs0NywxMSBAQCBJREJJ
bmRleEJhY2tlbmRJbXBsOjp+SURCSW5kZXhCYWNrZW5kSW1wbCgpCiB7CiB9CiAKK1NRTGl0ZURh
dGFiYXNlJiBJREJJbmRleEJhY2tlbmRJbXBsOjpzcWxpdGVEYXRhYmFzZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fb2JqZWN0U3RvcmUtPmRhdGFiYXNlKCktPnNxbGl0ZURhdGFiYXNlKCk7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4QmFja2VuZEltcGwu
aCBiL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRleEJhY2tlbmRJbXBsLmgKaW5kZXggY2EzZjAxZWEz
ZGNhODNmNzdkOWQ4MmU1N2ZkMDE0YjRhYzllZjQ1OS4uYWNmNmIxZjIwZmNhNmQxYzEyYWE4MGFh
MzViMzQ2ZDIxMjYxZDI3MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4QmFj
a2VuZEltcGwuaAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvSURCSW5kZXhCYWNrZW5kSW1wbC5oCkBA
IC0zMiwxMSArMzIsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOworY2xhc3MgU1FMaXRlRGF0YWJhc2U7CisKIGNsYXNzIElEQklu
ZGV4QmFja2VuZEltcGwgOiBwdWJsaWMgSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlIHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBjcmVhdGUoY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgdW5pcXVlKQorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGNyZWF0ZShJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsKiBvYmplY3RTdG9yZSwgaW50NjRfdCBpZCwgY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgdW5pcXVlKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBJREJJbmRleEJhY2tlbmRJbXBsKG5hbWUsIGtleVBhdGgsIHVu
aXF1ZSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkluZGV4QmFja2VuZEltcGwo
b2JqZWN0U3RvcmUsIGlkLCBuYW1lLCBrZXlQYXRoLCB1bmlxdWUpKTsKICAgICB9CiAgICAgdmly
dHVhbCB+SURCSW5kZXhCYWNrZW5kSW1wbCgpOwogCkBAIC00Niw4ICs0OSwxMyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCBib29sIHVuaXF1ZSgpIHsgcmV0dXJuIG1fdW5pcXVlOyB9CiAKIHByaXZh
dGU6Ci0gICAgSURCSW5kZXhCYWNrZW5kSW1wbChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0
cmluZyYga2V5UGF0aCwgYm9vbCB1bmlxdWUpOworICAgIElEQkluZGV4QmFja2VuZEltcGwoSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbCosIGludDY0X3QgaWQsIGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIHVuaXF1ZSk7CisKKyAgICBTUUxpdGVEYXRhYmFz
ZSYgc3FsaXRlRGF0YWJhc2UoKSBjb25zdDsKKworICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsPiBtX29iamVjdFN0b3JlOwogCisgICAgaW50NjRfdCBtX2lkOwogICAgIFN0cmlu
ZyBtX25hbWU7CiAgICAgU3RyaW5nIG1fa2V5UGF0aDsKICAgICBib29sIG1fdW5pcXVlOwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwIGIv
V2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwCmluZGV4IDk3MzJi
YzFlYmRhZmI1MDBlODI3ZGFiYjYyOGE1NmJmYzVlMTEwOTkuLmYyYTZiM2FkYzYyNWExMTI2MWFm
NTZlZTQzYzJmMDcwYzViNDc2ZGYgMTAwNzU1Ci0tLSBhL1dlYkNvcmUvc3RvcmFnZS9JREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsLmNwcAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbC5jcHAKQEAgLTMwLDEwICszMCwxMiBAQAogI2luY2x1ZGUgIklEQkJpbmRp
bmdVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJJREJDYWxsYmFja3MuaCIKICNpbmNsdWRlICJJREJD
dXJzb3JCYWNrZW5kSW1wbC5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZEltcGwuaCIK
ICNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIklEQkluZGV4QmFj
a2VuZEltcGwuaCIKICNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgotI2luY2x1ZGUgIklEQktleVRy
ZWUuaCIKKyNpbmNsdWRlICJTUUxpdGVEYXRhYmFzZS5oIgorI2luY2x1ZGUgIlNRTGl0ZVN0YXRl
bWVudC5oIgogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKQEAgLTQzLDEyICs0NSwx
NCBAQCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjp+SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bCgpCiB7CiB9CiAKLUlEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OklEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGwoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wg
YXV0b0luY3JlbWVudCkKLSAgICA6IG1fbmFtZShuYW1lKQorSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbChJREJEYXRhYmFzZUJhY2tlbmRJbXBsKiBk
YXRhYmFzZSwgaW50NjRfdCBpZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtl
eVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCkKKyAgICA6IG1fZGF0YWJhc2UoZGF0YWJhc2UpCisg
ICAgLCBtX2lkKGlkKQorICAgICwgbV9uYW1lKG5hbWUpCiAgICAgLCBtX2tleVBhdGgoa2V5UGF0
aCkKICAgICAsIG1fYXV0b0luY3JlbWVudChhdXRvSW5jcmVtZW50KQotICAgICwgbV90cmVlKFRy
ZWU6OmNyZWF0ZSgpKQogeworICAgIGxvYWRJbmRleGVzKCk7CiB9CiAKIFBhc3NSZWZQdHI8RE9N
U3RyaW5nTGlzdD4gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6aW5kZXhOYW1lcygpIGNvbnN0
CkBAIC01OSwxNCArNjMsNTQgQEAgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjppbmRleE5hbWVzKCkgY29uc3QKICAgICByZXR1cm4gaW5kZXhOYW1l
cy5yZWxlYXNlKCk7CiB9CiAKK3N0YXRpYyBTdHJpbmcgd2hlcmVDbGF1c2UoSURCS2V5OjpUeXBl
IHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBJREJLZXk6OlN0cmluZ1R5
cGU6CisgICAgICAgIHJldHVybiAia2V5U3RyaW5nID0gPyAgQU5EICBrZXlEYXRlIElTIE5VTEwg
IEFORCAga2V5TnVtYmVyIElTIE5VTEwgIEFORCAgb2JqZWN0U3RvcmVJZCA9ID8iOworICAgIGNh
c2UgSURCS2V5OjpOdW1iZXJUeXBlOgorICAgICAgICByZXR1cm4gImtleVN0cmluZyBJUyBOVUxM
ICBBTkQgIGtleURhdGUgSVMgTlVMTCAgQU5EICBrZXlOdW1iZXIgPSA/ICBBTkQgIG9iamVjdFN0
b3JlSWQgPSA/IjsKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGRhdGUuCisgICAgY2FzZSBJREJL
ZXk6Ok51bGxUeXBlOgorICAgICAgICByZXR1cm4gImtleVN0cmluZyBJUyBOVUxMICBBTkQgIGtl
eURhdGUgSVMgTlVMTCAgQU5EICBrZXlOdW1iZXIgSVMgTlVMTCAgQU5EICBvYmplY3RTdG9yZUlk
ID0gPyI7CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuICIi
OworfQorCitzdGF0aWMgdm9pZCBiaW5kS2V5KFNRTGl0ZVN0YXRlbWVudCYgcXVlcnksIElEQktl
eSoga2V5LCBpbnQgY29sdW1uKQoreworICAgIHN3aXRjaCAoa2V5LT50eXBlKCkpIHsKKyAgICBj
YXNlIElEQktleTo6U3RyaW5nVHlwZToKKyAgICAgICAgcXVlcnkuYmluZFRleHQoY29sdW1uLCBr
ZXktPnN0cmluZygpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSURCS2V5OjpOdW1iZXJU
eXBlOgorICAgICAgICBxdWVyeS5iaW5kSW50KGNvbHVtbiwga2V5LT5udW1iZXIoKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGRhdGUuCisgICAgY2FzZSBJREJL
ZXk6Ok51bGxUeXBlOgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Cit9CisKIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2V0KFBhc3NS
ZWZQdHI8SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCiB7
Ci0gICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUgPSBtX3RyZWUtPmdldChr
ZXkuZ2V0KCkpOwotICAgIGlmICghdmFsdWUpIHsKKyAgICBTUUxpdGVTdGF0ZW1lbnQgcXVlcnko
c3FsaXRlRGF0YWJhc2UoKSwgIlNFTEVDVCB2YWx1ZSBGUk9NIE9iamVjdFN0b3JlRGF0YSBXSEVS
RSAiICsgd2hlcmVDbGF1c2Uoa2V5LT50eXBlKCkpKTsKKyAgICBib29sIG9rID0gcXVlcnkucHJl
cGFyZSgpID09IFNRTFJlc3VsdE9rOworICAgIEFTU0VSVChvayk7IC8vIEZJWE1FOiBCZXR0ZXIg
ZXJyb3IgaGFuZGxpbmc/CisKKyAgICBiaW5kS2V5KHF1ZXJ5LCBrZXkuZ2V0KCksIDEpOworICAg
IHF1ZXJ5LmJpbmRJbnQ2NCgyLCBtX2lkKTsKKyAgICBpZiAocXVlcnkuc3RlcCgpICE9IFNRTFJl
c3VsdFJvdykgewogICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6
Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfRk9VTkRfRVJSLCAiS2V5IGRvZXMgbm90
IGV4aXN0IGluIHRoZSBvYmplY3Qgc3RvcmUuIikpOwogICAgICAgICByZXR1cm47CiAgICAgfQot
ICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKHZhbHVlLmdldCgpKTsKKworICAgIGNhbGxiYWNrcy0+
b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUocXVlcnkuZ2V0
Q29sdW1uVGV4dCgwKSkpOworICAgIEFTU0VSVChxdWVyeS5zdGVwKCkgIT0gU1FMUmVzdWx0Um93
KTsKIH0KIAogdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXQoUGFzc1JlZlB0cjxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4gcHJwS2V5LCBi
b29sIGFkZE9ubHksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCkBAIC04OCwx
OCArMTMyLDY4IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0KFBhc3NSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSwgUGFzCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBpZiAoYWRkT25seSAmJiBtX3RyZWUtPmdldChrZXkuZ2V0KCkpKSB7CisgICAg
U1FMaXRlU3RhdGVtZW50IGdldFF1ZXJ5KHNxbGl0ZURhdGFiYXNlKCksICJTRUxFQ1QgaWQgRlJP
TSBPYmplY3RTdG9yZURhdGEgV0hFUkUgIiArIHdoZXJlQ2xhdXNlKGtleS0+dHlwZSgpKSk7Cisg
ICAgYm9vbCBvayA9IGdldFF1ZXJ5LnByZXBhcmUoKSA9PSBTUUxSZXN1bHRPazsKKyAgICBBU1NF
UlQob2spOyAvLyBGSVhNRTogQmV0dGVyIGVycm9yIGhhbmRsaW5nPworCisgICAgYmluZEtleShn
ZXRRdWVyeSwga2V5LmdldCgpLCAxKTsKKyAgICBnZXRRdWVyeS5iaW5kSW50NjQoMiwgbV9pZCk7
CisgICAgYm9vbCBleGlzdGluZ1ZhbHVlID0gZ2V0UXVlcnkuc3RlcCgpID09IFNRTFJlc3VsdFJv
dzsKKyAgICBpZiAoYWRkT25seSAmJiBleGlzdGluZ1ZhbHVlKSB7CiAgICAgICAgIGNhbGxiYWNr
cy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246
OkNPTlNUUkFJTlRfRVJSLCAiS2V5IGFscmVhZHkgZXhpc3RzIGluIHRoZSBvYmplY3Qgc3RvcmUu
IikpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV90cmVlLT5wdXQoa2V5LmdldCgp
LCB2YWx1ZS5nZXQoKSk7CisgICAgU3RyaW5nIHNxbCA9IGV4aXN0aW5nVmFsdWUgPyAiVVBEQVRF
IE9iamVjdFN0b3JlRGF0YSBTRVQga2V5U3RyaW5nID0gPywga2V5RGF0ZSA9ID8sIGtleU51bWJl
ciA9ID8sIHZhbHVlID0gPyBXSEVSRSBpZCA9ID8iCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOiAiSU5TRVJUIElOVE8gT2JqZWN0U3RvcmVEYXRhIChrZXlTdHJpbmcsIGtleURhdGUs
IGtleU51bWJlciwgdmFsdWUsIG9iamVjdFN0b3JlSWQpIFZBTFVFUyAoPywgPywgPywgPywgPyki
OworICAgIFNRTGl0ZVN0YXRlbWVudCBwdXRRdWVyeShzcWxpdGVEYXRhYmFzZSgpLCBzcWwpOwor
ICAgIG9rID0gcHV0UXVlcnkucHJlcGFyZSgpID09IFNRTFJlc3VsdE9rOworICAgIEFTU0VSVChv
ayk7IC8vIEZJWE1FOiBCZXR0ZXIgZXJyb3IgaGFuZGxpbmc/CisgICAgc3dpdGNoIChrZXktPnR5
cGUoKSkgeworICAgIGNhc2UgSURCS2V5OjpTdHJpbmdUeXBlOgorICAgICAgICBwdXRRdWVyeS5i
aW5kVGV4dCgxLCBrZXktPnN0cmluZygpKTsKKyAgICAgICAgcHV0UXVlcnkuYmluZE51bGwoMik7
CisgICAgICAgIHB1dFF1ZXJ5LmJpbmROdWxsKDMpOworICAgICAgICBicmVhazsKKyAgICAvLyBG
SVhNRTogSW1wbGVtZW50IGRhdGUuCisgICAgY2FzZSBJREJLZXk6Ok51bWJlclR5cGU6CisgICAg
ICAgIHB1dFF1ZXJ5LmJpbmROdWxsKDEpOworICAgICAgICBwdXRRdWVyeS5iaW5kTnVsbCgyKTsK
KyAgICAgICAgcHV0UXVlcnkuYmluZEludCgzLCBrZXktPm51bWJlcigpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBJREJLZXk6Ok51bGxUeXBlOgorICAgICAgICBwdXRRdWVyeS5iaW5kTnVs
bCgxKTsKKyAgICAgICAgcHV0UXVlcnkuYmluZE51bGwoMik7CisgICAgICAgIHB1dFF1ZXJ5LmJp
bmROdWxsKDMpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgcHV0UXVlcnkuYmluZFRleHQoNCwgdmFsdWUtPnRv
V2lyZVN0cmluZygpKTsKKyAgICBpZiAoZXhpc3RpbmdWYWx1ZSkKKyAgICAgICAgcHV0UXVlcnku
YmluZEludCg1LCBnZXRRdWVyeS5nZXRDb2x1bW5JbnQoMCkpOworICAgIGVsc2UKKyAgICAgICAg
cHV0UXVlcnkuYmluZEludDY0KDUsIG1faWQpOworCisgICAgb2sgPSBwdXRRdWVyeS5zdGVwKCkg
PT0gU1FMUmVzdWx0RG9uZTsKKyAgICBBU1NFUlQob2spOyAvLyBGSVhNRTogQmV0dGVyIGVycm9y
IGhhbmRsaW5nPworCiAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3Moa2V5LmdldCgpKTsKIH0KIAog
dm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpyZW1vdmUoUGFzc1JlZlB0cjxJREJLZXk+
IGtleSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKIHsKLSAgICBtX3RyZWUt
PnJlbW92ZShrZXkuZ2V0KCkpOworICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVyeShzcWxpdGVEYXRh
YmFzZSgpLCAiREVMRVRFIEZST00gT2JqZWN0U3RvcmVEYXRhIFdIRVJFICIgKyB3aGVyZUNsYXVz
ZShrZXktPnR5cGUoKSkpOworICAgIGJvb2wgb2sgPSBxdWVyeS5wcmVwYXJlKCkgPT0gU1FMUmVz
dWx0T2s7CisgICAgQVNTRVJUKG9rKTsgLy8gRklYTUU6IEJldHRlciBlcnJvciBoYW5kbGluZz8K
KworICAgIGJpbmRLZXkocXVlcnksIGtleS5nZXQoKSwgMSk7CisgICAgcXVlcnkuYmluZEludDY0
KDIsIG1faWQpOworICAgIGlmIChxdWVyeS5zdGVwKCkgIT0gU1FMUmVzdWx0RG9uZSkgeworICAg
ICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpOT1RfRk9VTkRfRVJSLCAiS2V5IGRvZXMgbm90IGV4aXN0IGluIHRoZSBv
YmplY3Qgc3RvcmUuIikpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgY2FsbGJhY2tz
LT5vblN1Y2Nlc3MoKTsKIH0KIApAQCAtMTEwLDcgKzIwNCwxNyBAQCB2b2lkIElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OmNyZWF0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3Ry
aW5nJiBrZQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRyPElEQkluZGV4QmFj
a2VuZEludGVyZmFjZT4gaW5kZXggPSBJREJJbmRleEJhY2tlbmRJbXBsOjpjcmVhdGUobmFtZSwg
a2V5UGF0aCwgdW5pcXVlKTsKKyAgICBTUUxpdGVTdGF0ZW1lbnQgaW5zZXJ0KHNxbGl0ZURhdGFi
YXNlKCksICJJTlNFUlQgSU5UTyBJbmRleGVzIChuYW1lLCBrZXlQYXRoLCBpc1VuaXF1ZSkgVkFM
VUVTICg/LCA/LCA/KSIpOworICAgIGJvb2wgb2sgPSBpbnNlcnQucHJlcGFyZSgpID09IFNRTFJl
c3VsdE9rOworICAgIEFTU0VSVChvayk7IC8vIEZJWE1FOiBCZXR0ZXIgZXJyb3IgaGFuZGxpbmcu
CisgICAgaW5zZXJ0LmJpbmRUZXh0KDEsIG5hbWUpOworICAgIGluc2VydC5iaW5kVGV4dCgyLCBr
ZXlQYXRoKTsKKyAgICBpbnNlcnQuYmluZEludCgzLCBzdGF0aWNfY2FzdDxpbnQ+KHVuaXF1ZSkp
OworICAgIG9rID0gaW5zZXJ0LnN0ZXAoKSA9PSBTUUxSZXN1bHREb25lOworICAgIEFTU0VSVChv
ayk7IC8vIEZJWE1FOiBCZXR0ZXIgZXJyb3IgaGFuZGxpbmcuCisgICAgaW50NjRfdCBpZCA9IHNx
bGl0ZURhdGFiYXNlKCkubGFzdEluc2VydFJvd0lEKCk7CisKKyAgICBSZWZQdHI8SURCSW5kZXhC
YWNrZW5kSW50ZXJmYWNlPiBpbmRleCA9IElEQkluZGV4QmFja2VuZEltcGw6OmNyZWF0ZSh0aGlz
LCBpZCwgbmFtZSwga2V5UGF0aCwgdW5pcXVlKTsKICAgICBBU1NFUlQoaW5kZXgtPm5hbWUoKSA9
PSBuYW1lKTsKICAgICBtX2luZGV4ZXMuc2V0KG5hbWUsIGluZGV4KTsKICAgICBjYWxsYmFja3Mt
Pm9uU3VjY2VzcyhpbmRleC5yZWxlYXNlKCkpOwpAQCAtMTI4LDE5ICsyMzIsNjAgQEAgdm9pZCBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpyZW1vdmVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUs
IFBhc3NSZWZQdHI8SURCQ2EKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIFNRTGl0ZVN0
YXRlbWVudCBkZWxldGVRdWVyeShzcWxpdGVEYXRhYmFzZSgpLCAiREVMRVRFIEZST00gSW5kZXhl
cyBXSEVSRSBuYW1lID0gPyBBTkQgb2JqZWN0U3RvcmVJZCA9ID8iKTsKKyAgICBib29sIG9rID0g
ZGVsZXRlUXVlcnkucHJlcGFyZSgpID09IFNRTFJlc3VsdE9rOworICAgIEFTU0VSVChvayk7IC8v
IEZJWE1FOiBCZXR0ZXIgZXJyb3IgaGFuZGxpbmcuCisgICAgZGVsZXRlUXVlcnkuYmluZFRleHQo
MSwgbmFtZSk7CisgICAgZGVsZXRlUXVlcnkuYmluZEludDY0KDIsIG1faWQpOworICAgIG9rID0g
ZGVsZXRlUXVlcnkuc3RlcCgpID09IFNRTFJlc3VsdERvbmU7CisgICAgQVNTRVJUKG9rKTsgLy8g
RklYTUU6IEJldHRlciBlcnJvciBoYW5kbGluZy4KKwogICAgIG1faW5kZXhlcy5yZW1vdmUobmFt
ZSk7CiAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoKTsKIH0KIAogdm9pZCBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29yKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdlLCB1
bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFj
a3MpCiB7CisgICAgLy8gRklYTUU6IEZ1bGx5IGltcGxlbWVudC4KKwogICAgIFJlZlB0cjxJREJL
ZXk+IGtleSA9IHJhbmdlLT5sZWZ0KCk7Ci0gICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZT4gdmFsdWUgPSBtX3RyZWUtPmdldChrZXkuZ2V0KCkpOwotICAgIGlmICh2YWx1ZSkgewotICAg
ICAgICBSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZT4gY3Vyc29yID0gSURCQ3Vyc29y
QmFja2VuZEltcGw6OmNyZWF0ZSh0aGlzLCByYW5nZSwgc3RhdGljX2Nhc3Q8SURCQ3Vyc29yOjpE
aXJlY3Rpb24+KGRpcmVjdGlvbiksIGtleSwgdmFsdWUpOwotICAgICAgICBjYWxsYmFja3MtPm9u
U3VjY2VzcyhjdXJzb3IucmVsZWFzZSgpKTsKLSAgICB9IGVsc2UKLSAgICAgIGNhbGxiYWNrcy0+
b25TdWNjZXNzKCk7CisgICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KHNxbGl0ZURhdGFiYXNlKCks
ICJTRUxFQ1QgaWQsIHZhbHVlIEZST00gT2JqZWN0U3RvcmVEYXRhIFdIRVJFICIgKyB3aGVyZUNs
YXVzZShrZXktPnR5cGUoKSkpOworICAgIGJvb2wgb2sgPSBxdWVyeS5wcmVwYXJlKCkgPT0gU1FM
UmVzdWx0T2s7CisgICAgQVNTRVJUKG9rKTsgLy8gRklYTUU6IEJldHRlciBlcnJvciBoYW5kbGlu
Zz8KKworICAgIGJpbmRLZXkocXVlcnksIGtleS5nZXQoKSwgMSk7CisgICAgcXVlcnkuYmluZElu
dDY0KDIsIG1faWQpOworICAgIGlmIChxdWVyeS5zdGVwKCkgIT0gU1FMUmVzdWx0Um93KSB7Cisg
ICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSA9IFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUocXVlcnkuZ2V0Q29sdW1uVGV4dCgxKSk7CisgICAgUmVm
UHRyPElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U+IGN1cnNvciA9IElEQkN1cnNvckJhY2tlbmRJ
bXBsOjpjcmVhdGUodGhpcywgcmFuZ2UsIHN0YXRpY19jYXN0PElEQkN1cnNvcjo6RGlyZWN0aW9u
PihkaXJlY3Rpb24pLCBrZXkucmVsZWFzZSgpLCB2YWx1ZS5yZWxlYXNlKCkpOworICAgIGNhbGxi
YWNrcy0+b25TdWNjZXNzKGN1cnNvci5yZWxlYXNlKCkpOworfQorCit2b2lkIElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OmxvYWRJbmRleGVzKCkKK3sKKyAgICBTUUxpdGVTdGF0ZW1lbnQgaW5k
ZXhRdWVyeShzcWxpdGVEYXRhYmFzZSgpLCAiU0VMRUNUIGlkLCBuYW1lLCBrZXlQYXRoLCBpc1Vu
aXF1ZSBGUk9NIEluZGV4ZXMgV0hFUkUgb2JqZWN0U3RvcmVJZCA9ID8iKTsKKyAgICBib29sIG9r
ID0gaW5kZXhRdWVyeS5wcmVwYXJlKCkgPT0gU1FMUmVzdWx0T2s7CisgICAgQVNTRVJUKG9rKTsg
Ly8gRklYTUU6IEJldHRlciBlcnJvciBoYW5kbGluZz8KKworICAgIGluZGV4UXVlcnkuYmluZElu
dDY0KDEsIG1faWQpOworCisgICAgd2hpbGUgKGluZGV4UXVlcnkuc3RlcCgpID09IFNRTFJlc3Vs
dFJvdykgeworICAgICAgICBpbnQ2NF90IGlkID0gaW5kZXhRdWVyeS5nZXRDb2x1bW5JbnQ2NCgw
KTsKKyAgICAgICAgU3RyaW5nIG5hbWUgPSBpbmRleFF1ZXJ5LmdldENvbHVtblRleHQoMSk7Cisg
ICAgICAgIFN0cmluZyBrZXlQYXRoID0gaW5kZXhRdWVyeS5nZXRDb2x1bW5UZXh0KDIpOworICAg
ICAgICBib29sIHVuaXF1ZSA9ICEhaW5kZXhRdWVyeS5nZXRDb2x1bW5JbnQoMyk7CisKKyAgICAg
ICAgbV9pbmRleGVzLnNldChuYW1lLCBJREJJbmRleEJhY2tlbmRJbXBsOjpjcmVhdGUodGhpcywg
aWQsIG5hbWUsIGtleVBhdGgsIHVuaXF1ZSkpOworICAgIH0KK30KKworU1FMaXRlRGF0YWJhc2Um
IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNxbGl0ZURhdGFiYXNlKCkgY29uc3QgCit7Cisg
ICAgcmV0dXJuIG1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsLmggYi9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5o
CmluZGV4IDRiOTA5YWY3NDA5YzM0NzAyNTJmYjk1NTlmMWU5OTBjZWY4NTJmYzkuLjAyZGNmMDRh
MDJjODZlYjcxODQ0YWEzMWU4YTgzZDJmNzc5MTI5ZjEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3Rv
cmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0lE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGwuaApAQCAtMzQsMTMgKzM0LDE0IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotdGVtcGxhdGUgPHR5cGVuYW1lIFZhbHVlVHlwZT4gY2xhc3MgSURCS2V5
VHJlZTsKK2NsYXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw7CitjbGFzcyBTUUxpdGVEYXRhYmFz
ZTsKIAogY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCA6IHB1YmxpYyBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbnRlcmZhY2UgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElE
Qk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gY3JlYXRlKGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQpCisgICAgc3RhdGljIFBh
c3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBjcmVhdGUoSURCRGF0YWJh
c2VCYWNrZW5kSW1wbCogZGF0YWJhc2UsIGludDY0X3QgaWQsIGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQpCiAgICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwobmFtZSwga2V5
UGF0aCwgYXV0b0luY3JlbWVudCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGwoZGF0YWJhc2UsIGlkLCBuYW1lLCBrZXlQYXRoLCBhdXRvSW5j
cmVtZW50KSk7CiAgICAgfQogICAgIH5JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKCk7CiAKQEAg
LTU4LDE4ICs1OSwyMyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIG9wZW5DdXJzb3IoUGFzc1JlZlB0
cjxJREJLZXlSYW5nZT4gcmFuZ2UsIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+KTsKIAorICAgIElEQkRhdGFiYXNlQmFja2VuZEltcGwqIGRhdGFiYXNl
KCkgY29uc3QgeyByZXR1cm4gbV9kYXRhYmFzZS5nZXQoKTsgfQorCiBwcml2YXRlOgotICAgIElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGwoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcm
IGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCk7CisgICAgSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbChJREJEYXRhYmFzZUJhY2tlbmRJbXBsKiwgaW50NjRfdCBpZCwgY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCk7CisKKyAgICB2
b2lkIGxvYWRJbmRleGVzKCk7CisgICAgU1FMaXRlRGF0YWJhc2UmIHNxbGl0ZURhdGFiYXNlKCkg
Y29uc3Q7CiAKKyAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gbV9kYXRhYmFzZTsK
KworICAgIGludDY0X3QgbV9pZDsKICAgICBTdHJpbmcgbV9uYW1lOwogICAgIFN0cmluZyBtX2tl
eVBhdGg7CiAgICAgYm9vbCBtX2F1dG9JbmNyZW1lbnQ7CiAKICAgICB0eXBlZGVmIEhhc2hNYXA8
U3RyaW5nLCBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiA+IEluZGV4TWFwOwogICAg
IEluZGV4TWFwIG1faW5kZXhlczsKLQotICAgIHR5cGVkZWYgSURCS2V5VHJlZTxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+IFRyZWU7Ci0gICAgUmVmUHRyPFRyZWU+IG1fdHJlZTsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64831</attachid>
            <date>2010-08-19 05:11:54 -0700</date>
            <delta_ts>2010-08-19 07:12:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-44164-20100819131151.patch</filename>
            <type>text/plain</type>
            <size>30543</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA5M2IzZjBhZjRhZDdkNzk3ZDIzY2QyOGE4NDUyYTk1NGQ1ZmZmYjdkLi40NTE0Mjg1
ZDg1ZGRmMTI3NDQ0ZTM1ZTg5YmExMjUwNTkyY2JkN2JkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAK
KzIwMTAtMDgtMTggIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgSW1wbGVtZW50IHBlcnNpc3RhbmNlIGZvciBJbmRleGVkREIgT2JqZWN0U3RvcmVzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDE2NAorCisgICAg
ICAgIFJlbW92ZSBvbGQgb2JqZWN0IHN0b3JlcyBiZWZvcmUgcnVubmluZyB0ZXN0LgorCisgICAg
ICAgICogc3RvcmFnZS9pbmRleGVkZGIvcmVzb3VyY2VzL3NoYXJlZC5qczoKKyAgICAgICAgKGRl
bGV0ZUFsbE9iamVjdFN0b3Jlcyk6CisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvc2NyaXB0
LXRlc3RzL29iamVjdHN0b3JlLWJhc2ljcy5qczoKKyAgICAgICAgKG9wZW5TdWNjZXNzKToKKyAg
ICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9zY3JpcHQtdGVzdHMvb3Blbi1jdXJzb3IuanM6Cisg
ICAgICAgIChvcGVuU3VjY2Vzcyk6CisKIDIwMTAtMDgtMDkgIEplcmVteSBPcmxvdyAgPGpvcmxv
d0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU3RldmUgQmxvY2suCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9yZXNvdXJjZXMvc2hhcmVkLmpz
IGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvcmVzb3VyY2VzL3NoYXJlZC5qcwppbmRl
eCBlNTEwYmUxOGNiYzFkOGNkY2IzYjc3M2ZjZWI1ZmJkZDA3ZDA4YjA2Li42NzY5ZWQyY2JhODkx
OTEyZGRjOTczZmJiNGQ2YmUxM2RiYzllZjFmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdG9y
YWdlL2luZGV4ZWRkYi9yZXNvdXJjZXMvc2hhcmVkLmpzCisrKyBiL0xheW91dFRlc3RzL3N0b3Jh
Z2UvaW5kZXhlZGRiL3Jlc291cmNlcy9zaGFyZWQuanMKQEAgLTUzLDMgKzUzLDEwIEBAIGZ1bmN0
aW9uIHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrKCkKICAgICBkb25lKCk7CiB9CiAKK2Z1bmN0aW9u
IGRlbGV0ZUFsbE9iamVjdFN0b3JlcyhkYikKK3sKKyAgICBvYmplY3RTdG9yZXMgPSBkYi5vYmpl
Y3RTdG9yZXM7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3RTdG9yZXMubGVuZ3RoOyAr
K2kpCisgICAgICAgIGRiLnJlbW92ZU9iamVjdFN0b3JlKG9iamVjdFN0b3Jlc1tpXSk7Cit9CisK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3NjcmlwdC10ZXN0cy9v
YmplY3RzdG9yZS1iYXNpY3MuanMgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9zY3Jp
cHQtdGVzdHMvb2JqZWN0c3RvcmUtYmFzaWNzLmpzCmluZGV4IDk4Njk1Nzk3ZWMyMjE5NzI0NjVm
NGRiNzE4MTQ3ODkyMWFlODc0YzEuLjYzNjc1YWQwNWQzNjk1NjYwNjg5ZDdhM2ZmYTkyNGNmMzE0
NzE1MTIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3NjcmlwdC10
ZXN0cy9vYmplY3RzdG9yZS1iYXNpY3MuanMKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRl
eGVkZGIvc2NyaXB0LXRlc3RzL29iamVjdHN0b3JlLWJhc2ljcy5qcwpAQCAtMTYsOCArMTYsNyBA
QCBmdW5jdGlvbiBvcGVuU3VjY2VzcygpCiAgICAgdmVyaWZ5U3VjY2Vzc0V2ZW50KGV2ZW50KTsK
ICAgICBkYiA9IGV2YWxBbmRMb2coImRiID0gZXZlbnQucmVzdWx0Iik7CiAKLSAgICAvLyBGSVhN
RTogcmVtb3ZlIGFueSBwcmV2aW91c2x5IGNyZWF0ZWQgb2JqZWN0IHN0b3Jlcy4KLSAgICAvLyBU
aGlzIHJlcXVpcmVzIElEQkRhdGFiYXNlUmVxdWVzdDo6cmVtb3ZlT2JqZWN0U3RvcmUgdG8gYmUg
aW1wbGVtZW50ZWQuCisgICAgZGVsZXRlQWxsT2JqZWN0U3RvcmVzKGRiKTsKIAogICAgIHJlc3Vs
dCA9IGV2YWxBbmRMb2coImRiLmNyZWF0ZU9iamVjdFN0b3JlKCdzdG9yZU5hbWUnLCBudWxsKSIp
OwogICAgIHZlcmlmeVJlc3VsdChyZXN1bHQpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3Rv
cmFnZS9pbmRleGVkZGIvc2NyaXB0LXRlc3RzL29wZW4tY3Vyc29yLmpzIGIvTGF5b3V0VGVzdHMv
c3RvcmFnZS9pbmRleGVkZGIvc2NyaXB0LXRlc3RzL29wZW4tY3Vyc29yLmpzCmluZGV4IGUzYzYx
NWM0YTVhZTcwNTBjZDI3YzYwMjA4NzU1YmViYjI5ZmQwNzcuLmZmMGI3MTEzN2EyMDY3NmUyNzM2
YTZhNTUwM2QwYjhhZTIwZTExYTYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5k
ZXhlZGRiL3NjcmlwdC10ZXN0cy9vcGVuLWN1cnNvci5qcworKysgYi9MYXlvdXRUZXN0cy9zdG9y
YWdlL2luZGV4ZWRkYi9zY3JpcHQtdGVzdHMvb3Blbi1jdXJzb3IuanMKQEAgLTYwLDYgKzYwLDkg
QEAgZnVuY3Rpb24gb3BlblN1Y2Nlc3MoKQogewogICAgIHZlcmlmeVN1Y2Nlc3NFdmVudChldmVu
dCk7CiAgICAgdmFyIGRiID0gZXZhbEFuZExvZygiZGIgPSBldmVudC5yZXN1bHQiKTsKKworICAg
IGRlbGV0ZUFsbE9iamVjdFN0b3JlcyhkYik7CisKICAgICByZXN1bHQgPSBldmFsQW5kTG9nKCJk
Yi5jcmVhdGVPYmplY3RTdG9yZSgndGVzdCcpIik7CiAgICAgdmVyaWZ5UmVzdWx0KHJlc3VsdCk7
CiAgICAgcmVzdWx0Lm9uc3VjY2VzcyA9IGNyZWF0ZU9iamVjdFN0b3JlU3VjY2VzczsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTg5NTgw
YjJmOGRlMjNmNmExYjcyNWQ1MGUxMjMxMjZmZjc4OGEyZC4uZjczM2RkOWIyMmM5NTdiMTNjMzFj
NDMzMjAzOTI2YWE2MjFmY2NmNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIv
V2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MiBAQAorMjAxMC0wOC0xOCAgSmVyZW15IE9y
bG93ICA8am9ybG93QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgcGVyc2lzdGFuY2UgZm9yIEluZGV4ZWREQiBP
YmplY3RTdG9yZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTQ0MTY0CisKKyAgICAgICAgR2V0IHJpZCBvZiB0aGUgaW4tbWVtb3J5IHN0b3JhZ2Ugb2Yg
T2JqZWN0U3RvcmVzIGFuZCBpbnN0ZWFkCisgICAgICAgIHVzZSBTUUwgYmFja2VkIG1lbW9yeS4K
KworICAgICAgICBFeGlzdGluZyB0ZXN0cyBnaXZlIG1vc3Qgb2YgdGhlIGNvdmVyYWdlLiAgV2ls
bCB1cGRhdGUgdGhlIG1hbnVhbAorICAgICAgICB0ZXN0IGluIHRoZSBuZXh0IHBhdGNoICh3aGlj
aCB3aWxsIGFsc28gcmUtd29yayBkYXRhYmFzZS5kZXNjcmlwdGlvbikuCisKKyAgICAgICAgKiBt
YW51YWwtdGVzdHMvaW5kZXhlZC1kYXRhYmFzZS5odG1sOiBHZXQgcmlkIG9mIHJhY2Ugd2hlcmUg
eW91IGNhbiBjbGljayBiZWZvcmUgdGhlIHBhZ2UgbG9hZHMuCisgICAgICAgICogcGxhdGZvcm0v
c3FsL1NRTGl0ZVN0YXRlbWVudC5jcHA6IEFkZCB0d28gaGVscGVyIGZ1bmN0aW9ucworICAgICAg
ICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpiaW5kSW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlNRTGl0ZVN0YXRlbWVudDo6aXNDb2x1bW5OdWxsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwv
U1FMaXRlU3RhdGVtZW50Lmg6CisgICAgICAgICogc3RvcmFnZS9JREJDdXJzb3JCYWNrZW5kSW1w
bC5jcHA6IAorICAgICAgICAqIHN0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpJREJEYXRhYmFzZUJhY2tl
bmRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0
ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6
OnJlbW92ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6OmltcG9ydE9iamVjdFN0b3Jlcyk6CisgICAgICAgICogc3RvcmFnZS9JREJEYXRhYmFz
ZUJhY2tlbmRJbXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBs
OjpzcWxpdGVEYXRhYmFzZSk6CisgICAgICAgICogc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZElt
cGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlVGFibGVzKToKKyAgICAgICAgKiBzdG9y
YWdlL0lEQkluZGV4QmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXhC
YWNrZW5kSW1wbDo6SURCSW5kZXhCYWNrZW5kSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJJ
bmRleEJhY2tlbmRJbXBsOjpzcWxpdGVEYXRhYmFzZSk6CisgICAgICAgICogc3RvcmFnZS9JREJJ
bmRleEJhY2tlbmRJbXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJbXBs
OjpjcmVhdGUpOgorICAgICAgICAqIHN0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OndoZXJlQ2xhdXNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmJpbmRLZXkpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsOjpyZW1vdmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6Y3JlYXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6cmVtb3ZlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6b3BlbkN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjppbXBvcnRJbmRleGVzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OnNxbGl0ZURhdGFiYXNlKToKKyAgICAgICAgKiBzdG9yYWdlL0lEQk9i
amVjdFN0b3JlQmFja2VuZEltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpkYXRhYmFzZSk6CisKIDIwMTAtMDgtMTEgIEplcmVteSBPcmxvdyAgPGpvcmxv
d0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQmVnaW5uaW5ncyBvZiBJbmRleGVkREIgcGVyc2lz
dGFuY2UgKyBJREJEYXRhYmFzZS5kZXNjcmlwdGlvbiBmbGVzaGVkIG91dApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9tYW51YWwtdGVzdHMvaW5kZXhlZC1kYXRhYmFzZS5odG1sIGIvV2ViQ29yZS9tYW51
YWwtdGVzdHMvaW5kZXhlZC1kYXRhYmFzZS5odG1sCmluZGV4IGQwZmIzODE0ZDcwOTljNDg3NjA4
N2QwZTQ1NTJiZDU1NWE3NDdkMzQuLmJjYzhmZTQzNTVlZWI5YWVmZTE5OWUzYzVmZGVhOTBmZThm
ZWQwZDQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbWFudWFsLXRlc3RzL2luZGV4ZWQtZGF0YWJhc2Uu
aHRtbAorKysgYi9XZWJDb3JlL21hbnVhbC10ZXN0cy9pbmRleGVkLWRhdGFiYXNlLmh0bWwKQEAg
LTE2LDYgKzE2LDggQEAKIAogPHNjcmlwdD4KIAorICAgIHJlYWR5Q291bnQgPSAwOworCiAgICAg
aWYgKCEoJ2luZGV4ZWREQicgaW4gd2luZG93KSkKICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoImVuYWJsZWQiKS5pbm5lckhUTUwgPSAiPGZvbnQgY29sb3I9cmVkPllvdXIgYnVpbGQg
ZG9lcyBOT1Qgc2VlbSB0byBoYXZlIGl0IGVuYWJsZWQuICBTbyBhbGwgY29kZSBvbiB0aGlzIHBh
Z2UgaXMgZGlzYWJsZWQuPC9mb250PiI7CiAgICAgZWxzZSB7CkBAIC0yNSw2ICsyNyw3IEBACiAg
ICAgICAgIHJlcXVlc3Qub25zdWNjZXNzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgicmVzdWx0IikuaW5uZXJIVE1MID0gIjxmb250IGNvbG9yPWdy
ZWVuPlN1Y2Nlc3MhPC9mb250PiI7CiAgICAgICAgICAgICB3aW5kb3cubmFtZURCID0gZXZlbnQu
cmVzdWx0OworICAgICAgICAgICAgKytyZWFkeUNvdW50OwogICAgICAgICB9OwogICAgICAgICBy
ZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJyZXN1bHQiKS5pbm5lckhUTUwgPSAiPGZvbnQgY29sb3I9cmVkPkVycm9yOiAi
ICsgZXZlbnQubWVzc2FnZSArICIuPC9mb250PiI7CkBAIC0zMywxNyArMzYsMjggQEAKICAgICAg
ICAgcmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKCJhbm90aGVyIiwgInRlc3Qgb2YgdGhlIGRlc2Ny
aXB0aW9uIGF0dHJpYnV0ZSIpOwogICAgICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGZ1bmN0aW9u
KCkgewogICAgICAgICAgICAgd2luZG93LmFub3RoZXJEQiA9IGV2ZW50LnJlc3VsdDsKKyAgICAg
ICAgICAgICsrcmVhZHlDb3VudDsKICAgICAgICAgfTsKICAgICB9CiAKICAgICBmdW5jdGlvbiB1
cGRhdGVEZXNjcmlwdGlvbigpCiAgICAgeworICAgICAgICBpZiAocmVhZENvdW50IDwgMikgewor
ICAgICAgICAgICAgYWxlcnQoIlRoZSBwYWdlIGhhcyBub3QgZmluaXNoZWQgbG9hZGluZy4gIEhv
bGQgb24gYSBzZWMuLi4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCiAgICAg
ICAgIGluZGV4ZWREQi5vcGVuKCJuYW1lIiwgInRlc3Qgb2YgdGhlIGRlc2NyaXB0aW9uIGF0dHJp
YnV0ZSIpOwogICAgICAgICBpbmRleGVkREIub3BlbigiYW5vdGhlciIsICJ4eXoiKTsKICAgICB9
CiAKICAgICBmdW5jdGlvbiByZWFkRGVzY3JpcHRpb24oKQogICAgIHsKKyAgICAgICAgaWYgKHJl
YWRDb3VudCA8IDIpIHsKKyAgICAgICAgICAgIGFsZXJ0KCJUaGUgcGFnZSBoYXMgbm90IGZpbmlz
aGVkIGxvYWRpbmcuICBIb2xkIG9uIGEgc2VjLi4uIik7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKwogICAgICAgICBpZiAod2luZG93Lm5hbWVEQi5kZXNjcmlwdGlvbiAhPSAidGVz
dCBvZiB0aGUgZGVzY3JpcHRpb24gYXR0cmlidXRlIikgewogICAgICAgICAgICAgLy8gU2luY2Ug
d2UgcGFzc2VkIGluIG5vdGhpbmcsIHRoZSBkZXNjcmlwdGlvbiBzaG91bGQgbm90IGJlIHJlc2V0
LgogICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRlc2NyaXB0aW9uIikuaW5u
ZXJIVE1MID0gIjxmb250IGNvbG9yPXJlZD5GYWlsdXJlOiAoRGF0YWJhc2UgJ25hbWUnIHdhcyB0
aGlzOiAiICsgd2luZG93Lm5hbWVEQi5kZXNjcmlwdGlvbiArICIpLjwvZm9udD4iOwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmNwcCBiL1dlYkNvcmUv
cGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5jcHAKaW5kZXggNGRjODBmYjVhMGQ0Nzk3ODlh
ZWRjMTEyMDdjZTA2OTQ0M2YxZDgzZC4uMDM3ZWM3OWYzMmQzNzAxMzdkZjI0NGJkYjQ2ZjhmMzAz
Y2IzOTAwYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50
LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3BwCkBAIC0x
OTIsNiArMTkyLDE0IEBAIGludCBTUUxpdGVTdGF0ZW1lbnQ6OmJpbmRUZXh0KGludCBpbmRleCwg
Y29uc3QgU3RyaW5nJiB0ZXh0KQogICAgIHJldHVybiBzcWxpdGUzX2JpbmRfdGV4dDE2KG1fc3Rh
dGVtZW50LCBpbmRleCwgY2hhcmFjdGVycywgc2l6ZW9mKFVDaGFyKSAqIHRleHQubGVuZ3RoKCks
IFNRTElURV9UUkFOU0lFTlQpOwogfQogCitpbnQgU1FMaXRlU3RhdGVtZW50OjpiaW5kSW50KGlu
dCBpbmRleCwgaW50IGludGVnZXIpCit7CisgICAgQVNTRVJUKG1faXNQcmVwYXJlZCk7CisgICAg
QVNTRVJUKGluZGV4ID4gMCk7CisgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmRl
eCkgPD0gYmluZFBhcmFtZXRlckNvdW50KCkpOworCisgICAgcmV0dXJuIHNxbGl0ZTNfYmluZF9p
bnQobV9zdGF0ZW1lbnQsIGluZGV4LCBpbnRlZ2VyKTsKK30KIAogaW50IFNRTGl0ZVN0YXRlbWVu
dDo6YmluZEludDY0KGludCBpbmRleCwgaW50NjRfdCBpbnRlZ2VyKQogewpAQCAtMjUxLDYgKzI1
OSwxOCBAQCBpbnQgU1FMaXRlU3RhdGVtZW50Ojpjb2x1bW5Db3VudCgpCiAgICAgcmV0dXJuIHNx
bGl0ZTNfZGF0YV9jb3VudChtX3N0YXRlbWVudCk7CiB9CiAKK2Jvb2wgU1FMaXRlU3RhdGVtZW50
Ojppc0NvbHVtbk51bGwoaW50IGNvbCkKK3sKKyAgICBBU1NFUlQoY29sID49IDApOworICAgIGlm
ICghbV9zdGF0ZW1lbnQpCisgICAgICAgIGlmIChwcmVwYXJlQW5kU3RlcCgpICE9IFNRTElURV9S
T1cpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGNvbHVtbkNvdW50KCkgPD0g
Y29sKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gc3FsaXRlM19jb2x1bW5f
dHlwZShtX3N0YXRlbWVudCwgY29sKSA9PSBTUUxJVEVfTlVMTDsKK30KKwogU3RyaW5nIFNRTGl0
ZVN0YXRlbWVudDo6Z2V0Q29sdW1uTmFtZShpbnQgY29sKQogewogICAgIEFTU0VSVChjb2wgPj0g
MCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuaCBi
L1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5oCmluZGV4IGU2MmI0ZjBlYTkx
NTVlMjQyMDEyZmNiMGYxODkwZWQwMmIyMmY1MWQuLjE0NDRmMGVlZWQxOWRjMmEzM2MyYWE5ZWQ0
NGRmMzRjZTFhZWQ3OGQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0
YXRlbWVudC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5oCkBA
IC00Miw2ICs0Miw3IEBAIHB1YmxpYzoKICAgICBpbnQgcHJlcGFyZSgpOwogICAgIGludCBiaW5k
QmxvYihpbnQgaW5kZXgsIGNvbnN0IHZvaWQqIGJsb2IsIGludCBzaXplKTsKICAgICBpbnQgYmlu
ZFRleHQoaW50IGluZGV4LCBjb25zdCBTdHJpbmcmKTsKKyAgICBpbnQgYmluZEludChpbnQgaW5k
ZXgsIGludCk7CiAgICAgaW50IGJpbmRJbnQ2NChpbnQgaW5kZXgsIGludDY0X3QpOwogICAgIGlu
dCBiaW5kRG91YmxlKGludCBpbmRleCwgZG91YmxlKTsKICAgICBpbnQgYmluZE51bGwoaW50IGlu
ZGV4KTsKQEAgLTcwLDYgKzcxLDcgQEAgcHVibGljOgogICAgIC8vIHJldHVybmVkIGluIHRoZSBs
YXN0IHN0ZXAoKQogICAgIGludCBjb2x1bW5Db3VudCgpOwogICAgIAorICAgIGJvb2wgaXNDb2x1
bW5OdWxsKGludCBjb2wpOwogICAgIFN0cmluZyBnZXRDb2x1bW5OYW1lKGludCBjb2wpOwogICAg
IFNRTFZhbHVlIGdldENvbHVtblZhbHVlKGludCBjb2wpOwogICAgIFN0cmluZyBnZXRDb2x1bW5U
ZXh0KGludCBjb2wpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvckJhY2tl
bmRJbXBsLmNwcCBiL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAKaW5k
ZXggNGUwOGI4ZjQ4MGViYzU5MWUyNWM0Y2ZkNTdiNDNhMDBhYWYwNjJhNy4uZDMyOThiMzgwZGM4
ZjliYjk3YzYzOWUzNWFiMzliMDc2YmY1MWRkZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdl
L0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29y
QmFja2VuZEltcGwuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiSURCS2V5UmFuZ2Uu
aCIKICNpbmNsdWRlICJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgiCiAjaW5jbHVkZSAiSURC
UmVxdWVzdC5oIgorI2luY2x1ZGUgIlNRTGl0ZURhdGFiYXNlLmgiCiAjaW5jbHVkZSAiU2VyaWFs
aXplZFNjcmlwdFZhbHVlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcCBiL1dlYkNvcmUvc3RvcmFn
ZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAppbmRleCBlNTUwZTE4Njk0ZTUwMzMyODA1N2Fm
MjMwOTYwZjExMDQ5MWQzNDQ1Li4zYWNmMmE1YTA5ZTI3YzVjMGU2YjBmNDMyZWQ3NTdlNzVkZTVh
NGYzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5j
cHAKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCkBAIC05
Nyw2ICs5Nyw4IEBAIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OklEQkRhdGFiYXNlQmFja2VuZElt
cGwoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmCiAKICAgICBpZiAoIXJlc3VsdCB8
fCBtX2Rlc2NyaXB0aW9uICE9IGZvdW5kRGVzY3JpcHRpb24pCiAgICAgICAgIHNldE1ldGFEYXRh
KG1fc3FsaXRlRGF0YWJhc2UuZ2V0KCksIG1fbmFtZSwgbV9kZXNjcmlwdGlvbiwgbV92ZXJzaW9u
KTsKKworICAgIGxvYWRPYmplY3RTdG9yZXMoKTsKIH0KIAogSURCRGF0YWJhc2VCYWNrZW5kSW1w
bDo6fklEQkRhdGFiYXNlQmFja2VuZEltcGwoKQpAQCAtMTI3LDcgKzEyOSwxOCBAQCB2b2lkIElE
QkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgU3RyaW5nJgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRyPElE
Qk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gb2JqZWN0U3RvcmUgPSBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpjcmVhdGUobmFtZSwga2V5UGF0aCwgYXV0b0luY3JlbWVudCk7CisgICAg
U1FMaXRlU3RhdGVtZW50IGluc2VydChzcWxpdGVEYXRhYmFzZSgpLCAiSU5TRVJUIElOVE8gT2Jq
ZWN0U3RvcmVzIChuYW1lLCBrZXlQYXRoLCBkb0F1dG9JbmNyZW1lbnQpIFZBTFVFUyAoPywgPywg
PykiKTsKKyAgICBib29sIG9rID0gaW5zZXJ0LnByZXBhcmUoKSA9PSBTUUxSZXN1bHRPazsKKyAg
ICBBU1NFUlQob2spOyAvLyBGSVhNRTogQmV0dGVyIGVycm9yIGhhbmRsaW5nLgorICAgIGluc2Vy
dC5iaW5kVGV4dCgxLCBuYW1lKTsKKyAgICBpbnNlcnQuYmluZFRleHQoMiwga2V5UGF0aCk7Cisg
ICAgaW5zZXJ0LmJpbmRJbnQoMywgc3RhdGljX2Nhc3Q8aW50PihhdXRvSW5jcmVtZW50KSk7Cisg
ICAgb2sgPSBpbnNlcnQuc3RlcCgpID09IFNRTFJlc3VsdERvbmU7CisgICAgQVNTRVJUKG9rKTsg
Ly8gRklYTUU6IEJldHRlciBlcnJvciBoYW5kbGluZy4KKyAgICBpbnQ2NF90IGlkID0gc3FsaXRl
RGF0YWJhc2UoKS5sYXN0SW5zZXJ0Um93SUQoKTsKKworICAgIFJlZlB0cjxJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbnRlcmZhY2U+IG9iamVjdFN0b3JlID0gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6Y3JlYXRlKHRoaXMsIGlkLCBuYW1lLCBrZXlQYXRoLCBhdXRvSW5jcmVtZW50KTsKKyAgICBB
U1NFUlQob2JqZWN0U3RvcmUtPm5hbWUoKSA9PSBuYW1lKTsKICAgICBtX29iamVjdFN0b3Jlcy5z
ZXQobmFtZSwgb2JqZWN0U3RvcmUpOwogICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKG9iamVjdFN0
b3JlLnJlbGVhc2UoKSk7CiB9CkBAIC0xNDYsNiArMTU5LDEzIEBAIHZvaWQgSURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6cmVtb3ZlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVm
UHRyPElECiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBTUUxpdGVTdGF0ZW1lbnQgZGVs
ZXRlUXVlcnkoc3FsaXRlRGF0YWJhc2UoKSwgIkRFTEVURSBGUk9NIE9iamVjdFN0b3JlcyBXSEVS
RSBuYW1lID0gPyIpOworICAgIGJvb2wgb2sgPSBkZWxldGVRdWVyeS5wcmVwYXJlKCkgPT0gU1FM
UmVzdWx0T2s7CisgICAgQVNTRVJUKG9rKTsgLy8gRklYTUU6IEJldHRlciBlcnJvciBoYW5kbGlu
Zy4KKyAgICBkZWxldGVRdWVyeS5iaW5kVGV4dCgxLCBuYW1lKTsKKyAgICBvayA9IGRlbGV0ZVF1
ZXJ5LnN0ZXAoKSA9PSBTUUxSZXN1bHREb25lOworICAgIEFTU0VSVChvayk7IC8vIEZJWE1FOiBC
ZXR0ZXIgZXJyb3IgaGFuZGxpbmcuCisKICAgICBtX29iamVjdFN0b3Jlcy5yZW1vdmUobmFtZSk7
CiAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoKTsKIH0KQEAgLTE1Nyw2ICsxNzcsMjIgQEAgUGFz
c1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6OnRyYW5zYWN0aW9uKEQKICAgICByZXR1cm4gMDsKIH0KIAordm9pZCBJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsOjpsb2FkT2JqZWN0U3RvcmVzKCkKK3sKKyAgICBTUUxpdGVTdGF0ZW1lbnQg
b2JqZWN0U3RvcmVzUXVlcnkoc3FsaXRlRGF0YWJhc2UoKSwgIlNFTEVDVCBpZCwgbmFtZSwga2V5
UGF0aCwgZG9BdXRvSW5jcmVtZW50IEZST00gT2JqZWN0U3RvcmVzIik7CisgICAgYm9vbCBvayA9
IG9iamVjdFN0b3Jlc1F1ZXJ5LnByZXBhcmUoKSA9PSBTUUxSZXN1bHRPazsKKyAgICBBU1NFUlQo
b2spOyAvLyBGSVhNRTogQmV0dGVyIGVycm9yIGhhbmRsaW5nPworCisgICAgd2hpbGUgKG9iamVj
dFN0b3Jlc1F1ZXJ5LnN0ZXAoKSA9PSBTUUxSZXN1bHRSb3cpIHsKKyAgICAgICAgaW50NjRfdCBp
ZCA9IG9iamVjdFN0b3Jlc1F1ZXJ5LmdldENvbHVtbkludDY0KDApOworICAgICAgICBTdHJpbmcg
bmFtZSA9IG9iamVjdFN0b3Jlc1F1ZXJ5LmdldENvbHVtblRleHQoMSk7CisgICAgICAgIFN0cmlu
ZyBrZXlQYXRoID0gb2JqZWN0U3RvcmVzUXVlcnkuZ2V0Q29sdW1uVGV4dCgyKTsKKyAgICAgICAg
Ym9vbCBhdXRvSW5jcmVtZW50ID0gISFvYmplY3RTdG9yZXNRdWVyeS5nZXRDb2x1bW5JbnQoMyk7
CisKKyAgICAgICAgbV9vYmplY3RTdG9yZXMuc2V0KG5hbWUsIElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6OmNyZWF0ZSh0aGlzLCBpZCwgbmFtZSwga2V5UGF0aCwgYXV0b0luY3JlbWVudCkpOwor
ICAgIH0KK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VC
YWNrZW5kSW1wbC5oIGIvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaApp
bmRleCA2MGJlYzFmNzg3ODdjYTFlZjljYmY0ODMwNWE5Yzg5ZjM2NWNhMzk2Li5jOGM1YTkxZjVk
MWYzMDMzYmY2N2RhNmMzZDczYjVlMmUwYjMzMWZiIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0b3Jh
Z2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRh
YmFzZUJhY2tlbmRJbXBsLmgKQEAgLTQ2LDYgKzQ2LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
fklEQkRhdGFiYXNlQmFja2VuZEltcGwoKTsKIAogICAgIHZvaWQgc2V0RGVzY3JpcHRpb24oY29u
c3QgU3RyaW5nJiBkZXNjcmlwdGlvbik7CisgICAgU1FMaXRlRGF0YWJhc2UmIHNxbGl0ZURhdGFi
YXNlKCkgY29uc3QgeyByZXR1cm4gKm1fc3FsaXRlRGF0YWJhc2UuZ2V0KCk7IH0KIAogICAgIC8v
IEltcGxlbWVudHMgSURCRGF0YWJhc2UKICAgICB2aXJ0dWFsIFN0cmluZyBuYW1lKCkgY29uc3Qg
eyByZXR1cm4gbV9uYW1lOyB9CkBAIC02MCw2ICs2MSw4IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAg
ICAgSURCRGF0YWJhc2VCYWNrZW5kSW1wbChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYgZGVzY3JpcHRpb24sIFBhc3NPd25QdHI8U1FMaXRlRGF0YWJhc2U+IGRhdGFiYXNlKTsKIAor
ICAgIHZvaWQgbG9hZE9iamVjdFN0b3JlcygpOworCiAgICAgT3duUHRyPFNRTGl0ZURhdGFiYXNl
PiBtX3NxbGl0ZURhdGFiYXNlOwogCiAgICAgU3RyaW5nIG1fbmFtZTsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwIGIvV2ViQ29yZS9zdG9yYWdl
L0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKaW5kZXggOTA1NzI2ZmM5OGI3MjhiNDBiYmY5ODNm
NjhiNWMyZGRlNzIyOGQzYy4uNWFmMzNlNzhlMGJhM2Y4ZmVlNjUwN2JlMzQwZmZiOWRjNDk2YzNk
NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAK
KysrIGIvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKQEAgLTc1LDgg
Kzc1LDI1IEBAIHN0YXRpYyBQYXNzT3duUHRyPFNRTGl0ZURhdGFiYXNlPiBvcGVuU1FMaXRlRGF0
YWJhc2UoU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpCiAKIHN0YXRpYyBib29sIGNyZWF0ZVRh
YmxlcyhTUUxpdGVEYXRhYmFzZSogc3FsaXRlRGF0YWJhc2UpCiB7CisgICAgLy8gRklYTUU6IFJl
bW92ZSBhbGwgdGhlIGRyb3AgdGFibGUgY29tbWFuZHMgb25jZSB0aGUgb24gZGlzayBzdHJ1Y3R1
cmUgc3RhYmlsaXplcy4KICAgICBzdGF0aWMgY29uc3QgY2hhciogY29tbWFuZHNbXSA9IHsKLSAg
ICAgICAgIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIE1ldGFEYXRhIChuYW1lIFRFWFQsIGRl
c2NyaXB0aW9uIFRFWFQsIHZlcnNpb24gVEVYVCkiCisgICAgICAgICJEUk9QIFRBQkxFIElGIEVY
SVNUUyBNZXRhRGF0YSIsCisgICAgICAgICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBNZXRh
RGF0YSAoaWQgSU5URUdFUiBQUklNQVJZIEtFWSwgbmFtZSBURVhUIE5PVCBOVUxMLCBkZXNjcmlw
dGlvbiBURVhUIE5PVCBOVUxMLCB2ZXJzaW9uIFRFWFQgTk9UIE5VTEwpIiwKKworICAgICAgICAi
RFJPUCBUQUJMRSBJRiBFWElTVFMgT2JqZWN0U3RvcmVzIiwKKyAgICAgICAgIkNSRUFURSBUQUJM
RSBJRiBOT1QgRVhJU1RTIE9iamVjdFN0b3JlcyAoaWQgSU5URUdFUiBQUklNQVJZIEtFWSwgbmFt
ZSBURVhUIE5PVCBOVUxMLCBrZXlQYXRoIFRFWFQsIGRvQXV0b0luY3JlbWVudCBJTlRFR0VSIE5P
VCBOVUxMKSIsCisgICAgICAgICJEUk9QIElOREVYIElGIEVYSVNUUyBPYmplY3RTdG9yZXNfbmFt
ZSIsCisgICAgICAgICJDUkVBVEUgVU5JUVVFIElOREVYIElGIE5PVCBFWElTVFMgT2JqZWN0U3Rv
cmVzX25hbWUgT04gT2JqZWN0U3RvcmVzKG5hbWUpIiwKKworICAgICAgICAiRFJPUCBUQUJMRSBJ
RiBFWElTVFMgSW5kZXhlcyIsCisgICAgICAgICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBJ
bmRleGVzIChpZCBJTlRFR0VSIFBSSU1BUlkgS0VZLCBvYmplY3RTdG9yZUlkIElOVEVHRVIgTk9U
IE5VTEwgUkVGRVJFTkNFUyBPYmplY3RTdG9yZShpZCkgT04gREVMRVRFIENBU0NBREUsIG5hbWUg
VEVYVCBOT1QgTlVMTCwga2V5UGF0aCBURVhULCBpc1VuaXF1ZSBJTlRFR0VSIE5PVCBOVUxMKSIs
CisgICAgICAgICJEUk9QIElOREVYIElGIEVYSVNUUyBJbmRleGVzX2NvbXBvc2l0IiwKKyAgICAg
ICAgIkNSRUFURSBVTklRVUUgSU5ERVggSUYgTk9UIEVYSVNUUyBJbmRleGVzX2NvbXBvc2l0IE9O
IEluZGV4ZXMob2JqZWN0U3RvcmVJZCwgbmFtZSkiLAorCisgICAgICAgICJEUk9QIFRBQkxFIElG
IEVYSVNUUyBPYmplY3RTdG9yZURhdGEiLAorICAgICAgICAiQ1JFQVRFIFRBQkxFIElGIE5PVCBF
WElTVFMgT2JqZWN0U3RvcmVEYXRhIChpZCBJTlRFR0VSIFBSSU1BUlkgS0VZLCBvYmplY3RTdG9y
ZUlkIElOVEVHRVIgTk9UIE5VTEwgUkVGRVJFTkNFUyBPYmplY3RTdG9yZShpZCkgT04gREVMRVRF
IENBU0NBREUsIGtleVN0cmluZyBURVhULCBrZXlEYXRlIElOVEVHRVIsIGtleU51bWJlciBJTlRF
R0VSLCB2YWx1ZSBURVhUIE5PVCBOVUxMKSIsCisgICAgICAgICJEUk9QIElOREVYIElGIEVYSVNU
UyBPYmplY3RTdG9yZURhdGFfY29tcG9zaXQiLAorICAgICAgICAiQ1JFQVRFIFVOSVFVRSBJTkRF
WCBJRiBOT1QgRVhJU1RTIE9iamVjdFN0b3JlRGF0YV9jb21wb3NpdCBPTiBPYmplY3RTdG9yZURh
dGEoa2V5U3RyaW5nLCBrZXlEYXRlLCBrZXlOdW1iZXIsIG9iamVjdFN0b3JlSWQpIgogICAgICAg
ICB9OwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcnJheXNpemUoY29tbWFuZHMpOyAr
K2kpIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRleEJhY2tlbmRJbXBsLmNw
cCBiL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRleEJhY2tlbmRJbXBsLmNwcAppbmRleCA0MDZlMzdm
NmZkMTc5ZDRlYTg0YTgxZjU2OWYxMTQ2NmRjMzNmYTM5Li4xODBmZjFkOGJlZDI3N2NhMGRhOTM4
NWM4MjkzMTJlOGRjNjc3YjQ1IDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0b3JhZ2UvSURCSW5kZXhC
YWNrZW5kSW1wbC5jcHAKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4QmFja2VuZEltcGwu
Y3BwCkBAIC0yOCwxMCArMjgsMTYgQEAKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQog
CisjaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIgorI2luY2x1ZGUgIklEQk9iamVj
dFN0b3JlQmFja2VuZEltcGwuaCIKKyNpbmNsdWRlICJTUUxpdGVEYXRhYmFzZS5oIgorCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLUlEQkluZGV4QmFja2VuZEltcGw6OklEQkluZGV4QmFja2VuZElt
cGwoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgdW5pcXVl
KQotICAgIDogbV9uYW1lKG5hbWUpCitJREJJbmRleEJhY2tlbmRJbXBsOjpJREJJbmRleEJhY2tl
bmRJbXBsKElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwqIG9iamVjdFN0b3JlLCBpbnQ2NF90IGlk
LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCB1bmlxdWUp
CisgICAgOiBtX29iamVjdFN0b3JlKG9iamVjdFN0b3JlKQorICAgICwgbV9pZChpZCkKKyAgICAs
IG1fbmFtZShuYW1lKQogICAgICwgbV9rZXlQYXRoKGtleVBhdGgpCiAgICAgLCBtX3VuaXF1ZSh1
bmlxdWUpCiB7CkBAIC00MSw2ICs0NywxMSBAQCBJREJJbmRleEJhY2tlbmRJbXBsOjp+SURCSW5k
ZXhCYWNrZW5kSW1wbCgpCiB7CiB9CiAKK1NRTGl0ZURhdGFiYXNlJiBJREJJbmRleEJhY2tlbmRJ
bXBsOjpzcWxpdGVEYXRhYmFzZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fb2JqZWN0U3RvcmUt
PmRhdGFiYXNlKCktPnNxbGl0ZURhdGFiYXNlKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9zdG9yYWdlL0lEQkluZGV4QmFja2VuZEltcGwuaCBiL1dlYkNvcmUvc3RvcmFnZS9JREJJ
bmRleEJhY2tlbmRJbXBsLmgKaW5kZXggY2EzZjAxZWEzZGNhODNmNzdkOWQ4MmU1N2ZkMDE0YjRh
YzllZjQ1OS4uYWNmNmIxZjIwZmNhNmQxYzEyYWE4MGFhMzViMzQ2ZDIxMjYxZDI3MSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4QmFja2VuZEltcGwuaAorKysgYi9XZWJDb3Jl
L3N0b3JhZ2UvSURCSW5kZXhCYWNrZW5kSW1wbC5oCkBAIC0zMiwxMSArMzIsMTQgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOworY2xh
c3MgU1FMaXRlRGF0YWJhc2U7CisKIGNsYXNzIElEQkluZGV4QmFja2VuZEltcGwgOiBwdWJsaWMg
SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0
cjxJREJJbmRleEJhY2tlbmRJbXBsPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBT
dHJpbmcmIGtleVBhdGgsIGJvb2wgdW5pcXVlKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQklu
ZGV4QmFja2VuZEltcGw+IGNyZWF0ZShJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKiBvYmplY3RT
dG9yZSwgaW50NjRfdCBpZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBh
dGgsIGJvb2wgdW5pcXVlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJJ
bmRleEJhY2tlbmRJbXBsKG5hbWUsIGtleVBhdGgsIHVuaXF1ZSkpOworICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IElEQkluZGV4QmFja2VuZEltcGwob2JqZWN0U3RvcmUsIGlkLCBuYW1lLCBr
ZXlQYXRoLCB1bmlxdWUpKTsKICAgICB9CiAgICAgdmlydHVhbCB+SURCSW5kZXhCYWNrZW5kSW1w
bCgpOwogCkBAIC00Niw4ICs0OSwxMyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHVuaXF1
ZSgpIHsgcmV0dXJuIG1fdW5pcXVlOyB9CiAKIHByaXZhdGU6Ci0gICAgSURCSW5kZXhCYWNrZW5k
SW1wbChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCB1bmlx
dWUpOworICAgIElEQkluZGV4QmFja2VuZEltcGwoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCos
IGludDY0X3QgaWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBi
b29sIHVuaXF1ZSk7CisKKyAgICBTUUxpdGVEYXRhYmFzZSYgc3FsaXRlRGF0YWJhc2UoKSBjb25z
dDsKKworICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBtX29iamVjdFN0b3Jl
OwogCisgICAgaW50NjRfdCBtX2lkOwogICAgIFN0cmluZyBtX25hbWU7CiAgICAgU3RyaW5nIG1f
a2V5UGF0aDsKICAgICBib29sIG1fdW5pcXVlOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdl
L0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwIGIvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVj
dFN0b3JlQmFja2VuZEltcGwuY3BwCmluZGV4IDk3MzJiYzFlYmRhZmI1MDBlODI3ZGFiYjYyOGE1
NmJmYzVlMTEwOTkuLmIzMDVhM2M5OTA5YjkyMTc5ZmMyZWRjMjcyNzVhNTkyYjdjOWU2ZWYgMTAw
NzU1Ci0tLSBhL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAor
KysgYi9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKQEAgLTMw
LDEwICszMCwxMiBAQAogI2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKICNpbmNsdWRl
ICJJREJDYWxsYmFja3MuaCIKICNpbmNsdWRlICJJREJDdXJzb3JCYWNrZW5kSW1wbC5oIgorI2lu
Y2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZEltcGwuaCIKICNpbmNsdWRlICJJREJEYXRhYmFzZUV4
Y2VwdGlvbi5oIgogI2luY2x1ZGUgIklEQkluZGV4QmFja2VuZEltcGwuaCIKICNpbmNsdWRlICJJ
REJLZXlSYW5nZS5oIgotI2luY2x1ZGUgIklEQktleVRyZWUuaCIKKyNpbmNsdWRlICJTUUxpdGVE
YXRhYmFzZS5oIgorI2luY2x1ZGUgIlNRTGl0ZVN0YXRlbWVudC5oIgogCiAjaWYgRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCiAKQEAgLTQzLDEyICs0NSwxNCBAQCBJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjp+SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCgpCiB7CiB9CiAKLUlEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGwoY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCkKLSAgICA6IG1f
bmFtZShuYW1lKQorSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6SURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbChJREJEYXRhYmFzZUJhY2tlbmRJbXBsKiBkYXRhYmFzZSwgaW50NjRfdCBpZCwgY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVu
dCkKKyAgICA6IG1fZGF0YWJhc2UoZGF0YWJhc2UpCisgICAgLCBtX2lkKGlkKQorICAgICwgbV9u
YW1lKG5hbWUpCiAgICAgLCBtX2tleVBhdGgoa2V5UGF0aCkKICAgICAsIG1fYXV0b0luY3JlbWVu
dChhdXRvSW5jcmVtZW50KQotICAgICwgbV90cmVlKFRyZWU6OmNyZWF0ZSgpKQogeworICAgIGxv
YWRJbmRleGVzKCk7CiB9CiAKIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6aW5kZXhOYW1lcygpIGNvbnN0CkBAIC01OSwxNCArNjMsNjUgQEAgUGFz
c1JlZlB0cjxET01TdHJpbmdMaXN0PiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjppbmRleE5h
bWVzKCkgY29uc3QKICAgICByZXR1cm4gaW5kZXhOYW1lcy5yZWxlYXNlKCk7CiB9CiAKK3N0YXRp
YyBTdHJpbmcgd2hlcmVDbGF1c2UoSURCS2V5OjpUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0
eXBlKSB7CisgICAgY2FzZSBJREJLZXk6OlN0cmluZ1R5cGU6CisgICAgICAgIHJldHVybiAiV0hF
UkUgb2JqZWN0U3RvcmVJZCA9ID8gIEFORCAga2V5U3RyaW5nID0gPyI7CisgICAgY2FzZSBJREJL
ZXk6Ok51bWJlclR5cGU6CisgICAgICAgIHJldHVybiAiV0hFUkUgb2JqZWN0U3RvcmVJZCA9ID8g
IEFORCAga2V5TnVtYmVyID0gPyI7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBkYXRlLgorICAg
IGNhc2UgSURCS2V5OjpOdWxsVHlwZToKKyAgICAgICAgcmV0dXJuICJXSEVSRSBvYmplY3RTdG9y
ZUlkID0gPyAgQU5EICBrZXlTdHJpbmcgSVMgTlVMTCAgQU5EICBrZXlEYXRlIElTIE5VTEwgIEFO
RCAga2V5TnVtYmVyIElTIE5VTEwiOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIHJldHVybiAiIjsKK30KKworLy8gUmV0dXJucyBudW1iZXIgb2YgaXRlbXMgYm91bmQu
CitzdGF0aWMgaW50IGJpbmRLZXkoU1FMaXRlU3RhdGVtZW50JiBxdWVyeSwgaW50IGNvbHVtbiwg
SURCS2V5KiBrZXkpCit7CisgICAgc3dpdGNoIChrZXktPnR5cGUoKSkgeworICAgIGNhc2UgSURC
S2V5OjpTdHJpbmdUeXBlOgorICAgICAgICBxdWVyeS5iaW5kVGV4dChjb2x1bW4sIGtleS0+c3Ry
aW5nKCkpOworICAgICAgICByZXR1cm4gMTsKKyAgICBjYXNlIElEQktleTo6TnVtYmVyVHlwZToK
KyAgICAgICAgcXVlcnkuYmluZEludChjb2x1bW4sIGtleS0+bnVtYmVyKCkpOworICAgICAgICBy
ZXR1cm4gMTsKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGRhdGUuCisgICAgY2FzZSBJREJLZXk6
Ok51bGxUeXBlOgorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYmluZFdoZXJlQ2xhdXNl
KFNRTGl0ZVN0YXRlbWVudCYgcXVlcnksIGludDY0X3QgaWQsIElEQktleSoga2V5KQoreworICAg
IHF1ZXJ5LmJpbmRJbnQ2NCgxLCBpZCk7CisgICAgYmluZEtleShxdWVyeSwgMiwga2V5KTsKK30K
Kwogdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpnZXQoUGFzc1JlZlB0cjxJREJLZXk+
IGtleSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKIHsKLSAgICBSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSA9IG1fdHJlZS0+Z2V0KGtleS5nZXQoKSk7Ci0g
ICAgaWYgKCF2YWx1ZSkgeworICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVyeShzcWxpdGVEYXRhYmFz
ZSgpLCAiU0VMRUNUIGtleVN0cmluZywga2V5RGF0ZSwga2V5TnVtYmVyLCB2YWx1ZSBGUk9NIE9i
amVjdFN0b3JlRGF0YSAiICsgd2hlcmVDbGF1c2Uoa2V5LT50eXBlKCkpKTsKKyAgICBib29sIG9r
ID0gcXVlcnkucHJlcGFyZSgpID09IFNRTFJlc3VsdE9rOworICAgIEFTU0VSVChvayk7IC8vIEZJ
WE1FOiBCZXR0ZXIgZXJyb3IgaGFuZGxpbmc/CisKKyAgICBiaW5kV2hlcmVDbGF1c2UocXVlcnks
IG1faWQsIGtleS5nZXQoKSk7CisgICAgaWYgKHF1ZXJ5LnN0ZXAoKSAhPSBTUUxSZXN1bHRSb3cp
IHsKICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0ZPVU5EX0VSUiwgIktleSBkb2VzIG5vdCBleGlzdCBp
biB0aGUgb2JqZWN0IHN0b3JlLiIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBjYWxs
YmFja3MtPm9uU3VjY2Vzcyh2YWx1ZS5nZXQoKSk7CisKKyAgICBBU1NFUlQoKGtleS0+dHlwZSgp
ID09IElEQktleTo6U3RyaW5nVHlwZSkgIT0gcXVlcnkuaXNDb2x1bW5OdWxsKDApKTsKKyAgICAv
LyBGSVhNRTogSW1wbGVtZW50IGRhdGUuCisgICAgQVNTRVJUKChrZXktPnR5cGUoKSA9PSBJREJL
ZXk6Ok51bWJlclR5cGUpICE9IHF1ZXJ5LmlzQ29sdW1uTnVsbCgyKSk7CisKKyAgICBjYWxsYmFj
a3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlKHF1ZXJ5
LmdldENvbHVtblRleHQoMykpKTsKKyAgICBBU1NFUlQocXVlcnkuc3RlcCgpICE9IFNRTFJlc3Vs
dFJvdyk7CiB9CiAKIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0KFBhc3NSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IHBycEtl
eSwgYm9vbCBhZGRPbmx5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQpAQCAt
ODgsMTggKzE0Myw2NiBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dChQYXNz
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIFBhcwogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgaWYgKGFkZE9ubHkgJiYgbV90cmVlLT5nZXQoa2V5LmdldCgpKSkgewor
ICAgIFNRTGl0ZVN0YXRlbWVudCBnZXRRdWVyeShzcWxpdGVEYXRhYmFzZSgpLCAiU0VMRUNUIGlk
IEZST00gT2JqZWN0U3RvcmVEYXRhICIgKyB3aGVyZUNsYXVzZShrZXktPnR5cGUoKSkpOworICAg
IGJvb2wgb2sgPSBnZXRRdWVyeS5wcmVwYXJlKCkgPT0gU1FMUmVzdWx0T2s7CisgICAgQVNTRVJU
KG9rKTsgLy8gRklYTUU6IEJldHRlciBlcnJvciBoYW5kbGluZz8KKworICAgIGJpbmRXaGVyZUNs
YXVzZShnZXRRdWVyeSwgbV9pZCwga2V5LmdldCgpKTsKKyAgICBib29sIGV4aXN0aW5nVmFsdWUg
PSBnZXRRdWVyeS5zdGVwKCkgPT0gU1FMUmVzdWx0Um93OworICAgIGlmIChhZGRPbmx5ICYmIGV4
aXN0aW5nVmFsdWUpIHsKICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJy
b3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q09OU1RSQUlOVF9FUlIsICJLZXkgYWxy
ZWFkeSBleGlzdHMgaW4gdGhlIG9iamVjdCBzdG9yZS4iKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBtX3RyZWUtPnB1dChrZXkuZ2V0KCksIHZhbHVlLmdldCgpKTsKKyAgICBTdHJp
bmcgc3FsID0gZXhpc3RpbmdWYWx1ZSA/ICJVUERBVEUgT2JqZWN0U3RvcmVEYXRhIFNFVCBrZXlT
dHJpbmcgPSA/LCBrZXlEYXRlID0gPywga2V5TnVtYmVyID0gPywgdmFsdWUgPSA/IFdIRVJFIGlk
ID0gPyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJJTlNFUlQgSU5UTyBPYmpl
Y3RTdG9yZURhdGEgKGtleVN0cmluZywga2V5RGF0ZSwga2V5TnVtYmVyLCB2YWx1ZSwgb2JqZWN0
U3RvcmVJZCkgVkFMVUVTICg/LCA/LCA/LCA/LCA/KSI7CisgICAgU1FMaXRlU3RhdGVtZW50IHB1
dFF1ZXJ5KHNxbGl0ZURhdGFiYXNlKCksIHNxbCk7CisgICAgb2sgPSBwdXRRdWVyeS5wcmVwYXJl
KCkgPT0gU1FMUmVzdWx0T2s7CisgICAgQVNTRVJUKG9rKTsgLy8gRklYTUU6IEJldHRlciBlcnJv
ciBoYW5kbGluZz8KKyAgICBzd2l0Y2ggKGtleS0+dHlwZSgpKSB7CisgICAgY2FzZSBJREJLZXk6
OlN0cmluZ1R5cGU6CisgICAgICAgIHB1dFF1ZXJ5LmJpbmRUZXh0KDEsIGtleS0+c3RyaW5nKCkp
OworICAgICAgICBwdXRRdWVyeS5iaW5kTnVsbCgyKTsKKyAgICAgICAgcHV0UXVlcnkuYmluZE51
bGwoMyk7CisgICAgICAgIGJyZWFrOworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZGF0ZS4KKyAg
ICBjYXNlIElEQktleTo6TnVtYmVyVHlwZToKKyAgICAgICAgcHV0UXVlcnkuYmluZE51bGwoMSk7
CisgICAgICAgIHB1dFF1ZXJ5LmJpbmROdWxsKDIpOworICAgICAgICBwdXRRdWVyeS5iaW5kSW50
KDMsIGtleS0+bnVtYmVyKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIElEQktleTo6TnVs
bFR5cGU6CisgICAgICAgIHB1dFF1ZXJ5LmJpbmROdWxsKDEpOworICAgICAgICBwdXRRdWVyeS5i
aW5kTnVsbCgyKTsKKyAgICAgICAgcHV0UXVlcnkuYmluZE51bGwoMyk7CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAg
ICBwdXRRdWVyeS5iaW5kVGV4dCg0LCB2YWx1ZS0+dG9XaXJlU3RyaW5nKCkpOworICAgIGlmIChl
eGlzdGluZ1ZhbHVlKQorICAgICAgICBwdXRRdWVyeS5iaW5kSW50KDUsIGdldFF1ZXJ5LmdldENv
bHVtbkludCgwKSk7CisgICAgZWxzZQorICAgICAgICBwdXRRdWVyeS5iaW5kSW50NjQoNSwgbV9p
ZCk7CisKKyAgICBvayA9IHB1dFF1ZXJ5LnN0ZXAoKSA9PSBTUUxSZXN1bHREb25lOworICAgIEFT
U0VSVChvayk7IC8vIEZJWE1FOiBCZXR0ZXIgZXJyb3IgaGFuZGxpbmc/CisKICAgICBjYWxsYmFj
a3MtPm9uU3VjY2VzcyhrZXkuZ2V0KCkpOwogfQogCiB2b2lkIElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6OnJlbW92ZShQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gY2FsbGJhY2tzKQogewotICAgIG1fdHJlZS0+cmVtb3ZlKGtleS5nZXQoKSk7CisgICAg
U1FMaXRlU3RhdGVtZW50IHF1ZXJ5KHNxbGl0ZURhdGFiYXNlKCksICJERUxFVEUgRlJPTSBPYmpl
Y3RTdG9yZURhdGEgIiArIHdoZXJlQ2xhdXNlKGtleS0+dHlwZSgpKSk7CisgICAgYm9vbCBvayA9
IHF1ZXJ5LnByZXBhcmUoKSA9PSBTUUxSZXN1bHRPazsKKyAgICBBU1NFUlQob2spOyAvLyBGSVhN
RTogQmV0dGVyIGVycm9yIGhhbmRsaW5nPworCisgICAgYmluZFdoZXJlQ2xhdXNlKHF1ZXJ5LCBt
X2lkLCBrZXkuZ2V0KCkpOworICAgIGlmIChxdWVyeS5zdGVwKCkgIT0gU1FMUmVzdWx0RG9uZSkg
eworICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfRk9VTkRfRVJSLCAiS2V5IGRvZXMgbm90IGV4aXN0IGlu
IHRoZSBvYmplY3Qgc3RvcmUuIikpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgY2Fs
bGJhY2tzLT5vblN1Y2Nlc3MoKTsKIH0KIApAQCAtMTEwLDcgKzIxMywxOCBAQCB2b2lkIElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgU3RyaW5nJiBrZQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRyPElEQklu
ZGV4QmFja2VuZEludGVyZmFjZT4gaW5kZXggPSBJREJJbmRleEJhY2tlbmRJbXBsOjpjcmVhdGUo
bmFtZSwga2V5UGF0aCwgdW5pcXVlKTsKKyAgICBTUUxpdGVTdGF0ZW1lbnQgaW5zZXJ0KHNxbGl0
ZURhdGFiYXNlKCksICJJTlNFUlQgSU5UTyBJbmRleGVzIChvYmplY3RTdG9yZUlkLCBuYW1lLCBr
ZXlQYXRoLCBpc1VuaXF1ZSkgVkFMVUVTICg/LCA/LCA/LCA/KSIpOworICAgIGJvb2wgb2sgPSBp
bnNlcnQucHJlcGFyZSgpID09IFNRTFJlc3VsdE9rOworICAgIEFTU0VSVChvayk7IC8vIEZJWE1F
OiBCZXR0ZXIgZXJyb3IgaGFuZGxpbmcuCisgICAgaW5zZXJ0LmJpbmRJbnQ2NCgxLCBtX2lkKTsK
KyAgICBpbnNlcnQuYmluZFRleHQoMiwgbmFtZSk7CisgICAgaW5zZXJ0LmJpbmRUZXh0KDMsIGtl
eVBhdGgpOworICAgIGluc2VydC5iaW5kSW50KDQsIHN0YXRpY19jYXN0PGludD4odW5pcXVlKSk7
CisgICAgb2sgPSBpbnNlcnQuc3RlcCgpID09IFNRTFJlc3VsdERvbmU7CisgICAgQVNTRVJUKG9r
KTsgLy8gRklYTUU6IEJldHRlciBlcnJvciBoYW5kbGluZy4KKyAgICBpbnQ2NF90IGlkID0gc3Fs
aXRlRGF0YWJhc2UoKS5sYXN0SW5zZXJ0Um93SUQoKTsKKworICAgIFJlZlB0cjxJREJJbmRleEJh
Y2tlbmRJbnRlcmZhY2U+IGluZGV4ID0gSURCSW5kZXhCYWNrZW5kSW1wbDo6Y3JlYXRlKHRoaXMs
IGlkLCBuYW1lLCBrZXlQYXRoLCB1bmlxdWUpOwogICAgIEFTU0VSVChpbmRleC0+bmFtZSgpID09
IG5hbWUpOwogICAgIG1faW5kZXhlcy5zZXQobmFtZSwgaW5kZXgpOwogICAgIGNhbGxiYWNrcy0+
b25TdWNjZXNzKGluZGV4LnJlbGVhc2UoKSk7CkBAIC0xMjgsMTkgKzI0Miw1OSBAQCB2b2lkIElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnJlbW92ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwg
UGFzc1JlZlB0cjxJREJDYQogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgU1FMaXRlU3Rh
dGVtZW50IGRlbGV0ZVF1ZXJ5KHNxbGl0ZURhdGFiYXNlKCksICJERUxFVEUgRlJPTSBJbmRleGVz
IFdIRVJFIG5hbWUgPSA/IEFORCBvYmplY3RTdG9yZUlkID0gPyIpOworICAgIGJvb2wgb2sgPSBk
ZWxldGVRdWVyeS5wcmVwYXJlKCkgPT0gU1FMUmVzdWx0T2s7CisgICAgQVNTRVJUKG9rKTsgLy8g
RklYTUU6IEJldHRlciBlcnJvciBoYW5kbGluZy4KKyAgICBkZWxldGVRdWVyeS5iaW5kVGV4dCgx
LCBuYW1lKTsKKyAgICBkZWxldGVRdWVyeS5iaW5kSW50NjQoMiwgbV9pZCk7CisgICAgb2sgPSBk
ZWxldGVRdWVyeS5zdGVwKCkgPT0gU1FMUmVzdWx0RG9uZTsKKyAgICBBU1NFUlQob2spOyAvLyBG
SVhNRTogQmV0dGVyIGVycm9yIGhhbmRsaW5nLgorCiAgICAgbV9pbmRleGVzLnJlbW92ZShuYW1l
KTsKICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcygpOwogfQogCiB2b2lkIElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6Om9wZW5DdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIHVu
c2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cykKIHsKKyAgICAvLyBGSVhNRTogRnVsbHkgaW1wbGVtZW50LgorCiAgICAgUmVmUHRyPElEQktl
eT4ga2V5ID0gcmFuZ2UtPmxlZnQoKTsKLSAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiB2YWx1ZSA9IG1fdHJlZS0+Z2V0KGtleS5nZXQoKSk7Ci0gICAgaWYgKHZhbHVlKSB7Ci0gICAg
ICAgIFJlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlPiBjdXJzb3IgPSBJREJDdXJzb3JC
YWNrZW5kSW1wbDo6Y3JlYXRlKHRoaXMsIHJhbmdlLCBzdGF0aWNfY2FzdDxJREJDdXJzb3I6OkRp
cmVjdGlvbj4oZGlyZWN0aW9uKSwga2V5LCB2YWx1ZSk7Ci0gICAgICAgIGNhbGxiYWNrcy0+b25T
dWNjZXNzKGN1cnNvci5yZWxlYXNlKCkpOwotICAgIH0gZWxzZQotICAgICAgY2FsbGJhY2tzLT5v
blN1Y2Nlc3MoKTsKKyAgICBTUUxpdGVTdGF0ZW1lbnQgcXVlcnkoc3FsaXRlRGF0YWJhc2UoKSwg
IlNFTEVDVCBpZCwgdmFsdWUgRlJPTSBPYmplY3RTdG9yZURhdGEgIiArIHdoZXJlQ2xhdXNlKGtl
eS0+dHlwZSgpKSk7CisgICAgYm9vbCBvayA9IHF1ZXJ5LnByZXBhcmUoKSA9PSBTUUxSZXN1bHRP
azsKKyAgICBBU1NFUlQob2spOyAvLyBGSVhNRTogQmV0dGVyIGVycm9yIGhhbmRsaW5nPworCisg
ICAgYmluZFdoZXJlQ2xhdXNlKHF1ZXJ5LCBtX2lkLCBrZXkuZ2V0KCkpOworICAgIGlmIChxdWVy
eS5zdGVwKCkgIT0gU1FMUmVzdWx0Um93KSB7CisgICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNz
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiB2YWx1ZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUocXVl
cnkuZ2V0Q29sdW1uVGV4dCgxKSk7CisgICAgUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbnRlcmZh
Y2U+IGN1cnNvciA9IElEQkN1cnNvckJhY2tlbmRJbXBsOjpjcmVhdGUodGhpcywgcmFuZ2UsIHN0
YXRpY19jYXN0PElEQkN1cnNvcjo6RGlyZWN0aW9uPihkaXJlY3Rpb24pLCBrZXkucmVsZWFzZSgp
LCB2YWx1ZS5yZWxlYXNlKCkpOworICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKGN1cnNvci5yZWxl
YXNlKCkpOworfQorCit2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmxvYWRJbmRleGVz
KCkKK3sKKyAgICBTUUxpdGVTdGF0ZW1lbnQgaW5kZXhRdWVyeShzcWxpdGVEYXRhYmFzZSgpLCAi
U0VMRUNUIGlkLCBuYW1lLCBrZXlQYXRoLCBpc1VuaXF1ZSBGUk9NIEluZGV4ZXMgV0hFUkUgb2Jq
ZWN0U3RvcmVJZCA9ID8iKTsKKyAgICBib29sIG9rID0gaW5kZXhRdWVyeS5wcmVwYXJlKCkgPT0g
U1FMUmVzdWx0T2s7CisgICAgQVNTRVJUKG9rKTsgLy8gRklYTUU6IEJldHRlciBlcnJvciBoYW5k
bGluZz8KKworICAgIGluZGV4UXVlcnkuYmluZEludDY0KDEsIG1faWQpOworCisgICAgd2hpbGUg
KGluZGV4UXVlcnkuc3RlcCgpID09IFNRTFJlc3VsdFJvdykgeworICAgICAgICBpbnQ2NF90IGlk
ID0gaW5kZXhRdWVyeS5nZXRDb2x1bW5JbnQ2NCgwKTsKKyAgICAgICAgU3RyaW5nIG5hbWUgPSBp
bmRleFF1ZXJ5LmdldENvbHVtblRleHQoMSk7CisgICAgICAgIFN0cmluZyBrZXlQYXRoID0gaW5k
ZXhRdWVyeS5nZXRDb2x1bW5UZXh0KDIpOworICAgICAgICBib29sIHVuaXF1ZSA9ICEhaW5kZXhR
dWVyeS5nZXRDb2x1bW5JbnQoMyk7CisKKyAgICAgICAgbV9pbmRleGVzLnNldChuYW1lLCBJREJJ
bmRleEJhY2tlbmRJbXBsOjpjcmVhdGUodGhpcywgaWQsIG5hbWUsIGtleVBhdGgsIHVuaXF1ZSkp
OworICAgIH0KK30KKworU1FMaXRlRGF0YWJhc2UmIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
OnNxbGl0ZURhdGFiYXNlKCkgY29uc3QgCit7CisgICAgcmV0dXJuIG1fZGF0YWJhc2UtPnNxbGl0
ZURhdGFiYXNlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmggYi9XZWJDb3JlL3N0b3Jh
Z2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oCmluZGV4IDRiOTA5YWY3NDA5YzM0NzAyNTJm
Yjk1NTlmMWU5OTBjZWY4NTJmYzkuLjAyZGNmMDRhMDJjODZlYjcxODQ0YWEzMWU4YTgzZDJmNzc5
MTI5ZjEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsLmgKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaApA
QCAtMzQsMTMgKzM0LDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdGVtcGxhdGUgPHR5
cGVuYW1lIFZhbHVlVHlwZT4gY2xhc3MgSURCS2V5VHJlZTsKK2NsYXNzIElEQkRhdGFiYXNlQmFj
a2VuZEltcGw7CitjbGFzcyBTUUxpdGVEYXRhYmFzZTsKIAogY2xhc3MgSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbCA6IHB1YmxpYyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UgewogcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFj
ZT4gY3JlYXRlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29s
IGF1dG9JbmNyZW1lbnQpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW50ZXJmYWNlPiBjcmVhdGUoSURCRGF0YWJhc2VCYWNrZW5kSW1wbCogZGF0YWJhc2UsIGlu
dDY0X3QgaWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29s
IGF1dG9JbmNyZW1lbnQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGwobmFtZSwga2V5UGF0aCwgYXV0b0luY3JlbWVudCkpOworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwoZGF0YWJh
c2UsIGlkLCBuYW1lLCBrZXlQYXRoLCBhdXRvSW5jcmVtZW50KSk7CiAgICAgfQogICAgIH5JREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsKCk7CiAKQEAgLTU4LDE4ICs1OSwyMyBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIG9wZW5DdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIHVuc2ln
bmVkIHNob3J0IGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKIAorICAgIElE
QkRhdGFiYXNlQmFja2VuZEltcGwqIGRhdGFiYXNlKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhYmFz
ZS5nZXQoKTsgfQorCiBwcml2YXRlOgotICAgIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwoY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVu
dCk7CisgICAgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbChJREJEYXRhYmFzZUJhY2tlbmRJbXBs
KiwgaW50NjRfdCBpZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgs
IGJvb2wgYXV0b0luY3JlbWVudCk7CisKKyAgICB2b2lkIGxvYWRJbmRleGVzKCk7CisgICAgU1FM
aXRlRGF0YWJhc2UmIHNxbGl0ZURhdGFiYXNlKCkgY29uc3Q7CiAKKyAgICBSZWZQdHI8SURCRGF0
YWJhc2VCYWNrZW5kSW1wbD4gbV9kYXRhYmFzZTsKKworICAgIGludDY0X3QgbV9pZDsKICAgICBT
dHJpbmcgbV9uYW1lOwogICAgIFN0cmluZyBtX2tleVBhdGg7CiAgICAgYm9vbCBtX2F1dG9JbmNy
ZW1lbnQ7CiAKICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8SURCSW5kZXhCYWNr
ZW5kSW50ZXJmYWNlPiA+IEluZGV4TWFwOwogICAgIEluZGV4TWFwIG1faW5kZXhlczsKLQotICAg
IHR5cGVkZWYgSURCS2V5VHJlZTxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IFRyZWU7Ci0gICAgUmVm
UHRyPFRyZWU+IG1fdHJlZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>
<flag name="review"
          id="53473"
          type_id="1"
          status="+"
          setter="steveblock"
    />
          </attachment>
      

    </bug>

</bugzilla>